mesh-sdk takes the catalogue, the validator and a store-free composition, the fingerprint's new form and the delivery parts' key layouts (design 47 R4a, issues 1353-1364, 1298)
#48
Merged
mesh-toolsmerged 41 commits from feat/r4a-sdk-first into main2026-10-20 07:15:54 +00:00
1353: go/declaration and go/validate, copied (copy_from) from mesh-host 619e14aa; mesh-sdk imports no mesh-host.
1354: go/catalogue, copied from mesh-controller 6c2a8d62 (non-test code and 149 test files; 33 test files that read the controller's own files stay there for R4b, issue 1375); KnownCapabilities gains user-namespaces.
1355: go/sdkversion, the SDK's version from the build info.
1356: the fingerprint's new form (src2:) beside src1, with toolchain and locks; a hex key part.
1357: manifests. layout and the indexer's new-form fingerprint fields on Module and Candidate (still version 1).
1358, 1359: the builder's builds.. layout; the checker's verdicts and kept verdicts.
1360-1364, 1298: go/overlay (copied) and go/compose: a whole node composed over a plain Input with no store, no bus and no environment; what a send would allocate or make is returned as foreseen. The bus user list is carried in from the controller (issue 1377).
Review: three rounds by review-r4a@shanks (copies verified against their sources; compose compared with the controller's planFor/generators/grantsFor/rendering; round-1 findings 1-6 and round-2 findings 1-2 fixed). Minor opened: 1377, 1378.
Try build-1792480025471963447 passed: unit 1262 tests 1.05 s of 2 s; integration 1280 tests 7 s; TypeScript 54/54.
Design 47 release R4a (ADR 0453 clauses 1-3; ADR 0446 §4; ADR 0429 §5, §16; ADR 0405 §7; ADR 0444; ADR 0447). Delivery group feat/r4a-sdk-first with mesh-host (issue 1308).
- 1353: go/declaration and go/validate, copied (copy_from) from mesh-host 619e14aa; mesh-sdk imports no mesh-host.
- 1354: go/catalogue, copied from mesh-controller 6c2a8d62 (non-test code and 149 test files; 33 test files that read the controller's own files stay there for R4b, issue 1375); KnownCapabilities gains user-namespaces.
- 1355: go/sdkversion, the SDK's version from the build info.
- 1356: the fingerprint's new form (src2:) beside src1, with toolchain and locks; a hex key part.
- 1357: manifests.<digest> layout and the indexer's new-form fingerprint fields on Module and Candidate (still version 1).
- 1358, 1359: the builder's builds.<module>.<fp> layout; the checker's verdicts and kept verdicts.
- 1360-1364, 1298: go/overlay (copied) and go/compose: a whole node composed over a plain Input with no store, no bus and no environment; what a send would allocate or make is returned as foreseen. The bus user list is carried in from the controller (issue 1377).
Review: three rounds by review-r4a@shanks (copies verified against their sources; compose compared with the controller's planFor/generators/grantsFor/rendering; round-1 findings 1-6 and round-2 findings 1-2 fixed). Minor opened: 1377, 1378.
Try build-1792480025471963447 passed: unit 1262 tests 1.05 s of 2 s; integration 1280 tests 7 s; TypeScript 54/54.
Reviewed-by: review-r4a@shanks at 075bf1e1fe8f6ebdfdfb97c3edd1509e4825fa99
mesh/repo-check head 075bf1e1fe8f merged into trunk 88581d0acaef — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript)…
mesh/merge-gate head 075bf1e1fe8f merged into trunk 88581d0acaef — pass: group feat/r4a-sdk-first composed: every machine composes with the change as it di…
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
composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
Machines
mesh-host on every machine running it: sent
mesh-sdk on every machine running it: sent
mesh-tools on every machine running it: sent
audit-logger on every machine running it: sent
baserow on every machine running it: sent
bazarr on every machine running it: sent
bookshelf on every machine running it: sent
confluence on every machine running it: sent
gitea on every machine running it: sent
gitlab on every machine running it: sent
grafana on every machine running it: sent
home-assistant on every machine running it: sent
icecast on every machine running it: sent
influxdb on every machine running it: sent
jackett on every machine running it: sent
jira on every machine running it: sent
kometa on every machine running it: sent
lab on every machine running it: sent
letta on every machine running it: sent
lidarr on every machine running it: sent
mesh-catalog on every machine running it: sent
model-usage on every machine running it: sent
mosquitto on every machine running it: sent
netcheck on every machine running it: sent
nextcloud on every machine running it: sent
nodered on every machine running it: sent
ombi on every machine running it: sent
openai-consumer on every machine running it: sent
radarr on every machine running it: sent
redis on every machine running it: sent
route-adapter on every machine running it: sent
searxng on every machine running it: sent
showcase on every machine running it: sent
sonarr on every machine running it: sent
tautulli on every machine running it: sent
umami on every machine running it: sent
unifi on every machine running it: sent
zsh on every machine running it: sent
Transitions
2026-10-20 07:08 (new) → proposed (announced): novox/mesh-sdk#48's head announced
2026-10-20 07:12 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-20 07:12 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-20 07:17 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-20 07:17 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-20 07:45 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@075bf1e1fe8f` — **delivered** since 2026-10-20T07:45:58Z
**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
**Group** `feat/r4a-sdk-first`: novox/mesh-host@64dfa90c3a6c, novox/mesh-sdk@075bf1e1fe8f
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Machines**
- mesh-host on every machine running it: sent
- mesh-sdk on every machine running it: sent
- mesh-tools on every machine running it: sent
- audit-logger on every machine running it: sent
- baserow on every machine running it: sent
- bazarr on every machine running it: sent
- bookshelf on every machine running it: sent
- confluence on every machine running it: sent
- gitea on every machine running it: sent
- gitlab on every machine running it: sent
- grafana on every machine running it: sent
- home-assistant on every machine running it: sent
- icecast on every machine running it: sent
- influxdb on every machine running it: sent
- jackett on every machine running it: sent
- jira on every machine running it: sent
- kometa on every machine running it: sent
- lab on every machine running it: sent
- letta on every machine running it: sent
- lidarr on every machine running it: sent
- mesh-catalog on every machine running it: sent
- model-usage on every machine running it: sent
- mosquitto on every machine running it: sent
- netcheck on every machine running it: sent
- nextcloud on every machine running it: sent
- nodered on every machine running it: sent
- ombi on every machine running it: sent
- openai-consumer on every machine running it: sent
- radarr on every machine running it: sent
- redis on every machine running it: sent
- route-adapter on every machine running it: sent
- searxng on every machine running it: sent
- showcase on every machine running it: sent
- sonarr on every machine running it: sent
- tautulli on every machine running it: sent
- umami on every machine running it: sent
- unifi on every machine running it: sent
- zsh on every machine running it: sent
**Transitions**
- 2026-10-20 07:08 (new) → proposed (announced): novox/mesh-sdk#48's head announced
- 2026-10-20 07:12 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-20 07:12 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-20 07:17 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-20 07:17 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-20 07:45 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 shanks as build-1792480123176514994 (builds --log build-1792480123176514994).
ok 32 - seal: every box the licence manager sealed opens to its plaintext
---
duration_ms: 4.615415
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: 3.738202
type: 'test'
...
# Subtest: seal: the agent module's TypeScript box opens
ok 34 - seal: the agent module's TypeScript box opens
---
duration_ms: 0.494737
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.857796
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: 1.018134
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.299144
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: 587.256749
type: 'test'
...
# Subtest: one success between failures starts the run again
ok 39 - one success between failures starts the run again
---
duration_ms: 187.149097
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.171983
type: 'test'
...
# Subtest: an unreadable secret is announced as such
ok 41 - an unreadable secret is announced as such
---
duration_ms: 170.472184
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: 186.265475
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: 236.122078
type: 'test'
...
# Subtest: an error is classed by its words
ok 44 - an error is classed by its words
---
duration_ms: 0.201413
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: 172.790617
type: 'test'
...
# Subtest: the first success since start is announced once
ok 46 - the first success since start is announced once
---
duration_ms: 117.329974
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: 171.331825
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.027133
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: 83.079397
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: 84.134622
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: 3200.474153
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: 83.030187
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.147637
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.468594
type: 'test'
...
1..54
# tests 54
# suites 0
# pass 54
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3974.235469
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: 1262 tests (3 skipped), 1.05 s (bound 2 s)
state_counter_test.go:193: 2000 increments, 1156 writes lost to the other writer and tried again
PASS
ok git.novox.be/novox/mesh-sdk/go 0.264s
PASS
ok git.novox.be/novox/mesh-sdk/go/asker 0.003s
PASS
ok git.novox.be/novox/mesh-sdk/go/asks 0.003s
environment_into_integration_test.go:47: NOT JUDGED: no environment.d generator on this machine, so the service manager's reading of the rendering is judged only where systemd runs; the rendering itself is held byte for byte by TestTheEnvironmentRendersForTheServiceManagerByteForByte
--- SKIP: TestTheServiceManagerReadsTheSystemdRenderingAsMeant (0.00s)
placed_paths_test.go:25: set MESH_CATALOGUE_BEFORE and MESH_CATALOGUE to two catalogue checkouts to run this
--- SKIP: TestPlacedDirectoriesKeepTheirPaths (0.00s)
print_rehearsal_test.go:10: set PRINT_RULESET
--- SKIP: TestPrintRehearsalRuleset (0.00s)
setting_in_unit_test.go:65: zfs.distribution-weekly: zfs-scrub-weekly@storage.timer
setting_in_unit_test.go:65: zfs.distribution-monthly: zfs-scrub-monthly@storage.timer
PASS
ok git.novox.be/novox/mesh-sdk/go/catalogue 0.215s
PASS
ok git.novox.be/novox/mesh-sdk/go/cli 1.043s
PASS
ok git.novox.be/novox/mesh-sdk/go/compose 0.170s
emitted_check_test.go:17: set MESH_EMITTED to a declaration the control plane produced
--- SKIP: TestWhatTheControlPlaneEmittedIsSomethingThisHostAccepts (0.00s)
PASS
ok git.novox.be/novox/mesh-sdk/go/declaration 0.013s
PASS
ok git.novox.be/novox/mesh-sdk/go/delivery 0.009s
? 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.142s
PASS
ok git.novox.be/novox/mesh-sdk/go/outward 0.070s
PASS
ok git.novox.be/novox/mesh-sdk/go/overlay 0.006s
PASS
ok git.novox.be/novox/mesh-sdk/go/process 6.472s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider 0.119s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider/harness 0.136s
PASS
ok git.novox.be/novox/mesh-sdk/go/sdkversion 0.002s
PASS
ok git.novox.be/novox/mesh-sdk/go/seal 0.006s
PASS
ok git.novox.be/novox/mesh-sdk/go/validate 0.003s
integration level: 1280 tests (4 skipped), 7 s
**Merge check** at `075bf1e1`
Judged: head `075bf1e1fe8f` merged into trunk `88581d0acaef`; read beside it: mesh-catalog `bb0fe93bbddd`, mesh-controller `6c2a8d62100c`, mesh-controller-main `6c2a8d62100c`, mesh-host `454be9b2693d`, 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 shanks as `build-1792480123176514994` (`builds --log build-1792480123176514994`).
```
ok 32 - seal: every box the licence manager sealed opens to its plaintext
---
duration_ms: 4.615415
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: 3.738202
type: 'test'
...
# Subtest: seal: the agent module's TypeScript box opens
ok 34 - seal: the agent module's TypeScript box opens
---
duration_ms: 0.494737
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.857796
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: 1.018134
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.299144
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: 587.256749
type: 'test'
...
# Subtest: one success between failures starts the run again
ok 39 - one success between failures starts the run again
---
duration_ms: 187.149097
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.171983
type: 'test'
...
# Subtest: an unreadable secret is announced as such
ok 41 - an unreadable secret is announced as such
---
duration_ms: 170.472184
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: 186.265475
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: 236.122078
type: 'test'
...
# Subtest: an error is classed by its words
ok 44 - an error is classed by its words
---
duration_ms: 0.201413
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: 172.790617
type: 'test'
...
# Subtest: the first success since start is announced once
ok 46 - the first success since start is announced once
---
duration_ms: 117.329974
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: 171.331825
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.027133
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: 83.079397
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: 84.134622
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: 3200.474153
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: 83.030187
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.147637
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.468594
type: 'test'
...
1..54
# tests 54
# suites 0
# pass 54
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3974.235469
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: 1262 tests (3 skipped), 1.05 s (bound 2 s)
state_counter_test.go:193: 2000 increments, 1156 writes lost to the other writer and tried again
PASS
ok git.novox.be/novox/mesh-sdk/go 0.264s
PASS
ok git.novox.be/novox/mesh-sdk/go/asker 0.003s
PASS
ok git.novox.be/novox/mesh-sdk/go/asks 0.003s
environment_into_integration_test.go:47: NOT JUDGED: no environment.d generator on this machine, so the service manager's reading of the rendering is judged only where systemd runs; the rendering itself is held byte for byte by TestTheEnvironmentRendersForTheServiceManagerByteForByte
--- SKIP: TestTheServiceManagerReadsTheSystemdRenderingAsMeant (0.00s)
placed_paths_test.go:25: set MESH_CATALOGUE_BEFORE and MESH_CATALOGUE to two catalogue checkouts to run this
--- SKIP: TestPlacedDirectoriesKeepTheirPaths (0.00s)
print_rehearsal_test.go:10: set PRINT_RULESET
--- SKIP: TestPrintRehearsalRuleset (0.00s)
setting_in_unit_test.go:65: zfs.distribution-weekly: zfs-scrub-weekly@storage.timer
setting_in_unit_test.go:65: zfs.distribution-monthly: zfs-scrub-monthly@storage.timer
PASS
ok git.novox.be/novox/mesh-sdk/go/catalogue 0.215s
PASS
ok git.novox.be/novox/mesh-sdk/go/cli 1.043s
PASS
ok git.novox.be/novox/mesh-sdk/go/compose 0.170s
emitted_check_test.go:17: set MESH_EMITTED to a declaration the control plane produced
--- SKIP: TestWhatTheControlPlaneEmittedIsSomethingThisHostAccepts (0.00s)
PASS
ok git.novox.be/novox/mesh-sdk/go/declaration 0.013s
PASS
ok git.novox.be/novox/mesh-sdk/go/delivery 0.009s
? 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.142s
PASS
ok git.novox.be/novox/mesh-sdk/go/outward 0.070s
PASS
ok git.novox.be/novox/mesh-sdk/go/overlay 0.006s
PASS
ok git.novox.be/novox/mesh-sdk/go/process 6.472s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider 0.119s
PASS
ok git.novox.be/novox/mesh-sdk/go/provider/harness 0.136s
PASS
ok git.novox.be/novox/mesh-sdk/go/sdkversion 0.002s
PASS
ok git.novox.be/novox/mesh-sdk/go/seal 0.006s
PASS
ok git.novox.be/novox/mesh-sdk/go/validate 0.003s
integration level: 1280 tests (4 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 release R4a (ADR 0453 clauses 1-3; ADR 0446 §4; ADR 0429 §5, §16; ADR 0405 §7; ADR 0444; ADR 0447). Delivery group feat/r4a-sdk-first with mesh-host (issue 1308).
Review: three rounds by review-r4a@shanks (copies verified against their sources; compose compared with the controller's planFor/generators/grantsFor/rendering; round-1 findings 1-6 and round-2 findings 1-2 fixed). Minor opened: 1377, 1378.
Try build-1792480025471963447 passed: unit 1262 tests 1.05 s of 2 s; integration 1280 tests 7 s; TypeScript 54/54.
Reviewed-by: review-r4a@shanks at
075bf1e1feoverlay place, a seat passed through the store) are Input values or a returned Pass, and the controller-only tests of a failed read or write have no counterpart here. Unit level 1.04 s of 2 s. cb1b7a6f5dDelivery
novox/mesh-sdk@075bf1e1fe8f— delivered since 2026-10-20T07:45:58ZDelivery plan — builds mesh-sdk (+41 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
Group
feat/r4a-sdk-first: novox/mesh-host@64dfa90c3a, novox/mesh-sdk@075bf1e1feMachines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
075bf1e1Judged: head
075bf1e1fe8fmerged into trunk88581d0acaef; read beside it: mesh-catalogbb0fe93bbddd, mesh-controller6c2a8d62100c, mesh-controller-main6c2a8d62100c, mesh-host454be9b2693d, 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 shanks as
build-1792480123176514994(builds --log build-1792480123176514994).