Skip to content

fix(herd): allow-set-title is tmux 3.5, and a tmux that rejects it gets a retry - #503

Merged
ralyodio merged 1 commit into
mainfrom
fix/tmux-pin-title-gate
Sep 13, 2026
Merged

ralyodio merged 1 commit into
mainfrom
fix/tmux-pin-title-gate

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

What

After #502, every herd session start on ubuntu-latest failed with invalid option: allow-set-title, and the three tmux-backed tests (survival, tile round trip, sidebar swap) went red on both CI jobs. The runner ships tmux 3.4; the option arrived in 3.5.

  • tmuxCanPinTitle now requires 3.5.
  • startSession also learns the answer the hard way: if tmux rejects the pin, it kills the half-made session (tmux stops at the command it rejects, after the session exists), remembers "no" for the process, and retries with the plan an older tmux understands. A wrong version guess costs one retry, never a member.

Verified

  • Full suite locally (tmux 3.6): 2968 tests, 0 failures.
  • New test drives startSession with a fake tmux that claims 3.5 but rejects the option: two new-session attempts, the second without the pin, the session removed in between, member started.
  • Baseline: main's own herd.mjs fails the same three tests on Debian's tmux 3.3a (a separate, pre-existing paneIndex crash on that version), so 3.4 on the runner is the case this fixes.

🤖 Generated with Claude Code

https://claude.ai/code/session_014HMV1QDcVY1xiaWWrZQM4S

…ts a retry

CI on ubuntu-latest (tmux 3.4) answered `invalid option: allow-set-title`
to every session start after #502, so no herd member could start there and
the tmux-backed tests went red. The option arrived in 3.5, not 3.4.

tmuxCanPinTitle now requires 3.5. And because a version string is a guess
about a binary, startSession also learns the answer the hard way: when tmux
rejects the pin it kills the half-made session (tmux stops at the command it
rejects, after the session exists), remembers "no" for the rest of the
process, and starts the member with the plan an older tmux understands. A
wrong guess costs one retry, never a member.

Verified: the full suite locally (tmux 3.6); the survival, tile and pinned-
title suites in a node:22 container with the fake-runner fallback; and, as
a baseline, main's own herd.mjs fails the same three tmux tests on Debian's
3.3a, so that older crash is pre-existing and separate.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014HMV1QDcVY1xiaWWrZQM4S
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

0 finding(s) in the 2 file(s) this pull request changes.

Nothing in the files this pull request changes.

93 pre-existing finding(s) elsewhere in the repository — **HIGH/CRITICAL**: 8 | **MEDIUM**: 75 | **LOW**: 10

Not introduced by this pull request. The full set is in the Security tab.

Severity Rule Location
HIGH js-ssrf-outbound-request apps/pwa/public/sw.js:45
HIGH tls-verification-disabled apps/pwa/src/lib/moshpit-gateway.mjs:299
HIGH sh-remote-script-execution install.sh:86
HIGH sh-remote-script-execution install.sh:90
HIGH sh-remote-script-execution install.sh:202
HIGH sh-remote-script-execution install.sh:213
HIGH sh-remote-script-execution install.sh:219
HIGH tls-verification-disabled src/dns.mjs:766
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:139
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:153
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:179
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:373
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:377
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:422
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:671
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:867
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:869
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:928
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:974
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:1044

…and 73 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 5338a59 into main Sep 13, 2026
6 checks passed
@ralyodio
ralyodio deleted the fix/tmux-pin-title-gate branch September 13, 2026 06:57
@ralyodio ralyodio mentioned this pull request Sep 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant