fix(rectification): surface dropped probes and filter tools by the decision
Independent Staging Quality Gate / validate (push) Failing after 17m9s
Independent Staging Quality Gate / publish (push) Has been skipped

Silent unrenderable discriminators, a missing question-contract golden, and a always-on tool table were hiding fail-closed drops behind the prompt wall.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-28 20:31:15 +08:00
co-authored by Cursor
parent 69c3e94920
commit 63b4591aae
25 changed files with 856 additions and 274 deletions
@@ -760,6 +760,47 @@ test("turn_decision stays inside the configured byte budget", () => {
assert.ok(!("baseline_birth_snapshot" in projection));
});
test("unrenderable focus schema stays visible as current_question, not null", () => {
const snapshot = candidateSnapshotFixture();
Object.assign(snapshot.decision_receipt, { inference_state: inferenceState() });
const dossier = parseV9CaseDossier(dossierFixture({
latestResult: snapshot,
conversationSummary: conversationSummaryFixture({
activeFocus: activeFocusFixture({
expectedAnswerSchema: { choice: { prompt: "坏题" } },
}),
}),
}));
assert.ok(dossier);
const projection = projectTurnDecision(dossier);
const currentQuestion = projection.current_question as {
unrenderable?: boolean;
reason?: string;
prompt?: string | null;
} | null;
assert.equal(currentQuestion?.unrenderable, true);
assert.equal(currentQuestion?.reason, "invalid_choice_schema");
assert.equal(currentQuestion?.prompt, null);
assert.equal(projection.current_probe, null);
});
test("collection focus without choice copy is not an unrenderable current_question", () => {
const snapshot = candidateSnapshotFixture();
Object.assign(snapshot.decision_receipt, { inference_state: inferenceState() });
const dossier = parseV9CaseDossier(dossierFixture({
latestResult: snapshot,
conversationSummary: conversationSummaryFixture({
activeFocus: activeFocusFixture({
intent: "clarify_event_date",
expectedAnswerSchema: { required: ["month"] },
}),
}),
}));
assert.ok(dossier);
const projection = projectTurnDecision(dossier);
assert.equal(projection.current_question, null);
});
test("turn_decision hides current_probe unless a valid current_question exists", () => {
const withFocus = projectTurnDecision(parseV9CaseDossier(choiceDossier())!);
assert.ok(withFocus.current_question);