Releases: dbdeveloper/github-easy-sync
Releases · dbdeveloper/github-easy-sync
2.0.2-beta
release: 2.0.2-beta Bumps package.json, manifest.json, and manifest-beta.json to 2.0.2-beta. versions.json gains "2.0.2-beta": "1.7.7". manifest-beta.json was hand-edited (NOT auto-synced by version-bump.mjs per CLAUDE.md). All four files match the new version exactly. Pre-tag verification (commit 737f1d0 — merge of sync2-worker-reorg): Build: green Unit: 679/679 pass Integration: 114/114 pass (68 files, 21.8 min on real GitHub) Release notes in CHANGELOG.md §2.0.2-beta. Design rationale in docs/PSEUDO-MERGE-MODE.md §17-19 (Worker Orchestra, SHA-First Reconcile, Modify-in-Place Crash Safety). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.0.1-beta5
test(sync2/F): drop brackets from spaces+parens round-trip case The F-series "spaces + parentheses + brackets in filename round-trip" test was created in 4846ccd (May 2026) and predates the cross-platform sanitize work (edc3eae). Square brackets were later added to FORBIDDEN_REGEX in cross-platform.ts per PSEUDO-MERGE-MODE §11, so a pushed `[v1]` now arrives on remote as `[v1]` (full-width replacement). The test still expected the original path on remote, which started failing when the integration suite was actually run end-to-end. Brackets are already exhaustively covered by the next case in the same file, "push-side sanitize: covers the 11 forbidden chars reachable on push", which uses every forbidden char and asserts the sanitized canonical form. Removing brackets from this round-trip test eliminates the contradiction without losing coverage. Test renamed to "spaces + parentheses in filename round-trip" to match the trimmed scope, and a comment in the body points forward at the canonical sanitize-coverage test for brackets. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.0.1-beta4
ci(release): --clobber fallback for force-pushed tags
PUSH-REORGANIZATION §3.6 incident postmortem (2026-05-25): after
force-pushing the `2.0.1-beta4` tag from the Phase 2 commit to
the Phase 6 commit, CI re-ran on the force-push event, built the
fresh main.js with Phase 6 code, but the `Create release` step
failed with:
a release with the same tag name already exists: 2.0.1-beta4
Process completed with exit code 1.
`gh release create` does not replace an existing release. The
newly-built artifact was discarded; the GitHub release page kept
serving the old Phase 2 binary; `Settings → Community plugins →
Update` re-downloaded the same old binary because the version
string hadn't changed.
Fix: pipe `gh release create` to `gh release upload --clobber`
when the release already exists. The upload variant accepts the
file list and overwrites assets in place, which is exactly the
semantic we want for force-pushed tags.
Behavior after this patch:
- First push of a new tag → create succeeds, files uploaded.
Identical to before.
- Force-push of an existing tag → create fails ('release exists'),
fallback uploads files via --clobber, release artifacts
refreshed in place. Users who manually trigger update from
Settings → Community plugins now get the latest binary even
though the version string stayed the same.
- The shell short-circuit (`|| ...`) leaves the exit code of
the successful upload as the step's exit code, so CI passes.
Same pattern applied to both the -beta and non-beta branches of
the conditional.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.0.1-beta3
release: 2.0.1-beta3 — pre-flight validation hotfix (PUSH-REORGANIZAT…
2.0.1-beta2
release: 2.0.1-beta2 — cross-platform filename sync hotfix Includes hotfix/cross-platform-filename-sync: - Filename sanitization (push + pull) for the 12 Windows-/Obsidian- forbidden ASCII chars (`< > : " | ? * \ # ^ [ ]`); canonical Unicode replacements guaranteed on GitHub regardless of which device wrote the file. - GitHub Contents URL percent-encodes path segments (was a 404 on any path containing `?`, `#`, etc.). - Observability hardening: click-path catches log before Notice; pull loop catches per file with explicit path; cross-realm Error unwrapping in safeStringify; describeError helper for arbitrary thrown values. - Orphan-prevention: a null fetch on a path the compare diff lists as present now throws instead of silently advancing lastSync. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.0.1-beta
Release 2.0.1-beta — pseudo-merge mode
2.0.0-beta
docs: rewrite README for the renamed/refocused plugin
The old README still described upstream `github-gitless-sync` v1.0.7:
upstream feature list, "available as a community plugin" install
flow that doesn't apply to the fork, link to Silvano's discussions
for contributions, no mention of the new author or the new repo URL.
After the rename to v2.0.0-beta the file was visibly stale.
Full rewrite around what the plugin actually is today:
• Intro + comparison table vs obsidian-git, github-gitless-sync,
Obsidian-GitHub-Sync, github-sync-multi-platform. Honest, not
trash-talking.
• Installation walkthrough that covers the parts users actually
get stuck on: creating a fine-grained PAT with the exact
permission setting, choosing "Only select repositories" instead
of "All repositories", BRAT install for beta distribution,
the Test-connection probe as the first real interaction.
• Settings reference, group by group, with rationale on why each
default is what it is (autoCanonicalizeTextFiles=false, configs
off by default, data.json blocked, …).
• Conflict resolution section flagged as "works but UX still
rough" — honest about the beta state of the diff view.
• Commands + vim-mode integration sketch (placeholder for the
user to fill once they verify it).
• Troubleshooting steps + common gotchas (fine-grained PAT scope
404, Android paste whitespace, large-adoption foreground hint).
• Acknowledgements crediting Silvano Cerza for the original idea +
REST client + plugin scaffolding (~8% of current src/), with
the exact attribution line copy-pasted from the source headers.
• License clearly noted as AGPL-3.0 carried over.
Screenshot placeholders left as `<!-- SCREENSHOT: ... -->` HTML
comments so the user can drop in captures later without hunting
for the right spot.
405 lines, up from 141 — the extra length is mostly the install
walkthrough and the settings reference, both of which the old
README didn't cover.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>