Skip to content

Releases: dbdeveloper/github-easy-sync

2.0.2-beta

30 May 17:05

Choose a tag to compare

2.0.2-beta Pre-release
Pre-release
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

29 May 18:32

Choose a tag to compare

2.0.1-beta5 Pre-release
Pre-release
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

25 May 12:45

Choose a tag to compare

2.0.1-beta4 Pre-release
Pre-release
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

25 May 08:08

Choose a tag to compare

2.0.1-beta3 Pre-release
Pre-release
release: 2.0.1-beta3 — pre-flight validation hotfix (PUSH-REORGANIZAT…

2.0.1-beta2

25 May 02:54

Choose a tag to compare

2.0.1-beta2 Pre-release
Pre-release
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

23 May 18:04

Choose a tag to compare

2.0.1-beta Pre-release
Pre-release
Release 2.0.1-beta — pseudo-merge mode

2.0.0-beta

15 May 23:38

Choose a tag to compare

2.0.0-beta Pre-release
Pre-release
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>