Design 47 G: the lead's answers A-287 and A-288 #582

Merged
mesh-tools merged 4 commits from design/47-G-lead-answers-13 into main 2026-11-12 15:34:12 +00:00
@@ -414,3 +414,15 @@ the principle that settles it, cited as "design 47 G A-n".
does not compile or generate) ends failed with its answer all the same: its fetch and the levels so far, beside
its error, so the checker previews from it. A failed test or a failed level never hides the manifest validator or
the composition.
- **A-287** (principle 4) A module's kept announcement names every state its manifest declares, so each can be
read by its tools; gitea's `KEPT` gains `failed-steps`, `idle` and `transfers`.
- **A-288** (principle 3) A refusal's test holds what the refusal must say, not its earlier wording: the one tool
that may do the refused act and that it runs on the operator's Approve of that call.
- **A-289** (§371; principles 3 and 8) A package left unpublished by a build that reserved no version (§371's other
watched branch, §505's manifest without MAJOR.MINOR, a candidate) counts as done, and the builder's unpublished
count holds no package at all: a reserving build's package is published or its build fails, and a done key is never
built again under a reservation, so no seat republishes a package (principle 7). The count holds images only.
- **A-290** (A-254, §467; principles 3 and 7) A step's key in its build module's steps state keeps the step's answer
only within the state's bound per value; an answer over it, a check's or a run's alike, is kept as the object
`output.<ask>` in the module's outputs store and the key names it, and every reader (the checker, the asker) reads
the answer from the key or the object it names. No step ends passed in one place and failed in another.