Design 47 milestone R3a (ADR 0437 clauses 1, 5, 6, 8, 9; ADR 0429 §2): mesh-sdk ships, before any of its users, the layouts the forge bridge, the indexer, the gate and the teller of release 3 read and write, and the source fingerprint as one function.
Issue 1200 (go/delivery/source.go): source.main, candidates.<group>, modules.<m> and the forge bridge's messages (stream forge, events forge.<owner>.<name>.<kind>), with the heads hash.
Issue 1201 (go/delivery/gate.go): merges.<g>, the gate's ask merge.<g>.<heads>, the teller's answer under the same key, the owed acts; an ask id the router accepts, distinct per key.
Issue 1202 (go/asks/condition.go): a condition on mesh.seat.operator-channel.accept.condition.<publisher>, in the controller's names, its explanation opened by its verdict (ADR 0253).
Issue 1203 (go/delivery/fingerprint.go): the src1 source fingerprint as a function of named inputs, line for line mesh-controller's builder; proven against three fingerprints the live builder recorded (mailu, radarr, build-agent), read with builds once issues 1204 and 1208 were delivered.
Every value carries its version and is refused at an unknown one. Unit tests only, each citing its acceptance criterion (1200/AC1 to 1203/AC4).
Try: build-1792400676285261714 passed (1m11s).
Delivery: mesh-sdk alone; nothing runs it until R3b and R3c pin it.
Found on the way: issue 1209 (the indexer cannot compute a Go-compiling image's fingerprint from trees alone), for R3c's prepare step.
Design 47 milestone R3a (ADR 0437 clauses 1, 5, 6, 8, 9; ADR 0429 §2): mesh-sdk ships, before any of its users, the layouts the forge bridge, the indexer, the gate and the teller of release 3 read and write, and the source fingerprint as one function.
- Issue 1200 (go/delivery/source.go): `source.main`, `candidates.<group>`, `modules.<m>` and the forge bridge's messages (stream `forge`, events `forge.<owner>.<name>.<kind>`), with the heads hash.
- Issue 1201 (go/delivery/gate.go): `merges.<g>`, the gate's ask `merge.<g>.<heads>`, the teller's answer under the same key, the owed acts; an ask id the router accepts, distinct per key.
- Issue 1202 (go/asks/condition.go): a condition on `mesh.seat.operator-channel.accept.condition.<publisher>`, in the controller's names, its explanation opened by its verdict (ADR 0253).
- Issue 1203 (go/delivery/fingerprint.go): the src1 source fingerprint as a function of named inputs, line for line mesh-controller's builder; proven against three fingerprints the live builder recorded (mailu, radarr, build-agent), read with `builds` once issues 1204 and 1208 were delivered.
Every value carries its version and is refused at an unknown one. Unit tests only, each citing its acceptance criterion (1200/AC1 to 1203/AC4).
Try: build-1792400676285261714 passed (1m11s).
Delivery: mesh-sdk alone; nothing runs it until R3b and R3c pin it.
Found on the way: issue 1209 (the indexer cannot compute a Go-compiling image's fingerprint from trees alone), for R3c's prepare step.
Reviewed-by: reviewer-r3a@shanks at a39661aa36f3894f5054470c18014004dbc465f2
mesh/merge-gate head a39661aa36f3 merged into trunk 34392e74916c — pass, with a note: builds mesh-sdk (+41 dependent(s)) → ace, g14, novox, shanks; no bus …
mesh/repo-check head a39661aa36f3 merged into trunk 34392e74916c — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript)…
g14: receives netcheck, zsh; waits for a person: nftables
novox: receives gitea, mesh-catalog, netcheck, nextcloud, umami, zsh; waits for a person: mailu, minio, mongodb, mssql, nftables
shanks: receives lab, netcheck, zsh; waits for a person: nftables
baserow keeps data (ADR 0233): what it holds is backed up before it moves
bazarr keeps data (ADR 0233): what it holds is backed up before it moves
bookshelf keeps data (ADR 0233): what it holds is backed up before it moves
gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
grafana keeps data (ADR 0233): what it holds is backed up before it moves
home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
icecast keeps data (ADR 0233): what it holds is backed up before it moves
influxdb provides influxdb-api: its consumers are sent again after it
influxdb keeps data (ADR 0233): what it holds is backed up before it moves
jackett provides jackett-api: its consumers are sent again after it
jackett keeps data (ADR 0233): what it holds is backed up before it moves
kometa keeps data (ADR 0233): what it holds is backed up before it moves
lab keeps data (ADR 0233): what it holds is backed up before it moves
lidarr provides lidarr-api: its consumers are sent again after it
lidarr keeps data (ADR 0233): what it holds is backed up before it moves
mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mailu provides smtp: its consumers are sent again after it
mailu keeps data (ADR 0233): what it holds is backed up before it moves
minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
minio provides s3-bucket: its consumers are sent again after it
minio keeps data (ADR 0233): what it holds is backed up before it moves
mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mongodb provides mongodb-database: its consumers are sent again after it
mongodb keeps data (ADR 0233): what it holds is backed up before it moves
mosquitto provides mqtt-topic: its consumers are sent again after it
mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mssql provides mssql-database: its consumers are sent again after it
mssql keeps data (ADR 0233): what it holds is backed up before it moves
nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
nftables waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
nodered keeps data (ADR 0233): what it holds is backed up before it moves
ombi keeps data (ADR 0233): what it holds is backed up before it moves
radarr provides radarr-api: its consumers are sent again after it
radarr keeps data (ADR 0233): what it holds is backed up before it moves
redis provides redis-cache: its consumers are sent again after it
redis keeps data (ADR 0233): what it holds is backed up before it moves
searxng keeps data (ADR 0233): what it holds is backed up before it moves
sonarr provides sonarr-api: its consumers are sent again after it
sonarr keeps data (ADR 0233): what it holds is backed up before it moves
tautulli keeps data (ADR 0233): what it holds is backed up before it moves
umami provides analytics: its consumers are sent again after it
umami keeps data (ADR 0233): what it holds is backed up before it moves
unifi keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before baserow, bazarr, bookshelf, grafana, home-assistant, icecast, influxdb, jackett, kometa, lab, letta, lidarr, mosquitto, netcheck, nodered, ombi, radarr, redis, searxng, sonarr, tautulli, unifi, zsh is judged on its first machine
Machines
mesh-sdk on every machine running it: sent
mesh-tools on every machine running it: sent
audit-logger on every machine running it: sent
confluence on every machine running it: sent
gitlab on every machine running it: sent
jira on every machine running it: sent
mesh-catalog on every machine running it: sent
model-usage on every machine running it: sent
openai-consumer on every machine running it: sent
route-adapter on every machine running it: sent
showcase on every machine running it: sent
Transitions
2026-10-19 09:06 (new) → proposed (announced): novox/mesh-sdk#37's head announced
2026-10-19 09:09 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-19 09:09 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-19 09:10 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-19 09:10 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-19 09:28 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-sdk@a39661aa36f3` — **delivered** since 2026-10-19T09:28:46Z
**Delivery plan** — builds mesh-sdk (+41 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
- tier 0: mesh-sdk
- tier 1: mesh-tools
- tier 2: audit-logger, baserow, bazarr, bookshelf, confluence, gitea, gitlab, grafana, home-assistant, icecast, influxdb, jackett, jira, kometa, lab, letta, lidarr, mailu, mesh-catalog, minio, model-usage, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, showcase, sonarr, tautulli, umami, unifi, zsh
- ace: receives baserow, bazarr, bookshelf, grafana, home-assistant, icecast, influxdb, jackett, kometa, letta, lidarr, mosquitto, netcheck, nodered, ombi, radarr, redis, searxng, sonarr, tautulli, unifi, zsh; waits for a person: mssql, nftables
- g14: receives netcheck, zsh; waits for a person: nftables
- novox: receives gitea, mesh-catalog, netcheck, nextcloud, umami, zsh; waits for a person: mailu, minio, mongodb, mssql, nftables
- shanks: receives lab, netcheck, zsh; waits for a person: nftables
- baserow keeps data (ADR 0233): what it holds is backed up before it moves
- bazarr keeps data (ADR 0233): what it holds is backed up before it moves
- bookshelf keeps data (ADR 0233): what it holds is backed up before it moves
- gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
- grafana keeps data (ADR 0233): what it holds is backed up before it moves
- home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
- icecast keeps data (ADR 0233): what it holds is backed up before it moves
- influxdb provides influxdb-api: its consumers are sent again after it
- influxdb keeps data (ADR 0233): what it holds is backed up before it moves
- jackett provides jackett-api: its consumers are sent again after it
- jackett keeps data (ADR 0233): what it holds is backed up before it moves
- kometa keeps data (ADR 0233): what it holds is backed up before it moves
- lab keeps data (ADR 0233): what it holds is backed up before it moves
- lidarr provides lidarr-api: its consumers are sent again after it
- lidarr keeps data (ADR 0233): what it holds is backed up before it moves
- mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mailu provides smtp: its consumers are sent again after it
- mailu keeps data (ADR 0233): what it holds is backed up before it moves
- minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- minio provides s3-bucket: its consumers are sent again after it
- minio keeps data (ADR 0233): what it holds is backed up before it moves
- mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mongodb provides mongodb-database: its consumers are sent again after it
- mongodb keeps data (ADR 0233): what it holds is backed up before it moves
- mosquitto provides mqtt-topic: its consumers are sent again after it
- mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
- mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mssql provides mssql-database: its consumers are sent again after it
- mssql keeps data (ADR 0233): what it holds is backed up before it moves
- nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
- nftables waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- nodered keeps data (ADR 0233): what it holds is backed up before it moves
- ombi keeps data (ADR 0233): what it holds is backed up before it moves
- radarr provides radarr-api: its consumers are sent again after it
- radarr keeps data (ADR 0233): what it holds is backed up before it moves
- redis provides redis-cache: its consumers are sent again after it
- redis keeps data (ADR 0233): what it holds is backed up before it moves
- searxng keeps data (ADR 0233): what it holds is backed up before it moves
- sonarr provides sonarr-api: its consumers are sent again after it
- sonarr keeps data (ADR 0233): what it holds is backed up before it moves
- tautulli keeps data (ADR 0233): what it holds is backed up before it moves
- umami provides analytics: its consumers are sent again after it
- umami keeps data (ADR 0233): what it holds is backed up before it moves
- unifi keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before baserow, bazarr, bookshelf, grafana, home-assistant, icecast, influxdb, jackett, kometa, lab, letta, lidarr, mosquitto, netcheck, nodered, ombi, radarr, redis, searxng, sonarr, tautulli, unifi, zsh is judged on its first machine
**Machines**
- mesh-sdk on every machine running it: sent
- mesh-tools on every machine running it: sent
- audit-logger on every machine running it: sent
- confluence on every machine running it: sent
- gitlab on every machine running it: sent
- jira on every machine running it: sent
- mesh-catalog on every machine running it: sent
- model-usage on every machine running it: sent
- openai-consumer on every machine running it: sent
- route-adapter on every machine running it: sent
- showcase on every machine running it: sent
**Transitions**
- 2026-10-19 09:06 (new) → proposed (announced): novox/mesh-sdk#37's head announced
- 2026-10-19 09:09 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-19 09:09 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-19 09:10 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-19 09:10 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-19 09:28 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
g14: receives netcheck, zsh; waits for a person: nftables
novox: receives gitea, mesh-catalog, netcheck, nextcloud, umami, zsh; waits for a person: mailu, minio, mongodb, mssql, nftables
shanks: receives lab, netcheck, zsh; waits for a person: nftables
baserow keeps data (ADR 0233): what it holds is backed up before it moves
bazarr keeps data (ADR 0233): what it holds is backed up before it moves
bookshelf keeps data (ADR 0233): what it holds is backed up before it moves
gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
grafana keeps data (ADR 0233): what it holds is backed up before it moves
home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
icecast keeps data (ADR 0233): what it holds is backed up before it moves
influxdb provides influxdb-api: its consumers are sent again after it
influxdb keeps data (ADR 0233): what it holds is backed up before it moves
jackett provides jackett-api: its consumers are sent again after it
jackett keeps data (ADR 0233): what it holds is backed up before it moves
kometa keeps data (ADR 0233): what it holds is backed up before it moves
lab keeps data (ADR 0233): what it holds is backed up before it moves
lidarr provides lidarr-api: its consumers are sent again after it
lidarr keeps data (ADR 0233): what it holds is backed up before it moves
mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mailu provides smtp: its consumers are sent again after it
mailu keeps data (ADR 0233): what it holds is backed up before it moves
minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
minio provides s3-bucket: its consumers are sent again after it
minio keeps data (ADR 0233): what it holds is backed up before it moves
mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mongodb provides mongodb-database: its consumers are sent again after it
mongodb keeps data (ADR 0233): what it holds is backed up before it moves
mosquitto provides mqtt-topic: its consumers are sent again after it
mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mssql provides mssql-database: its consumers are sent again after it
mssql keeps data (ADR 0233): what it holds is backed up before it moves
nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
nftables waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
nodered keeps data (ADR 0233): what it holds is backed up before it moves
ombi keeps data (ADR 0233): what it holds is backed up before it moves
radarr provides radarr-api: its consumers are sent again after it
radarr keeps data (ADR 0233): what it holds is backed up before it moves
redis provides redis-cache: its consumers are sent again after it
redis keeps data (ADR 0233): what it holds is backed up before it moves
searxng keeps data (ADR 0233): what it holds is backed up before it moves
sonarr provides sonarr-api: its consumers are sent again after it
sonarr keeps data (ADR 0233): what it holds is backed up before it moves
tautulli keeps data (ADR 0233): what it holds is backed up before it moves
umami provides analytics: its consumers are sent again after it
umami keeps data (ADR 0233): what it holds is backed up before it moves
unifi keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before baserow, bazarr, bookshelf, grafana, home-assistant, icecast, influxdb, jackett, kometa, lab, letta, lidarr, mosquitto, netcheck, nodered, ombi, radarr, redis, searxng, sonarr, tautulli, unifi, zsh is judged on its first machine
Run by the build seat on ace as build-1792400780402495819 (builds --log build-1792400780402495819).
duration_ms: 0.259739
type: 'test'
...
# Subtest: events: a module emits, a listener and the audit sink (\#) both receive it, with metadata
ok 29 - events: a module emits, a listener and the audit sink (\#) both receive it, with metadata
---
duration_ms: 0.373723
type: 'test'
...
# Subtest: each registration is given the environment asked for it, and sees no other's (ADR 0192)
ok 30 - each registration is given the environment asked for it, and sees no other's (ADR 0192)
---
duration_ms: 0.190328
type: 'test'
...
# Subtest: the provider loop is named for what it is, and its old name stays an alias until its providers move (issue 678)
ok 31 - the provider loop is named for what it is, and its old name stays an alias until its providers move (issue 678)
---
duration_ms: 5.909973
type: 'test'
...
# Subtest: seal: every box the licence manager sealed opens to its plaintext
ok 32 - seal: every box the licence manager sealed opens to its plaintext
---
duration_ms: 6.448045
type: 'test'
...
# Subtest: seal: given the same one-time key and iv, the box is byte for byte the licence manager's
ok 33 - seal: given the same one-time key and iv, the box is byte for byte the licence manager's
---
duration_ms: 4.74432
type: 'test'
...
# Subtest: seal: the agent module's TypeScript box opens
ok 34 - seal: the agent module's TypeScript box opens
---
duration_ms: 0.415401
type: 'test'
...
# Subtest: seal: a box opens for its recipient only, and two boxes share no one-time key or iv
ok 35 - seal: a box opens for its recipient only, and two boxes share no one-time key or iv
---
duration_ms: 1.966968
type: 'test'
...
# Subtest: seal: a box changed in any field, or of another version, does not open
ok 36 - seal: a box changed in any field, or of another version, does not open
---
duration_ms: 0.933765
type: 'test'
...
# Subtest: seal: a key that is not X25519 PEM is refused
ok 37 - seal: a key that is not X25519 PEM is refused
---
duration_ms: 0.315012
type: 'test'
...
# Subtest: a consumer failed for minutes is announced, naming it, its machine and the class, again while it lasts, and recovered
ok 38 - a consumer failed for minutes is announced, naming it, its machine and the class, again while it lasts, and recovered
---
duration_ms: 583.276786
type: 'test'
...
# Subtest: one success between failures starts the run again
ok 39 - one success between failures starts the run again
---
duration_ms: 186.941849
type: 'test'
...
# Subtest: a check that keeps failing is a failure too
ok 40 - a check that keeps failing is a failure too
---
duration_ms: 191.072518
type: 'test'
...
# Subtest: an unreadable secret is announced as such
ok 41 - an unreadable secret is announced as such
---
duration_ms: 166.58321
type: 'test'
...
# Subtest: a consumer no longer asked for is no longer failing
ok 42 - a consumer no longer asked for is no longer failing
---
duration_ms: 180.834278
type: 'test'
...
# Subtest: a failing consumer the mesh stopped asking for is said recovered when it is retired
ok 43 - a failing consumer the mesh stopped asking for is said recovered when it is retired
---
duration_ms: 238.733593
type: 'test'
...
# Subtest: an error is classed by its words
ok 44 - an error is classed by its words
---
duration_ms: 0.248827
type: 'test'
...
# Subtest: an adapter that classes its own errors is believed
ok 45 - an adapter that classes its own errors is believed
---
duration_ms: 171.739757
type: 'test'
...
# Subtest: the first success since start is announced once
ok 46 - the first success since start is announced once
---
duration_ms: 111.842613
type: 'test'
...
# Subtest: without announce the standing is said through the SDK's emit
ok 47 - without announce the standing is said through the SDK's emit
---
duration_ms: 168.437206
type: 'test'
...
# Subtest: a bundle on stdio lists its tools and answers a call, a seat's verb among them
ok 48 - a bundle on stdio lists its tools and answers a call, a seat's verb among them
---
duration_ms: 128.642342
type: 'test'
...
# Subtest: a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193)
ok 49 - a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193)
---
duration_ms: 82.338309
type: 'test'
...
# Subtest: a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193)
ok 50 - a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193)
---
duration_ms: 82.559754
type: 'test'
...
# Subtest: a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198)
ok 51 - a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198)
---
duration_ms: 3204.182912
type: 'test'
...
# Subtest: a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276)
ok 52 - a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276)
---
duration_ms: 82.327769
type: 'test'
...
# Subtest: a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201)
ok 53 - a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201)
---
duration_ms: 284.687561
type: 'test'
...
# Subtest: topics match as the runtime's do: * one segment, \# and ** any number
ok 54 - topics match as the runtime's do: * one segment, \# and ** any number
---
duration_ms: 2.719123
type: 'test'
...
1..54
# tests 54
# suites 0
# pass 54
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3962.715727
NOT TESTED HERE: go/ (the Go binding) — the Go toolchain runs it from go/merge-check.sh
NOT TESTED HERE: python/, rust/, c/ — no toolchain of theirs runs a merge check
--- its go/merge-check.sh (go toolchain)
NOT RACE-CHECKED: the Go binding's check runs without the race detector
unit level: 181 tests (0 skipped), 1.03 s (bound 2 s)
state_counter_test.go:193: 2000 increments, 1023 writes lost to the other writer and tried again
PASS
ok git.novox.be/novox/mesh-sdk/go 0.153s
PASS
ok git.novox.be/novox/mesh-sdk/go/asker 0.002s
PASS
ok git.novox.be/novox/mesh-sdk/go/asks 0.003s
PASS
ok git.novox.be/novox/mesh-sdk/go/cli 1.036s
PASS
ok git.novox.be/novox/mesh-sdk/go/delivery 0.004s
? git.novox.be/novox/mesh-sdk/go/example [no test files]
PASS
ok git.novox.be/novox/mesh-sdk/go/health 0.003s
PASS
ok git.novox.be/novox/mesh-sdk/go/internal/testbus 0.139s
PASS
ok git.novox.be/novox/mesh-sdk/go/outward 0.050s
PASS
ok git.novox.be/novox/mesh-sdk/go/process 6.463s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider 0.116s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider/harness 0.112s
PASS
ok git.novox.be/novox/mesh-sdk/go/seal 0.005s
integration level: 197 tests (0 skipped), 7 s
**Merge check** at `a39661aa`
Judged: head `a39661aa36f3` merged into trunk `34392e74916c`; read beside it: mesh-catalog `b4527d9091e9`, mesh-controller `59c8cf2f2406`, mesh-controller-main `59c8cf2f2406`, mesh-host `2474bf28330f`, mesh-tools `7412c5b6c9c5`
- `mesh/merge-gate`: **PASS, WITH A NOTE** — a merge rebuilds 42 module(s) in 3 tier(s) (modules: mesh-sdk; built after them: audit-logger, baserow, bazarr, bookshelf, confluence, gitea, gitlab, grafana, home-assistant, icecast, influxdb, jackett, jira, kometa, lab, letta, lidarr, mailu, mesh-catalog, mesh-tools, minio, model-usage, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, showcase, sonarr, tautulli, umami, unifi, zsh)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), go/merge-check.sh (go)
**Delivery plan** — builds mesh-sdk (+41 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
- tier 0: mesh-sdk
- tier 1: mesh-tools
- tier 2: audit-logger, baserow, bazarr, bookshelf, confluence, gitea, gitlab, grafana, home-assistant, icecast, influxdb, jackett, jira, kometa, lab, letta, lidarr, mailu, mesh-catalog, minio, model-usage, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, showcase, sonarr, tautulli, umami, unifi, zsh
- ace: receives baserow, bazarr, bookshelf, grafana, home-assistant, icecast, influxdb, jackett, kometa, letta, lidarr, mosquitto, netcheck, nodered, ombi, radarr, redis, searxng, sonarr, tautulli, unifi, zsh; waits for a person: mssql, nftables
- g14: receives netcheck, zsh; waits for a person: nftables
- novox: receives gitea, mesh-catalog, netcheck, nextcloud, umami, zsh; waits for a person: mailu, minio, mongodb, mssql, nftables
- shanks: receives lab, netcheck, zsh; waits for a person: nftables
- baserow keeps data (ADR 0233): what it holds is backed up before it moves
- bazarr keeps data (ADR 0233): what it holds is backed up before it moves
- bookshelf keeps data (ADR 0233): what it holds is backed up before it moves
- gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
- grafana keeps data (ADR 0233): what it holds is backed up before it moves
- home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
- icecast keeps data (ADR 0233): what it holds is backed up before it moves
- influxdb provides influxdb-api: its consumers are sent again after it
- influxdb keeps data (ADR 0233): what it holds is backed up before it moves
- jackett provides jackett-api: its consumers are sent again after it
- jackett keeps data (ADR 0233): what it holds is backed up before it moves
- kometa keeps data (ADR 0233): what it holds is backed up before it moves
- lab keeps data (ADR 0233): what it holds is backed up before it moves
- lidarr provides lidarr-api: its consumers are sent again after it
- lidarr keeps data (ADR 0233): what it holds is backed up before it moves
- mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mailu provides smtp: its consumers are sent again after it
- mailu keeps data (ADR 0233): what it holds is backed up before it moves
- minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- minio provides s3-bucket: its consumers are sent again after it
- minio keeps data (ADR 0233): what it holds is backed up before it moves
- mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mongodb provides mongodb-database: its consumers are sent again after it
- mongodb keeps data (ADR 0233): what it holds is backed up before it moves
- mosquitto provides mqtt-topic: its consumers are sent again after it
- mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
- mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mssql provides mssql-database: its consumers are sent again after it
- mssql keeps data (ADR 0233): what it holds is backed up before it moves
- nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
- nftables waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- nodered keeps data (ADR 0233): what it holds is backed up before it moves
- ombi keeps data (ADR 0233): what it holds is backed up before it moves
- radarr provides radarr-api: its consumers are sent again after it
- radarr keeps data (ADR 0233): what it holds is backed up before it moves
- redis provides redis-cache: its consumers are sent again after it
- redis keeps data (ADR 0233): what it holds is backed up before it moves
- searxng keeps data (ADR 0233): what it holds is backed up before it moves
- sonarr provides sonarr-api: its consumers are sent again after it
- sonarr keeps data (ADR 0233): what it holds is backed up before it moves
- tautulli keeps data (ADR 0233): what it holds is backed up before it moves
- umami provides analytics: its consumers are sent again after it
- umami keeps data (ADR 0233): what it holds is backed up before it moves
- unifi keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before baserow, bazarr, bookshelf, grafana, home-assistant, icecast, influxdb, jackett, kometa, lab, letta, lidarr, mosquitto, netcheck, nodered, ombi, radarr, redis, searxng, sonarr, tautulli, unifi, zsh is judged on its first machine
Run by the build seat on ace as `build-1792400780402495819` (`builds --log build-1792400780402495819`).
```
duration_ms: 0.259739
type: 'test'
...
# Subtest: events: a module emits, a listener and the audit sink (\#) both receive it, with metadata
ok 29 - events: a module emits, a listener and the audit sink (\#) both receive it, with metadata
---
duration_ms: 0.373723
type: 'test'
...
# Subtest: each registration is given the environment asked for it, and sees no other's (ADR 0192)
ok 30 - each registration is given the environment asked for it, and sees no other's (ADR 0192)
---
duration_ms: 0.190328
type: 'test'
...
# Subtest: the provider loop is named for what it is, and its old name stays an alias until its providers move (issue 678)
ok 31 - the provider loop is named for what it is, and its old name stays an alias until its providers move (issue 678)
---
duration_ms: 5.909973
type: 'test'
...
# Subtest: seal: every box the licence manager sealed opens to its plaintext
ok 32 - seal: every box the licence manager sealed opens to its plaintext
---
duration_ms: 6.448045
type: 'test'
...
# Subtest: seal: given the same one-time key and iv, the box is byte for byte the licence manager's
ok 33 - seal: given the same one-time key and iv, the box is byte for byte the licence manager's
---
duration_ms: 4.74432
type: 'test'
...
# Subtest: seal: the agent module's TypeScript box opens
ok 34 - seal: the agent module's TypeScript box opens
---
duration_ms: 0.415401
type: 'test'
...
# Subtest: seal: a box opens for its recipient only, and two boxes share no one-time key or iv
ok 35 - seal: a box opens for its recipient only, and two boxes share no one-time key or iv
---
duration_ms: 1.966968
type: 'test'
...
# Subtest: seal: a box changed in any field, or of another version, does not open
ok 36 - seal: a box changed in any field, or of another version, does not open
---
duration_ms: 0.933765
type: 'test'
...
# Subtest: seal: a key that is not X25519 PEM is refused
ok 37 - seal: a key that is not X25519 PEM is refused
---
duration_ms: 0.315012
type: 'test'
...
# Subtest: a consumer failed for minutes is announced, naming it, its machine and the class, again while it lasts, and recovered
ok 38 - a consumer failed for minutes is announced, naming it, its machine and the class, again while it lasts, and recovered
---
duration_ms: 583.276786
type: 'test'
...
# Subtest: one success between failures starts the run again
ok 39 - one success between failures starts the run again
---
duration_ms: 186.941849
type: 'test'
...
# Subtest: a check that keeps failing is a failure too
ok 40 - a check that keeps failing is a failure too
---
duration_ms: 191.072518
type: 'test'
...
# Subtest: an unreadable secret is announced as such
ok 41 - an unreadable secret is announced as such
---
duration_ms: 166.58321
type: 'test'
...
# Subtest: a consumer no longer asked for is no longer failing
ok 42 - a consumer no longer asked for is no longer failing
---
duration_ms: 180.834278
type: 'test'
...
# Subtest: a failing consumer the mesh stopped asking for is said recovered when it is retired
ok 43 - a failing consumer the mesh stopped asking for is said recovered when it is retired
---
duration_ms: 238.733593
type: 'test'
...
# Subtest: an error is classed by its words
ok 44 - an error is classed by its words
---
duration_ms: 0.248827
type: 'test'
...
# Subtest: an adapter that classes its own errors is believed
ok 45 - an adapter that classes its own errors is believed
---
duration_ms: 171.739757
type: 'test'
...
# Subtest: the first success since start is announced once
ok 46 - the first success since start is announced once
---
duration_ms: 111.842613
type: 'test'
...
# Subtest: without announce the standing is said through the SDK's emit
ok 47 - without announce the standing is said through the SDK's emit
---
duration_ms: 168.437206
type: 'test'
...
# Subtest: a bundle on stdio lists its tools and answers a call, a seat's verb among them
ok 48 - a bundle on stdio lists its tools and answers a call, a seat's verb among them
---
duration_ms: 128.642342
type: 'test'
...
# Subtest: a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193)
ok 49 - a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193)
---
duration_ms: 82.338309
type: 'test'
...
# Subtest: a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193)
ok 50 - a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193)
---
duration_ms: 82.559754
type: 'test'
...
# Subtest: a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198)
ok 51 - a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198)
---
duration_ms: 3204.182912
type: 'test'
...
# Subtest: a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276)
ok 52 - a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276)
---
duration_ms: 82.327769
type: 'test'
...
# Subtest: a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201)
ok 53 - a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201)
---
duration_ms: 284.687561
type: 'test'
...
# Subtest: topics match as the runtime's do: * one segment, \# and ** any number
ok 54 - topics match as the runtime's do: * one segment, \# and ** any number
---
duration_ms: 2.719123
type: 'test'
...
1..54
# tests 54
# suites 0
# pass 54
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3962.715727
NOT TESTED HERE: go/ (the Go binding) — the Go toolchain runs it from go/merge-check.sh
NOT TESTED HERE: python/, rust/, c/ — no toolchain of theirs runs a merge check
--- its go/merge-check.sh (go toolchain)
NOT RACE-CHECKED: the Go binding's check runs without the race detector
unit level: 181 tests (0 skipped), 1.03 s (bound 2 s)
state_counter_test.go:193: 2000 increments, 1023 writes lost to the other writer and tried again
PASS
ok git.novox.be/novox/mesh-sdk/go 0.153s
PASS
ok git.novox.be/novox/mesh-sdk/go/asker 0.002s
PASS
ok git.novox.be/novox/mesh-sdk/go/asks 0.003s
PASS
ok git.novox.be/novox/mesh-sdk/go/cli 1.036s
PASS
ok git.novox.be/novox/mesh-sdk/go/delivery 0.004s
? git.novox.be/novox/mesh-sdk/go/example [no test files]
PASS
ok git.novox.be/novox/mesh-sdk/go/health 0.003s
PASS
ok git.novox.be/novox/mesh-sdk/go/internal/testbus 0.139s
PASS
ok git.novox.be/novox/mesh-sdk/go/outward 0.050s
PASS
ok git.novox.be/novox/mesh-sdk/go/process 6.463s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider 0.116s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider/harness 0.112s
PASS
ok git.novox.be/novox/mesh-sdk/go/seal 0.005s
integration level: 197 tests (0 skipped), 7 s
```
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.
Design 47 milestone R3a (ADR 0437 clauses 1, 5, 6, 8, 9; ADR 0429 §2): mesh-sdk ships, before any of its users, the layouts the forge bridge, the indexer, the gate and the teller of release 3 read and write, and the source fingerprint as one function.
source.main,candidates.<group>,modules.<m>and the forge bridge's messages (streamforge, eventsforge.<owner>.<name>.<kind>), with the heads hash.merges.<g>, the gate's askmerge.<g>.<heads>, the teller's answer under the same key, the owed acts; an ask id the router accepts, distinct per key.mesh.seat.operator-channel.accept.condition.<publisher>, in the controller's names, its explanation opened by its verdict (ADR 0253).buildsonce issues 1204 and 1208 were delivered.Every value carries its version and is refused at an unknown one. Unit tests only, each citing its acceptance criterion (1200/AC1 to 1203/AC4).
Try: build-1792400676285261714 passed (1m11s).
Delivery: mesh-sdk alone; nothing runs it until R3b and R3c pin it.
Found on the way: issue 1209 (the indexer cannot compute a Go-compiling image's fingerprint from trees alone), for R3c's prepare step.
Reviewed-by: reviewer-r3a@shanks at
a39661aa36Delivery
novox/mesh-sdk@a39661aa36f3— delivered since 2026-10-19T09:28:46ZDelivery plan — builds mesh-sdk (+41 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
a39661aaJudged: head
a39661aa36f3merged into trunk34392e74916c; read beside it: mesh-catalogb4527d9091e9, mesh-controller59c8cf2f2406, mesh-controller-main59c8cf2f2406, mesh-host2474bf28330f, mesh-tools7412c5b6c9c5mesh/merge-gate: PASS, WITH A NOTE — a merge rebuilds 42 module(s) in 3 tier(s) (modules: mesh-sdk; built after them: audit-logger, baserow, bazarr, bookshelf, confluence, gitea, gitlab, grafana, home-assistant, icecast, influxdb, jackett, jira, kometa, lab, letta, lidarr, mailu, mesh-catalog, mesh-tools, minio, model-usage, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, showcase, sonarr, tautulli, umami, unifi, zsh)mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), go/merge-check.sh (go)Delivery plan — builds mesh-sdk (+41 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
Run by the build seat on ace as
build-1792400780402495819(builds --log build-1792400780402495819).