Main reverted G's half merge (#189, reverted by 8afc3eb in #191) and then took the reader release's S1-S5, which
copied G's code. G's form holds where they differ (process_bus.go, seats.go, state.go and their tests); the
release's kept names stay so main's callers keep building: SeatViewPrefix beside SeatReadPrefix, and QueueInvoke's
empty strings on not-ok (with its test TestQueueInvoke). The tree differs from G's head f30dee54 only by those and
the release's two tests (objects cap option, seat states and stream kinds).
Builds: design 47 G (the milestone's sdk part, as at f30dee54)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
mesh/check being carried to 8afc3ebdf371 on 93e0a7b50d90 | from 27da949140c6
The group feat/47-G-join11 merged 3 of 17 members on 2026-11-13; G's mesh-sdk alone on main breaks 25 trunk
modules. The operator chose to put the order right: a reader release first, then G whole. This restores main
to 8fbba810 exactly.
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
catalogue.ProcessBus gains Consumes, so the strict reader takes a process's bus naming what its module consumes; the judge and the grants part read it.
Builds: design 47 G A-340, A-339
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
stream-publish, the capability of StreamPublish (A-44), is named in go/buscalls beside the other bus-state words, as G names every capability word in mesh-sdk.
Builds: design 47 G §622; design 42 zfs-owns-zfs A-41, A-42, A-44, S1, S2
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
mesh/check being carried to 2895a21e69cd on 8fbba810609e | from e42b9491c931, mesh-catalog 117f933dacf0, mesh-delivery 7221a1e5cd7f, mesh-host 0193949…
Builds: design 42 zfs-owns-zfs §25, §24, lead answer A-42
mesh/check checking cb5e62dfacd9 on 8fbba810609e | novox/mesh-sdk#189 in group feat/47-G-join11
A part that follows a seat's view names its picture in the seat form, but where another part names the holder's own
bucket (the watchman's stuck key of the assigner's wants) the name must be the holder's: HolderBucket answers
`<holder>_<state>` of the holder followed now, "" while none, read at each use so a moved holder is named as it moves.
Builds: design 47 G §717, A-303 (corrected)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A follower found a seat's holder by asking the assigner every five seconds (buildrun's AssignerHolder) and kept the
first holder it found. FollowSeat is given a seat, a state and the part's holder function (A-295, A-298): it returns at
once an empty picture `<seat>_<state>`, not ready; at each change of a view the reader follows (the seat-holders view
among them) it reads the seat's first holder, follows `<holder>.<state>` as Follow does after Start, drops the old
holder's view and follows a new one, handing its state on whole at its first view, and with no holder keeps the picture
and follows nothing. While no holder's first view is held its status names the seat, waiting for a holder, and past
five minutes the reader writes view-waits naming the seat and the state, cleared by a holder's first view. Nothing is
asked on a timer.
Builds: design 47 G §717, A-298, A-295
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
HoldersIn is the one holder function a part gives seatlist.Part.Holders: the modules holding a seat on
any node, from the seat-holders view as the part last heard it (a views follower's or a watched state's
values), so a callers entry `seat:<seat>` is resolved with no call per checked call.
Builds: design 47 G A-295, A-210
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A tool's callers list named modules ("node-tools", "mesh-healers"). A-295: an entry `seat:<seat>`
allows a module caller whose module holds that seat, as a holder function the part is given answers
it from what it last heard of the assigner's seat-holders view, so no call is made per check.
VerbCallers.AllowedWith and seatlist.RefusalWith/ToolsWith take the function; Allowed, Refusal and
Tools keep their form (no seat entry allows anyone without one); a seatlist.Part is given it by
Holders.
Builds: design 47 G A-210, A-295
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Conn.CallChunks subscribes to the call's chunks before it asks the verb, hands the verb's answer to an accept hook, then
receives the chunks the answer counts, in order, acknowledging each, into a writer; CallFile answers the whole body as
the member file, the form a bundle's seat call answers. The checker, the indexer, the assigner and the recovery keeper
read a step's answer kept as an object through it.
Builds: design 47 G A-291, A-290, A-254
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The indexer holds an artifact's named paths, and the checker packs the SDK for a
group only when its merge changes one of them.
Builds: design 47 G A-285
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The definition of a seat on the list a part follows, read through the part's reader at each call: none until the list
is read, none for a seat the list does not hold. Every holder passes it instead of writing its own.
Builds: design 47 G A-278, A-186, A-179
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A part handed the binding finding-events publishes on mesh.bus.<module>.finding-events.<event>.<node>, a part with none on
the old stream; the stdio writer reads the event of either form.
Builds: design 47 G A-274, A-13, A-30, §529
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A process publishes on mesh.seat.<seat>.accept.<kind>.<caller>, its module the caller, as Emit publishes an event, so the
gate's channel over a connection can ask and cancel through the seat operator-channel.
Builds: design 47 G §677, §700; lead answers A-272, A-273
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
seatdef.Resolve, which the seat generator and every reader of a definition go
through, makes each marked verb by-caller and adds the event gated-ended
(gated-ended.<caller>.<call>, kept last per subject one day) and the verb
approvals (class read); the seat files stay as written. approvals is the
gate's verb, so CanHold asks no holder to name it.
Builds: design 47 G §677, §697; lead answers A-264, A-265, A-266
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A waiting call's ask's 60 minutes are a key with its own time to live in the
holder's state approvals, its end heard as the bus's marker, so no clock waits
in the process; a call whose key ended while the holder was away is judged at
its start. A process holder's act names no node, so two instances raise one ask.
Builds: design 47 G §677, lead answer A-255
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Against an embedded bus, a module's process calls a holder's marked verb through
process.Conn's call: asked, approved, run once, recorded through
mesh-hand-acts.warranted and its answer {answer, approval} heard on its own
gated-ended; a declined call runs nothing; a marked verb served through no gate,
or a gate whose state approvals is not on the bus, fails closed.
Builds: design 47 G §677, §700, lead answers A-158, A-224, A-244
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
conn.AnswerSeat holds a verb its seat definition marks needs-approval through the
holder's gate (process.Conn.Gate, go/approval held.go): waiting calls call.<id>,
act.<escaped digest> by create or compare-and-set, claimed.<ask id> by create; a
call carrying the x-wait: held header answered {asked, call} in the reply's field
held; on the router's record read under the module's name, the oldest waiting call
run once within 30 minutes of the Approve and recorded through
mesh-hand-acts.warranted, the others asked anew; declined unasked for 10 minutes;
expired and refused ends; every end said on gated-ended.<caller>.<call>; the read
at start; gate-unanswered past the ask's 60 minutes; the verb approvals. A call
without the header takes ADR 0286 §37's path. process.Conn's seat call sends the
header on every seat call and, answered held, waits on its own gated-ended.
Builds: design 47 G §677, §700, lead answers A-158, A-186, A-209, A-219, A-224, A-228, A-244
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A holder sends a verb's answer file with SeatChunks.Send: it subscribes to the verb's acknowledgements, answers each as a
request and publishes each chunk only after the one before is acknowledged. The bootstrap, seatlisttest and captured copies of
the mesh-catalog seat are the contracts' file at the input verb with chunks.
Builds: design 47 G §712, §681, A-237, A-139, A-249
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h