hq issue 290 (gap found live 2026-10-07): novox/hq@d222091fe9d4 (hq#94) was proposed at mesh-delivery's first start from an announcement heard again from the bus's history. The controller had taken that announcement long before (the PR predates merge checks), so nothing ever asked its check; after an hour stalled raised it for the operator.
Fix (modules/mesh-delivery)
A proposed delivery with no verdict, no check asked by this owner, not merged, proposed for longer than checkGrace (15 min — longer than a check takes from announcement to verdict) gets its own check asked through seat:mesh-controller.delivery-check (one head, no group). Covers both a head adopted while already waiting (read back after a restart, or replayed at first start) and a missed announcement. An ask the controller does not take is not kept, and is tried again a minute on. The ask is kept on the delivery (check_ask) and noted on the head.
An announcement carrying its head's decided mesh/merge-gate status (success/warning/failure) takes it as the verdict; pending/error are asked.
The proposed bound now runs from the ask: it means asked and not answered. Never asked, it runs from the end of the grace.
New table row proposed —re-ask→ proposed (asked, H2): H2's close re-asks a stalled check once; the guard refuses a second re-ask, and stalled then says it is the operator's. The row is tried on a copy first, so a re-ask the controller refuses spends nothing.
Tests: checkask_test.go — adoption of a proposed delivery after a restart asks its check once, for its head alone, and a passing verdict makes it ready; a missed announcement is asked after the grace (not within it; not while the controller is down; not for a head with a verdict); an announcement with a decided gate status takes it; H2 re-asks once, a second re-ask is refused, a late verdict still settles it. Table tests extended for the new row.
After rollout: within a tick, mesh-delivery.show id=novox/hq@d222091fe9d4 shows check_ask; the controller journal shows novox/hq#94 (d222091f): ... then checked, and the delivery moves proposed → checked → ready.
hq issue 290 (gap found live 2026-10-07): `novox/hq@d222091fe9d4` (hq#94) was proposed at mesh-delivery's first start from an announcement heard again from the bus's history. The controller had taken that announcement long before (the PR predates merge checks), so nothing ever asked its check; after an hour `stalled` raised it for the operator.
**Fix (modules/mesh-delivery)**
- A `proposed` delivery with no verdict, no check asked by this owner, not merged, proposed for longer than `checkGrace` (15 min — longer than a check takes from announcement to verdict) gets its own check asked through `seat:mesh-controller.delivery-check` (one head, no group). Covers both a head adopted while already waiting (read back after a restart, or replayed at first start) and a missed announcement. An ask the controller does not take is not kept, and is tried again a minute on. The ask is kept on the delivery (`check_ask`) and noted on the head.
- An announcement carrying its head's decided `mesh/merge-gate` status (success/warning/failure) takes it as the verdict; pending/error are asked.
- The `proposed` bound now runs from the ask: it means *asked and not answered*. Never asked, it runs from the end of the grace.
- New table row `proposed —re-ask→ proposed` (asked, H2): H2's `close` re-asks a stalled check **once**; the guard refuses a second re-ask, and `stalled` then says it is the operator's. The row is tried on a copy first, so a re-ask the controller refuses spends nothing.
**Tests**: `checkask_test.go` — adoption of a proposed delivery after a restart asks its check once, for its head alone, and a passing verdict makes it ready; a missed announcement is asked after the grace (not within it; not while the controller is down; not for a head with a verdict); an announcement with a decided gate status takes it; H2 re-asks once, a second re-ask is refused, a late verdict still settles it. Table tests extended for the new row.
`mesh-controller check-here`: merge gate PASS (4 of 4 compose), repo check PASS.
**After rollout**: within a tick, `mesh-delivery.show id=novox/hq@d222091fe9d4` shows `check_ask`; the controller journal shows `novox/hq#94 (d222091f): ...` then `checked`, and the delivery moves proposed → checked → ready.
A pull request's head announced again from the bus's history at
mesh-delivery's first start was proposed with no verdict and nothing
ever asked its check: the controller had taken that announcement long
before, and stalled raised it after an hour for the operator.
A proposed delivery with no verdict and no check asked is now asked
through delivery-check once it has waited past a grace longer than a
check takes; an announcement carrying its head's decided gate status
takes it. The proposed bound runs from the ask, and H2's close may
re-ask once (a table row) before the delivery is the operator's.
Deliverynovox/mesh-catalog@d1de0edd4af5 — delivered since 2026-10-07T11:27:22Z
Delivery plan — builds mesh-delivery → novox; no bus step
tier 0: mesh-delivery
novox: receives mesh-delivery
Machines
mesh-delivery on novox: passed — healthy 3 times over 2m49s
mesh-delivery on the rest running it: sent
Transitions
2026-10-07 09:48 (new) → proposed (announced): novox/mesh-catalog#101's head announced
2026-10-07 09:51 proposed → checked (checked): the verdict names this commit
2026-10-07 09:51 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-07 11:20 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 11:20 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 11:27 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@d1de0edd4af5` — **delivered** since 2026-10-07T11:27:22Z
**Delivery plan** — builds mesh-delivery → novox; no bus step
- tier 0: mesh-delivery
- novox: receives mesh-delivery
**Machines**
- mesh-delivery on novox: passed — healthy 3 times over 2m49s
- mesh-delivery on the rest running it: sent
**Transitions**
- 2026-10-07 09:48 (new) → proposed (announced): novox/mesh-catalog#101's head announced
- 2026-10-07 09:51 proposed → checked (checked): the verdict names this commit
- 2026-10-07 09:51 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-07 11:20 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 11:20 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 11:27 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/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-delivery)
mesh/repo-check: PASS — its merge-check.sh passed
Change plan — builds mesh-delivery → novox; no bus step
tier 0: mesh-delivery
novox: receives mesh-delivery
Run by the build seat on novox as build-1791366525345292313 (builds --log build-1791366525345292313).
--- the gate: mesh-delivery
mesh-delivery: ok, 1 tool(s), invokes seat:mesh-controller.delivery-plan, seat:mesh-controller.delivery-order, seat:mesh-controller.delivery-check, seat:mesh-controller.deliver, seat:mesh-controller.delivery-stop, seat:mesh-controller.delivery-walks, gitea.gitea_note_append, gitea.gitea_delivery_view, gitea.gitea_commit_status, keeps state deliveries, groups
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 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T01: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-07T01:26:48Z
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 1 module(s) in 1 tier(s): mesh-delivery
--- its merge-check.sh (go toolchain)
testing modules/mesh-delivery
ok mesh-delivery/cmd/mesh-delivery 1.127s
**Merge check** at `d1de0edd`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-delivery)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Change plan** — builds mesh-delivery → novox; no bus step
- tier 0: mesh-delivery
- novox: receives mesh-delivery
Run by the build seat on novox as `build-1791366525345292313` (`builds --log build-1791366525345292313`).
```
--- the gate: mesh-delivery
mesh-delivery: ok, 1 tool(s), invokes seat:mesh-controller.delivery-plan, seat:mesh-controller.delivery-order, seat:mesh-controller.delivery-check, seat:mesh-controller.deliver, seat:mesh-controller.delivery-stop, seat:mesh-controller.delivery-walks, gitea.gitea_note_append, gitea.gitea_delivery_view, gitea.gitea_commit_status, keeps state deliveries, groups
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 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T01: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-07T01:26:48Z
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 1 module(s) in 1 tier(s): mesh-delivery
--- its merge-check.sh (go toolchain)
testing modules/mesh-delivery
ok mesh-delivery/cmd/mesh-delivery 1.127s
```
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.
hq issue 290 (gap found live 2026-10-07):
novox/hq@d222091fe9d4(hq#94) was proposed at mesh-delivery's first start from an announcement heard again from the bus's history. The controller had taken that announcement long before (the PR predates merge checks), so nothing ever asked its check; after an hourstalledraised it for the operator.Fix (modules/mesh-delivery)
proposeddelivery with no verdict, no check asked by this owner, not merged, proposed for longer thancheckGrace(15 min — longer than a check takes from announcement to verdict) gets its own check asked throughseat:mesh-controller.delivery-check(one head, no group). Covers both a head adopted while already waiting (read back after a restart, or replayed at first start) and a missed announcement. An ask the controller does not take is not kept, and is tried again a minute on. The ask is kept on the delivery (check_ask) and noted on the head.mesh/merge-gatestatus (success/warning/failure) takes it as the verdict; pending/error are asked.proposedbound now runs from the ask: it means asked and not answered. Never asked, it runs from the end of the grace.proposed —re-ask→ proposed(asked, H2): H2'sclosere-asks a stalled check once; the guard refuses a second re-ask, andstalledthen says it is the operator's. The row is tried on a copy first, so a re-ask the controller refuses spends nothing.Tests:
checkask_test.go— adoption of a proposed delivery after a restart asks its check once, for its head alone, and a passing verdict makes it ready; a missed announcement is asked after the grace (not within it; not while the controller is down; not for a head with a verdict); an announcement with a decided gate status takes it; H2 re-asks once, a second re-ask is refused, a late verdict still settles it. Table tests extended for the new row.mesh-controller check-here: merge gate PASS (4 of 4 compose), repo check PASS.After rollout: within a tick,
mesh-delivery.show id=novox/hq@d222091fe9d4showscheck_ask; the controller journal showsnovox/hq#94 (d222091f): ...thenchecked, and the delivery moves proposed → checked → ready.Delivery
novox/mesh-catalog@d1de0edd4af5— delivered since 2026-10-07T11:27:22ZDelivery plan — builds mesh-delivery → novox; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
d1de0eddmesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-delivery)mesh/repo-check: PASS — its merge-check.sh passedChange plan — builds mesh-delivery → novox; no bus step
Run by the build seat on novox as
build-1791366525345292313(builds --log build-1791366525345292313).