mesh-delivery: the owner of deliveries and delivery groups; the forge's note, view and status tools (hq ADR 0239) #99

Merged
mesh-admin merged 1 commits from feat/mesh-delivery into main 2026-10-06 23:00:37 +00:00
Contributor

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.

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.
mesh-admin added 1 commit 2026-10-06 22:00:27 +00:00
Add mesh-delivery, the owner of deliveries and delivery groups (hq ADR 0239)
mesh/merge-gate fail: a manifest the change touches fails the module check: modules/mesh-delivery/module.json: this manifest cannot be used:
mesh/delivery delivered
mesh/delivery-group group feat/mesh-delivery merged: every member is merged
b6f0bc309b
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.
Author
Contributor

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) ```
mesh-admin merged commit 950e52ff64 into main 2026-10-06 23:00:37 +00:00
mesh-admin deleted branch feat/mesh-delivery 2026-10-06 23:00:37 +00:00
Author
Contributor

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.

<!-- 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`.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#99