An asker of the build seats hears when its ask is given up, and the seat's users may read their own dead letters (issue 734) #92

Merged
mesh-tools merged 4 commits from fix/734-lost-ask into main 2026-10-26 13:40:31 +00:00
Member

Issue 734 (a check, try or build whose ask the build seat's worker gave up after 5 deliveries waits for ever; at the bus reload of 13:26 today a stranded try held one of the checker's 4 places). Group fix/734-lost-ask with mesh-controller and mesh-delivery; the operator allowed the controller grant (2026-10-26 14:10).

  • go/delivery/buildrun/lostask.go: LostAskWaiter ends an asker's wait when DEAD_LETTERS holds a copy of its ask (matched by Mesh-Dead-Msg-Id = the ask id), and bounds an ask no node takes (used for tries only). DeadLetterHearing follows each build seat's dead letters with an ordered consumer from the process's start, in the background; when refused it tries again on the bus reconnect and on each ask waited while deaf (no timer), and says whether it hears (SayHearing).
  • go/buscompose/seattraffic.go DeadLetterReads: a user of a seat pulled by kind gets STREAM.INFO, CREATE filtered to mesh.events.dead.<its seat stream>.>, MSG.NEXT .* and DELETE .* on DEAD_LETTERS, and nothing else of it (the server enforces the filter). Byte-identical to the controller's copy.

Tests: rows in TestAnAskerPutsOnceAndReadsTheStep and the buscompose grant test (incl. a refused hearing that hears after the next ask; $JS.FC refused). Unit suite and vet clean. Try try-1793020949942881204 passed.

Merge order: this group lands as one; mesh-delivery pins this head.

Reviewed-by: review-734@shanks at 3203358c4c

Issue 734 (a check, try or build whose ask the build seat's worker gave up after 5 deliveries waits for ever; at the bus reload of 13:26 today a stranded try held one of the checker's 4 places). Group fix/734-lost-ask with mesh-controller and mesh-delivery; the operator allowed the controller grant (2026-10-26 14:10). - `go/delivery/buildrun/lostask.go`: `LostAskWaiter` ends an asker's wait when DEAD_LETTERS holds a copy of its ask (matched by Mesh-Dead-Msg-Id = the ask id), and bounds an ask no node takes (used for tries only). `DeadLetterHearing` follows each build seat's dead letters with an ordered consumer from the process's start, in the background; when refused it tries again on the bus reconnect and on each ask waited while deaf (no timer), and says whether it hears (`SayHearing`). - `go/buscompose/seattraffic.go` `DeadLetterReads`: a user of a seat pulled by kind gets STREAM.INFO, CREATE filtered to `mesh.events.dead.<its seat stream>.>`, MSG.NEXT `.*` and DELETE `.*` on DEAD_LETTERS, and nothing else of it (the server enforces the filter). Byte-identical to the controller's copy. Tests: rows in TestAnAskerPutsOnceAndReadsTheStep and the buscompose grant test (incl. a refused hearing that hears after the next ask; $JS.FC refused). Unit suite and vet clean. Try try-1793020949942881204 passed. Merge order: this group lands as one; mesh-delivery pins this head. Reviewed-by: review-734@shanks at 3203358c4cb5fa5bed223f7ce85577bbb70a346e
mesh-tools added 4 commits 2026-10-26 13:29:07 +00:00
A check ask given up during a bus reload left its try running for ever: the asker had no grant to learn that
DEAD_LETTERS holds it. DeadLetterReads grants an ordered consumer on DEAD_LETTERS filtered to the seat stream's copies,
and nothing else of the stream.
The checker's try and the builder's lanes waited for ever on an ask given up during a bus reload: no build node writes a
step for it. LostAskWaiter hands the asker a failed step on the node bus when DEAD_LETTERS keeps the ask's copy
(HearDeadLetters, granted by DeadLetterReads), and under NotTakenBound when no node took the ask within the bound.
An asker started before its grant was composed was refused once and stayed deaf until it started again, silently.
DeadLetterHearing tries in the background and again on an event (Again: a reconnect, an ask waited for while deaf), and
tells each change of Hearing so the module's health tool can say it. DeadLetterReads drops the flow control a pull
consumer does not use and deletes one consumer by name.
buildrun: an asker keeps whether it hears DEAD_LETTERS, and its health tool answers from it (issue 734, review round 1)
mesh/delivery merged: source.main moved to novox/mesh-sdk@545a0c9cb43b
mesh/delivery-group group fix/734-lost-ask merged: every member is merged
mesh/check being carried to 3203358c4cb5 on 2aae6f5580f2 | from mesh-delivery c8b26735c8cf | novox/mesh-sdk#92 in group fix/734-lost-ask
3203358c4c
A deaf asker must be loud: SayHearing keeps each Hearing in the asker's state hearing, and HearingHealth answers the
module's health tool from it, unhealthy with why while DEAD_LETTERS is not heard.
Author
Member

Delivery novox/mesh-sdk@3203358c4cb5 — merged since 2026-10-26T13:40:33Z

Source — source.main moved to novox/mesh-sdk@545a0c9cb4. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/734-lost-ask: novox/mesh-controller@ccc7ba334c, novox/mesh-delivery@bf57417215, novox/mesh-sdk@3203358c4c

Transitions

  • 2026-10-26 13:29 (new) → proposed (announced): novox/mesh-sdk#92's head announced
  • 2026-10-26 13:29 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-10-26 13:40 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@3203358c4cb5` — **merged** since 2026-10-26T13:40:33Z **Source** — source.main moved to novox/mesh-sdk@545a0c9cb43b. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/734-lost-ask`: novox/mesh-controller@ccc7ba334c82, novox/mesh-delivery@bf574172154a, novox/mesh-sdk@3203358c4cb5 **Transitions** - 2026-10-26 13:29 (new) → proposed (announced): novox/mesh-sdk#92's head announced - 2026-10-26 13:29 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-10-26 13:40 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-tools merged commit 545a0c9cb4 into main 2026-10-26 13:40:31 +00:00
mesh-tools deleted branch fix/734-lost-ask 2026-10-26 13:40:31 +00:00
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head bf574172154a is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head bf574172154a is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#92