Skip to content

feat(orchestrator): surface input-blocked Codex sessions (port openai/symphony#66) - #25

Merged
hniska-identione merged 1 commit into
mainfrom
hakan/surface-input-blocked-codex-sessions
May 26, 2026
Merged

feat(orchestrator): surface input-blocked Codex sessions (port openai/symphony#66)#25
hniska-identione merged 1 commit into
mainfrom
hakan/surface-input-blocked-codex-sessions

Conversation

@hniska-identione

Copy link
Copy Markdown

Context

Port of upstream openai#66. Without it, a Codex session that needs operator input retries until exhausted instead of surfacing that it is blocked.

TL;DR

Park Codex issues needing operator input as blocked instead of retrying; surface in state/API/dashboard.

Summary

  • Orchestrator parks an issue as blocked when Codex reports a turn/* input request, approval prompt, or MCP elicitation
  • Blocked issues stay claimed and are excluded from dispatch; re-checked each tick and released on terminal/non-active/re-route/vanish
  • Surfaced in runtime state, the JSON API (status: "blocked"), and the dashboard
  • In-memory only; cleared on restart
  • Codex-adapter-only by design (the Claude sidecar runs unattended); scope documented in elixir/README.md and SPEC.md

Alternatives

Test Plan

  • make -C elixir all

)

Port upstream's "Surface input-blocked Symphony sessions" (3365695, #66). When
Codex reports it needs operator input — a turn/* input request, an approval
prompt, or an MCP elicitation — the orchestrator keeps the issue claimed and
parks it as `blocked` instead of retrying until exhausted. Blocked issues are
re-checked against Linear each tick and released when the issue goes terminal,
non-active, re-routed, or vanishes. Surfaced in runtime state, the JSON API
(`status: "blocked"`), and the dashboard. Blocked state is in-memory only and
clears on restart.

Codex-adapter-only by design: the Claude SDK sidecar runs unattended
(permission_mode: dontAsk, can_use_tool unwired) and emits none of the
input-required signals the detector keys off, so a claude session never blocks.
Adapter scope is documented in elixir/README.md and SPEC.md §4.1.8 rather than
forcing a synthetic blocker into claude's unattended posture.

The other two upstream commits we were behind are intentionally skipped:
#71 (pr-description-lint hardening) — GitHub Actions is disabled on this fork;
the README Vimeo-link swap — cosmetic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hniska-identione
hniska-identione merged commit 7dfad44 into main May 26, 2026
@hniska-identione
hniska-identione deleted the hakan/surface-input-blocked-codex-sessions branch May 26, 2026 10:23
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.

2 participants