feat(archive): publish the StarSync 2.0.0 format cutover - #4
Closed
NomadicDaddy wants to merge 12 commits into
Closed
NomadicDaddy wants to merge 12 commits into
NomadicDaddy wants to merge 12 commits into
Conversation
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
Owner
Author
|
Superseded: all 12 commits already upstream (git cherry shows all '-'); shipped in 2.0.0, main is now 2.2.1. |
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...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
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
bun run smoke:qcconfirmations are recorded in the included commits