Skip to content

Codex tmux: deliver queued scheduler wakes on codex-owned evidence (#1006) - #1007

Merged
olegbrok merged 1 commit into
mainfrom
codex/issue-1006-codex-queued-delivery
Aug 5, 2026
Merged

Codex tmux: deliver queued scheduler wakes on codex-owned evidence (#1006)#1007
olegbrok merged 1 commit into
mainfrom
codex/issue-1006-codex-queued-delivery

Conversation

@olegbrok

@olegbrok olegbrok commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • let Codex tmux scheduler wakes pass the shared conservative pane-busy gate when Codex-owned state proves the transport is safe: no prompt in hand, queued, or inflight; no active tool; and no active transcript turn
  • map rollout event_msg / user_message entries back to the exact queued scheduler prompt and feed the existing shared positive-receipt contract
  • pre-reserve the matching FIFO entry so a same-read user_messagetask_complete sequence cannot outrun receipt association
  • preserve the inherited scheduler task, REPL lock, acceptance/retirement semantics, and existing observability literals

Root cause

The queued scheduler route uses TmuxSession._scheduler_pane_busy, which requires fresh persisted Claude Code working/idle-hook status. Codex tmux sessions do not emit those Claude Code hooks, so a Codex agent could look fully queued in the dashboard while every trigger stalled before pane input. Ordinary direct sends used the message worker and were unaffected.

Impact

This is additive and Codex-only. No shared TmuxSession / Claude Code production or test file changed, so the Claude Code fleet's behavior remains byte-identical. The Codex override remains fail-closed on any local overlap evidence.

Validation

  • pre-fix discriminator reproduced zero pane input for a queued Codex scheduler wake
  • 186 passed / 1 skipped across Codex session/transcript variants plus the exact Claude Code scheduler gate pin
  • 463 passed / 1 skipped across the broader Codex tmux/transcript and shared tmux suites
  • Ruff, targeted bytecode compilation, and git diff --check passed
  • the broader suite reached 830 passed / 2 skipped before tests/test_api.py::TestAPI::test_manual_dream_uses_full_persisted_conversation_history; that exact failure reproduced on detached base under the inherited PINKY_DREAM_TRANSPORT=tmux host override and is unrelated

Frozen identity

  • base: 9b38d63806291d6fa20a04a44b3ee38e30aa61d5
  • head: c73c61f496ad5851a0abfdab38962e2094e3dc66
  • tree: b6ce71af837591060dacb8de07b0e49c4dbc00d8

Fixes #1006

🤖 Opened by Murzik

@olegbrok olegbrok left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at exact head c73c61f (pre-push worktree review, full diff read): additive codex-only — zero CC production/test files touched; scheduler gate override keeps the conservative no-overlap rule on codex-owned evidence (root cause: codex sessions never emit the CC working/idle hooks the inherited gate requires); receipt mapping rides the exact-match transcript-observation contract with same-read FIFO pre-reserve; None path covered by _mark_transport_accepted's base contract; tailer on_entry callback fails loud-not-fatal with a counter. Pre-fix discriminators prove the mechanism (stale working status → 0 pastes). Full-suite single failure classified pre-existing/environmental at base (dream-transport env leak, unrelated node). Fixes the live gomez incident on the Pi (#1006). VERDICT: APPROVE (as comment — shared-account self-approve block). 🤖 Reviewed by Barsik

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant