Repository navigation
research(codex): investigate explicit turn/steer input in an isolated TS experiment #141
Description
Current roadmap — 2026-10-13 KST
- Target milestone: Research — Native Codex input.
- Planning priority: P2 (
priority:P2). - Dependencies/order: Independent research tracks; reuse feat(codex): add a shared bounded app-server client #71 contract knowledge without making these 0.4.0 release blockers.
- Remaining scope: No shipping version until native/provider/owner lifecycle/race qualification. Isolated Drafts remain experiments; productization needs reviewed scope.
This section supersedes older milestone/version/priority statements below. Existing acceptance criteria, evidence limits and historical records remain applicable. Versioned milestones are provisional planning targets, not committed dates or implementation/live-test/merge/release authorization. P1 means a milestone prerequisite/current-release item; P2 a planned extension/research track; P3 later dependent work.
Scope and priority
P2 isolated experiment, Future — Agent integrations. User requested a TS issue and Draft PR for native turn/steer input. This is distinct from #81/Draft #82 Side Session and #71/Draft #108 queue-only app-server foundations; do not expand ordinary send or the four-issue 0.4 milestone.
Reference Python #247 / Draft #248, reviewed source 6ebedde93d62d67e750fd5c32c18b8f6564be86d. Official app-server steering contract: expectedTurnId must match the active turn; accepted input is not delivery/ACK. Python's native0.159.2 experiment results are historical and do not qualify this TS implementation or current native versions.
Acceptance criteria
- Distribution-excluded
experiments/codex_steeringpackage with a local-only explicit opt-in adapter to an existing operator-selected owner. Do not start/resume/fork/wake/replace a server, select arbitrary peer routes, inject keystrokes or mutate queue/state/config. - Validate private owned Unix socket/parent, exact supported server version/home/loaded thread, active status/direct-input capability and exact nonempty expected turn. No permissions, approval answers, model/cwd/sandbox overrides or automatic feature enablement.
- Send exactly one
turn/steerwith native expectedTurnId. Preserve queue-only defaults; noturn/start,turn/interrupt, fallback/reconnect/resend after possible effect. Accepted != consumed/ACK/completed. A dry-run does not prove native expected-turn acceptance. - Report
instant_interruptonly as an exact thread feature snapshot. Required unavailable/disabled snapshot refuses pre-effect; snapshots do not establish instantaneous preemption or rollback of external side effects. - Bounded RPC count/frames/notifications/total monotonic deadline; cleanup only the owned connection, no server/process kill. Test wrong turn, idle/missing target, wrong home/version, malformed replies, server interactions, disconnect/timeout and concurrent requests.
- Run local pure and Unix fake-owner transport fixtures with zero native/model/user-session input, then prepare a Draft PR with explicit evidence limits and current-head CI/review.
- Separate follow-up gate: authorized pinned native loopback streaming fixture compares queue/steer × feature OFF/ON; real-provider/code-mode, actual owner lifecycle/authorization, turn-replacement races, SSH/Linux/Windows and peer-message framing remain unqualified until tested. Never copy Python results as TS evidence.
Boundaries
Issue/Draft experiment and hermetic tests only; no general-use support, canonical runtime/version/lock changes, merge, release/tag/npm publication, existing-session steering or operations change. Keep the issue open while general-use gates remain. Message content is private effect input, not diagnostics; notifications are bounded/discarded and never interpreted as receipt ACK. Metadata RPCs can contain previews; do not claim a body-free native protocol.
Activity