Skip to content

feat(archive): publish the StarSync 2.0.0 format cutover - #4

Closed
NomadicDaddy wants to merge 12 commits into
mainfrom
agent/bind-windows-required-check
Closed

NomadicDaddy wants to merge 12 commits into
mainfrom
agent/bind-windows-required-check

Conversation

@NomadicDaddy

Copy link
Copy Markdown
Owner

What changed

  • complete the StarSync 2.0.0 format-2 archive cutover and remove legacy migration behavior
  • strengthen checkout refresh, label transitions, module boundaries, and cross-platform regression coverage
  • refresh release documentation and quality constraints for the current six-command surface

Why

The accumulated local main commits implement and harden the format-2-only archive contract. Publishing them through a pull request also exercises the protected-main Release Validation matrix after binding every required context to the GitHub Actions provider.

Impact

StarSync now accepts only initialized format-2 Managed Archives, preserves checkout identity and history through safer refresh and rename paths, and validates the release across Windows, macOS, and Linux.

Validation

  • prior local bun run smoke:qc confirmations are recorded in the included commits
  • this pull request must pass all three protected Release Validation jobs
  • branch protection requires each matrix context from GitHub Actions app ID 15368

NomadicDaddy and others added 12 commits July 29, 2026 12:20
An explicitly supplied empty or quoted-empty target path was silently
falling through to an implicit starred_repos directory, allowing a
command to inspect or modify an archive the caller never named. Now it is correctly reported as a usage error with exit code 2.

Usage error reports also preserve the requested --dry-run mode so
machine consumers receive consistent output shape.
…trol

A live sync of 284 starred repositories failed 15 checkouts. The causes were
three, none of them local:

- A fetch exits non-zero when the upstream moved a tag the archive already
  stores, even after every branch has advanced. The refresh now keeps the
  archived tag target, completes, and reports the retained tags.

- An upstream Git LFS store that no longer serves its objects failed the whole
  clone or refresh. The operation is retried once with GIT_LFS_SKIP_SMUDGE=1 so
  the checkout lands with its pointer files. The setting is never written to
  checkout config, per ADR 0005.

- A path this platform cannot represent in a working tree failed the clone, and
  on an older checkout showed up as a staged deletion that can never be
  resolved. Such paths are now excluded with sparse-checkout patterns, which
  survive a later fast-forward where skip-worktree bits did not, and the
  local-state guards in sync, verify, and migrate no longer read them as
  uncommitted work. Verify and migrate reach that conclusion without changing
  the checkout they inspect.

Each recovery applies at most once per operation, and a clone restarts from an
empty StarSync-owned staging directory so no partial checkout is published. A
failure matching no recovery surfaces its original error.

Fetch classification moves to remote-fetch.ts, recovery planning to
git-recovery.ts, and staged cloning to checkout-clone.ts to stay inside the
source-shape limits. git-exec.ts gains readStatusPaths, which reads porcelain
status untrimmed so a record whose index field is a space no longer shifts the
first path.

Verified: bun run smoke:qc passes 211 tests, and the live 302-checkout archive
now syncs 284 succeeded, 0 failed, 0 blocked.

Co-Authored-By: Claude Opus 5 <[email protected]>
- ADR 0009 explains why platform-unrepresentable paths are excluded with sparse
  checkout rather than skip-worktree bits, and why the guard must exclude before
  deciding whether a checkout is blocked.

- ADR 0002 gains the tag-clobber case: a rejection that only moves a tag the
  archive already stores is tolerated, while any other rejection or fatal error
  still fails the refresh.

- ADR 0005 gains the one-shot GIT_LFS_SKIP_SMUDGE retry and states that it is
  never written into checkout config.

- CONTEXT.md records that a path the host filesystem cannot represent is not
  local state, so it never makes a checkout a Blocked Checkout.

- README.md replaces the stale skip-worktree description, describes retained
  tags and the LFS fallback, and corrects the Scripts table.

Co-Authored-By: Claude Opus 5 <[email protected]>
Minor bump: the release adds functionality that did not exist before, namely
the retained-tag warning and the Git LFS pointer fallback, alongside the fixes.

package.json also restores start to `bun ./src/cli.ts`, which the
.aidd/deployment.md release probe and the README Scripts table both document.
The sync script keeps its explicit `sync` subcommand.

Verified: `bun run start -- --help` prints the six subcommands and exits 0.

Co-Authored-By: Claude Opus 5 <[email protected]>
Extract checkout inspection, duplicate filtering, and repository collision classification behind enforced source-shape boundaries.

Add focused real-Git regression coverage for invalid, duplicate, occupied, pending, retained, and mixed archive plans.
Snapshot and verify checkout metadata, restore it on failure, and compensate rename folder moves without overwriting occupied paths.

Add real-Git mutation-boundary, rollback, and durable-label agreement coverage.
Remove thirteen implementation-only export modifiers and two redundant lock re-exports.

Keep the package API unchanged and cover the narrowed boundaries through behavior and source-shape tests.
- Allow the real-Git copied archive journey up to 20 seconds on hosted Windows

- Preserve the default timeout for the rest of the test suite
@NomadicDaddy

Copy link
Copy Markdown
Owner Author

Superseded: all 12 commits already upstream (git cherry shows all '-'); shipped in 2.0.0, main is now 2.2.1.

@NomadicDaddy
NomadicDaddy deleted the agent/bind-windows-required-check branch August 4, 2026 05:10
NomadicDaddy pushed a commit that referenced this pull request Sep 10, 2026
…r-dates

- Changed bare catch block at scripts/set-folder-dates.ts:135 to catch (err)

- Added console.warn logging the error before marking folder as skipped

- Error variable named 'err' satisfies ESLint catch-variable rule

- Pattern matches existing catch blocks in the same file (lines 90, 104)

- Updated spec.md Known Limitations: removed resolved item #4, renumbered

- Resolves audit finding: audit-code-quality-...bare-catch-block...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant