Skip to content

Commit 12c3325

Browse files
dbdeveloperclaude
andcommitted
release: 2.0.1-beta4 — pending-deletions queue replaces phantom snapshots (PUSH-REORG Phase 2)
Replaces the 2.0.1-beta2 phantom-snapshot trick used by pull-side sanitize with an explicit pending-deletions queue (`<configDir>/ plugins/<self>/.pending-deletions/`). The SnapshotStore invariant ('every row is a path observed on GitHub at the recorded SHA') is restored — phantom rows with mtime=0/size=0 are no longer written. One-pass migration runs on first plugin load: any leftover phantom rows from beta2/beta3 are moved into the queue with `source: 'migration-from-snapshot'` and removed from the snapshot. Idempotent — second load finds nothing to move. Plugin Reset (Settings → Reset) wipes the queue alongside snapshot + conflict store + push-queue. Plugin uninstall is OS-handled (Obsidian removes the entire `<configDir>/plugins/<self>/` directory). Pre-flight validation (PUSH-REORG §3.1, Phase 1) now also drops stale entries from the queue — without this, a stale entry would re-inject into every subsequent push and the validator would re-drop it indefinitely (one wasted HTTP roundtrip per sync). Observable behaviour from a user's perspective is unchanged: - A forbidden-named file pulled from GitHub still gets sanitized to a canonical local name. - The next sync still deletes the forbidden name from GitHub and adds the canonical name. - A multi-device race where another device sanitizes first still resolves cleanly (validator drops the now-redundant deletion). Internal mechanics are cleaner: - Snapshot store stays a verifiable cache of observed-remote state. - Pending-deletions queue is named for what it does: 'these paths should be deleted from GitHub on the next push.' - Source tags ('pull-side-sanitize' / 'migration-from-snapshot' / 'manual') make the activity log diagnosable. See docs/PUSH-REORGANIZATION.md §3.2 + §4 (Phase 2 row). Tests: 14 new unit tests for the store; 1 unit test for the migration source-tag contract. F-series sanitize integration tests all pass against real GitHub (same behavior, new internals). Pre-flight integration test still passes (validator now cleans both stores). Total: 584 unit tests, was 570 before this branch (+14). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent ba9ca22 commit 12c3325

4 files changed

Lines changed: 5 additions & 4 deletions

File tree

manifest-beta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "github-easy-sync",
33
"name": "GitHub Easy Sync",
4-
"version": "2.0.1-beta3",
4+
"version": "2.0.1-beta4",
55
"minAppVersion": "1.7.7",
66
"description": "Sync a GitHub repository with vaults on different platforms without requiring git installation",
77
"author": "Vladyslav Kozlovskyy",

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "github-easy-sync",
33
"name": "GitHub Easy Sync",
4-
"version": "2.0.1-beta3",
4+
"version": "2.0.1-beta4",
55
"minAppVersion": "1.7.7",
66
"description": "Sync a GitHub repository with vaults on different platforms without requiring git installation",
77
"author": "Vladyslav Kozlovskyy",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "github-easy-sync",
3-
"version": "2.0.1-beta3",
3+
"version": "2.0.1-beta4",
44
"description": "Sync a GitHub repository with vaults on different platforms without requiring git installation",
55
"main": "main.js",
66
"scripts": {

versions.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
"2.0.0-beta": "1.7.7",
1818
"2.0.1-beta": "1.7.7",
1919
"2.0.1-beta2": "1.7.7",
20-
"2.0.1-beta3": "1.7.7"
20+
"2.0.1-beta3": "1.7.7",
21+
"2.0.1-beta4": "1.7.7"
2122
}

0 commit comments

Comments
 (0)