mesh-delivery #51's own re-ask never fired for mesh-build-node.4e7b118e, which was stuck from 19:06 to 00:47 on 2026-10-25.
Its Go ask sat behind messages the build seat's worker had given up on. Read live: SEAT_NODE_BUILD_GO held 8 messages with worker pending 0, ack pending 0 and 3 pulls waiting.
Ahead > 0 therefore held it back for ever.
The change, in modules/mesh-delivery-builder:
A message ahead counts only while no node wrote its step and no node took an ask of its kind, or of a kind pulled after it, asked later.
AskAgain deletes the old message. This needs $JS.API.STREAM.MSG.DELETE, which the builder lacks today, so the delete is refused and logged and the re-ask still goes out.
New tool builder_seat_queue {language or seat, limit}: the stream's count and sequences, and each message's ask id, age, step state and whether it still waits. It is answered through a queues state, as reasks is.
Not granted to the builder, and noted on the issue: consumer info and message delete. The controller is frozen, so granting them is the operator's call.
The operator chose this builder-only fix, about 2026-10-26 01:03.
Tests: existing tables extended, including seven given-up messages ahead with a later ask taken, which must re-ask; one integration test extended with the queue read and the delete.
Run locally (the check does not gate):
unit with -race: pass
go vet -tags integration: clean
integration: pass
The reviewer ran the new tests against main: they fail there.
Notes, not blocking, for the issue:
A: each tool call leaves a watch behind (one watch per process would fix it).
B: an id/put-order window can cause one wasted build; a margin or the publish sequence would close it.
C: a stream with more than 5000 messages on one subject shows only an error.
Acceptance after delivery: builder_seat_queue {language: go} answers on shanks, and a given-up ask is asked again by the builder itself within its bound.
Issue 1945, note 62. The fault:
- mesh-delivery #51's own re-ask never fired for mesh-build-node.4e7b118e, which was stuck from 19:06 to 00:47 on 2026-10-25.
- Its Go ask sat behind messages the build seat's worker had given up on. Read live: SEAT_NODE_BUILD_GO held 8 messages with worker pending 0, ack pending 0 and 3 pulls waiting.
- `Ahead > 0` therefore held it back for ever.
The change, in modules/mesh-delivery-builder:
- A message ahead counts only while no node wrote its step and no node took an ask of its kind, or of a kind pulled after it, asked later.
- AskAgain deletes the old message. This needs $JS.API.STREAM.MSG.DELETE, which the builder lacks today, so the delete is refused and logged and the re-ask still goes out.
- New tool builder_seat_queue {language or seat, limit}: the stream's count and sequences, and each message's ask id, age, step state and whether it still waits. It is answered through a `queues` state, as `reasks` is.
- Not granted to the builder, and noted on the issue: consumer info and message delete. The controller is frozen, so granting them is the operator's call.
The operator chose this builder-only fix, about 2026-10-26 01:03.
Tests: existing tables extended, including seven given-up messages ahead with a later ask taken, which must re-ask; one integration test extended with the queue read and the delete.
Run locally (the check does not gate):
- unit with -race: pass
- go vet -tags integration: clean
- integration: pass
The reviewer ran the new tests against main: they fail there.
Notes, not blocking, for the issue:
- A: each tool call leaves a watch behind (one watch per process would fix it).
- B: an id/put-order window can cause one wasted build; a margin or the publish sequence would close it.
- C: a stream with more than 5000 messages on one subject shows only an error.
Acceptance after delivery: builder_seat_queue {language: go} answers on shanks, and a given-up ask is asked again by the builder itself within its bound.
Reviewed-by: review-reask2@shanks at 3e8bd9b0def24c2c386898c57fc7d16fa2a60146
mesh-delivery #51's re-ask never fired for mesh-build-node.4e7b118e: messages the
SEAT_NODE_BUILD_GO workers had given up on stay on the work queue, and each counted
as waiting ahead, so the ask was never asked again (note 62). A message ahead now
waits only when no node wrote its step and no ask of its kind asked after it was
taken; the old message of an ask asked again is deleted from its stream; and
builder_seat_queue (answered by the builder through its queues state, as only its
account may read the stream) shows each message and whether it still waits.
Deliverynovox/mesh-delivery@3e8bd9b0def2 — merged since 2026-10-26T00:24:33Z
Source — source.main moved to novox/mesh-delivery@bcb5aafdbe. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-26 00:23 (new) → proposed (announced): novox/mesh-delivery#56's head announced
2026-10-26 00:23 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 00:24 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-delivery@3e8bd9b0def2` — **merged** since 2026-10-26T00:24:33Z
**Source** — source.main moved to novox/mesh-delivery@bcb5aafdbe80. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-26 00:23 (new) → proposed (announced): novox/mesh-delivery#56's head announced
- 2026-10-26 00:23 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 00:24 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`.
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.
Issue 1945, note 62. The fault:
Ahead > 0therefore held it back for ever.The change, in modules/mesh-delivery-builder:
queuesstate, asreasksis.The operator chose this builder-only fix, about 2026-10-26 01:03.
Tests: existing tables extended, including seven given-up messages ahead with a later ask taken, which must re-ask; one integration test extended with the queue read and the delete.
Run locally (the check does not gate):
The reviewer ran the new tests against main: they fail there.
Notes, not blocking, for the issue:
Acceptance after delivery: builder_seat_queue {language: go} answers on shanks, and a given-up ask is asked again by the builder itself within its bound.
Reviewed-by: review-reask2@shanks at
3e8bd9b0deDelivery
novox/mesh-delivery@3e8bd9b0def2— merged since 2026-10-26T00:24:33ZSource — source.main moved to novox/mesh-delivery@bcb5aafdbe. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.