Skip to content

Integration batch V (#67, #69, #70) - #71

Merged
Juliusolsson05 merged 19 commits into
mainfrom
integration/batch-2026-09-27-cxh-v
Sep 27, 2026
Merged

Juliusolsson05 merged 19 commits into
mainfrom
integration/batch-2026-09-27-cxh-v

Conversation

@Juliusolsson05

Copy link
Copy Markdown
Owner

Integration batch V for codex-headless: three READY PRs from W1, merged into this branch through GitHub. The branch was cut from a fresh origin/main (b225d45).

PR Change Head
#67 Detects the Codex 0.156+ Folder access dialog and sends its keystrokes d9a1305
#69 Issues the input profile for recorded Codex 0.157.1 a425c84
#70 Keeps the newest Responses request body beside the events file 880c6d8

Each member passed merge-gate.sh --dry before it joined: 3 reviewers MERGE-READY, a disposition posted, CI green on its exact head, 0 commits behind main.

Fixes #65 (via #67).
Fixes #63 (via #69).
Refs #66, #68, Juliusolsson05/agent-code#234 and Juliusolsson05/agent-code#1336 (via #69 and #70).

🤖 Generated with Claude Code

Juliusolsson05 and others added 19 commits September 26, 2026 23:06
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…strokes

Codex 0.157.1 rewrote the trust dialog: no '> You are in', no 'Do you
trust the contents', options 'Trust and continue' / 'Quit' or 'Back to
Agent Command Center' (or 'Open restricted' / 'Open existing task').
detectCodexTrustDialog returned not-visible for the live, blocking
dialog. It now recognises both layouts structurally (whole-line anchor,
adjacent option pair, key hint that must agree with option 2) and reads
labels, folder and Git trust target from the screen.

Upstream also changed the keys (trust_directory.rs at rust-v0.157.1): 1
only moves the highlight, Enter confirms. The state now carries per-layout
keystrokes (legacy '1'; 0.156+ '1\r'), the condition labels its actions
from the screen, and CodexHeadless's legacy trust_dialog event stops
sending '2\r'. ScreenParser and the 0.149.1 composer surface share the
detector / add the new hint anchor.

Fail-first: a recorded 0.157.1 PTY replay (no key sent) and upstream's
insta snapshots, red on main.

Fixes #65

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ept a wrapped hint

Review of #67 (a, b): a transcript quoting the dialog verbatim was read
as a live, answerable trust dialog. The dialog is Codex's onboarding
screen, so its key hint is the last painted row; a quoted copy always has
the live composer below it. Detection now reads bottom-up: hint last (one
wrap allowed, for the Windows sandbox hint below 46 columns), nearest
adjacent option pair above, nearest Folder access above that.

Adds tests for the copied frame, the wrapped hint, an unknown option-1
label, option adjacency, both option-2 condition labels, legacy
streaming suppression, and the CodexHeadless trust_dialog callbacks
driven through the public class with the 0.157.1 recording.

Refs #65

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…0.156+ hint row as a modal

Review c of #67:
- F1: the legacy layout accepted a verbatim quoted dialog above the live
  composer, the same phantom fixed for 0.156+. Its 'Press enter to
  continue' hint is the last painted row as well (rust-v0.149.1 and the
  recorded 0.149.1 frame), so it is read bottom-up the same way.
- F2: pinning the composer-surface anchor exposed that the unwrapped
  0.156+ hint has the idle-footer shape, so the dialog read as a composer
  drafting '1. Trust and continue'. It is now a bottom-row structural
  check (identical to #63's branch); the window-based anchor is removed.
- F3: API.md rewritten for both layouts; new constants and the layout
  type exported.

Refs #65

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eject it

Verification a of #67: with 'esc quit' the hint/label agreement already
rejects an unknown option 2, so the whitelist mutation survived. The
restricted-folder frame ('esc back') makes the whitelist the only guard.

Refs #65

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The profile refused every CLI but 0.149.1, so at 0.157.1 (the version
Agent Code runs) prompt-input evidence was gone and fresh-rollout
ownership rested on the proxy path alone. It now covers a table of
exact recorded versions: 0.149.1 and 0.157.1, never a range.

Evidence for 0.157.1:
- the full 16-case corpus re-recorded inline and fullscreen;
- the config/read projection (identical to 0.149.1's);
- a per-tag audit of the config precedence code.
The recorded contract test runs once per corpus.

Real 0.157 surfaces the 0.149.1 composer classifier misread, all pinned
by the recordings:
- the trust hint row has the idle-footer shape;
- the skill popup now paints above the composer;
- fullscreen uses a two-row footer.

Recorder fixes for 0.157, all version-gated, explained inline: daemon,
model migration, skill frontmatter, 1+Enter trust, title side requests,
prompt-carrying request match, painted-row windows, real resize repaint,
popup hint wait.

Fixes #63

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review a and b of #69: Codex 0.157.1 paints every popup above the
composer, and the slash-command and file popups carry no hint row. With
one open, the pane read as a composer holding the draft, so Enter (which
selects the popup item) produced evidence for a prompt Codex never sent.
Reviewer b reproduced it with upstream's slash_popup_footer_wide
snapshot: /m over /memories gave false evidence of /m.

Codex opens these popups from the draft itself (a leading /, an @ or $
token), so such a draft now never yields prompt evidence. That is
fail-closed: a real prompt starting with / is a safe miss. The unified
mention hint row is also recognised.

Evidence:
- two new recorded 0.156+ cases (slash-popup Enter dispatches /status,
  file-popup Enter inserts README.md; neither submitted), with both
  0.157.1 corpora re-recorded;
- upstream's snapshot as a unit test;
- removing the rule fails both.
The fullscreen '? for shortcuts' row is now asserted too.

Refs #63

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The popup rule required a character after @ or $, but the popup opens on
the bare sigil, so a draft ending in '@' or '$' could still yield prompt
evidence. Any token starting with the sigil now declines. Unit cases
cover '@', 'look at @', '$', 'use $' and '/'; the old pattern fails the
four sigil cases.

Refs #63

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iew c)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… file (agent-code#1336)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… slices (review a)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eering q96)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (review b)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ss; honest comments (review c)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(trust): detect the Codex 0.156+ Folder access dialog and send its keystrokes
feat(prompt-input): issue the input profile for recorded Codex 0.157.1
feat(proxy): keep the newest Responses request body beside the events file
@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Disposition (B6, manager): members #67, #69, #70 each passed merge-gate --dry (3 reviewer reports MERGE-READY, dispositions posted, exact-head CI green, 0 behind main) before joining. All three merged into the batch without conflict. This batch merges after its own exact-head CI is green and a --dry gate PASS is recorded here.

@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Gate record (B6): merge-gate.sh codex-headless 71 --dry → GATE PASS #71 (04afc42, 0 behind main, checks green, reviews OK). Exact-head CI green (6/6). Merging.

@Juliusolsson05
Juliusolsson05 marked this pull request as ready for review September 27, 2026 23:45
@Juliusolsson05
Juliusolsson05 merged commit 1bd3d90 into main Sep 27, 2026
6 checks passed
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