Each revision kept writes, before it is kept, the digest of the object of every entry that has a fingerprint under that
fingerprint's key; the verb entry (the tools bundle) reads the key and then the object; indexer_entries reads a key and
whether its object is kept. The named set (a want or a running build keeping an entry) is not built: the event wanted
carries no form for a removed want.
Builds: design 47 G §675 (By fingerprint, Its tools in part), §443
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
approval-carried.<repository>.<pull> is kept 90 days; pins-stated has the keep of pinned, which is the seat's family.
Builds: design 47 G §542, §579, §652
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The state tag-asks and its bounds, builder_tag, builder_tag_asks and builder_untag, the checker's tag-wanted
consumer, the branch end's removal of tagged versions, the numbering of a check's build under a tag and the
event version.numbered (its contract in builds, its emit, its manifest line) are removed; a forge message still
wakes a floor. builder_publish_again refuses a held build, since nothing says a version numbered.
Builds: design 47 G §373, §321, §349, §413
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Pipeline, PipelineStarted, PipelineEnded, StepEvent and Wait name the build-input fingerprint fingerprint, not fp; Wait.step
takes pipeline; Pipeline gains version. Fixtures and generated code follow. What a pipeline wait says in on is not given by
a line (reported).
Builds: design 47 G §534, §550, §585, §646
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Each item of dependencies is {kind, part, version, digest}: kind 1 a resolved package's artifact reference, kind 3 the
toolchain's part. Its field artifact is part.
Builds: design 47 G §673, §466, §374
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
reserved answers module, version, artifacts and released (a boolean), or error alone; module, version and artifacts are
read as required only without error. contracts/go/clients/meshbuildsclient (artifact go-meshbuildsclient) has Reserved,
which answers the reservation or release, a Refusal for the error and an error for an answer that is not one.
Builds: design 47 G §679, §582, §586, §650
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The entry's artifact gains package {ecosystem, name} (the seat mesh-catalog's definition, regenerated), read at take-in
from the revision's own files (go.mod, package.json) through the forge; the validator's PackageNameProblems refuses
every module sharing one name in one ecosystem, naming them, in the trunk's judge pass. An image's name is not written:
the design does not say what it is.
Builds: design 47 G §676, §491, §478, §504, §412
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The builder's reserved version reaches the build in the ask; a holder says when it takes and ends
any ask, a builder's build included, so the watchman times every ask; the toolchains key names its
program's digest; the checker may drop its own asks until its removal. step-progress and ask-taken
name no keep and go on the shared events stream. The delivery SDK's neutral forms follow the part.
Builds: design 47 G §472, §548, §549, §552, §573, §602, §603
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
meshcatalogclient imports the new package and keeps two one-line wrappers for the callers of the other parts until
they move to it.
Builds: design 47 G §670, §614 (wiring unchanged)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
A build the build node kept, which answers its digest and no reference, is done; its end carries
kept-on once for the build.
Builds: design 47 G §671, §379, §271, §526
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The builder's reserved version reaches the build in the ask; a holder says when it takes and ends
any ask, a builder's build included, so the watchman times every ask; the toolchains key names its
program's digest; the checker may drop its own asks until its removal. step-progress and ask-taken
name no keep and go on the shared events stream. The delivery SDK's neutral forms follow the part.
Builds: design 47 G §472, §548, §549, §552, §573, §602, §603
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Taken from f051de32 (the old numbering's refusal); the tests of D-B2 to D-B6 it sat on are left out.
Builds: design 47 G §55 (and its check line §56, test 70)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The part build-step.json, its generated Go and TypeScript (seatgen, check clean), the three build seats' fixtures and sdk/buildstep lose StepNames and the ask's required names.
Builds: design 47 G §7, §328, §329
The forge read named the forge module's tools (gitea_get_file, and four more never
called), which ADR 0656 §1 and the operator's (d) forbid: whichever module holds the
seat git answers. An absent file is the seat's absent, an error its error, and a call
that reaches nobody stays not heard, so the check says it could not run.
The compare captures no test reads any more go with the commit trees read nothing called.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §252, §312, §317
The checker consumes node-engine.running (kept last per subject) through its durable
consumer and hands each running.<node>.<module> to PartRunning; a body naming no part
asks nothing and is said. Naming the not-heard part by its module (the seat git's holder,
a build seat's holder) waits on the catalog half's claims (W3.6): until then the part is
unnamed and the first running asks the check again.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §253, §315
A check that failed for a part of the mesh not heard was judged again at
every change of the nodes. It now says could not run, naming the part,
and is kept in the checker's own state could-not-run; only the running of
that part asks it again, once per heads and part at one fingerprint
(PartRunning). Not asked again within an hour it is the finding
check-could-not-run, which clears when the heads are checked again,
replaced, or their pull request closes. checker_status reads the state.
The node-engine seat's running event is wired once its definition lands.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §253, §315
Taken from 2d796fe8 (its wait half only; the store and record halves are WM7's, built). The body is the seat mesh-wants' contract Wait.
Builds: design 47 G §266, §269, §277
Design 47 *Each part acts on its own entries* and *Every part takes a first view, then
follows the events*: the builder reads its placements through the seat mesh-wants'
view, never the assigner's state. The seat's client gets Placed over assignment graph
revisions (ADR 0625 §4: the logic the gate's three callers share), and the gate a
Revision feed; the first revision settles it, a pair new in a later one stands since
that revision's time, as the state's write time did (issue 1940).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §348, §195, §200
Design 47 at hq main b229f5c4, lines 1353-1366 (each entry one module version
on a node, its edges provisioning and acting; each revision naming its inputs,
kept as objects in the old section with its cap, served by the seat's verbs),
1385-1388 (under 256 KiB for 120 modules on four nodes; a 512 MiB cap), 1416-1418
and 522-525 (a node's entries from the catalog graph of the branch its placement
names, by default the registration's first), 909-914 (the placement's build is
the version), 1835-1836 (an edge from the acting part's version to each version
its rule names), and the Reverted table (assignment graph revisions as objects,
form 1).
internal/assigngraph computes a revision from the halves held per branch, the
placements and the capability readings; keeps it numbered after the newest
when it differs, each entry once by its digest; and answers revision, entry
and difference from the kept objects only. The manifest serves the three verbs
and declares the objects assignment-revisions. A placed module whose entry
cannot be computed is named in Uncomputed, never left out in silence.
Not built here (the design does not say, or held): contribution edges;
provisioning to a provider no binding or pin names; tiers; a candidate's
revision (W5.9); removal of a revision no record pins (pins are W5.9's).
The process does not compute and keep yet: that needs the registrations'
first view and a catalog half per branch (handover).
Milestone 47/G, issue 1966. Tests: TestTheAssignmentGraphIsComputedFromItsInputsAndKept,
TestARevisionOf120ModulesOnFourNodesFitsOneValue, TestTheSeatsVerbs/1953/D4-D6
(failed before), TestManifest's objects row (failed with the old manifest).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §173, §175, §176, §180, §194, §209, §223, §263, §346
The part binds its own durable on the node-engine's kept stream (HearKept, tried at every wake until the pass has made it),
the seat's holders are read from the manifest of the digest each node says it runs, and a node-engine's account is granted its
own node at the part its definition names (running.<node>.*) and its durable on the kept stream by name.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §199, §249, §309
The node agent calls a restored kept data's catch-up tool from the
restore point, so the judge refuses a form below 0 and a catch-up tool
the module does not declare; a foundation part keeps its new objects in
the old section with their cap and form (ADR 0619 §2).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §295, §299
Design 47 at b229f5c4, *A module's registration*, lines 482-485 ("No part fixes a name": every module name a
part needs is read from the catalog graph; ADR 0666 §5): the validator kept the build modules' toolchain streams
(toolchains-go, toolchains-node) until they move by the modules' names. It now keeps them for the module that
claims node-build-go or node-build-node, whichever module that is. The other entries of the list, the node-engine's
module (engineModule) and the indexer's own toolchain watch are not in this commit. Rows in
TestRulesBus/TwoModulesCannotDeclareOneStream (fail without it). Issue 1966.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §364, §428, §535
Design 47 *A module's registration*, "No part fixes a name" (b229f5c4 lines 482-485): the indexer finds
the build modules from the seat list's acts and the manifests, after the gate is made, so the gate takes
them by UseModules and passes its reports on again. Row in TestToolchainGate: a module given later passes
on at the assignments only once given (fails without UseModules).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §364, §428, §535
The six integration tests that broke when a language's build module became the module claiming the seat whose acts is step build on that language now keep node-build-go and node-build-node as the seat definitions have them, and mesh-build-go and mesh-build-node as the catalog's manifests claim them; no indexer code changes.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §364, §428, §535
Design 47 *A module's registration*, "No part fixes a name" (b229f5c4 lines 482-485), and *What ADR 0656
leaves to this design*, "The indexer reads it [acts] into the catalog graph" (line 1583): ToolchainModules,
ToolchainStreams, BuildGoModule and BuildNodeModule go. The build module of a language is the module whose
manifest claims the seat whose acting rule is step build on it (index.BuildModulesOf), its stream the one of
its manifest carrying toolchain.reported, its bucket <holder>_toolchains as before. Found again at start, at
every change of the seat list and at every catalog revision; the watch, the gate and the hearing follow.
A language with no build module found reads as no toolchain reported.
Rows: TestAgreedToolchainChangesAGoModulesReasonWithNoMerge/the build module of a language is the holder...
(fails without: no BuildModulesOf, and go-builds' report refused); TestToolchainWatch's later build module.
Left: six integration tests of cmd/mesh-delivery-indexer hold no build seat with acts nor a holder manifest
and fail (TestIndexerWhole, TestIndexerWritesAGoModuleAgain..., TestIndexerGivesACandidateItsFingerprint...,
TestIndexerJudgesAnUnreadableVerdictAgainAtStart, TestIndexerCountsOnlyThePlacedBuildNodesToolchains,
TestAMeshSDKMergeMovesOnlyTheModulesImportingAChangedPackage): their fixtures are to be given both.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §364, §428, §535
graph.NodeOf moves from the indexer's own package to sdk/graph, since the assigner reads its verb edges from the catalog
half too (a second reader).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §47 to §50, §121, §122, §378
askGit wraps the kind not-found as index.ErrNotFound; order.go's notFound reads only that. Needs feat/47-G-seats'
seat git at 3b355a35 at the join.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §310, §317
The forge module's own tools leave the program and its invokes. The seat's Go contract is feat/47-G-seats' (contracts/go/seats/git); this branch builds against it at the join.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Builds: design 47 G §310, §312, §317, §428