You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Screen predicates fire on assistant prose: permission prompt, slash picker, compaction, Codex readiness #1293
Several predicates scan the whole viewport, so an idle pane's last reply can hold a condition forever:
PermissionPromptParser (claude-code-headless PermissionPromptParser.ts:59-157; gate claudeSession.ts:784): prose "Do you want to apply the fix?" followed by a markdown list "1. Yes… / 2. No…" is read as a permission prompt. The gate stays blocked (retry-after-resolve), and the false modal's Deny sends 3\\r as a prompt.
SlashPickerParser (:118-172): any row whose first cell is a coloured / counts, and inline code such as /Users/… or /compact is painted in that colour. That shows claude.slash-picker with no actions, blocked.
CompactionParser RUNNING_RE (:18): reply text ✽ Compacting conversation… (1m 51s) is read as running.
Codex codexReadyForPrompt.ts:21-26: substring checks (Working (, Approve+Deny, don't ask again, …) over the viewport. A reply mentioning them makes every orchestration/remote delivery poll 15 s and time out, retry-same-session, forever. Working ( also false-times-out long turns.
0 recorded frames exercise these false positives; frequency is unproven. Fix direction: anchor predicates to the live UI region (below the last divider / the composer box), not the whole viewport, and add recorded negative fixtures. Severity P2.
Found by the Stage 3 C1 hunt; lines are origin/main d525d45 and pinned submodules. Findings: temp/quality-loop/hunt-c1.md.
Triage (quality loop): needs-evidence before a fix. The repo has 0 recorded frames of these states: a Codex approval or trust dialog, 'Working (' with prose above it, a Claude permission prompt, the slash picker, a compaction line. Anchoring each predicate to the live UI region means knowing where that region is on real screens. Next step: capture PTY frames of each state (and of a reply that quotes them) into testing/fixtures, then scope each predicate to the rows below the last transcript block, with negative fixtures from the captures.
The slash-picker part now has recordings and a fix: #1477, fixed by #1478 and claude-code-headless#72.
The suggested fix direction is wrong for this predicate. The installed Claude (2.1.283 and 2.1.296) draws the picker above the composer's top rule, not below it. The fix anchors on the block directly on top of that rule. Evidence and a graveyard are in docs/decomposition/claude-slash-picker.md. Permission prompt, compaction and Codex readiness are still open here.
Activity
Juliusolsson05 commentedon Sep 25, 2026
Triage (quality loop): needs-evidence before a fix. The repo has 0 recorded frames of these states: a Codex approval or trust dialog, 'Working (' with prose above it, a Claude permission prompt, the slash picker, a compaction line. Anchoring each predicate to the live UI region means knowing where that region is on real screens. Next step: capture PTY frames of each state (and of a reply that quotes them) into testing/fixtures, then scope each predicate to the rows below the last transcript block, with negative fixtures from the captures.
docs(quality-loop): progress 11:50 — main green for #1258+#1264, #1312,
Juliusolsson05 commentedon Oct 14, 2026
The slash-picker part now has recordings and a fix: #1477, fixed by #1478 and claude-code-headless#72.
The suggested fix direction is wrong for this predicate. The installed Claude (2.1.283 and 2.1.296) draws the picker above the composer's top rule, not below it. The fix anchors on the block directly on top of that rule. Evidence and a graveyard are in
docs/decomposition/claude-slash-picker.md. Permission prompt, compaction and Codex readiness are still open here.