FollowSeat(mesh-wants, wants) replaces the follow by the assigner's module; the pulse and stuck keys name the holder's real
bucket taken at each use (WantsAt, AwaitsWants), a start never waiting for it and the seeded keys of any `<holder>_wants`
kept until the late read (A-321). indexer_pending and indexer_verdicts are asked of the holder of mesh-catalog on each
call. The one catch-all of the seats' events is one handler per seat (A-322), source-moved taken from the branches
follower (AdoptEvent). The manifest consumes the seat's views and the seat-holders view.
Builds: design 47 G A-210, A-318, A-321, A-322, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
enrolment.Module is gone: the finding writer, the reader, the warrant record, the log lines and the ask's bound act name
the served-as module (ownModule, the holder's Module).
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
viewstate.ViewModule is gone; the process takes cred.Module for its reader and emitter, the tools the served-as module.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
index.Module is gone: the indexer and its registry carry the credential's module (findings' observer and ids, its own
entry and graph key, the history subject, the views emitter and reader), the tools take the served-as module.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
CheckerModule and the buckets built on it are gone; check.Bucket names a state of the credential's module, the examiner
takes the module as its asker, the tools take the served-as module, and the tools ask the indexer's read tools of the
holder of the seat mesh-catalog on each call (B2's tool addresses for the checker).
Builds: design 47 G A-296, A-210, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The versions, bounds, reserved, publish-queue, acted, toolchains-heard and instances buckets were constants naming
mesh-delivery-builder; ownBucketsOf takes them from the module the credential names.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The view's trust tool reads the signers in the state of the module holding the seat when it reads (seat:mesh-vault.signers in the manifest's reads); the vault's module constant goes.
Builds: design 47 G §428, A-210, A-128, A-318
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Reads in the seat form seat:<seat>.<state> are resolved by the seat list's holder when read; the manifest reads and invokes follow (seat:mesh-module-assigner.assignments for the holder lookup). The vault's module name goes.
Builds: design 47 G §428, A-210, A-128, A-318
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The tools program asks indexer_read_*, assigner_read_* and indexer_pending of the module holding the seat mesh-catalog or mesh-wants when it asks, and names the wants' real bucket from that holder at each status; the assigner's module constant goes.
Builds: design 47 G §428, §717, A-210, A-300, A-318
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The four TestNoCode...OwnModule functions became helpers called by TestTheNamesAreTheManifests, TestMergeCallsTheToolOnceAndWritesTheMergedMessage, TestTools and TestNoTickerTimerOrSleep, so no module ends with more tests than its merge base for them.
Builds: design 47 G §626, §428, A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
viewedStates read the module before the start had said it, so every name began with an underscore at run time; it is a function now.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The first views tools name the module the runtime serves them as, not a constant of the runner's name; a guard test finds none in its code.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its conditions' keys, its asks' subjects, its reader and emitter, its ends bucket and its tools' first views take the module its credential names (the tools: the module the runtime serves them as) instead of constants of its name; a guard test finds none in its code.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its states' buckets, its stream's subjects and its finding observer take the module its credential names (the tools: the module the runtime serves them as) instead of constants of its name; a guard test finds none in its code.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its finding observer, its dead-letter consumer, its reader's module and its tools' first views take the credential's module (the tools: the module the runtime serves them as) instead of constants of its name; a guard test finds none in its code.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its buckets (the seat's states, wants, asks, puts, waits, findings, policies, pins, marks, first views) are functions of the module SetModule was told at its start (its credential's; the tools program's served-as), no longer constants of its name.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its states' buckets, its finding observer, its build log entries and its step asks' asker take the credential's module (tools: the module the runtime serves them as) instead of constants of its name; builds.StateBucket/BuildsBucket replace the Bucket constants. The readers of the builds bucket (checker, view, grants) still name the builder: the next D1 subtask finds it by the seat mesh-builds.
Builds: design 47 G A-296, §428
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
composer.Manifest gains Fingerprint (wire {"digest","fingerprint"}) and Fill's get takes the Manifest. The checker fills it from a
pull's fingerprint, else from the trunk revision's entry of the module (repoModules keeps each entry's fingerprint).
Builds: design 47 G A-310
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Nodes read anchor, home-server, laptop, workstation (in the order the node names sorted) and a person reads alice.
Builds: design 47 G A-296 (review round 2 D3)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The manifest reads seat:<seat>.steps and .pauses, which the grants part resolves, and the tools read <holder>.steps and <holder>.pauses.
Builds: design 47 G A-82, A-128
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A process is never judged by a tool of its own; the pipeline runner's health is now the unit, as every other process of
mesh-delivery declares. runner_health stays a tool.
Builds: design 47 G A-305; ADR 0227 rule 8, ADR 0240 rule 2
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
judgeAll put one check ask and blocked in its wait before the next. Within each of its two phases (the modules that are
not TypeScript, then the TypeScript modules once groupPackages is read) every ask is now put first and waited for on its
own goroutine; a declined ask is put again there as before, and the steps are judged in the order the asks were put,
so the verdict reads as before whatever order they end in. The ask splits into prepareAsk, putAsk, wait and judgeAsk;
the placed ask of unmet packages stays one after the other.
Builds: design 47 G A-304, ADR 0525 §4
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its state enrolments is the runtime's bucket of the credential's module; the constant `mesh-enrolment_enrolments` was read
by its tests alone, which now name the bed's bucket themselves.
Builds: design 47 G A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The status view's process followed mesh-delivery-assigner's assignments, wants and asks by module name. It now follows them
through views.ProcessReader.FollowSeat with the catalog half's holder function (A-298), its pictures named in the seat form
(mesh-module-assigner_assignments, mesh-wants_wants, mesh-wants_asks); the watchman's stuck key of a want, which names the
holder's real bucket, is read at each use from the holder followed (ProcessReader.HolderBucket), and the tools program,
which reads the wants of the assigner's tool (A-300), names that module's bucket. The process names no module of the
assigner. The bed serves the seats' views at stand-in holders the claimant's seat-holders view names.
Builds: design 47 G §717, A-298, A-300, A-303 (corrected)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The asker rename (d29e1426) let main's subject, which names no asker, take only a build and a run, so a holder refused the
checker's check asks ("the kind check is not taken on main's subject"), and seven of the checker's eight integration tests
failed. Until main's subject goes it also takes the checker's check and recheck; a step there is still refused.
Builds: design 47 G A-184, §543
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
catchUp held the teller's lock across the router's record read (Where, through operatorask.Bucket and seatlist.HolderOf,
which retries); with no answer it blocked the module's event pull, whose Said waits on that lock (met when an ask arrived
inside a first view). OnAssignerAsk now catches up after it let go of the lock, catchUp takes the lock only once the record
is read (an asking no longer open by then is left), and OnCurrent reads the records of the asks asked again outside the
lock in the same way.
Builds: design 47 G §717 (the teller raises the assigner's asks whether or not anything else answers, issue 1906); principle 3
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
buildrun's AssignerHolder asked the seat's verb for the holder every 5 seconds. The builder and the checker now follow
mesh-module-assigner's assignments through views.ProcessReader.FollowSeat with the catalog half's holder function (the
checker gains the catalog half's reader of §614 for it); the indexer reads the claimant from its own catalog
(Indexer.ClaimantNow) and follows its seat-holders view again at each refresh of its build modules. AssignerHolder goes; the
manifests consume the seat-holders view (the checker also the catalog half's events and verbs), and the assigner's
seat-holders first-view tool answers the checker and the indexer. The beds give each part a claimant and a seat-holders view
in place of the seat verb's answer; the indexer's beds hold the claimant from the start, so the merge test reads the newest
revision.
Builds: design 47 G §717, §614, A-298, A-302
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The teller followed mesh-delivery-assigner's asks and mesh-delivery-view's answers by module name. It now gains the catalog
half's reader (§614), whose claimant of mesh-module-assigner's seat-holders view is its holder function (A-298), and
follows mesh-wants' asks and mesh-delivery-view's answers through views.ProcessReader.FollowSeat, each apart (issue 1906):
started before any module holds a seat it waits, and follows the holder once it is placed and as it moves. Its code names
neither module; its manifest invokes the catalog half's revision and the gate's source, and consumes the seat-holders view,
catalog-revision and source-moved; the assigner's seat-holders first-view tool answers the teller (A-131's module form).
Builds: design 47 G §717, §614, A-298, A-295, A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The status view consumes seat:mesh-wants.views.asks, seat:mesh-wants.views.wants and
seat:mesh-module-assigner.views.assignments in place of the three mesh-delivery-assigner.views
entries, and its process takes each first view from the tool named for the state; its invokes
lose assigner_read_asks and assigner_read_assignments, and its tools program keeps
assigner_read_wants for a want's key and history reads (A-300).
Builds: design 47 G §717, A-300
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The Delivery contracts module defines the seat mesh-delivery-view (scope mesh, grain whole,
ADR 0540): no verb, no seat event, no family, one state answers (template state, history 5,
view), one key form per kind of mesh-wants' asks with .view after it (A-299), its value the
answer (v, asking, option, words); seatgen writes its Go and TypeScript packages, and the
module's artifacts name them. The status view claims the seat (scope mesh, serves none), its
first-view tool answers (views.FirstViewTool, callers the teller, A-301) replaces
view_read_answers, and it deletes its answer once the ask's key has left asks. The teller
follows the answers by seat:mesh-delivery-view.views.answers and invokes nothing of the view's.
Builds: design 47 G §717, A-299, A-301
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The seat mesh-wants' definition gains the state asks (template state, history 5, view), its key
forms the seven kinds' keys as the assigner's asks package writes them (hold, restore, backup,
record, outside, revert, assignments) and its value the ask as the assigner composes it; its
wants gains view. The assigner's first-view tool asks replaces assigner_read_asks, its callers
the teller and the status view; the status view joins the callers of wants and assignments.
The teller follows the asks by seat:mesh-wants.views.asks and invokes nothing of the assigner's.
The status view's part waits on a question (its tools ask assigner_read_wants).
Builds: design 47 G §717, A-299
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
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
Its states answers, reach and waits (viewstate WaitsBucket, ReachBucket, ViewAnswersBucket), its
first views and its marks were named from the constant ViewModule; they are now
`<cred.Module>_<state>` (viewstate.BucketsOf), and the model is made for its module.
Builds: design 47 G A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its states presence, pulse and stuck and its first views were named from the constant
WatchmanModule; they are now `<cred.Module>_<state>` (watch.BucketsOf), and the watchman's
stuck keys of presence take its own presence bucket's name.
Builds: design 47 G A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The builder, its tools bundle, the assigner (process and bundle) and the view's tools bundle answered
their seat list's again tool to the modules node-tools and mesh-healers. Their lists are now the
operator, seat:node-tool-runner and seat:mesh-healers, resolved by a holder function:
- meshcatalogclient's Branches.Claimant (moved from the builder's versions.HolderOf, which now asks it)
names the claimant of mesh-module-assigner from the trunk's half, and Branches.SeatHolders follows
that claimant's seat-holders view through the part's wiring. It drops the view and follows the new
claimant's on a catalog change, asks nothing on a timer, and answers seatlist.HoldersIn.
- the assigner answers HoldersIn from its own seat-holders picture (its world in the process, the
watched copy in the bundle).
The builder's and the view's manifests consume seat:mesh-module-assigner.views.seat-holders. The
assigner's seat-holders first-view tool answers both, by module as A-131 has it.
Builds: design 47 G A-298, A-295, A-296, A-210, A-131, §717, §616, §614
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Its states answers, asked, widens-said, first-views, teller-marks and findings were named from the
constant tellerModule; they are now `<cred.Module>_<state>`, so the part keeps no name of its own
module for what it owns.
Builds: design 47 G A-296
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The runner's step ask id was `step-<24 hex>`; every build seat holder's CheckAskID refuses it (base 36
milliseconds and six hex digits), so no placed step could be accepted. AskID now opens with base 36 of
the pipeline's start time in milliseconds and ends with six hex digits of the sha256 of the pipeline,
the artifact and the step: the same placement makes the same id at every start. A rerun uses its own
time.
Builds: design 47 G A-297, A-232, A-111
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
branches_test.go named nats.ErrNoResponders for a call that reached no holder, so the generator's
check refused the contracts module ("a client uses only its seat's contract and mesh-sdk's runtime",
ADR 0625 §3), met twice at join 11. The test now gives the words a runtime passes that refusal on
with, which busretry.Undelivered reads the same way.
Builds: design 47 G A-170 (the regenerated contracts, checked in place)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The three constants named modules the builder no longer calls or reads: the gate and the checker
by nothing, the indexer only by a test's stand-in of a tool the builder stopped calling when the
catalog half named the requirements (A-119). A deletion: nothing reads them.
Builds: design 47 G §7, §428, A-210
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