Ask the check of a delivery that waits for one nobody asked (hq issue 290) #101

Merged
mesh-admin merged 1 commits from fix/a-delivery-waiting-gets-its-check into main 2026-10-07 11:20:19 +00:00
Contributor

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.

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.
mesh-admin added 1 commit 2026-10-07 09:48:17 +00:00
Ask the check of a delivery that waits for one nobody asked (hq issue 290)
mesh/merge-gate pass: builds mesh-delivery → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered
d1de0edd4a
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.
Author
Contributor

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-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`.
Author
Contributor

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
**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 ```
mesh-admin merged commit e61fc6aede into main 2026-10-07 11:20:19 +00:00
mesh-admin deleted branch fix/a-delivery-waiting-gets-its-check 2026-10-07 11:20:19 +00:00
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#101