fix(bootstrap): actionable fresh-repo error + docs the anchor (#355) #363
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!363
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/355-fresh-repo-bootstrap"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #355 — external cold-read round 2's biggest first-user trust-dent. Bosun 5289 ratified Option B (docs-honest requirement + actionable error) for v1.0.0; Option A (true fresh-repo bootstrap that treats no-tag as
v0.0.0implicit) targets v1.1.0.What's broken today
Docs implied fresh consumer repo Just Works. Actual
release-decide.shbehavior: fails without a manifest AND without a stablevX.Y.Ztag with a terse message that names the failure but not the fix. External reviewer verbatim: 'that is exactly the kind of mismatch that burns trust fast.'Same scoped-mechanism-vs-open-substrate class as #332 (docs claim vs code behavior), recurring at a different substrate axis.
What this PR does
No behavior change — no code path that previously succeeded now fails. Only the failure surface (message + docs coverage) improved.
scripts/release-decide.shError message expanded from 2 lines to a walk-through that:
#355so grep-through-logs finds the trackergit tag -a v0.0.0 -m 'initial state'+git push origin v0.0.0docs/integration.md § 'Bootstrapping a new consumer repo'docs/integration.mdNew 'Bootstrapping a new consumer repo' section preceding 'Adoption'. Names both options with commands:
.release-toolkit-manifest.jsonwithgit rev-parse HEADas the anchor SHAREADME.mdquick-startNow 5 steps (was 4). New step 0 covers the anchor before any other setup — an adopter reading top-to-bottom sees the requirement first, not at cut-time as a fail-loud.
examples/README.mdPost-copy checklist ends with the
git tag -a v0.0.0+git push origin maincommands. Copy-paste path lands at working state, not fail-loud state.Test
The existing
bootstrap: no v* tag in repo -> fail-loudtest extended to assert the actionable content is present:#355tracker citecannot bootstrapin the actionable framinggit tag -a v0.0.0commandgit push origin v0.0.0commandThe pre-#355 message would fail every one of the new assertions; the post-#355 message passes them. Mutation-verifiable.
What this PR does NOT do
LAST_TAG=$(git tag --sort=-v:refname ...)bootstrap discovery — the STABLE-tag anchor mechanism itself is unchanged; only its failure message and adopter documentation improved.Verification
bats tests/release-decide.bats -f "bootstrap"→ 3/3 passshellcheck scripts/release-decide.sh→ clean (only pre-existing SC1091 lib-source warnings, unchanged)Refs
5289Review — #363 fresh-repo bootstrap actionable-error (#355), head verified
APPROVED. On current main, ff-clear. The best part: the error's recommended fix is proven to work, which is the bar an actionable error must clear.
release-decide.shdiff is entirely the FATAL block's log text — same fail-loud condition (no manifest AND no stable tag), same exit. Mode-decision logic untouched.release-toolkit#355), explains why (no SemVer anchor to walk from on a fresh repo), and gives copy-pasteable OPTION 1 (git tag -a v0.0.0+git push origin v0.0.0) and OPTION 2 (hand-write manifest →docs/integration.md § 'Bootstrapping a new consumer repo').bootstrapped=true), andv0.0.0is a valid stable SemVer with no prerelease suffix, so tagging it gives the walk its anchor. An actionable error that recommended a non-working fix would be worse than the old vague one; this one's honest.## Bootstrapping a new consumer repoexists inintegration.md:35(the +28 section this PR adds), so the error's pointer isn't dangling.release-toolkit#355+cannot bootstrap+ the exactgit tag -a v0.0.0/git push origin v0.0.0commands + theBootstrapping a new consumer repoanchor — all of which the pre-#355 message ("no stable vX.Y.Z tag found") would fail. Real guard, not a placebo. 3/3 bootstrap tests green.Closes the external cold-read's first-user trust-dent cleanly. Ship it.
8659f1dae84328bedd9cNew commits pushed, approval review dismissed automatically according to repository settings
4328bedd9cc86f99fba4Re-stamp APPROVED — #363 head
c86f99f(rebase + folded straggler fix)Approval carries + the rebase-time addition is verified. Re-checked at the live head:
examples/README.md:33fix is correct: the parenthetical now reads "(v0.25.0 is current; see README Status)" — the stale "(v0.16.0 is current)" is gone. Good rebase-time catch: #361's sed (and my #361 straggler check) both keyed on@v-pins, so the bare prosev0.16.0in the parenthetical slipped both. Broad grep at this head confirms nov0.16.0anywhere in examples/; the only pre-v0.25.0 versions are the intentionalv0.0.0bootstrap-anchor references (the #355 fix's recommended tag).Owning the miss: my #361 straggler grep was
@v-pin-scoped and should have been a broad old-version sweep — bare/parenthetical mentions are the same staleness class as the pins. Exactly the "verify all forms, not just the primary pattern" lesson, caught cross-actor. Clean at this head. Ship it.