send-message.sh: unknown tmux target → no live-roster hint + installer1↔installer-1 naming-drift misroutes (20 fails/13 sessions/24h) #864

Open
opened 2026-07-21 09:00:37 +00:00 by jason.woltje · 0 comments
Owner

Problem

send-message.sh -t <target> (the mandated inter-agent comms channel) fails to deliver whenever the named tmux target session does not exist — dead, renamed, never-started, or mistyped. The tool does fail loudly (non-zero exit + ERROR: tmux target not found: web1:<target>), so this is not a silent drop — but the rate of these misroutes is high and recurring, and each one is a failed inter-agent notify that stalls coordination until the sender notices the non-zero and retries (and some senders continue without noticing).

Evidence (24h fleet digest, 2026-07-21 — digest-20260721T084904Z)

Counting only genuine is_error tool-results (prose/board-text mentions excluded, self-lane excluded): 20 real failures across 13 distinct sessions in the window. Confirmed source is send-message.sh -t <target> (e.g. -t coder5, -t rev0, -t uc-coder-1).

Targets that failed to resolve (normalized, across sessions): installer1 and installer-1 (both spellings for the same logical session — a naming-drift trap), mosaic-100, uc-coder-1, edith / edith-discord, mos-claude, pi-orchestrator, fan-c, dedupe, missing.

Root cause

Two compounding factors:

  1. No canonical roster / name normalization. installer1 vs installer-1 are two spellings of one session; nothing normalizes or validates against a roster SSOT, so a plausible-but-wrong spelling routes to nowhere.
  2. No recovery affordance on failure. When the target is unknown, the error names the missing target but does not list the live sessions, so the sender has no immediate way to self-correct and typically burns extra turns probing tmux list-sessions (or gives up).

Blast radius

Medium-frequency (13 sessions/24h), coordination-critical: a failed notify is an invisible-until-noticed handoff gap on the only sanctioned inter-agent channel. Naming drift means even careful agents misroute. Distinct from #841 (wrong path to the tool → Exit 127) and complementary to #822 (broadcast via roster SSOT — same roster dependency, different feature).

Proposed fix (low-friction, defensive)

  1. Roster-aware failure output: when tmux has-session fails for the target, print the live session list (tmux list-sessions -F '#S') to stderr and exit non-zero — turns a dead-end into a one-glance self-correct. ~5 lines.
  2. Name normalization / nearest-match hint: normalize obvious drift (strip/insert the hyphen; case-fold) against the live roster and, if exactly one close match exists, either use it or suggest it (did you mean 'installer-1'?). Conservative — suggest-only if ambiguous.
  3. (Optional, ties to #822) back both by the roster SSOT so target names have one canonical spelling fleet-wide.

Effort

Small — (1) alone is a few lines and kills most of the wasted-turn cost; (2) is a modest add. Framework/shared-runtime (packages/mosaic/framework/tools/tmux/send-message.sh, SSOT mosaicstack/stack).


Filed by enhance nightly pass 2026-07-21. Evidence: fleet digest digest-20260721T084904Z; count from is_error tool-results across 13 sessions (uconnect coordinator + workers, home-hermes, 2723-di05, stack-812-pr-review). Shared-runtime → route/merge via Mos + MS-LEAD; enhance does not modify the framework directly (AGENTS.md rule 38).

## Problem `send-message.sh -t <target>` (the mandated inter-agent comms channel) fails to deliver whenever the named tmux target session does not exist — dead, renamed, never-started, or mistyped. The tool **does** fail loudly (non-zero exit + `ERROR: tmux target not found: web1:<target>`), so this is *not* a silent drop — but the **rate** of these misroutes is high and recurring, and each one is a failed inter-agent notify that stalls coordination until the sender notices the non-zero and retries (and some senders continue without noticing). ## Evidence (24h fleet digest, 2026-07-21 — digest-20260721T084904Z) Counting only genuine `is_error` tool-results (prose/board-text mentions excluded, self-lane excluded): **20 real failures across 13 distinct sessions** in the window. Confirmed source is `send-message.sh -t <target>` (e.g. `-t coder5`, `-t rev0`, `-t uc-coder-1`). Targets that failed to resolve (normalized, across sessions): `installer1` **and** `installer-1` (both spellings for the same logical session — a naming-drift trap), `mosaic-100`, `uc-coder-1`, `edith` / `edith-discord`, `mos-claude`, `pi-orchestrator`, `fan-c`, `dedupe`, `missing`. ## Root cause Two compounding factors: 1. **No canonical roster / name normalization.** `installer1` vs `installer-1` are two spellings of one session; nothing normalizes or validates against a roster SSOT, so a plausible-but-wrong spelling routes to nowhere. 2. **No recovery affordance on failure.** When the target is unknown, the error names the missing target but does not list the *live* sessions, so the sender has no immediate way to self-correct and typically burns extra turns probing `tmux list-sessions` (or gives up). ## Blast radius Medium-frequency (13 sessions/24h), coordination-critical: a failed notify is an invisible-until-noticed handoff gap on the *only* sanctioned inter-agent channel. Naming drift means even careful agents misroute. Distinct from #841 (wrong *path* to the tool → Exit 127) and complementary to #822 (broadcast via roster SSOT — same roster dependency, different feature). ## Proposed fix (low-friction, defensive) 1. **Roster-aware failure output:** when `tmux has-session` fails for the target, print the live session list (`tmux list-sessions -F '#S'`) to stderr and exit non-zero — turns a dead-end into a one-glance self-correct. ~5 lines. 2. **Name normalization / nearest-match hint:** normalize obvious drift (strip/insert the hyphen; case-fold) against the live roster and, if exactly one close match exists, either use it or suggest it (`did you mean 'installer-1'?`). Conservative — suggest-only if ambiguous. 3. (Optional, ties to #822) back both by the roster SSOT so target names have one canonical spelling fleet-wide. ## Effort Small — (1) alone is a few lines and kills most of the wasted-turn cost; (2) is a modest add. Framework/shared-runtime (`packages/mosaic/framework/tools/tmux/send-message.sh`, SSOT mosaicstack/stack). --- _Filed by `enhance` nightly pass 2026-07-21. Evidence: fleet digest digest-20260721T084904Z; count from `is_error` tool-results across 13 sessions (uconnect coordinator + workers, home-hermes, 2723-di05, stack-812-pr-review). Shared-runtime → route/merge via Mos + MS-LEAD; enhance does not modify the framework directly (AGENTS.md rule 38)._
jason.woltje added the fleet-enhancement label 2026-07-21 09:00:37 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#864