Part of the mesh-delivery feature (hq ADR 0239, to-be 47; branch feat/mesh-delivery in mesh-controller, mesh-catalog, mesh-host).
modules/mesh-delivery (Go bundle, claims the mesh-scoped seat mesh-delivery):
one compiled state table (table.go): rows with guards, observed vs asked (person / H2), settle takes observed rows until none holds (a delivery stands where its facts put it, whatever order they arrived); bounds per state and H2's allowed transitions; the machine-step table (sent → judging → passed | failed → rolled-back, refusing e.g. passed → failed);
the holder: pull.updated → proposed (an older head superseded; grouped by head branch name across repositories), checked → checked → ready | rejected, pull.merged → published (or held when merged unchecked; made from the forge's word when its head was never heard), the controller's plan-moved / delivery-walks → delivering, machine steps, delivered | failed | superseded | stopped; groups ordered by the controller's delivery-order, checked composed by delivery-check, delivered member by member, a failed member stopping those after it (those before stay delivered); walks running at the switch adopted; a waiting walk with no pull request held for a person;
state: KV deliveries and groups (ADR 0201), one writer; kept before anything is said; owed effects (event, note, view, statuses) retried until done;
modules/gitea: tools gitea_note_append (appends to refs/notes/mesh-plan inside the forge's container as the forge's user, idempotent), gitea_delivery_view (one marked comment per PR, edited in place), gitea_commit_status (mesh/* statuses only); announces pull.closed, and a merge's head_sha, body and the head's statuses; merge-gate statuses link to the PR; a group's composed verdict sets no merge-gate status.
Merge order: after mesh-controller is merged and rolled out (the manifest claims the new seat and invokes the new controller verbs — version skew otherwise). Then a person assigns mesh-delivery to the control node; see the hq PR for the switch.
Tested: go test -race of mesh-delivery (19 tests: table walk, every pair refused, the table's own rules, head→ready, merge→delivered, failed gate→rolled-back→failed, superseded, off-trunk never published, restart resumes, kept-before-said, switch adoption, controller down, groups in order / clean stop / cycle, stalled+close, manifest); gitea's new test/delivery.test.ts and the build pass (two pre-existing failures in pages.test.ts and pulls.test.ts:65 fail identically on main: module resolution of token.js); the token test's stale tool list fixed; merge-check.sh and the controller's module check pass on both manifests.
Part of the mesh-delivery feature (hq ADR 0239, to-be 47; branch `feat/mesh-delivery` in mesh-controller, mesh-catalog, mesh-host).
**`modules/mesh-delivery`** (Go bundle, claims the mesh-scoped seat `mesh-delivery`):
- one compiled **state table** (`table.go`): rows with guards, observed vs asked (person / H2), `settle` takes observed rows until none holds (a delivery stands where its facts put it, whatever order they arrived); bounds per state and H2's allowed transitions; the machine-step table (sent → judging → passed | failed → rolled-back, refusing e.g. passed → failed);
- the **holder**: `pull.updated` → proposed (an older head superseded; grouped by head branch name across repositories), `checked` → checked → ready | rejected, `pull.merged` → published (or held when merged unchecked; made from the forge's word when its head was never heard), the controller's `plan-moved` / `delivery-walks` → delivering, machine steps, delivered | failed | superseded | stopped; groups ordered by the controller's `delivery-order`, checked composed by `delivery-check`, delivered member by member, a failed member stopping those after it (those before stay delivered); walks running at the switch adopted; a waiting walk with no pull request held for a person;
- **state**: KV `deliveries` and `groups` (ADR 0201), one writer; kept before anything is said; owed effects (event, note, view, statuses) retried until done;
- **verbs**: deliveries, show, groups, what-if, table, stalled, recheck, release, stop, close; own tool `delivery_status`.
**`modules/gitea`**: tools `gitea_note_append` (appends to `refs/notes/mesh-plan` inside the forge's container as the forge's user, idempotent), `gitea_delivery_view` (one marked comment per PR, edited in place), `gitea_commit_status` (mesh/* statuses only); announces `pull.closed`, and a merge's `head_sha`, `body` and the head's statuses; merge-gate statuses link to the PR; a group's composed verdict sets no merge-gate status.
**Merge order:** after mesh-controller is merged and rolled out (the manifest claims the new seat and invokes the new controller verbs — version skew otherwise). Then a person assigns mesh-delivery to the control node; see the hq PR for the switch.
Tested: `go test -race` of mesh-delivery (19 tests: table walk, every pair refused, the table's own rules, head→ready, merge→delivered, failed gate→rolled-back→failed, superseded, off-trunk never published, restart resumes, kept-before-said, switch adoption, controller down, groups in order / clean stop / cycle, stalled+close, manifest); gitea's new `test/delivery.test.ts` and the build pass (two pre-existing failures in `pages.test.ts` and `pulls.test.ts:65` fail identically on main: module resolution of `token.js`); the token test's stale tool list fixed; `merge-check.sh` and the controller's `module check` pass on both manifests.
One module answers 'did my change go out' for a commit and orders a
cross-repository change: one compiled state table, its state on the bus,
every transition said, noted on the commit and shown on the pull request.
The forge's holder gains the note, view and status tools it asks with, and
says closed pull requests and a merge's head and statuses.
Merge check: FAIL at b6f0bc30 — a manifest the change touches fails the module check: modules/mesh-delivery/module.json: this manifest cannot be used:
Run by the build seat on g14 as build-1791324035352132602 (builds --log build-1791324035352132602).
--- the gate: gitea, new:modules/mesh-delivery
modules/mesh-delivery/module.json: this manifest cannot be used:
- mesh-delivery claims "mesh-delivery", which is a seat in the mesh's own namespace (mesh-*/node-*) that it does not define (novox/hq ADR 0121) — the seats are: git, mesh-artifact-store, mesh-broker, mesh-build-machine, mesh-catalog, mesh-controller, mesh-dns-resolver, mesh-store, mesh-vault, node-backup, node-bar, node-build-agent, node-clipboard, node-compositor, node-container-runtime, node-display-server, node-display-session, node-environment, node-hostname, node-hotkeys, node-intrusion-prevention, node-launcher, node-lock-screen, node-login-manager, node-login-shell, node-message-bus, node-notifier, node-package-manager, node-packet-filter, node-power, node-secret-service, node-service-manager, node-terminal-emulator, node-uplink, npm-package-registry, the-private-network
gitea: ok, keeps data (valuable)
mesh-controller: 1 problem(s) in 2 manifest(s)
--- the same manifests on main
modules/mesh-delivery/module.json: open modules/mesh-delivery/module.json: no such file or directory
gitea: ok, keeps data (valuable)
mesh-controller: 1 problem(s) in 2 manifest(s)
--- its merge-check.sh (go toolchain)
mesh-controller: 1 problem(s) in 113 manifest(s)
**Merge check: FAIL** at `b6f0bc30` — a manifest the change touches fails the module check: modules/mesh-delivery/module.json: this manifest cannot be used:
Run by the build seat on g14 as `build-1791324035352132602` (`builds --log build-1791324035352132602`).
```
--- the gate: gitea, new:modules/mesh-delivery
modules/mesh-delivery/module.json: this manifest cannot be used:
- mesh-delivery claims "mesh-delivery", which is a seat in the mesh's own namespace (mesh-*/node-*) that it does not define (novox/hq ADR 0121) — the seats are: git, mesh-artifact-store, mesh-broker, mesh-build-machine, mesh-catalog, mesh-controller, mesh-dns-resolver, mesh-store, mesh-vault, node-backup, node-bar, node-build-agent, node-clipboard, node-compositor, node-container-runtime, node-display-server, node-display-session, node-environment, node-hostname, node-hotkeys, node-intrusion-prevention, node-launcher, node-lock-screen, node-login-manager, node-login-shell, node-message-bus, node-notifier, node-package-manager, node-packet-filter, node-power, node-secret-service, node-service-manager, node-terminal-emulator, node-uplink, npm-package-registry, the-private-network
gitea: ok, keeps data (valuable)
mesh-controller: 1 problem(s) in 2 manifest(s)
--- the same manifests on main
modules/mesh-delivery/module.json: open modules/mesh-delivery/module.json: no such file or directory
gitea: ok, keeps data (valuable)
mesh-controller: 1 problem(s) in 2 manifest(s)
--- its merge-check.sh (go toolchain)
mesh-controller: 1 problem(s) in 113 manifest(s)
```
Deliverynovox/mesh-catalog@b6f0bc309b0c — delivered since 2026-10-06T23:05:28Z
Delivery plan — builds gitea, new: modules/mesh-delivery → novox; no bus step
tier 0: gitea
novox: receives gitea
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
Groupfeat/mesh-delivery, in order:
Machines
gitea on novox: passed — healthy 3 times over 2m14s
gitea on the rest running it: sent
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#99's head announced
2026-10-06 23:05 proposed → checked (checked): the verdict names this commit
2026-10-06 23:05 checked → rejected (refused): the gate failed or could not run, or the repository's own check failed
2026-10-06 23:05 rejected → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
2026-10-06 23:05 held → delivering (go): its walk started on a word that was not this owner's: the controller's own path, which waits for nobody, or a person's plans go
2026-10-06 23:05 delivering → delivered (done): its walk is done: 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-catalog@b6f0bc309b0c` — **delivered** since 2026-10-06T23:05:28Z
**Delivery plan** — builds gitea, new: modules/mesh-delivery → novox; no bus step
- tier 0: gitea
- novox: receives gitea
- 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
**Group** `feat/mesh-delivery`, in order:
**Machines**
- gitea on novox: passed — healthy 3 times over 2m14s
- gitea on the rest running it: sent
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#99's head announced
- 2026-10-06 23:05 proposed → checked (checked): the verdict names this commit
- 2026-10-06 23:05 checked → rejected (refused): the gate failed or could not run, or the repository's own check failed
- 2026-10-06 23:05 rejected → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
- 2026-10-06 23:05 held → delivering (go): its walk started on a word that was not this owner's: the controller's own path, which waits for nobody, or a person's `plans go`
- 2026-10-06 23:05 delivering → delivered (done): its walk is done: 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`.
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.
Part of the mesh-delivery feature (hq ADR 0239, to-be 47; branch
feat/mesh-deliveryin mesh-controller, mesh-catalog, mesh-host).modules/mesh-delivery(Go bundle, claims the mesh-scoped seatmesh-delivery):table.go): rows with guards, observed vs asked (person / H2),settletakes observed rows until none holds (a delivery stands where its facts put it, whatever order they arrived); bounds per state and H2's allowed transitions; the machine-step table (sent → judging → passed | failed → rolled-back, refusing e.g. passed → failed);pull.updated→ proposed (an older head superseded; grouped by head branch name across repositories),checked→ checked → ready | rejected,pull.merged→ published (or held when merged unchecked; made from the forge's word when its head was never heard), the controller'splan-moved/delivery-walks→ delivering, machine steps, delivered | failed | superseded | stopped; groups ordered by the controller'sdelivery-order, checked composed bydelivery-check, delivered member by member, a failed member stopping those after it (those before stay delivered); walks running at the switch adopted; a waiting walk with no pull request held for a person;deliveriesandgroups(ADR 0201), one writer; kept before anything is said; owed effects (event, note, view, statuses) retried until done;delivery_status.modules/gitea: toolsgitea_note_append(appends torefs/notes/mesh-planinside the forge's container as the forge's user, idempotent),gitea_delivery_view(one marked comment per PR, edited in place),gitea_commit_status(mesh/* statuses only); announcespull.closed, and a merge'shead_sha,bodyand the head's statuses; merge-gate statuses link to the PR; a group's composed verdict sets no merge-gate status.Merge order: after mesh-controller is merged and rolled out (the manifest claims the new seat and invokes the new controller verbs — version skew otherwise). Then a person assigns mesh-delivery to the control node; see the hq PR for the switch.
Tested:
go test -raceof mesh-delivery (19 tests: table walk, every pair refused, the table's own rules, head→ready, merge→delivered, failed gate→rolled-back→failed, superseded, off-trunk never published, restart resumes, kept-before-said, switch adoption, controller down, groups in order / clean stop / cycle, stalled+close, manifest); gitea's newtest/delivery.test.tsand the build pass (two pre-existing failures inpages.test.tsandpulls.test.ts:65fail identically on main: module resolution oftoken.js); the token test's stale tool list fixed;merge-check.shand the controller'smodule checkpass on both manifests.Merge check: FAIL at
b6f0bc30— a manifest the change touches fails the module check: modules/mesh-delivery/module.json: this manifest cannot be used:Run by the build seat on g14 as
build-1791324035352132602(builds --log build-1791324035352132602).Delivery
novox/mesh-catalog@b6f0bc309b0c— delivered since 2026-10-06T23:05:28ZDelivery plan — builds gitea, new: modules/mesh-delivery → novox; no bus step
Group
feat/mesh-delivery, in order:Machines
Transitions
plans goThe commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.