Its 26 `<Module>_<state>` bucket constants (candidates, manifests, verdicts, packages, taken, the
control records, pins, pending and the rest), its consumers, findings and first views were named
from the constant Module; they are now index.Bucket(cred.Module, <state>), and its words name
the state where they named the bucket.
Builds: design 47 G A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A-163: the asker in `accept.<queue>.<asker>` is the asking seat's name (mesh-pipeline-runner,
mesh-catalog, mesh-wants, mesh-builds), never a nickname: the builder asks as mesh-builds (was
"builder"), the indexer's validation as mesh-catalog (was "indexer"), the assigner's runs as
mesh-wants (was "assigner"), the runner's steps on `accept.check.mesh-pipeline-runner` and
`accept.delivery.mesh-pipeline-runner` (were `accept.check.step` and `accept.delivery.step`, where
the holder read `step` as the asker). An asker naming none (the checker) asks on main's subject
(A-184). A build seat's queues are delivery, check and recheck alone (A-170, A-184): buildstep's
AskKinds holds no step, a holder takes a step from check or delivery, and the grants part makes a
worker per queue, never per kind. A holder keys a named ask's step `<asker>.<node>.<id>` and main's
`<node>.<id>` (§481, §483); readers watch their own name's keys. The composition step's step-progress
names the one caller mesh-wants' definition lists for step, read from the seat list (A-294).
Builds: design 47 G §481, §483, §543, §600, A-163, A-170, A-184, A-248, A-294
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
sayHeld stays in G's judgeOverHeld, after the written-verdict branch, for a fresh trunk manifest
whose verdict the pass did not write. The test's merged manifest is written as the candidate's
own text ("2.0"): the join's manifest digest is of the raw bytes (meshcatalogclient
ManifestDigest), so "2" was another manifest and the test stopped before the case it adds.
Builds: design 25 bus-state §1 (merged from main)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
mesh/check being carried to 104909817b70 on 76db40eb6be1 | from 983c46e2576c
A pull request's candidate is judged before its merge and its verdict written, said nowhere. At the merge the
digest becomes the module's trunk manifest, but the merge's judging pass finds the same verdict, writes nothing
and so said nothing: the bus module never heard the new manifest, and the grants part, which follows the
verdicts on manifest-accepted, held the module as having no verdict and wrote no grant for its new fingerprint
(claude-licence-manager, three times on 2026-11-12). The merge's pass now says a fresh trunk manifest's accepted
verdict from the verdict held, with its revision.
Builds: design 25 bus-state §1, §12.2 (the indexer says manifest-accepted for every newly accepted manifest; the
grants part follows the verdicts on it)
Builds: design 25 bus-state L1 (hq ff30ac16, the lead's answer: a merged candidate's manifest is newly accepted).
An asker names the queue it asks as seat:<seat>.accept.<queue> (A-231); no module's serves lists that form, so
graph.Servers matched nothing and the indexer drew no served-verb edge from a build seat's holders to the asker.
Servers now reads the form through mesh-sdk's catalogue.QueueInvoke and answers every module serving a verb of the
seat; the kind-6 edge asks the module graph's Servers, the one rule, instead of a match of its own.
Builds: design 47 G §544, §605, A-231
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The validation run's answer is read from the step's end through steprun's
ReadOutput, whole or from the build seat's output object, and the indexer
invokes seat:node-build-go.output for it (A-254); the patch B5g6 left for
the join, applied on the merged heads.
Builds: design 47 G §712, §713; lead answers A-254, A-268
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its head stands where a merged message's merge stands: forgeKind, pending refs, the newest load and the revision's head.
Builds: design 47 G §509, §714, A-269
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Reverts the Go-bundle package of 53caa3ba; the run's program is the directory ./cmd/mesh-judge under the go.mod the build reads.
Builds: design 47 G §712, §676, §491, A-268
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The program puts the validation's run ask on node-build-go's check queue
under its own asker and hears its end on step-ended; the manifest invokes
seat:node-build-go.accept.check. The revision validated is the branch its
merges landed on (the merged message's base, else the trunk), never the pull
request's branch. take-in.pending may name a refusal or why the revision
could not validate instead of the build it waits for. The whole case runs a
stand-in build seat: an accepted revision is taken in as before, by one ask
whose job names the indexer entry's repository, path and the revision's
head and no heads; a merge whose changed manifest gains a problem stays
pending, refused naming it.
Builds: design 47 G §712, §713, §714, A-231, A-232, A-247, A-254
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The validation's program is read under the Go module the indexer entry's Go
artifact names; the indexer's artifacts are bundles, which carried no
package, so every validation could not be asked.
Builds: design 47 G §676, §712, A-263
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The tool (class act) records its hand act through mesh-hand-acts first and
asks the indexer through takeins; the indexer asks the revision's validation
under its next try and answers the validation's state. A revision accepted,
refused or whose ask is out is asked nothing.
Builds: design 47 G §713
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The take-in puts the validation's run ask and ends there; the revision's
newest pending value keeps validation {ask, asked, input, seq, try,
failed, accepted}. The build seat's step-ended of that ask resumes it:
accepted takes it in as before and is never asked again, refused keeps it
pending with refused, and an end that could not validate keeps it pending
with failed, said in take-in.pending, never a refusal and never passed.
An end of a replaced ask is dropped, written in the journal. The answer
is read from the event's own output or output object. The wiring in the
indexer's program comes with the whole-module case (IX5).
Builds: design 47 G §713, A-232, A-247, §712
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The acknowledgement subscription is the SDK's; the indexer's inputs.go holds none, and the test that forbids a subscription in
the program no longer excepts it.
Builds: design 47 G §712, §681, A-237, A-139
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A revision that touches no seat definition was judged against no seats at
all; it is now judged against the whole seat list, the trunk's definitions
standing in for the revision's until A-234 keeps them.
Builds: design 47 G §712, A-241, A-234
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The running indexer's validation before take-in asks its own manifest
validator (cmd/mesh-judge under the indexer entry's Go module, at the
revision's head) over two cases and refuses only what the revision causes;
mesh-judge reads the file MESH_RUN_INPUT names, where a run writes its input.
Builds: design 47 G §712, A-213, A-232
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The seat whose definition delivers a requirement, among those the entry's
catalog graph revision names, is resolved first: its holder from the
placements' holds, as seat-holders keeps them; a delivering seat no
placement holds holds the entry, naming the seat. A hold now names the
requirement, the seat and each candidate {node, module}; an optional
requirement nothing provides is left absent. The catalog entry gains
contributes, filled by the indexer, and requires names every requirement
as Wants lists them, optional ones included (the module graph and the
assigner's halves leave the optional ones out by the entry's manifest).
A contributed requirement gives a contribution edge to the same provider.
Builds: design 47 G §708, §709, §357; lead answers A-167, A-229
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
For each package a module's entry builds against whose artifact takes `calls`, an edge of kind 6 names each word and runs
from the artifact whose manifest entry `states` it, so no manifest names the tool runner's module.
Builds: design 47 G §605, §545 (A-208)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The entry's manifest is read by the second reader release (RR2-4), and an invoked verb given as {verb, fields} puts the
fields in its edge's `why`.
Builds: design 47 G §558 (A-208)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
An entry's edges run between artifact references, from the artifact that comes first: kind 1 from the publisher of a
package it builds against, 2 from an artifact its `needs` names, 3 from its build module and its bases, 4 from the
provider of a provision a want of it waits for, 6 from the server of a verb it invokes (none on a cycle). Kind 5 waits
on a design line (A-212).
Builds: design 47 G §47, §48, §49, §50, §121, §122, §378, §432 (A-208, A-212)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The drop is a hand act recorded through mesh-hand-acts before it is asked; the indexer, the state's owner, drops the
run's candidate and its key.
Builds: design 47 G §64; A-194
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
messageVia, stepsVia, sourceVia and versionsVia go through CallKeptWhileOpen: open while the commit's take-in
is pending, the candidate is held, the branch is watched, the module is in the newest view. A call that ends
with its ask closed is index.ErrAskClosed, not an unanswered call.
Builds: design 47 G §351, §367, §460, §531; A-190
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The indexer hears the runner's run-started and pipeline-ended on their own streams and writes candidates.run-<id>:
one pull per member, its repository and directory from its registration, its manifest and fingerprint from a take-in
of its commit read through the seat git, over its branch's revision view when its registration watches the branch,
else the trunk's. The state runs keeps each run's members and ended modules, so a restart between two ends still
drops the candidate. The try candidates, the checker's checks consumer, checker_tries and the three try tools go;
IsTryGroup takes run-<id> beside try-<digits>.
Builds: design 47 G §64, §190, §321, §66, A-160, A-174
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
State pins (4 MiB; one key per revision <branch>.<revision>, made, pins-stated) applied from a durable consumer of mesh-delivery's
pinned, freed, heads-replaced and pins-stated, acknowledged after the apply; a revision is removed when no record pins it and it
is not current, only while the consumer has nothing pending and after a pins-stated later than made; finding pin-missing; tools
indexer_pins, indexer_unpin, indexer_consumer (the state consumers, written by mesh-sdk's process.ConsumerLedger).
Builds: design 47 G §153, §178, §189, §215, §216, §579, A-169, A-171, A-176
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The holder is asked through mesh-sdk's seatlist.HolderOf, its first view and views family followed as the builder's and the
checker's are; the module consumes the seat's views.assignments and invokes the seat's verb assignments alone.
Builds: design 47 G §7, §428, §556, A-119, A-126, A-131
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The assigner's asks.go, tools.go, seat_tools_test.go and assign/wants.go,
the builder's builds.go and the indexer's candidate_values.go, and the
import blocks of three tests the step runner's move reordered.
Builds: delivery review round 1, the gofmt finding
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The delivery repository's contracts and SDK live under modules/ as
mesh-delivery-contracts and mesh-delivery-sdk, their Go module paths
renamed to match the folders (the TypeScript names already did), and
every importer in mesh-delivery, mesh-catalog, mesh-host, mesh-tools
and mesh-sdk follows in the same group: a design as it should be, one
path per module, checked by the group's check building every importer.
Builds: design 47 G §427, §88
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
sourceFollow takes source.<branch> for every branch the seat lists (the answer with no branch), ApplyBranchSource computes each module's
fingerprint, inputs and graph node over a view in memory seeded from the branch's newest revision, and keeps it with KeepBranchEntries;
the trunk's modules, manifests, taken state, graph and packages are not written. The trunk branch is named once (index.TrunkBranch).
Builds: design 47 G §13, §14, §291, ADR 0666 §6, A-85, A-90, A-93
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
BuildEdges.fp is the entry's fingerprint in the branch's revision whose source the build names; the branch's newest build
is kept as heard in heard as branch-build.<module>.<branch>.
Builds: design 47 G §374, §375, A-83, A-80, A-85
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The first watched branch's revisions stay trunk.<n>; catalog-revision names its branch, escaped. Nothing yet takes a
non-first branch's source revision in (KeepBranchEntries has no caller).
Builds: design 47 G §291, §614, A-85
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
KeepInput takes the ask's id. It has no caller yet: the indexer publishes no run ask for its validation in this tree.
Builds: design 47 G §354, A-78 d
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h