test: PTY harness handles clipped reviews and bundled setup tabs; AUQ judge uses structured output; design-consultation carve declines optional outside voices

- ceo mode routing: a Submit review taller than the viewport, a setup tab
  bundled after the mode tab, and a clip through the mode question each hung
  or misread the run; the native answer is still verified after Submit.
- judgeRecommendation requests a 1-5 enum schema; a malformed Haiku reply had
  scored substance 0 for a 4/5 brief. Judge failures now propagate.
- carve section-loading for design-consultation declines the optional outside
  voices (a supported path) and treats DESIGN.md as the report; timeout unchanged.
The Step 0E handoff defect is not fixed (0/15 samples across four wordings,
none shipped) and is filed in TODOS.
This commit is contained in:
garrytan committed 2026-09-30 12:52:56 +00:00
1 parent dfe5e733fb
commit a27365bffe
16 files changed
+893 -28

No files matched your search

+9 -1
View File
@@ -44,7 +44,7 @@ import {
type AskUserQuestionFingerprint,
type ClaudePtySession,
} from './helpers/claude-pty-runner';
import { ceoExpansionPacingChoice, ceoExpansionPacingReady, ceoModeSubmissionInput, hasNativePostAnswerCeoPosture, holdDeferKeepIndex, nextCeoModeNavigation, nextCeoPostureContinuation } from './helpers/ceo-mode-option';
import { ceoExpansionPacingChoice, ceoExpansionPacingReady, ceoModePacketTabAnswer, ceoModeSubmissionInput, hasNativePostAnswerCeoPosture, holdDeferKeepIndex, nextCeoModeNavigation, nextCeoPostureContinuation } from './helpers/ceo-mode-option';
import { createPlanCountFixture } from './helpers/plan-count-fixture';
import { readPlanCountTranscript, type NativePublicToolEvent, type PlanCountTranscript } from './helpers/plan-count-transcript';
import { readPendingQuestion, pendingQuestionRecorderStatus } from './helpers/plan-count-pending-question';
@@ -231,6 +231,7 @@ describeE2E('/plan-ceo-review mode routing (gate)', () => {
let pacingCalls = 0;
const seenDownstream = new Set<string>();
const submittedModePackets = new Set<string>();
const answeredPacketTabs = new Set<string>();
while (Date.now() - start < budgetMs) {
await Bun.sleep(2500);
if (session.exited()) {
@@ -262,6 +263,13 @@ describeE2E('/plan-ceo-review mode routing (gate)', () => {
capture('awaiting_posture', currentInput, transcript);
const modeSubmit = ceoModeSubmissionInput(currentInput, question.nativeCall, c.mode, transcript, submittedModePackets, session.visibleText());
if (modeSubmit !== null) { session.send(modeSubmit); continue; }
const packetTab = ceoModePacketTabAnswer(currentInput, question.nativeCall, transcript, answeredPacketTabs);
if (packetTab) {
const input = planCountQuestionInput(currentInput, packetTab.question, packetTab.index);
if (input.includes('\r')) await selectPtyNumberedOption(session, packetTab.index);
else session.send(input);
continue;
}
const pendingQuestion = readPendingQuestion(session.pendingQuestionFile, fixture.cwd,
session.hermeticConfigDir, selectionStartedAt, transcript);
if (pacingChoice && !ceoExpansionPacingReady(currentInput, transcript, pacingChoice, publicTools)) continue;