Skip to content

feat(experiment): validate opt-in Codex instant steering - #248

Draft
abruption wants to merge 3 commits into
mainfrom
abruption/codex-instant-steering-247
Draft

abruption wants to merge 3 commits into
mainfrom
abruption/codex-instant-steering-247

Conversation

@abruption

@abruption abruption commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Summary

Add a local-only experimental steering adapter and an opt-in native/synthetic-provider comparison harness. Refs #247; the issue stays open and this PR remains Draft. Existing-owner side-session research is tracked separately in #245/#246.

The adapter connects to a private owning app-server and uses turn/steer with an exact expectedTurnId. It preserves the same turn and never starts/interrupts/resumes a target, changes a feature, answers approvals, falls back or resends. Metadata dry-run does not prove that the expected turn is still active. Acceptance is not consumption or ACK.

Malformed/contradictory RPC envelopes, invalid error fields and excessive JSON nesting fail with fixed diagnostics; invalid replies after an attempt remain unknown/no-retry. Ordinary connection-close errors cannot erase independently known submission or the original unknown outcome.

The native harness shares one 45-second active-work budget across startup, RPCs and provider waits. Its watchdog sends TERM then KILL after a 0.2-second grace, keeping the leader unreaped until the watchdog has joined. The version probe has a separate five-second timeout. Cleanup has additional bounded waits; these are application budgets, not guarantees against blocked OS calls.

Only experiments/codex_steering/ changes. Installed runtime, native queue, SSH/Relay, package configuration and operational settings are unchanged.

Validation

  • Current macOS arm64/Python 3.13.7 offline suite: 43 tests pass, with development mode and ResourceWarning-as-error. Includes fake RPC/deadline tests, batch-abort behavior and a fixture-owned Python process that ignores TERM; no native Codex or model was started.
  • Independent subagent findings were checked, fixed and re-reviewed. Generator and diff checks pass.
  • Experimental tests are run explicitly; the default repository suite does not discover them. Repository CI is checked separately.

Historical evidence and remaining gates

experiments/codex_steering/RESULTS.md preserves the Codex 0.159.2 native ON/OFF comparison against source ff6aec96948b70d94983af2641a6b67c94faeff5: four conditions with three repetitions each passed using synthetic SSE responses. ON steering produced a second request before release of the first-response gate; OFF steering and either queue condition waited for release. Steering retained the turn, while queue started a new turn. This historical matrix was not rerun for the current hardening changes and does not establish real-provider ACK or latency.

Remaining gates include real-provider/code-mode behavior, existing-owner lifecycle/authorization, current effective feature policy, framing/Reply-To integration, concurrent turn replacement, SSH/Linux/Windows, and any newer native version. expectedTurnId does not prove a session generation or side-UI lifetime. No general-support promotion, merge, publication or operational rollout is included.

@abruption abruption added this to the v1.1.0 milestone Oct 1, 2026
@abruption

Copy link
Copy Markdown
Owner Author

Optional RPC robustness improvement: validate a present error object and exact integer code before accessing fields. Malformed null/array/string errors or missing/null/bool/float/string/container codes enter the existing unknown/no-resend path when a submission was attempted, not traceback or a false success. Existing supported-code refusal semantics remain.

28 in-memory RPC tests pass on Python 3.9.6 and 3.13.7; default discovery and generation checks pass. No actual app-server/model/TUI/ACK or instant-interrupt setting was exercised. Experimental feature gates remain outstanding; Draft retained, no merge/release/deployment.

This branch has not been deployed

No deployments
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