Merge pull request 'Design 47 G: lead answers A-306 to A-309 from review round 2' (#592) from design/47-G-lead-answers-20 into main

This commit was merged in pull request #592.
This commit is contained in:
2026-11-12 21:25:58 +00:00
@@ -492,3 +492,31 @@ the principle that settles it, cited as "design 47 G A-n".
in the same order as before, whatever order the asks end in.
- **A-305** (ADR 0227 rule 8, ADR 0240 rule 2; principle 7) The pipeline runner's process declares the health `unit`,
as every other process of mesh-delivery does; `runner_health` stays a tool and judges nothing for the node-engine.
- **A-306** (§626, §419; principle 7) A Go module that G creates has no count at a commit of main, so §626 does not
hold it; the test budget (at most 50 integration and 500 unit tests) does. A test added to a module that exists on
main counts under §626, a contract's generated `TestFixtures` included.
- **A-307** (corrects A-239; §635; principle 7) The node-engine's manifest gains no `uses`: its `invokes` of
`seat:mesh-grants.withheld` gives the served-verb edge, as §635 says; A-239's last clause (`uses` gains
`mesh-grants`) is withdrawn, and the rest of A-239 holds.
- **A-308** (§628, §421, ADR 0596 §2; principle 1) §628's list of the indexer's states the node-engine still reads is
whole: `candidates`, `manifests` and `verdicts`, for compose-candidate alone. Its watch of the indexer's `modules`
(selfcompose shadow.go) goes; what it took from a module's record it reads from the catalog half's entry the want
names (§421).
- **A-309** (A-290, A-254, research 071; principles 7 and 2) A build module's `outputs` objects live as long as the
step key that names them: the store's age is the steps state's time to live (two days), its cap 256 MiB, and the
bus's own age removes an object; nothing else deletes one. The milestone's lifetime list gains this line.
- **A-310** (§615, §506; principles 7 and 3) A compose request's manifest named by digest also names the fingerprint
whose catalog graph entry holds it: `composer.Manifest` gains `fingerprint` beside `digest`, and the checker, the one
part that sends digests, fills it (a pull's `Fps`, else the trunk revision's entry of that module). The Go build module
reads the entry by `seat:mesh-catalog.entry` with that fingerprint, takes its manifest whole, and refuses the request,
saying which module, when the entry's `manifest-digest` differs or a digest comes without a fingerprint. A manifest
sent whole (`raw`, the assigner and the indexer) is read as today.
- **A-311** (design 34 every-event §19; principle 7) The tool runner's mesh_wait keeps its floor of one second; its test runs the
independent one-second rows as parallel subtests, and no clock hook is added to `bus.Conn` or the wait.
- **A-312** (§421, §628, ADR 0596 §2; principles 1 and 3) For a module an assignment candidate adds to a node that has
no want for it there, the node-engine's shadow asks `seat:mesh-catalog.module` for the trunk's fingerprint when it
composes that candidate, then takes that fingerprint's entry by `seat:mesh-catalog.entry`; a call, no watch, no
picture of the catalog. Its manifest invokes `seat:mesh-catalog.module`; a module the answer gives no fingerprint is
held, the verb's reason named.
- **A-310's shape:** `composer.Manifest` is `{Raw, Digest, Fingerprint}` (wire `fingerprint`), and `composer.Fill`'s
getter takes the `Manifest`.