The registry milestone (issue 1966; ADR 0605-0636 as hq's designs name them), taken in onto its trunks after milestone 47/B0 as milestone 47/G's first step (design 47; issue 1921 notes 54-61).
One delivery group, branch feat/registry-milestone in mesh-sdk, mesh-contracts, mesh-delivery, mesh-host, mesh-tools, mesh-catalog and mesh-networking: one check, one Approve. No member names another's version (ADR 0573); every mesh package is required at the zero version.
This member: no change in this step; the seat packages, each with its lock file.
The registry's reviewed heads (three rounds, 2026-11-04 to 11-06) were never pushed until now; the check of 068b7d23cf1a judged the heads of 2026-11-04. The trunk step was prepared and reviewed in three rounds (2026-11-07): the merge resolutions keep B0's facts and checking-program rules and the registry's generated types; every check composes with the composer at the node-engine member's head, else its trunk; a module the running indexer refuses but the check's own validator accepts is composed and named in the verdict with its build awaited, never passed silently; the checking program answers only new or changed seat definitions when given the reader's digests, and without them (the running B0 checker) only each seat's own description, 171 KB under the 256 KiB bound.
Rules bent, said here: mesh-delivery stays over its test budget (662 unit, 68 integration; was 675 and 68) and mesh-host over unit (1745; was 1746), falling. Out of this step, noted on issue 1921: three asks carry the whole seat list (~430 KB) bounded only by the bus's 1 MiB; the trunk case of the manifest validator is given the heads' seats.
Reviewed-by: mesh-code-reviewer@shanks at b77560786a
The registry milestone (issue 1966; ADR 0605-0636 as hq's designs name them), taken in onto its trunks after milestone 47/B0 as milestone 47/G's first step (design 47; issue 1921 notes 54-61).
One delivery group, branch feat/registry-milestone in mesh-sdk, mesh-contracts, mesh-delivery, mesh-host, mesh-tools, mesh-catalog and mesh-networking: one check, one Approve. No member names another's version (ADR 0573); every mesh package is required at the zero version.
This member: no change in this step; the seat packages, each with its lock file.
The registry's reviewed heads (three rounds, 2026-11-04 to 11-06) were never pushed until now; the check of 068b7d23cf1a judged the heads of 2026-11-04. The trunk step was prepared and reviewed in three rounds (2026-11-07): the merge resolutions keep B0's facts and checking-program rules and the registry's generated types; every check composes with the composer at the node-engine member's head, else its trunk; a module the running indexer refuses but the check's own validator accepts is composed and named in the verdict with its build awaited, never passed silently; the checking program answers only new or changed seat definitions when given the reader's digests, and without them (the running B0 checker) only each seat's own description, 171 KB under the 256 KiB bound.
Rules bent, said here: mesh-delivery stays over its test budget (662 unit, 68 integration; was 675 and 68) and mesh-host over unit (1745; was 1746), falling. Out of this step, noted on issue 1921: three asks carry the whole seat list (~430 KB) bounded only by the bus's 1 MiB; the trunk case of the manifest validator is given the heads' seats.
Reviewed-by: mesh-code-reviewer@shanks at b77560786a6a229e1b538d880773e468557105d7
https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
One seat.json per seat at the whole grain or the seat list's, parts taken in whole, fixtures as data, an index for the
seat list's reading order; read strictly, at most 256 KiB.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
publish, publish-part, versions and remove in the part registry; mirror and tags on the image seat; hold and release on
the two seats distribution holds; published, refused, removed, held and released on each seat's own family.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The checker's verdict and tag-wanted on its own family checker.asks, preview.written on its stream checks;
operator-channel written from the messenger's seat entry, decided its only seat event, offered and closed beside it.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
Converted mechanically from mesh-sdk's compiled list at 5a38a12 by a program kept out of the repository; the three new
registry seats follow npm-package-registry, operator-channel the mesh's own seats.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
go/seats the seat list every reader compiles and every seat's name; a package per whole seat with its names, subjects,
types and a test of its fixtures; ts/ the same as a TypeScript package. Written by seatgen, never by hand.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
Each package carries the contracts marker generated-from naming the module's root, where seats/, parts/ and format/
are. No merge-check.sh: the checker runs every repository's tests by Go's convention (ADR 0529).
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The deciding parts built with this seat list judge the running nats and gitea before their new builds are delivered;
a required verb they do not serve yet would refuse them as the seats' holders (mesh-host's composition and the grants
part's last-holder rule, read in their suites). The mark goes once every holder serves the verbs.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The seat's area changes in this milestone, so it moves whole into its contracts (ADR 0613 §3): the eleven verbs it serves
get their answers as the engine writes them, asked, done and refused their body, and the seat serves the optional verb
manifest-reads (ADR 0618 §3) and says manifest-reads-changed (§4). Each event is published per node, the node's name its
last token (by-caller), and kept with the seat's events for seven days. compose-candidate's input is a boolean, as the
engine and the checker read it. Fixtures for every event, compose-candidate's input and three answers.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
The lead's ruling of 12:5x (design 25 § 12.3): mesh-broker's events ride the bus module's own stream, 30 days,
on mesh.seat.mesh-broker.said.<event>, outside the shared events stream's mesh.seat.*.event.>, so the bus never
refuses the two as overlapping.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
ADR 0625 §1-§3 (accepted 12:45): the seat set stays the root Go module's package; each seat defined whole is a Go
module of its own, since the fingerprint counts a Go module's go.mod and go.sum, so a change of one seat moves only
its importers. A seat's module imports nothing: the registry part's types are written into each registry seat whole,
so no seat module requires a sibling's version.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The lead's ruling of 13:0x replaces 12:5x's said-subject: mesh-broker's events follow every seat, on
mesh.seat.mesh-broker.event.<event> in the shared events stream, 7 days; the bus module keeps a longer history on a
stream of its own module. So every seat family is that stream filtered to the seat's subjects: a definition says 7
days and no cap of its own, and the reader refuses anything else.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
Each client binds mesh-sdk's seat-neutral parts sender to its own seat's publish and publish-part and types, so no
client uses another seat's; each is a Go module and a package artifact of its own (ADR 0625 §3).
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
mesh-sdk's asks logic (an ask's check and digest, the act's digest, a warrant's For and Says, the condition's
encoding) and its asker client move here, over operatorchannel's generated Ask, Option, Warrant and Condition; the
digests are those asks gave (a row holds two of them), so a router and an asker of either build agree.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
verdict, tag-wanted and preview.written ride the checker's own streams, renamed, retiring and retired
mesh-config's config-events stream, whose subjects are mesh.stream.<module>.event.<event>.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
Their output schemas replace mesh-sdk's hand-written SignAnswer, EnrolmentTokenAnswer, NodeAccountAnswer and
Signed, on the same wire names; signed's time is RFC 3339 text, as the generator writes every time.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The messenger keeps them in its own stream asks (its manifest's streams, design 55 § 11), so they ride that
stream's subjects, as the checker's verdict does.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
go-package-registry's published says the module (field module), so a reader fetches the version by its path. The
four registry seats take their events whole from the part registry, which refuses a seat redefining one, so the
field is the part's, optional and empty for every other kind.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
One @novox/mesh-contracts would rebuild every TypeScript user at any seat's change, since the indexer
counts the npm package a lock resolves. Generated by seatgen c1fdd7c; ts/ keeps the seat list alone.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The node-engine seat, defined whole by lead-47's L3 (ADR 0618, ADR 0613 §3), is regenerated in A1's layout (ADR 0625 §1,
§3): go/seats/nodeengine a Go module of its own, ts/seats/nodeengine an npm package of its own, and module.json declares
go-nodeengine and ts-nodeengine. seatgen -check finds nothing out of step.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The forge began mesh-contracts with a commit of its own (ADR 0428), unrelated to the branch's history; the README keeps
the branch's text and the forge's paragraph on how main is reached.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The checks the node-engine, the checker and the assigner share over the verb (ADR 0593 §7, §9) leave mesh-sdk's delivery
package, where they sat over aliases of the seat's types, for go/clients/nodeengineclient, a Go module and package
artifact of its own over the seat's generated contract: the verdicts, the module states, the asker's bound, the no-answer
words, Encode/DecodeAsk, Encode/DecodeAnswer and CheckAnswer. Its test holds the cases mesh-sdk's held, and that an
open input's number keeps its digits; each fails without the code. seatgen -check finds nothing out of step.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The lead's ruling (14:2x): the pull waits ENG-9 shows are carried in the engine's have, read through node_haves, as
ENG-9 allows, so the seat serves no verb of its own for them. Regenerated; seatgen -check finds nothing out of step.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
Each change of an artifact's series the checked head makes is {module, artifact, from, to} under series; the
fixture carries one and the regenerated round trip reads it back (seatgen -check clean).
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
The assigner, the teller, the view and the gate each wrote the same two checks over the ask a value of theirs carries;
the fourth copy made it a kind, so it lives once in the seat's client (Carried) and the four call it.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
seatgen writes a string's enum as Go constants, so the sweep names
RemoveInputReasonRetention instead of the literal. release of what is not
held is no error. The package seats' fixtures name a package as design 32
does (git.novox.be/novox/mesh-sdk/go, @novox/mesh-sdk), name says so, and
module equals name for a Go package. Generated with mesh-catalog's seatgen
(wip/registry-a3); seatgen -check passes.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
A client requires the seat it speaks and mesh-sdk; the seats and the seat list require nothing. The pins are the commits
before this one, as a module cannot name the commit it is part of; the group's check builds against its members' heads.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
A store that cannot remove a tag alone (another tag names its digest) kept the tag and the holder said
removed, so the builder and every follower believed the tagged version gone while it stayed pullable:
work reported done that was not done. The shared registry part gains the outcome kept: in remove's
answer (kept, the reason shared-digest, the tags still naming the digest) and as its own event, in all
four registry seats. Regenerated with mesh-catalog's seatgen (join-mesh-catalog ccb7eaff); seatgen
-check passes; fixtures for the answer and the event in each seat.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
mesh/check failed (9): ace: novox/mesh-sdk#167 does not merge into the trunk: files in conflict: go/catalog…; and 8 more | ae5266e77639 on 2923c82001a5
Deliverynovox/mesh-contracts@b77560786a6a — merged since 2026-11-07T14:19:27Z
Source — source.main moved to novox/mesh-contracts@08580d25d2. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
composed together: fail — the checker's verdict at the members' heads (f7ed14f6b430): integration: meshbuildgo/cmd/mesh-build-go.TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus
Transitions
2026-11-07 02:54 (new) → proposed (announced): novox/mesh-contracts#1's head announced
2026-11-07 02:54 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
2026-11-07 14:19 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-contracts@b77560786a6a` — **merged** since 2026-11-07T14:19:27Z
**Source** — source.main moved to novox/mesh-contracts@08580d25d2dc. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `feat/registry-milestone`: novox/mesh-catalog@67d9ccb1d455, novox/mesh-contracts@b77560786a6a, novox/mesh-delivery@4735fc0b5fdb, novox/mesh-host@cb7a444a5634, novox/mesh-networking@9ee0ffe3c0b6, novox/mesh-sdk@d93254670307, novox/mesh-tools@6c05e4262641
- composed together: fail — the checker's verdict at the members' heads (f7ed14f6b430): integration: meshbuildgo/cmd/mesh-build-go.TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus
**Transitions**
- 2026-11-07 02:54 (new) → proposed (announced): novox/mesh-contracts#1's head announced
- 2026-11-07 02:54 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
- 2026-11-07 14:19 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: not merged. The merge of this pull request into main at ae5266e776 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
mesh-delivery: **not merged.** The merge of this pull request into main at ae5266e776395330e2339a0972da8ce9fd5131a7 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
The store's address is the registry seat holder's listen, so the provision
artifact-store retires; the sweep and the read tools read the store through
list, never by its files or its read side.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
A member's go.mod names the oldest version a module accepts; the check builds the group's own heads whatever it names. go.sum lines of mesh packages are left out.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: not merged. The merge of this pull request into main at b77560786a was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
mesh-delivery: **not merged.** The merge of this pull request into main at b77560786a6a229e1b538d880773e468557105d7 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The registry milestone (issue 1966; ADR 0605-0636 as hq's designs name them), taken in onto its trunks after milestone 47/B0 as milestone 47/G's first step (design 47; issue 1921 notes 54-61).
One delivery group, branch feat/registry-milestone in mesh-sdk, mesh-contracts, mesh-delivery, mesh-host, mesh-tools, mesh-catalog and mesh-networking: one check, one Approve. No member names another's version (ADR 0573); every mesh package is required at the zero version.
This member: no change in this step; the seat packages, each with its lock file.
The registry's reviewed heads (three rounds, 2026-11-04 to 11-06) were never pushed until now; the check of 068b7d23cf1a judged the heads of 2026-11-04. The trunk step was prepared and reviewed in three rounds (2026-11-07): the merge resolutions keep B0's facts and checking-program rules and the registry's generated types; every check composes with the composer at the node-engine member's head, else its trunk; a module the running indexer refuses but the check's own validator accepts is composed and named in the verdict with its build awaited, never passed silently; the checking program answers only new or changed seat definitions when given the reader's digests, and without them (the running B0 checker) only each seat's own description, 171 KB under the 256 KiB bound.
Rules bent, said here: mesh-delivery stays over its test budget (662 unit, 68 integration; was 675 and 68) and mesh-host over unit (1745; was 1746), falling. Out of this step, noted on issue 1921: three asks carry the whole seat list (~430 KB) bounded only by the bus's 1 MiB; the trunk case of the manifest validator is given the heads' seats.
Reviewed-by: mesh-code-reviewer@shanks at
b77560786ahttps://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Each change of an artifact's series the checked head makes is {module, artifact, from, to} under series; the fixture carries one and the regenerated round trip reads it back (seatgen -check clean). Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig5b440ca877, the group's heads (issue 1966) ec9529022c859da7b1ce, the group's heads after review round 2 (issue 1966) 347a305358347a3053, the group's final heads (issue 1966)Delivery
novox/mesh-contracts@b77560786a6a— merged since 2026-11-07T14:19:27ZSource — source.main moved to novox/mesh-contracts@08580d25d2. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
feat/registry-milestone: novox/mesh-catalog@67d9ccb1d4, novox/mesh-contracts@b77560786a, novox/mesh-delivery@4735fc0b5f, novox/mesh-host@cb7a444a56, novox/mesh-networking@9ee0ffe3c0, novox/mesh-sdk@d932546703, novox/mesh-tools@6c05e42626Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: not merged. The merge of this pull request into main at
ae5266e776was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: not merged. The merge of this pull request into main at
b77560786awas declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.