Design 47 G: lead answer A-318, what keeps its module form in G #595

Merged
mesh-tools merged 1 commits from design/47-G-lead-answers-23 into main 2026-11-12 22:12:37 +00:00
@@ -548,3 +548,23 @@ the principle that settles it, cited as "design 47 G A-n".
with `added` filled, as `layAgain` does. The verbs' tool process writes the proposal alone and no candidate, so no
node-engine sees a candidate before its parts. If a verb's answer needs the candidates, it waits on the passer's write
(an event or the state's watch), never a timer.
- **A-318** (A-210, A-296, §428, §717; principle 7, and a milestone's scope is fixed at its start) A part reaches
another module's state or verb in the seat form wherever that module's seat declares it (A-210). Where no seat
declares it, or where a process has no seat-form follower for a raw state (the SDK's FollowSeat follows views
only), the read keeps its module form in G; giving those seats the states and verbs, and processes a seat-form state
follower, is the work after G this list names. The provisioner's `provisions` is declared by its seat, so it is read
in the seat form (an earlier draft of this answer listed it wrongly). In mesh-delivery at 81cb2d7a:
- the builder (no seat state or verb): builds/builds.go:50 `BuilderModule`, builds/log.go:21 `BuildLogRead`
(`build-log`), builds/versions.go:14 `BuilderVersionsAddress` (`builder_versions`); view-tools main.go:477, :486;
view main.go:180 and view.go:692, checker main.go:279, grants buscompose/state.go:361 (`BuildsBucket(BuilderModule)`);
indexer main.go:515; the view manifest's `mesh-delivery-builder.builds` and `.build-log` reads;
- the grants part's composition inputs: buscompose/names.go:12-16 and their buckets, inputs.go:271 (`nats`),
buildbacklog.go:13;
- the view process's raw states (no seat-form follower): `node-engine_have`, `mesh-delivery-watchman_presence` and
`_stuck` (main.go:180, :285-287, internal/view/names.go) and view-tools main.go:477, :482 that share those reads;
the indexer's `candidates` and `taken` (`mesh-delivery-indexer.views.*`; `taken` undeclared, no state of
mesh-catalog is a view); the teller's `answers` (the teller holds no seat); the gate's and the watchman's states;
- mesh-enrolment main.go:148, :149, :178 (the assigner's `assignments` view and `assigner_read_assignments`; a stdio
module's views reader has no FollowSeat);
- the indexer's tools `indexer_read_*` and `indexer_pending` (the seat serves no such verb): the manifests' invokes
name the module, the code takes the module from the seat's holder.