Changelog
- dd3a1dc Initial commit: SPEC + task breakdown for AI rewrite
- 3b2c4f5 build: migrate Make commands and build configuration to Take
- ea1edfe chore(ci): retain prerelease publishing for Vue rewrite
- 8688974 chore(deps): upgrade to Go 1.26.4
- a5b2398 chore(go): initialize module and CLI entrypoint
- 0477093 chore(release): add GoReleaser, Dockerfile, CI, and README
- 84201a8 chore(tasks): also gate tygo (#4) on files (#10); correct prior note
- 29631ce chore(tasks): gate tygo type-gen (#4) on the backend model
- 75f7414 chore: commit project config and docs
- d60b511 chore: remove task file after migration to meads git mode
- 9478718 docs(tasks): record adversarial review findings
- 9d1e457 feat(app): add connect overlay + global error banner
- 540ec68 feat(css): recreate Semantic-UI visual parity with master
- fa535a8 feat(downloads): add confirm-to-delete (parity gate)
- f4cbf50 feat(downloads): add downloads tree UI and wire /download route
- 112c47e feat(downloads): add inline media previews + spacebar play/pause
- d1895aa feat(engine): wrap anacrolix/torrent behind view-model engine
- 3569a34 feat(footer): add version + live resource footer
- a288166 feat(frontend): scaffold Vue 3 + Vite + TypeScript shell
- 197081f feat(header): add titlebar + collapsible config editor
- 0238be2 feat(omni): add omni bar with magnet + torrent URL modes
- 6d65a32 feat(omni): add search mode UI (results + item resolution)
- c6af910 feat(search): add scraper-backed torrent search backend
- cd05cfb feat(server): add basic auth, TLS, and request logging
- b3c8651 feat(server): add downloads file tree and /download handler
- 0d617b7 feat(server): add typed JSON action API (POST /api/*)
- 5bfb3f5 feat(server): assemble root state + poll/stats loops
- 17fd1ed feat(static): embed built SPA and add Vite dev proxy
- 899fdf4 feat(sync): visible reconnect loop + fancy connect overlay
- 8acf862 feat(sync): wire velox realtime round-trip end to end
- b87a3af feat(torrents): add per-file start/stop controls
- b3f32fe feat(torrents): add torrent engine UI with live progress + controls
- a8c3502 feat(types): generate TypeScript types from Go structs (tygo)
- fc79c81 feat(ui): add system-aware dark mode in settings
- 6107ddd feat(ui): group download actions in a three-dot menu (md #71)
- 948b1d0 feat(ui): replace emoji icons with Material Design Icons
- d847998 feat(ui): show loading state on async action buttons
- 9bed1f6 feat(upload): add .torrent upload via drop cover + Omni icon
- c49d555 fix(cli): open the browser after binding the server
- 36c52f1 fix(config): report failed saves and persist atomically
- 1d03cda fix(downloads): confine file access to the download root
- 491884c fix(engine): apply the configured peer encryption policy
- 5316c8d fix(engine): cancel and deduplicate metadata waiters
- e4c48f0 fix(engine): drop torrents asynchronously so Stop responds instantly
- 750edcb fix(engine): honor start requests before metadata arrives
- d396d54 fix(engine): preserve transfers across configuration changes
- 15c00e1 fix(engine): rebuild torrent storage after download deletion
- bfe1138 fix(engine): retain live torrents when pausing transfers
- 742120f fix(engine): retain unrelated torrent metadata on removal
- c8712c4 fix(engine): schedule selected files and allow starting all
- 6e4a346 fix(engine): synchronize mutations and detach state snapshots
- 8a236e3 fix(files): preserve explicit directory identity in the file tree
- d67570c fix(files): protect active downloads and parent folders
- 6f8307f fix(http): bound remote fetches and propagate cancellation
- def776a fix(omni): surface the real provider error on a failed search
- 4458709 fix(search): apply endpoint headers without enabling logs
- 65a4c72 fix(search): expose only read-only provider query routes
- 80da2a3 fix(server): reflect file deletes immediately instead of on the next poll
- add093c fix(sync): isolate slow readers and preserve send deadlines
- be75fcb fix(sync): retry realtime client bootstrap failures
- dd40a61 fix(torrents): keep the Cancel button clickable while a torrent is pending
- b1102dd fix(ui): add keyboard folder disclosure controls
- a1c3f2d fix(ui): apply standard magnet editor input styling
- 06cdb82 fix(ui): discard superseded search responses
- a6333bd fix(ui): guard keyboard submissions while requests run
- 36d1690 fix(ui): isolate focus during connection recovery
- d9347bd fix(ui): keep action failures visible and announced
- b719db6 fix(ui): make torrent upload keyboard accessible
- 3ae404b fix(ui): remove updated prefix from download timestamps
- 87acf51 fix(ui): replace search download icon with cancellable spinner
- cb113b6 fix(ui): replace unsupported per-file stop controls
- aeafd50 fix(ui): respect focused controls in media shortcuts
- 802f1f8 fix(ui): restore folder ZIP downloads in Downloads tree
- e653298 fix(ui): reveal download actions on keyboard focus
- ebc3c71 fix(ui): show relative paths in torrent file lists
- e97b2dc fix(ui): show stable Search button spinner for pending requests (md #72)
- 49e09e4 fix(ui): synchronize magnet editor with direct input
- c52a66e fix(ui): wrap long torrent filenames on narrow screens
- e0b2e20 fix: hide cloud-torrent.json from Downloads (md #70)
- a331110 perf(files): bound directory enumeration and report truncation
- c4f2d35 perf(http): skip gzip for media and archive downloads
- a266689 perf(sync): send element-level file collection updates
- ec1dec9 perf(ui): index active download paths once per state update
- 3e69b21 refactor(api): check payloads against generated request types
- b3db1f7 style(footer): declutter, hide dev stats until hover, stick to bottom
- 2812b7e style(header): circular buttons for top-right icons, half-size glyphs
- 09d9049 style(omni): match Search button height to the provider select
- d077fc2 style(omni): shrink the placeholder on mobile so the full hint fits
- 5f3e865 style(ui): show empty states as cards
- 960e4fe style(ui): sleeker surfaces + fix mobile downloads-tree wrapping
- eb0e268 style(ui): unify section borders + disable touch zoom
- 31544f0 test(server): add gated core-loop E2E and extract handler