facts.sh dies on a repository's first push — the greenfield consumer's one red run #132
Replies: 2 comments
|
Outcome: accept — minted as #134, The report is right, the sketch is right, and the severity call is right: nothing I reproduced it locally against Three things triage settled so the issue carries no open question:
Not blocked on anything: Filing it here instead of in the release PR was the right call and cost nothing; |
Uh oh!
There was an error while loading. Please reload this page.
Found during the 0.2.0 drill (#118,
drills/0.2.0.md's "Failures" section), filed here per scope discipline — the release PR does not fix drive-by findings.What happened: the drill's scratch consumer repo was created with the release caller in its very first commit. That initial push to
mainran the merge door red (drill run 30089682128): thegather the factsstep died with exit 128 before deciding anything.Why:
lib/facts.shestablishes the base asgit rev-parse "$MERGE_SHA^1"whenevent.beforeis all-zeros — and a branch-create push is exactly whenevent.beforeis all-zeros. For every later branch-create push the head has a parent and this is correct (#1 constraint 10, cast's*[!0]*test). But a repository's first commit has no parent:rev-parsefails,set -ekills the step, red run on main.Why it matters (mildly): the doctrine's promise is "every legitimate non-ceremony is a green NOTICE no-op — never a red run on main" (lib/decide.sh L6–L12), and a greenfield consumer bootstrapping caller-first — docs/CONSUMERS.md's own recommended path, incubator-style — meets exactly one red run at the moment of adoption. Nothing is created (the refusal shape holds), and the failure never recurs, so this is cosmetic-but-confusing rather than dangerous: a brand-new consumer's first observable release-flow event is a failure they did nothing to cause.
Sketch of a fix, for triage to weigh: in
facts.sh, whenevent.beforeis all-zeros andMERGE_SHA^1does not resolve, treat the base tree as having no version source — the existingbase_ver="(none)"branch — so decide's table governs: a-devfirst commit is row 2 (green no-op), a bare first commit still refuses per rows 4–5. That keeps "a missing fact must never fall through" intact, because the fact honestly is "there is no base".facts.shis unchanged since0.1.0, so this is not a 0.2.0 regression; it is a pre-existing edge the fragment-shape drill happened to step on.All reactions