Feature 57 (design 57; ADR 0348, ADR 0349), mesh-sdk's part, pushed first: every other repository of the feature pins to this merge.
Issues: 650 (seal), 678, 679, 776, 788, 792 (provider helper: consumers' file, names on the plan entry), 685 (the runtime's mesh/provision messages), 804 part 1 (provider.StateBus; part 2 removes the four copies in mesh-catalog after this merges).
Review: round 1 CHANGES at 4ccba58 (busOf copied in four modules), round 2 APPROVE at 11db0cb (/home/nox/release57/reviews/mesh-sdk-r1.md, -r2.md on novox). This head's tree 91cd9569 equals the reviewed tree. Readers accept what the feature's writers send before any writer is delivered.
Pushed as one commit through gitea_commit patch_file (issue 852): the per-issue history stays on the feature's local branch; each issue names its commits.
Feature 57 (design 57; ADR 0348, ADR 0349), mesh-sdk's part, pushed first: every other repository of the feature pins to this merge.
Issues: 650 (seal), 678, 679, 776, 788, 792 (provider helper: consumers' file, names on the plan entry), 685 (the runtime's mesh/provision messages), 804 part 1 (provider.StateBus; part 2 removes the four copies in mesh-catalog after this merges).
Review: round 1 CHANGES at 4ccba58 (busOf copied in four modules), round 2 APPROVE at 11db0cb (/home/nox/release57/reviews/mesh-sdk-r1.md, -r2.md on novox). This head's tree 91cd9569 equals the reviewed tree. Readers accept what the feature's writers send before any writer is delivered.
Pushed as one commit through gitea_commit patch_file (issue 852): the per-issue history stays on the feature's local branch; each issue names its commits.
mesh/merge-gate head 11857f934b29 merged into trunk a2d2af00dc5d — pass, with a note: builds mesh-sdk (+40 dependent(s)) → ace, g14, novox, shanks; no bus …
mesh/repo-check head 11857f934b29 merged into trunk a2d2af00dc5d — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript)…
The SDK side of design 57 (ADR 0348, ADR 0349): seal (issue 650); the provider helper that answers a provision's consumers from the plan and the runtime's state, with the consumers' file, names on the plan entry and StateBus (issues 678, 679, 776, 788, 792, 804); and the runtime's mesh/provision messages (issue 685). Squashed from the feature's local branch; each issue's commit is named on its issue.
Co-Authored-By: Claude <noreply@anthropic.com>
g14: receives netcheck, zsh; waits for a person: nftables
novox: receives gitea, mesh-catalog, mesh-vault, 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: 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
mesh-vault provides secret: its consumers are sent again after it
mesh-vault 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
Transitions
2026-10-15 20:59 (new) → proposed (announced): novox/mesh-sdk#27's head announced
2026-10-15 21:02 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-15 21:02 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-sdk@11857f934b29` — **stopped** since 2026-10-15T21:07:23Z
**Delivery plan** — builds mesh-sdk (+40 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, mesh-vault, minio, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, 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, mesh-vault, 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: 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
- mesh-vault provides secret: its consumers are sent again after it
- mesh-vault 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
**Transitions**
- 2026-10-15 20:59 (new) → proposed (announced): novox/mesh-sdk#27's head announced
- 2026-10-15 21:02 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-15 21:02 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-15 21:07 ready → stopped (closed): the pull request closed unmerged
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
The operator's word for feature 57 was given in the novox session at 23:01 (asked there and on Telegram): its pull requests are marked ready in order as each one's checks pass. Reviewed: round 2 APPROVE at 11db0cb; this head's tree 91cd9569 equals the reviewed tree.
ready at 11857f934b2959afa17950a6c0f14dae86478a40
The operator's word for feature 57 was given in the novox session at 23:01 (asked there and on Telegram): its pull requests are marked ready in order as each one's checks pass. Reviewed: round 2 APPROVE at 11db0cb; this head's tree 91cd9569 equals the reviewed tree.
(Said again after the mesh/ready label, which this repository only gained now: a ready comment older than the label does not count.)
ready at 11857f934b2959afa17950a6c0f14dae86478a40
(Said again after the mesh/ready label, which this repository only gained now: a ready comment older than the label does not count.)
g14: receives netcheck, zsh; waits for a person: nftables
novox: receives gitea, mesh-catalog, mesh-vault, 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: 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
mesh-vault provides secret: its consumers are sent again after it
mesh-vault 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 novox as build-1792097989978808722 (builds --log build-1792097989978808722).
ok 25 - provisioner treats a failed or hung holds as could-not-ask, and never logs the password
---
duration_ms: 401.272479
type: 'test'
...
# Subtest: provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check
ok 26 - provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check
---
duration_ms: 302.814912
type: 'test'
...
# Subtest: modules can SERVE: a real async tool, loaded and invoked over the broker
ok 27 - modules can SERVE: a real async tool, loaded and invoked over the broker
---
duration_ms: 30.997948
type: 'test'
...
# Subtest: serving refuses one module exposing two tools of the same name
ok 28 - serving refuses one module exposing two tools of the same name
---
duration_ms: 0.33404
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.428391
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.2028
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.824021
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.517142
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: 6.245431
type: 'test'
...
# Subtest: seal: the agent module's TypeScript box opens
ok 34 - seal: the agent module's TypeScript box opens
---
duration_ms: 0.443031
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.917444
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.980112
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.285641
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: 586.396258
type: 'test'
...
# Subtest: one success between failures starts the run again
ok 39 - one success between failures starts the run again
---
duration_ms: 192.723314
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: 197.814324
type: 'test'
...
# Subtest: an unreadable secret is announced as such
ok 41 - an unreadable secret is announced as such
---
duration_ms: 171.113313
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: 178.931627
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: 231.582487
type: 'test'
...
# Subtest: an error is classed by its words
ok 44 - an error is classed by its words
---
duration_ms: 0.297111
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: 173.940139
type: 'test'
...
# Subtest: the first success since start is announced once
ok 46 - the first success since start is announced once
---
duration_ms: 117.499902
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: 178.706898
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.169162
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.913597
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: 83.653588
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: 3205.621126
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.122527
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: 286.877482
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.349045
type: 'test'
...
1..54
# tests 54
# suites 0
# pass 54
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 4056.408933
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)
ok git.novox.be/novox/mesh-sdk/go 0.183s
ok git.novox.be/novox/mesh-sdk/go/asker 0.004s
ok git.novox.be/novox/mesh-sdk/go/asks 0.004s
ok git.novox.be/novox/mesh-sdk/go/cli 1.046s
? git.novox.be/novox/mesh-sdk/go/example [no test files]
ok git.novox.be/novox/mesh-sdk/go/health 0.005s
ok git.novox.be/novox/mesh-sdk/go/outward 0.079s
ok git.novox.be/novox/mesh-sdk/go/provider 0.119s
ok git.novox.be/novox/mesh-sdk/go/seal 0.008s
**Merge check** at `11857f93`
Judged: head `11857f934b29` merged into trunk `a2d2af00dc5d`; read beside it: mesh-catalog `7443938fef69`, mesh-controller `7543f64911c5`, mesh-controller-main `7543f64911c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee`
- `mesh/merge-gate`: **PASS, WITH A NOTE** — a merge rebuilds 41 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, mesh-vault, minio, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, 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 (+40 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, mesh-vault, minio, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, 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, mesh-vault, 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: 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
- mesh-vault provides secret: its consumers are sent again after it
- mesh-vault 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 novox as `build-1792097989978808722` (`builds --log build-1792097989978808722`).
```
ok 25 - provisioner treats a failed or hung holds as could-not-ask, and never logs the password
---
duration_ms: 401.272479
type: 'test'
...
# Subtest: provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check
ok 26 - provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check
---
duration_ms: 302.814912
type: 'test'
...
# Subtest: modules can SERVE: a real async tool, loaded and invoked over the broker
ok 27 - modules can SERVE: a real async tool, loaded and invoked over the broker
---
duration_ms: 30.997948
type: 'test'
...
# Subtest: serving refuses one module exposing two tools of the same name
ok 28 - serving refuses one module exposing two tools of the same name
---
duration_ms: 0.33404
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.428391
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.2028
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.824021
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.517142
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: 6.245431
type: 'test'
...
# Subtest: seal: the agent module's TypeScript box opens
ok 34 - seal: the agent module's TypeScript box opens
---
duration_ms: 0.443031
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.917444
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.980112
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.285641
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: 586.396258
type: 'test'
...
# Subtest: one success between failures starts the run again
ok 39 - one success between failures starts the run again
---
duration_ms: 192.723314
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: 197.814324
type: 'test'
...
# Subtest: an unreadable secret is announced as such
ok 41 - an unreadable secret is announced as such
---
duration_ms: 171.113313
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: 178.931627
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: 231.582487
type: 'test'
...
# Subtest: an error is classed by its words
ok 44 - an error is classed by its words
---
duration_ms: 0.297111
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: 173.940139
type: 'test'
...
# Subtest: the first success since start is announced once
ok 46 - the first success since start is announced once
---
duration_ms: 117.499902
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: 178.706898
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.169162
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.913597
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: 83.653588
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: 3205.621126
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.122527
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: 286.877482
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.349045
type: 'test'
...
1..54
# tests 54
# suites 0
# pass 54
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 4056.408933
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)
ok git.novox.be/novox/mesh-sdk/go 0.183s
ok git.novox.be/novox/mesh-sdk/go/asker 0.004s
ok git.novox.be/novox/mesh-sdk/go/asks 0.004s
ok git.novox.be/novox/mesh-sdk/go/cli 1.046s
? git.novox.be/novox/mesh-sdk/go/example [no test files]
ok git.novox.be/novox/mesh-sdk/go/health 0.005s
ok git.novox.be/novox/mesh-sdk/go/outward 0.079s
ok git.novox.be/novox/mesh-sdk/go/provider 0.119s
ok git.novox.be/novox/mesh-sdk/go/seal 0.008s
```
Closed by the feature lead: wrong base. Feature 57 goes through its release branch feat/57-config-and-provisioning first (ADR 0358: a pull request into a release branch is judged by the release branch's controller), then the release branches go to main together as one delivery group (ADR 0358 §7, ADR 0239). This same reviewed work is pushed again as a pull request into feat/57-config-and-provisioning.
Closed by the feature lead: wrong base. Feature 57 goes through its release branch feat/57-config-and-provisioning first (ADR 0358: a pull request into a release branch is judged by the release branch's controller), then the release branches go to main together as one delivery group (ADR 0358 §7, ADR 0239). This same reviewed work is pushed again as a pull request into feat/57-config-and-provisioning.
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.
Feature 57 (design 57; ADR 0348, ADR 0349), mesh-sdk's part, pushed first: every other repository of the feature pins to this merge.
Issues: 650 (seal), 678, 679, 776, 788, 792 (provider helper: consumers' file, names on the plan entry), 685 (the runtime's mesh/provision messages), 804 part 1 (provider.StateBus; part 2 removes the four copies in mesh-catalog after this merges).
Review: round 1 CHANGES at 4ccba58 (busOf copied in four modules), round 2 APPROVE at 11db0cb (/home/nox/release57/reviews/mesh-sdk-r1.md, -r2.md on novox). This head's tree
91cd9569equals the reviewed tree. Readers accept what the feature's writers send before any writer is delivered.Pushed as one commit through gitea_commit patch_file (issue 852): the per-issue history stays on the feature's local branch; each issue names its commits.
Delivery
novox/mesh-sdk@11857f934b29— stopped since 2026-10-15T21:07:23ZDelivery plan — builds mesh-sdk (+40 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.ready at
11857f934bThe operator's word for feature 57 was given in the novox session at 23:01 (asked there and on Telegram): its pull requests are marked ready in order as each one's checks pass. Reviewed: round 2 APPROVE at 11db0cb; this head's tree
91cd9569equals the reviewed tree.ready at
11857f934b(Said again after the mesh/ready label, which this repository only gained now: a ready comment older than the label does not count.)
Merge check at
11857f93Judged: head
11857f934b29merged into trunka2d2af00dc5d; read beside it: mesh-catalog7443938fef69, mesh-controller7543f64911c5, mesh-controller-main7543f64911c5, mesh-host198fd34ec497, mesh-tools6b3e15042feemesh/merge-gate: PASS, WITH A NOTE — a merge rebuilds 41 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, mesh-vault, minio, mongodb, mosquitto, mssql, netcheck, nextcloud, nftables, nodered, ombi, openai-consumer, radarr, redis, route-adapter, searxng, 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 (+40 dependent(s)) → ace, g14, novox, shanks; no bus step; 9 wait(s) for a person
Run by the build seat on novox as
build-1792097989978808722(builds --log build-1792097989978808722).Closed by the feature lead: wrong base. Feature 57 goes through its release branch feat/57-config-and-provisioning first (ADR 0358: a pull request into a release branch is judged by the release branch's controller), then the release branches go to main together as one delivery group (ADR 0358 §7, ADR 0239). This same reviewed work is pushed again as a pull request into feat/57-config-and-provisioning.
Pull request closed