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
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
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
Deliverynovox/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`.
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 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
4ee3cc0c7fhttps://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Delivery
novox/mesh-tools@4ee3cc0c7f4c— merged since 2026-11-09T17:55:20ZSource — source.main moved to novox/mesh-tools@20979201eb. 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.