S15 raised mesh.hand-acts.drill.healer-wanted on 2026-10-07 after two deliberate ADR 0240 drills were recorded with hand-act record --cause drill. A drill is a person's deliberate test, never a repair.
What changes
New hand-act drill <what> --why <what it tests> [--condition <key>] (seat verb drill: what, why, condition). It records verb hand-act drill, cause drill. handActVerbs lists it as a person's decision, so S15 never counts it.
hand-act record --cause drill is now refused and points to hand-act drill. Whether an act is a drill is said by the verb chosen. A word typed into a repair's cause is not enough: push, conditions silence and the rest still count with cause drill.
The hand-act record entry exempts cause drill only for the acts recorded before this verb existed, because record now refuses that cause. So the two live drills stop counting, and the open condition clears on the next tick.
repairingCommand holds command hand-act drill … to --why. The catalogue verb and module.json carry drill.
Tests
TestADrillIsNoRepairAndItsHealerWantedClears: repeated drills want no healer. The cause word on other verbs still counts. The open mesh.hand-acts.drill.healer-wanted from the two hand-act record --cause drill acts clears on the next tick.
TestADrillIsRecordedThroughItsOwnVerb: record --cause drill is refused. A drill without why or what is refused. The seat's argv is checked, and command is held to why.
The existing table, flag and schema tests pass with the new verb.
S15 raised `mesh.hand-acts.drill.healer-wanted` on 2026-10-07 after two deliberate ADR 0240 drills were recorded with `hand-act record --cause drill`. A drill is a person's deliberate test, never a repair.
**What changes**
- New `hand-act drill <what> --why <what it tests> [--condition <key>]` (seat verb `drill`: what, why, condition). It records verb `hand-act drill`, cause `drill`. `handActVerbs` lists it as a person's decision, so S15 never counts it.
- `hand-act record --cause drill` is now **refused** and points to `hand-act drill`. Whether an act is a drill is said by the verb chosen. A word typed into a repair's cause is not enough: `push`, `conditions silence` and the rest still count with cause `drill`.
- The `hand-act record` entry exempts cause `drill` only for the acts recorded before this verb existed, because `record` now refuses that cause. So the two live drills stop counting, and the open condition clears on the next tick.
- `repairingCommand` holds `command hand-act drill …` to `--why`. The catalogue verb and `module.json` carry `drill`.
**Tests**
- `TestADrillIsNoRepairAndItsHealerWantedClears`: repeated drills want no healer. The cause word on other verbs still counts. The open `mesh.hand-acts.drill.healer-wanted` from the two `hand-act record --cause drill` acts clears on the next tick.
- `TestADrillIsRecordedThroughItsOwnVerb`: `record --cause drill` is refused. A drill without why or what is refused. The seat's argv is checked, and `command` is held to why.
- The existing table, flag and schema tests pass with the new verb.
`mesh-controller check-here --registry novox.internal:5100`: merge-gate PASS (4 of 4 compose), repo-check PASS.
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
Two ADR 0240 drills recorded with hand-act record --cause drill raised
mesh.hand-acts.drill.healer-wanted. hand-act drill (seat verb drill) records
them as a person's decision; hand-act record now refuses the cause, so the
two recorded before it clear on the next tick and a repair cannot pass for a
drill by the word it gives.
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
Machines
mesh-controller on novox: passed — healthy 3 times over 3m53s
mesh-controller on the rest running it: sent
build-agent on ace: passed — healthy 3 times over 3m36s
build-agent on the rest running it: sent
route-proxy on ace: passed — healthy 3 times over 3m13s
route-proxy on the rest running it: sent
Transitions
2026-10-07 11:56 (new) → proposed (announced): novox/mesh-controller#109's head announced
2026-10-07 12:04 proposed → checked (checked): the verdict names this commit
2026-10-07 12:04 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-07 12:05 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-07 12:05 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
2026-10-07 12:32 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-controller@2799e95035bf` — **delivered** since 2026-10-07T12:32:36Z
**Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- tier 2: route-proxy
- ace: receives build-agent, route-proxy
- g14: receives build-agent
- novox: receives mesh-controller, build-agent, route-proxy
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
**Machines**
- mesh-controller on novox: passed — healthy 3 times over 3m53s
- mesh-controller on the rest running it: sent
- build-agent on ace: passed — healthy 3 times over 3m36s
- build-agent on the rest running it: sent
- route-proxy on ace: passed — healthy 3 times over 3m13s
- route-proxy on the rest running it: sent
**Transitions**
- 2026-10-07 11:56 (new) → proposed (announced): novox/mesh-controller#109's head announced
- 2026-10-07 12:04 proposed → checked (checked): the verdict names this commit
- 2026-10-07 12:04 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-07 12:05 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-07 12:05 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
- 2026-10-07 12:32 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`.
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
Run by the build seat on ace as build-1791374180578209587 (builds --log build-1791374180578209587).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s)
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T11:26:48Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T11:26:48Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.032s
ok github.com/novox/mesh-controller/cmd/mesh-controller 400.003s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/route-proxy 1.124s
ok github.com/novox/mesh-controller/internal/artifacts 1.028s
ok github.com/novox/mesh-controller/internal/broker 2.433s
ok github.com/novox/mesh-controller/internal/builder 1.367s
ok github.com/novox/mesh-controller/internal/catalogue 3.605s
ok github.com/novox/mesh-controller/internal/conditions 2.007s
ok github.com/novox/mesh-controller/internal/envfile 1.065s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 39.756s
ok github.com/novox/mesh-controller/internal/inventory 250.709s
ok github.com/novox/mesh-controller/internal/lease 17.692s
ok github.com/novox/mesh-controller/internal/licences 39.158s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.081s
ok github.com/novox/mesh-controller/internal/link 78.407s
ok github.com/novox/mesh-controller/internal/lint 1.764s
ok github.com/novox/mesh-controller/internal/outward 1.089s
ok github.com/novox/mesh-controller/internal/overlay 1.074s
ok github.com/novox/mesh-controller/internal/secrets 1.441s
ok github.com/novox/mesh-controller/internal/store 23.280s
ok github.com/novox/mesh-controller/internal/testbus 1.224s
ok github.com/novox/mesh-controller/internal/token 1.016s
**Merge check** at `2799e950`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Change plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- tier 2: route-proxy
- ace: receives build-agent, route-proxy
- g14: receives build-agent
- novox: receives mesh-controller, build-agent, route-proxy
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
Run by the build seat on ace as `build-1791374180578209587` (`builds --log build-1791374180578209587`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s)
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T11:26:48Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T11:26:48Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.032s
ok github.com/novox/mesh-controller/cmd/mesh-controller 400.003s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/route-proxy 1.124s
ok github.com/novox/mesh-controller/internal/artifacts 1.028s
ok github.com/novox/mesh-controller/internal/broker 2.433s
ok github.com/novox/mesh-controller/internal/builder 1.367s
ok github.com/novox/mesh-controller/internal/catalogue 3.605s
ok github.com/novox/mesh-controller/internal/conditions 2.007s
ok github.com/novox/mesh-controller/internal/envfile 1.065s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 39.756s
ok github.com/novox/mesh-controller/internal/inventory 250.709s
ok github.com/novox/mesh-controller/internal/lease 17.692s
ok github.com/novox/mesh-controller/internal/licences 39.158s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.081s
ok github.com/novox/mesh-controller/internal/link 78.407s
ok github.com/novox/mesh-controller/internal/lint 1.764s
ok github.com/novox/mesh-controller/internal/outward 1.089s
ok github.com/novox/mesh-controller/internal/overlay 1.074s
ok github.com/novox/mesh-controller/internal/secrets 1.441s
ok github.com/novox/mesh-controller/internal/store 23.280s
ok github.com/novox/mesh-controller/internal/testbus 1.224s
ok github.com/novox/mesh-controller/internal/token 1.016s
```
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.
S15 raised
mesh.hand-acts.drill.healer-wantedon 2026-10-07 after two deliberate ADR 0240 drills were recorded withhand-act record --cause drill. A drill is a person's deliberate test, never a repair.What changes
hand-act drill <what> --why <what it tests> [--condition <key>](seat verbdrill: what, why, condition). It records verbhand-act drill, causedrill.handActVerbslists it as a person's decision, so S15 never counts it.hand-act record --cause drillis now refused and points tohand-act drill. Whether an act is a drill is said by the verb chosen. A word typed into a repair's cause is not enough:push,conditions silenceand the rest still count with causedrill.hand-act recordentry exempts causedrillonly for the acts recorded before this verb existed, becauserecordnow refuses that cause. So the two live drills stop counting, and the open condition clears on the next tick.repairingCommandholdscommand hand-act drill …to--why. The catalogue verb andmodule.jsoncarrydrill.Tests
TestADrillIsNoRepairAndItsHealerWantedClears: repeated drills want no healer. The cause word on other verbs still counts. The openmesh.hand-acts.drill.healer-wantedfrom the twohand-act record --cause drillacts clears on the next tick.TestADrillIsRecordedThroughItsOwnVerb:record --cause drillis refused. A drill without why or what is refused. The seat's argv is checked, andcommandis held to why.mesh-controller check-here --registry novox.internal:5100: merge-gate PASS (4 of 4 compose), repo-check PASS.Delivery
novox/mesh-controller@2799e95035bf— delivered since 2026-10-07T12:32:36ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
2799e950mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)mesh/repo-check: PASS — its merge-check.sh passedChange plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791374180578209587(builds --log build-1791374180578209587).