fix(rectification): narrate exhausted-probe adopt instead of keep-collecting
Independent Staging Quality Gate / validate (push) Successful in 10m33s
Independent Staging Quality Gate / publish (push) Successful in 1m55s

When leftover probes cannot split adjacent minutes, skip frameless follow-ups and let a no-tool agent explain the stop. Distinguish-card "no" no longer closes a whole evidence domain.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-04 14:22:13 +08:00
parent cfa824994e
commit 0aaa0d702e
18 changed files with 1757 additions and 51 deletions
@@ -1042,8 +1042,13 @@ test("failed card persist still leaves a spoken collect next step", () => {
assert.doesNotMatch(source, /if \(fallback\.status === "created"/);
const applied = source.slice(source.indexOf("async function persistApplied"));
const loadAt = applied.indexOf("loadV9CaseCompute");
const decideAt = applied.indexOf("publicNextAction(decideAfterInferenceChange");
// 原值: publicNextAction(decideAfterInferenceChange({...})) 内联一次。
// 新值: 先 decideAfterInferenceChange 得到 nextDecision,再 publicNextAction(nextDecision)。
// 原因: 采用旁白需要完整 decisionprecisionStage / droppedProbes),不能只拿公开 nextAction。
const decideAt = applied.indexOf("decideAfterInferenceChange({");
const publicAt = applied.indexOf("publicNextAction(nextDecision)");
assert.ok(loadAt >= 0 && decideAt >= 0 && loadAt < decideAt);
assert.ok(publicAt > decideAt);
assert.match(applied.slice(decideAt, decideAt + 280), /birthDate/);
assert.match(
applied.slice(applied.indexOf("persistNextInterviewAfterChoice"), applied.indexOf("persistNextInterviewAfterChoice") + 360),