1.5.9 (2026-08-20)
- ci: harden provider e2e failures (948df28)
- ci: move matrix-dependent E2E gating out of job-level if (155e55c)
- e2e: dedupe push/pull_request E2E runs on the same branch (04cd91a), closes #124
- e2e: fix CI workflow-file rejection and Sonar security gate (a44520a)
- e2e: fix commit-count pagination bug, guard teardown, log gitea failures (147736e)
- e2e: fix NOSONAR placement on line-continued curl calls (b944023)
- e2e: fix real CI failures found by the first live run (b3c6b81)
- e2e: prevent indefinite curl hangs in gitea provisioning (2e083c2)
- gitea: preserve update semantics in mixed batch commits (6569895)
- sync: resolve batch conflicts before atomic push (c8b4a84)
- sync: route all push entry points through the batch push pipeline (2d93d77)
- sync: unify push pull and move decisions (dff95db)
- ui: make conflict viewer use available desktop space (c802166)
- e2e: document real-provider E2E setup, CI, and troubleshooting (60e2d2c)
- progress: record Phase 0 E2E reconcile evidence (a4de430)
- progress: record PR #124's three CI/Sonar fixes and final green state (c42fa35)
- progress: record real CI results and gitea-disable follow-up (c3acf83)
- record provider ci verification (5f9d528)
- sync: delete legacy single-file push orchestration (3b3fd2e)
1.5.8 (2026-08-13)
1.5.7 (2026-08-07)
- scanner: remove Node E2E source (002000e)
1.5.6 (2026-08-07)
- e2e: write GitHub E2E test plan (3cef03e)
1.5.5 (2026-08-07)
- provider: preserve sync correctness (ce61588)
1.5.4 (2026-08-07)
1.5.3 (2026-08-07)
1.5.1 (2026-07-31)
- deps: release patched transitive dev-dep versions (dc9525b), closes #87
- release: correct commit-analyzer releaseRules precedence (b4b1808), closes #87
- add simplified Chinese guide (e7d5307)
- archive session state as of 2026-07-31 (908ebf7), closes #87 #87
1.5.0 (2026-07-28)
- add sync plan preview before applying changes (#63) (1f227b2)
- changelog: add 1.5.0 update notes (4385dcb)
- initial release (118aaee)
- initial release (80a9111)
- sync: commit renames as a real move with a dedicated moved status (7eb1141)
- sync: refresh status on startup (22c5ace)
- sync: update a file's sync status live when it's edited in scope (3373262)
- sync: update sync status live when a file is renamed or moved (ae227a9)
- ui: add sync status tree view (4426b24)
- ui: collapse folder moves into a single row (49a8816)
- ui: use status dropdown on mobile (eeef970)
- sync: backfill syncMetadata when a status refresh finds a file already synced (1646ead)
- sync: detect a folder move even when the plugin missed the live rename event (c806e22)
- sync: honor ignore patterns for direct push (61ca728)
- synchronize manifest version with git tag and assets (d9eab83)
- sync: keep a single-file push's status as synced, not unsynced (690b8ee)
- sync: reconcile moves from legacy metadata (ed04867)
- sync: show progress toast and avoid N sequential rename checks on single-file push (217dcf5)
- sync: stop clearing rename metadata on generic vault delete events (c9d0cde), closes #66
- sync: track a moved folder's files, not just moved files (ee217b1), closes #66 #67
- trigger release to publish updated manifest (ab538d8)
- ui: show diff for moved files (9f82d36)
- record direct push ignore guard (fe084b4)
- record legacy move reconciliation (3e65e63)
- record rename regression coverage (c648712)
- record shared sync status state (7510ce7)
- record sync status refactor handoff (ac6eec6)
- sync-status: centralize status classification (c610dde)
- sync-status: share status state with sync manager (9cefb25)
- ui: move tree view controls (e47d44b)
1.4.0 (2026-07-23)
- ui: add path search, click-to-open, and a desktop diff pane (c761951), closes #70 #68 #69 #68 #69 #70
- github: read the snapshot's branch head over GraphQL (0af0746)
- ui: let desktop diff tab fill the full pane height (72a2c97), closes #69
- ui: prune the selection to the filter instead of clearing it (109a77f)
1.3.2 (2026-07-23)
- github: retry batch pushes when the branch head moves (65b5a3c)
- sync: record a blob sha for batch-pushed files (44716e3)
- sync: decide gitignore and pull work from the remote tree (6ed91d9)
- sync: stop probing paths the remote tree already rules out (4b65fb7)
1.3.1 (2026-07-23)
- push: avoid stale rename lookup requests (f8a0a26)
- push: eliminate redundant GitHub requests (0445b17)
1.3.0 (2026-07-14)
- add i18n (multi-language) support (#38) (144eb28)
- add Simplified Chinese locale, settings what's-new banner, and 1.3.0 changelog (72ed2cd)
- resize conflict modal, add connection status badge, and local ignore patterns (28f4f8e), closes #42 #41
- settings: add folder picker for root path and vault folder settings (c107979), closes #48
- show new feature tips after update (4eebebc), closes #39
- ui: show connection status in the global status bar (83499c9)
- don't mark the symlink-pull fix as notable in 1.3.0 changelog (1fc27ab)
- normalize vaultFolder-relative path before gitService.deleteFile (fa42fea)
- push: avoid stale remote-tree read right after a batch push (7676325)
- push: retry GitHub commit mutations on a stale expectedHeadOid (33d41ac)
- remote-repo root path picker, delete-remote-only-file errors, symlinked-folder EISDIR (896d77b), closes firstsun-dev/blog#78
- satisfy Obsidian plugin scan (undescribed directive, popout-window timers) (09bdf0c)
- surface a clear error when requestUrl() itself rejects with HTML content (a867217), closes #31
- symlinked directories no longer break pull discovery (4c8896b), closes #33
- sync: clear sync metadata on vault file delete (1a369b3)
- ui: connection status badge text invisible on some themes (12cce64)
- delete: batch-commit remote-only file deletion (d8e3663)
- push: batch-commit push-all files + SHA-based diffing (c28e0ec)
- push: GitHub batch push/delete via GraphQL createCommitOnBranch (114a575)
- push: parallelize blob creation within a batch commit (c7ae0f6)
- refresh: use tree blob SHAs to avoid per-file content fetches (2ed5a43), closes #36
1.2.1 (2026-07-07)
- compat: support Obsidian down to 1.11.0 (d896015)
1.2.0 (2026-07-05)
- add Gitea support as third-party Git provider (130bd93), closes #26
- sync: detect symbolic links and add a configurable handling setting (62b475d)
- sync: real symbolic link support (GitHub) with configurable handling (9bcaed6)
- deprecations: migrate off deprecated Obsidian APIs (5c64b96)
- deps: resolve Dependabot security alerts in dev dependencies (a47cfcb)
- lint: resolve Obsidian plugin linter warnings (d11ca94)
- services: clear error when Git API returns HTML instead of JSON (bcc5cda)
- services: omit blank sha so creating a new file doesn't 422 (339d5cb)
- services: stop logging expected 404s as errors during refresh (c474a7e)
- settings: mask personal access token fields (235d9e0)
- sync: clearer branch-not-found errors and connection test (2f6859a)
- sync: fall back to adapter read for symlinked files (76405cf)
- sync: stop batch push/pull from silently overwriting conflicts (1364b94)
- sync: stop false-positive rename detection and 422 on rename push (06953e1)
- ui: keep ribbon/command labels in sync with configured Git service (acebafd)
- ui: match Open sync status ribbon icon to the view icon (9bc8ab7)
- use two-step branch→SHA resolution in GiteaService.listFiles (7648eef)
- ui: parallelize refresh status checks and throttle re-renders (1e21061)
- add video (#30) (49bfe9f)
- fix CLAUDE.md to match actual codebase and remove subagent delegation directives (#32) (85bcaba)
- update intro video with refreshed content (df44a96)
- update USAGE_zh.md with Gitea support and provider compatibility table (615819c)
- ui: unify Sync Status icons via Lucide setIcon (d8d6f9d)
1.1.2 (2026-06-16)
- lint: replace activeWindow.setTimeout with setTimeout (4099f44)
1.1.1 (2026-06-16)
- ci: switch to shared workflow v1 and fix repository url (3a0f99e)
1.1.0 (2026-06-16)
- support hidden file sync and expand binary extension list (649d732)
- test: eliminate duplicate code flagged by SonarCloud (f49600e)
- test: extract shared SyncManager mock setup to reduce duplication (1f71a43)
1.0.6 (2026-05-20)
- release: trigger patch release on chore(deps) commits (910305a)
- test: add @types/jsdom and fix Element type cast in setup-dom (8f7207a)
- ui: real-time file status during refresh and unsynced file actions (c6152a6)
- code quality enhancements for issue #23 (7f223e3)
- code quality enhancements for issue #23 (31ac918)
- eliminate code duplication flagged by SonarCloud (556f9e9)