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
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
Kind 3, kinds 5 and 6, the first fill's edge entries (§377) and the deletion of an input at its ask's step-ended are not built.
Builds: design 47 G §374, §375, §354, A-68
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The indexer asks the seat mesh-module-assigner's verb placement (input {module}, answer {placements: [{branch, nodes}]}, A-62)
before an unwatch is proposed and refuses one whose branch a placement names, with the reason placed (new in the seat
mesh-catalog's contract) naming the placement; its manifest invokes the verb.
Builds: design 47 G §704 (unwatch), A-62
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Filled once, as released, with each module's highest published version; an unanswered builder_versions holds it and, after
five minutes, is call-unanswered. The edge entries of the first fill (§377) wait for answers.
Builds: design 47 G §372
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
routerRecordUnread is replaced by routerRecordOf: operatorchannelclient's Record is a get of the key (<module>.<id>) on the
process's own bus connection (process.Conn.Ask), in the bucket formed from the seat's holder on the seat list (the seat
mesh-module-assigner's verb assignments with seats) and the contract's StateAsks, no module's name in the program. The manifest
uses operator-channel and invokes that verb.
Builds: design 47 G §700, A-74
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The state versions (64 MiB), a late older version recorded and not said, the newest 100 kept per module and never the
highest of a MAJOR.MINOR; the artifacts published so far are kept as pending.<module>.<version> in the own-build state.
Builds: design 47 G §349, §369, A-69
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A member a running put in a set leaves it also when the want of that node and module is removed (the node left or the module was
unplaced), whatever that node last said running; a running or a wanted older than the removal does not bring it back, so a
restart that reads the two streams in either order reaches the same sets.
Builds: design 47 G §675, §693
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The indexer consumes the seat mesh-wants' wanted (on wanted.<node>.<module>, kept last per subject: the seat's definition gains
the two tokens and the keep) and the node-engine seat's running, each read whole at its start and followed; it keeps in the
old state section named (max-mib 4) one key per fingerprint with its set of <node>.<module>, written by compare-and-set. An
entry object is removed only when no kept revision lists it and its set is empty, and not before both streams were read and the
sets reconciled; its entry-index key goes with it. indexer_entries reads the set, indexer_named_drop removes one member by
hand (class act, said in the hand-act log first).
Builds: design 47 G §675, §695, A-61
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The seat list's build seat per artifact (language or kind), a kept call
<seat>.steps with {module, artifact, fingerprint, fetch}, and the finding
call-unanswered (scope call, id <seat>.steps) after five minutes, cleared on an answer.
Builds: design 47 G §704
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The indexer's CAS Findings store is the held writer through the small FindingWriter interface (Write, Clear, Held): the
unread-call, accepted-unsaid, seat-definition and out-of-step findings are raised and cleared through it, the unsaid ones
read from Held. followAssignments follows the assigner's assignments through the module's ProcessReader (the reader raises and
clears the first view's finding), the emitter and the family-not-heard finding write through the same writer, and the
view-waits finding of the seat git is written by hand through Write and Clear (A-28). The old resolved words go (A-22).
The integration bed has the findings stream and the test sees finding-written said on it.
Builds: design 47 G A-29, A-26, A-28, A-22, A-3, A-14, A-17, A-30, A-37, A-38, §689, §687, §461
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The manifest validator refuses a module that declares the state findings without its stream and the consume (§387), so the
whole test's own manifest was refused; the waiter counted every manifest-accepted, which the indexer says for each manifest it
accepts, as a wake of the views family.
Builds: design 47 G §387, §639, §580
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The seat mesh-catalog's registrations, register, policy, watch and unwatch (each asks the operator, naming every value it
moves, with the change's digest, and writes only on the warrant), the state proposals with an ask id and a digest per key,
the consumer of operator-channel.decided, a restart that reads each open key, indexer_proposals, indexer_proposal_drop and
indexer_seed_again, the seed as one ask. The router's record of an ask is one injected read that fails loudly until the design
says how the program reads it (D-37); the seed's steps call is not wired.
Builds: design 47 G §667, §2, §3, §4, §5, §8, §9, §10, §342, §343, §482
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
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
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
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
Design 47, Two graphs: a keep that would pass the store's cap refuses
the next revision and says full, naming the source revision held pending
with the reason objects full (Pending.Held, which indexer_pending shows);
a keep crossing 80 % says filling; once something removes revisions,
RoomAgain says room below the filling mark and evaluates pending again
(no timer). Each event is said once by its duplicate id.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
ADR 0663: the catalog half is read through revision, answered by the
tools bundle from the catalog graph revisions before it asks anything,
to the parts whose entry in the newest trunk revision declares
seat:mesh-catalog.revision in invokes, the holder refused too; none kept,
every reader waits. The first view modules, its callers list and its
tool leave the manifest; the assigner declares revision instead (its
code moves in W5.10); the grants part keeps its read of modules until W8.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The node agent calls a restored part's catch-up tool with no arguments, so
indexer_take_in with neither module nor repository takes in the head the
gate's source names for every repository, as the first start's catch-up
does, and keeps the view as the next revision when an entry moved. The
manifest names it beside the catalog graph revisions, form 1 (design 47,
Reverted).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The states modules and graph leave the manifest and the names the indexer keeps; their first views and read tools are
answered from the newest revision, whose changes catalog-revision says. The contract keeps the modules type until its
readers moved (the lead's ruling). The manifest validator, built at mesh-delivery's trunk, accepts the indexer in both
cases, change and trunk, and no verdict differs.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The tools bundle reads the objects catalog-revisions through its runtime (index.TrunkStates over busstate): the first
views, read tools and seat verbs of modules and graph, indexer_config_readers, indexer_bus_state and
indexer_package_users; the marks of modules and graph are the revision's number, and a view asked before the first
revision says view-waits, never an empty catalog.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
main.go reads the view and the module graph's nodes (NodeOf) from the newest trunk revision instead of the modules and
graph states; every write outside a recompute (the judge pass's verdicts, a build's imports, the source stamp, the
modules the trunk dropped, the indexer's own entry a held revision writes) ends in KeepView, so a restart loses nothing;
a revision lists every module the view holds, one whose manifest cannot be read too. At a first start whose objects keep
no trunk revision the indexer takes in the head the gate's source names for every repository by the forge bridge's
merged message and keeps revision 1 (the lead's ruling A). The whole-module tests read the view from the revisions.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Design 47 (Two graphs) keeps a catalog graph revision for each source revision taken in and for a fingerprint moved
with no merge. The recompute that writes the module graph now keeps the revision it makes, numbered after the newest
kept trunk revision, and says the seat mesh-catalog's event catalog-revision naming the changed modules; a recompute
that moves no entry keeps none, and objects not yet on the bus keep none, said in the log.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Design 47 (Two graphs) keeps each revision as the list of its entries' digests and each entry as one object, so an
unchanged entry is stored once. The bucket is declared in the old objects section with a 512 MiB cap (ADR 0619 §2:
the indexer is the foundation), opened at its first use; a revision's list is written only after its entries, and a
revision read back with an entry lost is an error naming the module.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The catch-up of the heads the source names runs before a source-moved is read, once per branch; the gate's source bucket is no longer read.
internal/index compiles against the new contracts again (SourceByMainValue is gone); tests of earlier subtasks that
the broken compile hid are fixed (the validator's MAJOR.MINOR version in their manifests).
Builds: design 47 G §15, §115, §362
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The refusal of a status in a manifest (IX20) relies on strict decoding: a manifest
field naming a status is an unknown field and is refused. The `*` emitter of
consumes (design 47 G §386) is held for the design writer's answer on model-usage's
`*.usage.*`.
Builds: design 47 G §89, §368, §387
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Both manifests drop the read mesh-delivery-watchman.presence and invoke seat:mesh-watchdogs.presence; buildrun's ReadsCalls, its presence bucket and both watchPresence copies go. The machine is asked once when the bound key expires; a node that returns is asked again on manifest-reads-changed, and the finding clears on its answer. The indexer's finding is stamped with the wait's clock.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Both write it through buildrun.ReadsCalls over enginereads Keeper.Unanswered as the assigner does, read the watchman's presence for a machine heard, arm a bound key that expires at the five minutes (no timer) and clear the finding when the node answers or its machine is away.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Without the unjudged state the bind's pass accepted the refused manifest with a
warning and the waiting one, and said manifest-accepted for both; the row settles
Q3: the indexer says what grants follows, so the grants part is unchanged (no D8).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
A judge pass that failed lost the set of manifests the take-in newly wrote, which
lived only in its memory: the next pass found no verdict, took each as accepted
before any verdict (ADR 0579 §1), and wrote a refusal as a warning. The take-in
now keeps each new digest in the indexer's own state unjudged before it writes
the module naming it; every judge pass judges those as fresh and ends a key once
its verdict is written or no module holds it. indexer_read_unjudged reads the
state; indexer_judge judges it again by hand.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ