Adds read-only `compare` command that fetches both the remote Outline
instance (via Tailscale) and a local instance (outline-web container),
matches documents by canonical path key, and reports in_sync / remote_only /
local_only / conflict status. Also adds PRD for the full two-instance sync
workflow.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Break connectivity check into three stages — DNS resolution, TCP connect,
and API auth — each reported separately so failures pinpoint the exact layer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
extra_hosts is incompatible with network_mode: service:... — move it to the
Tailscale sidecar container whose network namespace is shared with outline-sync-ui.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
outline-sync runs on domverse-berlin and connects to Outline on domverse.de
via Tailscale. Docker DNS does not cross hosts, so map the hostname via
extra_hosts to the Tailscale IP 100.104.53.109.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add inputs block to workflow_dispatch so Gitea shows the Run button
- Skip version bump on manual triggers to allow redeployment without bumping
- Fall back to VERSION file for APP_VERSION on manual runs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds GET /files/download endpoint that streams all vault files (excl.
.git) as a deflate-compressed vault.zip. Adds Download All button to
the /files page header. Also adds FILES_VIEWER_PRD.md planning doc.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New documents now placed in parent's subdirectory (coll/Parent/Child.md)
instead of flat in the collection dir. Parent paths registered immediately
so nested children resolve correctly within the same pull.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Dockerfile: ARG/ENV APP_VERSION, copies VERSION file
- compose: passes build arg, removes runtime env var
- webui: reads VERSION file as fallback if env not set
- deploy: explicit build step with --build-arg
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add VERSION file (starts at 0.1.0)
- Deploy workflow bumps patch on every push, commits back [skip ci]
- APP_VERSION passed into container via env
- Version shown in page header next to title
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove auto-reload after job completion
- Re-enable button and refresh stats in-place via /status fetch
- Increase log panel max-height to 600px, add resize:vertical
- Add IDs to stat cells for targeted DOM updates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add TS_EXTRA_ARGS=--accept-routes so sidecar uses VPS-advertised subnet
- Use direct container IP (172.29.0.13) instead of unresolvable hostname
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace hardcoded IP 172.29.0.7 with container hostname 'outline'
- Fix network name from 'domverse' to 'domnet' (actual external network)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ts-outline-sync sidecar joins Tailscale and shares network namespace
with the app container (network_mode: service:ts-*)
- Traefik labels on sidecar; app container has no direct network exposure
- OUTLINE_URL now uses internal Docker IP 172.29.0.7:3000 via Tailscale
subnet route (domverse.de advertises 172.29.0.0/16)
- Add TAILSCALE_PRD.md documenting the full setup and admin checklist
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Switch from domnet → domverse (runs on domverse-berlin.eu)
- OUTLINE_URL defaults to https://outline.domverse.de (public API)
- Traefik labels match domverse-berlin.eu pattern
- Revert workflow to direct docker compose (no SSH needed)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
settings.json is gitignored (contains token). entrypoint.sh writes it
from OUTLINE_URL / OUTLINE_TOKEN env vars on container start.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Usage examples and CLI options
- Import modes (collection-per-folder, single)
- Import flow explanation
- Output example with tree visualization
- Duplicate handling and error handling reference
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dry-run continues even without API access
- Shows planned operations from metadata alone
- Better health check handling for offline testing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- TreePrinter class for formatted output
- Tree characters (├──, └──, │) for hierarchy
- Status indicators (✓ created, ○ skipped, ✗ error)
- Box-drawing characters for header/summary
- Consistent output format matching spec
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- OutlineImporter class with settings loading
- API helpers with retry logic
- CLI argument parsing
- Metadata loading and document tree building
- Collection import with existence checking
- Document import with ID mapping for hierarchy
- Single collection mode
- Dry-run support
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- export_with_trees.sh: Bash wrapper for Outline export
- outline_export_fixed.py: Python export implementation
- IMPORT_SCRIPT.MD: PRD for import script (to be built)
- RALPH_PROMPT.md: Ralph Loop prompt for building import script
- CLAUDE.md: Project documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>