Builder: given-up asks no longer hold a re-ask back for ever, and a tool reads a build seat's queue (issue 1945) #56

Merged
mesh-tools merged 1 commits from fix/1945-reask-dead-ahead into main 2026-10-26 00:24:31 +00:00
Member

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 3e8bd9b0de

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-tools added 1 commit 2026-10-26 00:23:49 +00:00
Builder: count only deliverable asks ahead, drop the old message of an ask asked again, and read a seat's queue (issue 1945)
mesh/delivery merged: source.main moved to novox/mesh-delivery@bcb5aafdbe80
mesh/check pass 3e8bd9b0def2 on bcb5aafdbe80 | unit 168 run, 472 kept | integration 178 run, 538 kept | composition passed on shanks
3e8bd9b0de
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.
Author
Member

Delivery novox/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`.
mesh-tools merged commit bcb5aafdbe into main 2026-10-26 00:24:31 +00:00
mesh-tools deleted branch fix/1945-reask-dead-ahead 2026-10-26 00:24:31 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#56