R4e (mesh-delivery): the builder pushes and keys artifacts by reference, the checker's verdict and try, the view, and the checker's owed state read by the forge
#22
Merged
mesh-toolsmerged 43 commits from feat/r4e into main2026-10-22 22:13:06 +00:00
Delivery group feat/r4e (R4e of design 47: ADR 0503, 0513, 0514, 0520, 0521; ADR 0498, 0499, 0500, 0501). Members: mesh-sdk, mesh-controller, mesh-delivery, mesh-catalog, all on branch feat/r4e.
This member: the builder writes done keys naming each artifact's reference (artifact store, image registry, package) and rebuilds once the keys done before R4e (ADR 0498; issues 1587, 1613, 1614, 1751); the indexer and checker on the narrowed tree (ADR 0499); the checker's try (ADR 0501 §5) and its single mesh/check verdict (issues 1300-1302); the view (issue 1827); the checker announces its states with owed readable and the forge bridge performs no mesh/check act any more (ADR 0521); every module pins mesh-sdk 104533e8.
Tests: unit and integration suites; try PASS on efca168c (build-1792698230211306336).
Delivery group feat/r4e (R4e of design 47: ADR 0503, 0513, 0514, 0520, 0521; ADR 0498, 0499, 0500, 0501). Members: mesh-sdk, mesh-controller, mesh-delivery, mesh-catalog, all on branch feat/r4e.
This member: the builder writes done keys naming each artifact's reference (artifact store, image registry, package) and rebuilds once the keys done before R4e (ADR 0498; issues 1587, 1613, 1614, 1751); the indexer and checker on the narrowed tree (ADR 0499); the checker's try (ADR 0501 §5) and its single mesh/check verdict (issues 1300-1302); the view (issue 1827); the checker announces its states with owed readable and the forge bridge performs no mesh/check act any more (ADR 0521); every module pins mesh-sdk 104533e8.
Tests: unit and integration suites; try PASS on efca168c (build-1792698230211306336).
Reviewed-by: review-r4e@shanks at efca168c552251c99974f825dbc76908f60e67aa
The checker took and kept nothing for a workspace given siblings, and every core repository has siblings, so the
kept store stayed empty. The digest step now folds the siblings' commits in and echoes them; a verdict is kept or
taken only when the echo equals the siblings the fetch was given, so a digest that misses one never poisons another
check (ADR 0444, issue 482).
Pins mesh-sdk feat/r4e-sdk a90f523 (R4e's group member). A trunk key's builds are asked to publish; a build answering
no reference fails the key 'not stored:', and a step's own 'not stored:', 'not pinned:', 'version taken:' or
'refused kind:' opens the key's error.
The gate decides on mesh/check alone and matches an Approve's members by the heads hash over lowercase repositories
and heads. A success judged on an old trunk stood on the forge while the next check waited for a place or a delivery,
and a candidate whose repository the forge named in capitals carried a hash the gate never finds. A check that ends
after its trunk moved now owes pending, not its verdict.
The forge's gitea_commit_status refuses the context mesh/check from R4e, so that only the checker's account, through
this bridge, can make a pull request pass the one required status.
Moves the mesh-sdk pin to feat/r4e-sdk 9cb4d59, which accepts such a key and names delivery.WaitsFor; the builder's
package wait now uses that shared prefix (B7).
mesh-controller's try asked build-agent, which leaves the checking at R4e. A try is now a key in the checker's state
tries: the checker judges the head merged onto its trunk as it judges a pull request's head, through the same
judge, places and holds, writes its end in the key and owes the forge nothing (no status, no preview, no verdict).
One try per head, at most four at once; hq and a repository whose trunk the gate does not name are refused with
"no level of <repo> is checked by the checker".
A TypeScript member of a group that changes mesh-sdk's package resolved the old version from the registry. Its Node
fetch now names the mesh-sdk member's head, which the Node build module packs and serves, publishing nothing. The paths
come from the indexer's modules value (lead decision L8), so a change of Go files or of the manifest alone resolves
the registry as before. A test holds that no step of a check carries publish.
The line said only that the composition passed with an SDK commit, and its time sat among the parts that are dropped
first, so a forge status never said how long the composition took or which machines it covered.
mesh-catalog #293 failed with 'go.mod cannot be read to check its mesh-sdk pin: nats: no responders', put at the
build node, and stayed failed: the forge's tool runner was not answering for a moment, which is not the change's
failure. The forge's reads now mark such a call unheard, as the build steps' calls are (issue 1820).
I1: a merge writes each module its manifests name, at its directory. I2: a pull request's changed directory, a
preview's touched module and a source revision's modules come from the modules bucket (a module a pull request adds is
found in the preview by its manifest). I4: the value of today's form (fp, none) is no longer written, since it was
computed from the build records; mesh-sdk keeps it readable until R4g. One commit: the three share applyMerged and its
tests. Pins mesh-sdk feat/r4e-sdk 9cb4d59.
The indexer holds no published list of predefined keys; each key a value names is taken as the value declares it.
No fingerprint input comes from the list: the gate and the controller still judge the value.
A merged message or a preview without the objects gives the module none, naming the paths. Every other module keeps its
directory's tree. Module.ArtifactPaths is filled for the checker (the lead's interface).
The checker's go.mod and go.sum conflicted on the mesh-sdk pin (checker lane 9cb4d59, builder lane e76a5a3): every
module touched is pinned to the sdk lane's newest head d1af87a until the final SDK head.
Review finding K1 of R4e, issue 1301 S4 (ADR 0503 §3, ADR 0513 §4: the forge
requires mesh/check alone). gitea_check_status rested on "only the bridge
invokes it", but node-tools invokes every tool and a tool is told no caller,
so any session could set mesh/check and merge past the checker.
The bridge now emits check.status on mesh.mod.mesh-delivery-forge-bridge.event.
check.status, which the bus grants to its own account alone (emits), with the
owed status, its key and its revision; the event id check.<key>.<rev> is the
bus's dedup id. A status the bus did not take is not kept as done. OwedAct
refuses mesh/check, and gitea.gitea_check_status leaves the invokes. The
integration test shows the tool runner's account refused on that subject and
gitea's durable consumer handed statuses emitted before it fetched.
R4e round 2 finding R2-1, ADR 0521: the forge module writes mesh/check from
the checker's owed state, read by a watch, because no event order between the
forge bridge and the forge module is kept by the delivery plan. A reader is
granted from the owner's announcement (ADR 0495 §2-§3), and the checker
announced nothing. It now says every state it keeps, with owed, previews and
verdicts readable: the forge module and the bridge read owed, the indexer
previews, the gate verdicts.
mesh/merge-gate head efca168c5522 merged into trunk 0e372c87f1df — pass: group feat/r4e composed: every machine composes with the change as it did without …
mesh/delivery covered after its stop: a later walk that contains it was delivered: plan-1792707174627079192 (novox/mesh-delivery at b714eab9 into main, d…
R4e round 2 finding R2-1, ADR 0521: nothing in the delivery plan orders the
forge module before the bridge, and the forge module's durable consumer keeps
its deliver policy when its filters change, so a check.status emitted before
it consumed the event was lost. The forge module now watches the checker's
owed state and writes mesh/check itself, once per revision.
The bridge emits no check.status, declares no emits, and neither reads the
checker's owed nor hears its stream; OwedAct still refuses mesh/check. The
integration test shows the bridge calls no tool and publishes nothing of its
own when the checker owes mesh/check.
Deliverynovox/mesh-delivery@efca168c5522 — stopped since 2026-10-23T00:01:53Z
Covered: covered after its stop: a later walk that contains it was delivered: plan-1792707174627079192 (novox/mesh-delivery at b714eab9 into main, done, contains its merge b714eab9)
Delivery plan — builds mesh-delivery-builder, mesh-delivery-checker, mesh-delivery-forge-bridge, mesh-delivery-indexer, mesh-delivery-view → novox, shanks; no bus step
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 mesh-delivery-view 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-controller on every machine running it: sent
mesh-sdk on every machine running it: sent
pacman on every machine running it: sent
route-proxy on every machine running it: sent
build-agent on every machine running it: sent
mesh-build-go on every machine running it: sent
mesh-build-image on every machine running it: sent
mesh-build-node on every machine running it: sent
mesh-delivery-checker on every machine running it: sent
mesh-delivery-forge-bridge on every machine running it: sent
mesh-delivery-gate on every machine running it: sent
mesh-delivery-indexer on every machine running it: sent
mesh-delivery-view 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
mailu on every machine running it: sent
mesh-catalog on every machine running it: sent
mesh-delivery-builder on every machine running it: sent
minio on every machine running it: sent
model-usage on every machine running it: sent
mongodb on every machine running it: sent
mosquitto on every machine running it: sent
mssql 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-22 21:52 (new) → proposed (announced): novox/mesh-delivery#22's head announced
2026-10-22 21:55 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-22 21:55 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-22 22:15 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-22 22:15 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-23 00:01 delivering → stopped (stop): its walk plan-1792707174627079192 was stopped by a person (mesh-controller): issue 1886 (the operator, 02:08: fix it right now): stuck for good on builder keys nothing running can reference; as an open plan it holds every merge check, including the fix mesh-controller #442. The fixed controller goes to novox by the bootstrap act (ADR 0522 §5); R4e's 8 + 40 remaining modules are carried on afterwards by a retry that resumes a hand-stopped plan (follow-up on issue 1886, note 7).
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-delivery@efca168c5522` — **stopped** since 2026-10-23T00:01:53Z
**Covered**: covered after its stop: a later walk that contains it was delivered: plan-1792707174627079192 (novox/mesh-delivery at b714eab9 into main, done, contains its merge b714eab9)
**Delivery plan** — builds mesh-delivery-builder, mesh-delivery-checker, mesh-delivery-forge-bridge, mesh-delivery-indexer, mesh-delivery-view → novox, shanks; no bus step
- tier 0: mesh-delivery-builder, mesh-delivery-checker, mesh-delivery-forge-bridge, mesh-delivery-indexer, mesh-delivery-view
- novox: receives mesh-delivery-builder, mesh-delivery-checker, mesh-delivery-forge-bridge, mesh-delivery-indexer
- shanks: receives mesh-delivery-view
- 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 mesh-delivery-view is judged on its first machine
**Group** `feat/r4e`: novox/mesh-catalog@896bd88380b3, novox/mesh-controller@d51324df4518, novox/mesh-delivery@efca168c5522, novox/mesh-sdk@22b70c82b0ab
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Machines**
- mesh-controller on every machine running it: sent
- mesh-sdk on every machine running it: sent
- pacman on every machine running it: sent
- route-proxy on every machine running it: sent
- build-agent on every machine running it: sent
- mesh-build-go on every machine running it: sent
- mesh-build-image on every machine running it: sent
- mesh-build-node on every machine running it: sent
- mesh-delivery-checker on every machine running it: sent
- mesh-delivery-forge-bridge on every machine running it: sent
- mesh-delivery-gate on every machine running it: sent
- mesh-delivery-indexer on every machine running it: sent
- mesh-delivery-view 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
- mailu on every machine running it: sent
- mesh-catalog on every machine running it: sent
- mesh-delivery-builder on every machine running it: sent
- minio on every machine running it: sent
- model-usage on every machine running it: sent
- mongodb on every machine running it: sent
- mosquitto on every machine running it: sent
- mssql 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-22 21:52 (new) → proposed (announced): novox/mesh-delivery#22's head announced
- 2026-10-22 21:55 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-22 21:55 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-22 22:15 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-22 22:15 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-23 00:01 delivering → stopped (stop): its walk plan-1792707174627079192 was stopped by a person (mesh-controller): issue 1886 (the operator, 02:08: fix it right now): stuck for good on builder keys nothing running can reference; as an open plan it holds every merge check, including the fix mesh-controller #442. The fixed controller goes to novox by the bootstrap act (ADR 0522 §5); R4e's 8 + 40 remaining modules are carried on afterwards by a retry that resumes a hand-stopped plan (follow-up on issue 1886, note 7).
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
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.
Delivery group feat/r4e (R4e of design 47: ADR 0503, 0513, 0514, 0520, 0521; ADR 0498, 0499, 0500, 0501). Members: mesh-sdk, mesh-controller, mesh-delivery, mesh-catalog, all on branch feat/r4e.
This member: the builder writes done keys naming each artifact's reference (artifact store, image registry, package) and rebuilds once the keys done before R4e (ADR 0498; issues 1587, 1613, 1614, 1751); the indexer and checker on the narrowed tree (ADR 0499); the checker's try (ADR 0501 §5) and its single mesh/check verdict (issues 1300-1302); the view (issue 1827); the checker announces its states with owed readable and the forge bridge performs no mesh/check act any more (ADR 0521); every module pins mesh-sdk 104533e8.
Tests: unit and integration suites; try PASS on
efca168c(build-1792698230211306336).Reviewed-by: review-r4e@shanks at
efca168c557abe230): no module commits a build output 90ac287e59Delivery
novox/mesh-delivery@efca168c5522— stopped since 2026-10-23T00:01:53ZCovered: covered after its stop: a later walk that contains it was delivered: plan-1792707174627079192 (novox/mesh-delivery at
b714eab9into main, done, contains its mergeb714eab9)Delivery plan — builds mesh-delivery-builder, mesh-delivery-checker, mesh-delivery-forge-bridge, mesh-delivery-indexer, mesh-delivery-view → novox, shanks; no bus step
Group
feat/r4e: novox/mesh-catalog@896bd88380, novox/mesh-controller@d51324df45, novox/mesh-delivery@efca168c55, novox/mesh-sdk@22b70c82b0Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.