ci(image): keep Claude Code 2.1.251; test(ceo-mode-routing): keep HOLD's own deferrals in scope before assessing its rigor decision

2.1.284 enables per-turn effort for claude-fable-5-1: in gate census
36626737820, 66 of 84 sessions ran longer than on 2.1.251 (+20% session time,
+32% thinking tokens) and 11 cases timed out on unchanged budgets.

HOLD SCOPE's 0G step asks its own defer/keep menu; the actor answered it
Defer and the assessment then judged that scope question as the rigor
decision. The actor now answers that menu Keep and assesses the next one.
This commit is contained in:
garrytan committed 2026-09-29 20:57:04 +00:00
1 parent d05d161713
commit f63e1fb7cb
5 files changed
+55 -13

No files matched your search

+8 -4
View File
@@ -44,7 +44,7 @@ import {
type AskUserQuestionFingerprint,
type ClaudePtySession,
} from './helpers/claude-pty-runner';
import { ceoExpansionPacingChoice, ceoExpansionPacingReady, ceoModeSubmissionInput, hasNativePostAnswerCeoPosture, nextCeoModeNavigation, nextCeoPostureContinuation } from './helpers/ceo-mode-option';
import { ceoExpansionPacingChoice, ceoExpansionPacingReady, 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';
@@ -286,10 +286,14 @@ describeE2E('/plan-ceo-review mode routing (gate)', () => {
else {
const pending = transcript.calls.find(call => !call.answered && !call.failed) ?? pendingQuestion;
const question = capturePlanCountQuestion(currentInput, new Set(), 0, false, pending)!;
if (c.mode === 'HOLD SCOPE' && question.nativeCall)
// HOLD's own defer/keep menu (0G) is scope work, not the rigor decision
// under assessment: keep the item in scope and assess the next decision.
const keep = c.mode === 'HOLD SCOPE' ? holdDeferKeepIndex(question.nativeCall) : null;
if (c.mode === 'HOLD SCOPE' && question.nativeCall && keep === null)
continuedCallId ??= `${question.nativeCall.sessionId}:${question.nativeCall.toolUseId}`;
const input = planCountQuestionInput(currentInput, question, 1);
if (input.includes('\r')) await selectPtyNumberedOption(session, 1);
const pick = keep ?? 1;
const input = planCountQuestionInput(currentInput, question, pick);
if (input.includes('\r')) await selectPtyNumberedOption(session, pick);
else session.send(input);
}
continue;