fix: wait for tmux client before replaying assistant resume command #73
GitHub Actions / tests (bash 5)
succeeded
May 5, 2026 in 0s
All 219 tests pass in 0s
Annotations
Check notice on line 0 in .github
github-actions / tests (bash 5)
219 tests found
There are 219 tests, see "Raw output" for the full list of tests.
Raw output
clean ‑ Clean removes corrupt PID state file
clean ‑ Clean removes stale files
clean ‑ Clean removes zero-PID state file
clean ‑ Stale state file removed
cli_args ‑ Backward compat: no crash when model absent from state file
cli_args ‑ Backward compat: session_id present
cli_args ‑ Binary path prefix stripped
cli_args ‑ Claude bare binary
cli_args ‑ Claude full path
cli_args ‑ Claude no extra flags
cli_args ‑ Claude strip --resume
cli_args ‑ Claude strip --resume= (equals)
cli_args ‑ Codex bare resume
cli_args ‑ Codex strip resume
cli_args ‑ Enriched: cli_args has --dangerously-skip-permissions
cli_args ‑ Enriched: env from state file
cli_args ‑ Enriched: env has tmux_pane
cli_args ‑ Enriched: model from state file
cli_args ‑ Model fallback: extracted from --model in CLI args
cli_args ‑ Multiple spaces normalized
cli_args ‑ Node.js double-binary bare
cli_args ‑ Node.js double-binary no flags
cli_args ‑ Node.js double-binary stripped
cli_args ‑ OpenCode strip --session
cli_args ‑ OpenCode strip --session= (equals)
cli_args ‑ OpenCode strip -s
detect_tool ‑ detect '/bin/bash /usr/local/bin/opencode -s ses_456'
detect_tool ‑ detect '/opt/homebrew/bin/opencode -s ses_456'
detect_tool ‑ detect '/usr/local/bin/claude'
detect_tool ‑ detect 'claude --resume ses_123'
detect_tool ‑ detect 'codex resume ses_789'
detect_tool ‑ detect 'opencode -s ses_456'
detect_tool ‑ detect bare 'claude'
detect_tool ‑ detect bare 'codex'
detect_tool ‑ detect bare 'opencode'
detect_tool ‑ exclude '/usr/bin/opencode run pyright'
detect_tool ‑ exclude 'opencode run pyright'
detect_tool ‑ ignore 'bash'
detect_tool ‑ ignore 'node server.js'
detect_tool ‑ ignore 'vim'
detect_tool ‑ parity expected classification: /opt/homebrew/bin/opencode -s ses_456
detect_tool ‑ parity expected classification: /tmp/tools/codex-helper --foo
detect_tool ‑ parity expected classification: /usr/bin/codex resume ses_789
detect_tool ‑ parity expected classification: /usr/bin/opencode run pyright-langserver.js
detect_tool ‑ parity expected classification: /usr/local/bin/claude --resume ses_123
detect_tool ‑ parity expected classification: bash /usr/local/bin/opencode -s ses_456
detect_tool ‑ parity expected classification: claude --resume ses_123
detect_tool ‑ parity expected classification: codex resume ses_789
detect_tool ‑ parity expected classification: opencode -s ses_456
detect_tool ‑ parity expected classification: opencode run pyright-langserver.js
detect_tool ‑ parity expected classification: python3 -c 'import time; time.sleep(300)' --profile codex
detect_tool ‑ parity save-awk matches detect_tool: /opt/homebrew/bin/opencode -s ses_456
detect_tool ‑ parity save-awk matches detect_tool: /tmp/tools/codex-helper --foo
detect_tool ‑ parity save-awk matches detect_tool: /usr/bin/codex resume ses_789
detect_tool ‑ parity save-awk matches detect_tool: /usr/bin/opencode run pyright-langserver.js
detect_tool ‑ parity save-awk matches detect_tool: /usr/local/bin/claude --resume ses_123
detect_tool ‑ parity save-awk matches detect_tool: bash /usr/local/bin/opencode -s ses_456
detect_tool ‑ parity save-awk matches detect_tool: claude --resume ses_123
detect_tool ‑ parity save-awk matches detect_tool: codex resume ses_789
detect_tool ‑ parity save-awk matches detect_tool: opencode -s ses_456
detect_tool ‑ parity save-awk matches detect_tool: opencode run pyright-langserver.js
detect_tool ‑ parity save-awk matches detect_tool: python3 -c 'import time; time.sleep(300)' --profile codex
hooks ‑ Minimal input has no model field
hooks ‑ Minimal input still has tool field
hooks ‑ Minimal input still produces valid session_id
hooks ‑ SessionEnd hook removes state file
hooks ‑ SessionStart hook adds ppid field
hooks ‑ SessionStart hook adds timestamp
hooks ‑ SessionStart hook adds tool field
hooks ‑ SessionStart hook captures SHELL
hooks ‑ SessionStart hook captures TMUX_PANE
hooks ‑ SessionStart hook captures user-configured env var
hooks ‑ SessionStart hook creates state file
hooks ‑ SessionStart hook preserves model
hooks ‑ SessionStart hook preserves permission_mode
hooks ‑ SessionStart hook preserves source
hooks ‑ SessionStart hook preserves special chars in session_id
hooks ‑ SessionStart hook produces valid JSON with special chars
hooks ‑ SessionStart hook writes correct session ID
install ‑ Claude SessionEnd hook present
install ‑ Claude SessionStart hook present
install ‑ Claude settings.json created
install ‑ Install is idempotent (no duplicate hooks)
install ‑ OpenCode plugin symlinked
install ‑ TPM installed
install ‑ tmux.conf exists
install ‑ tmux.conf has hook paths
install ‑ tmux.conf has marker block
pane_has_assistant ‑ pane_has_assistant correctly ignores non-assistant pane
pane_has_assistant ‑ pane_has_assistant finds assistant behind npx wrapper
pane_has_assistant ‑ pane_has_assistant finds direct child
posix_quote ‑ posix_quote empty string
posix_quote ‑ posix_quote path with dollar
posix_quote ‑ posix_quote path with double quote
posix_quote ‑ posix_quote path with single quote
posix_quote ‑ posix_quote path with space
posix_quote ‑ posix_quote plain path
posix_quote ‑ posix_quote round-trips through eval
regression ‑ Claude --resume extraction
regression ‑ Claude --resume with UUID
regression ‑ Claude --resume with path
regression ‑ Claude --resume=id (equals form)
regression ‑ Claude bare (no --resume)
regression ‑ Claude corrupt state file falls through to args
regression ‑ Claude empty state file falls through to args
regression ‑ Claude state file beats --resume arg
regression ‑ Codex bare (no resume)
regression ‑ Codex resume arg fallback extracts session ID
regression ‑ Codex resume extraction
regression ‑ Codex resume with path
regression ‑ Codex rollout dedup e2e: two panes same cwd get distinct sessions (ses_dedup_pane1 vs ses_dedup_pane2)
regression ‑ Codex rollout dedup: two panes same cwd get distinct sessions
regression ‑ Codex rollout e2e: session ID from rollout file
regression ‑ Codex rollout lookup works with restricted hook PATH
regression ‑ Codex rollout no match for different cwd
regression ‑ Codex rollout session file lookup by cwd
regression ‑ Codex state DB dedup: two calls get distinct sessions (ses_statedb_active vs ses_statedb_old)
regression ‑ Codex state DB takes priority over rollout JSONL
regression ‑ Codex state DB: finds active thread by cwd
regression ‑ Codex state DB: no match for different cwd
regression ‑ Fallback correctly found session ID from --resume args instead
regression ‑ Found Claude child PID (4890) under shell PID (4876)
regression ‑ OpenCode --session extraction
regression ‑ OpenCode --session=id (equals form)
regression ‑ OpenCode -s extraction
regression ‑ OpenCode DB fallback can be disabled
regression ‑ OpenCode DB fallback finds session by cwd
regression ‑ OpenCode DB fallback picks most recent by time_updated
regression ‑ OpenCode DB fallback returns empty for unknown cwd
regression ‑ OpenCode DB other dir returns correct session
regression ‑ OpenCode bare (no -s, no DB)
regression ‑ PATH unchanged when python3 already available
regression ‑ Save correctly ignores state file keyed by shell PID
regression ‑ Save doesn't crash on corrupt state file
regression ‑ Save finds state file keyed by Claude child PID
regression ‑ Save gracefully handles corrupt state file
regression ‑ State file session ID takes priority over --resume arg
regression ‑ Wrapper pass: only one OpenCode entry emitted
regression ‑ Wrapper pass: state-file session beats DB fallback
restore ‑ @resurrect-processes does not include assistants
restore ‑ Default save interval is 5 when unset
restore ‑ Guard 1: restore skips panes with non-shell foreground process
restore ‑ Guard 2: restore skips panes with background assistant
restore ‑ Restore attempted resume with missing cwd
restore ‑ Restore attempted resume with tricky cwd
restore ‑ Restore doesn't crash on cwd with single quote
restore ‑ Restore doesn't crash on missing cwd
restore ‑ Restore doesn't crash on non-shell pane
restore ‑ Restore doesn't crash on unknown tool
restore ‑ Restore log created
restore ‑ Restore log mentions claude
restore ‑ Restore log mentions codex
restore ‑ Restore log mentions opencode
restore ‑ Restore logs unknown tool
restore ‑ Restore sent claude --resume
restore ‑ Restore sent codex resume
restore ‑ Restore sent opencode -s
restore ‑ Restore skips non-shell pane
restore ‑ Restore uses 'command claude' prefix
restore ‑ Restore uses 'command codex' prefix
restore ‑ Restore uses 'command opencode' prefix
restore ‑ User save interval preserved when already set
restore_enriched ‑ Backward compat: bare resume command
restore_enriched ‑ Backward compat: restore still works
restore_enriched ‑ Empty cli_args: restore still works
restore_enriched ‑ Empty cli_args: tool identified
restore_enriched ‑ Env filter: MY_CUSTOM restored
restore_enriched ‑ Env filter: tmux_pane correctly excluded
restore_enriched ‑ Restore includes --dangerously-skip-permissions
restore_enriched ‑ Restore includes --model
restore_enriched ‑ Restore includes ANTHROPIC_BASE_URL env prefix
restore_special_chars ‑ Bracket model: model name quoted
restore_special_chars ‑ Bracket model: session ID present
restore_special_chars ‑ Bracket model: uses command claude
restore_special_chars ‑ Restore doesn't crash with bracket model name
save ‑ Argument value 'codex' does not trigger false-positive detection
save ‑ Claude session ID extracted
save ‑ Codex session ID extracted from session-tags.jsonl
save ‑ Detected at least 3 assistant sessions (got 3)
save ‑ LSP subprocess excluded from detection
save ‑ Log warns about opencode without session ID
save ‑ OpenCode session ID extracted from plugin state file
save ‑ Save detects opencode launched via npx
save ‑ assistant-sessions.json created
strip_pane_contents ‑ Assistant pane content stripped (assistant-session:0.0)
strip_pane_contents ‑ Assistant pane content stripped (assistant-session:1.0)
strip_pane_contents ‑ Non-assistant pane content preserved (regular-session:0.0)
strip_pane_contents ‑ Non-assistant pane content unchanged
strip_pane_contents ‑ Strip function logs count of removed panes
strip_pane_contents ‑ Strip leaves archive untouched when no assistant sessions
strip_pane_contents ‑ Strip no-ops gracefully when archive missing
tpm ‑ Commented TPM line preserved (not captured as init)
tpm ‑ Custom TPM path preserved during upgrade
tpm ‑ Hook paths present in marker block
tpm ‑ Install adds hook alongside malformed entry
tpm ‑ Install doesn't crash on hook entry without .command
tpm ‑ Install preserves existing malformed entries
tpm ‑ Legacy source-file line removed on upgrade
tpm ‑ Marker block added on upgrade
tpm ‑ TPM init line is after marker block
tpm ‑ TPM: Claude SessionEnd hook present
tpm ‑ TPM: Claude SessionStart hook present
tpm ‑ TPM: Claude settings.json created
tpm ‑ TPM: Idempotent (no duplicate hooks)
tpm ‑ TPM: OpenCode plugin symlinked
tpm ‑ Unconfigure removes marker block
tpm ‑ Uninstall doesn't crash on hook entry without .command
tpm ‑ Uninstall preserves non-matching entries
tpm ‑ Upgrade: no duplicate SessionEnd hooks after upgrade
tpm ‑ Upgrade: no duplicate SessionStart hooks after upgrade
tpm ‑ Upgrade: old unquoted hook present before upgrade
tpm ‑ Upgrade: uninstall removes old unquoted cleanup hooks
tpm ‑ Upgrade: uninstall removes old unquoted hooks
tpm ‑ User settings preserved after unconfigure
tpm ‑ User settings preserved during upgrade
uninstall ‑ Claude hooks removed after uninstall
uninstall ‑ OpenCode plugin removed
uninstall ‑ tmux.conf hook paths removed
uninstall ‑ tmux.conf marker block removed
Loading