The tool runner ends and restarts a bundle that writes an over-long line, and says an unanswered call and a refused answer (issue 1966 S8) #67

Merged
mesh-tools merged 4 commits from fix/1966-s8-runner-frozen into main 2026-11-09 17:55:18 +00:00
Member

Issue 1966 S8, the thorough part (prepare hq .work/1966-s8-hand-acts.md).

The tool runner froze silently when a bundle wrote a line over its 16 MiB reader cap: the reader stopped, never checked the error, and every later call timed out until a restart (mesh-hand-acts on novox, four times).

  • internal/launch/launch.go: a bounded line reader; an over-long line is said in the journal, the bundle is ended and restarted, and a call caught by it fails with the cap's reason; the line cap is read once in Start (no race with a test).

  • An unanswered call is logged with its caller.

  • internal/bus/bus.go: a refused answer publish to an _INBOX subject is logged once per caller prefix per minute instead of dropped; old entries are forgotten.

  • Quick fix: none would hold; the module-side bound is mesh-catalog's fix/1966-s8-hand-acts-window.

  • Thorough fix (this): the runner never freezes on any module's answer.

Tests: TestAnOverlongLineAndAnUnansweredCallAreSaid (two rows; fails with the Kill removed: "the call hung for 10s"), TestARefusedAnswerIsSaidOncePerMinute; go test -race -count=10 ./internal/launch passes. Rebased on #66 (2ea4f019), rebase checked. Reaches every tool runner on all four machines, so it takes the operator's normal Approve.

Reviewed-by: mesh-code-reviewer for lead-47@shanks at 4ee3cc0c7f

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Issue 1966 S8, the thorough part (prepare hq .work/1966-s8-hand-acts.md). The tool runner froze silently when a bundle wrote a line over its 16 MiB reader cap: the reader stopped, never checked the error, and every later call timed out until a restart (mesh-hand-acts on novox, four times). - `internal/launch/launch.go`: a bounded line reader; an over-long line is said in the journal, the bundle is ended and restarted, and a call caught by it fails with the cap's reason; the line cap is read once in Start (no race with a test). - An unanswered call is logged with its caller. - `internal/bus/bus.go`: a refused answer publish to an _INBOX subject is logged once per caller prefix per minute instead of dropped; old entries are forgotten. - Quick fix: none would hold; the module-side bound is mesh-catalog's fix/1966-s8-hand-acts-window. - Thorough fix (this): the runner never freezes on any module's answer. Tests: TestAnOverlongLineAndAnUnansweredCallAreSaid (two rows; fails with the Kill removed: "the call hung for 10s"), TestARefusedAnswerIsSaidOncePerMinute; go test -race -count=10 ./internal/launch passes. Rebased on #66 (2ea4f019), rebase checked. Reaches every tool runner on all four machines, so it takes the operator's normal Approve. Reviewed-by: mesh-code-reviewer for lead-47@shanks at 4ee3cc0c7f4c31f621984a813d4240316c8fabbc https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-tools added 4 commits 2026-11-09 17:23:53 +00:00
The reader of a bundle's stdout stopped at a line over 16 MiB without a word and the bundle's next write
blocked for good: every call of the module then timed out, unheard of. Now the line is said, the bundle ended
and started again by the exit path. A call the bundle does not answer in time is logged with tool and caller,
and a refused publish of an answer (to a caller's inbox) is said once per subject per minute.

Quick fix: only the bundle that met it (mesh-hand-acts' answer is cut by its own module). Thorough fix, chosen:
the runner guards every bundle, so the kind (a silent freeze of a module runtime) cannot recur for any module.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Runner: the line cap is read once in Start, not per line from a goroutine (issue 1966, review round 3)
mesh/check being carried to 4ee3cc0c7f4c on 20979201eb56 | from 2ea4f019e594
mesh/delivery merged: source.main moved to novox/mesh-tools@20979201eb56
4ee3cc0c7f
Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Author
Member

Delivery novox/mesh-tools@4ee3cc0c7f4c — merged since 2026-11-09T17:55:20Z

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

Transitions

  • 2026-11-09 17:23 (new) → proposed (announced): novox/mesh-tools#67's head announced
  • 2026-11-09 17: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-11-09 17:55 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-tools@4ee3cc0c7f4c` — **merged** since 2026-11-09T17:55:20Z **Source** — source.main moved to novox/mesh-tools@20979201eb56. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-09 17:23 (new) → proposed (announced): novox/mesh-tools#67's head announced - 2026-11-09 17: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-11-09 17:55 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 20979201eb into main 2026-11-09 17:55:18 +00:00
mesh-tools deleted branch fix/1966-s8-runner-frozen 2026-11-09 17:55:18 +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-tools#67