fix(rectification): keep choice stems visible and align overlay adopt with the engine
Independent Staging Quality Gate / validate (push) Successful in 7m44s
Independent Staging Quality Gate / publish (push) Successful in 1m48s

Walkthrough polish: fail-closed empty D9 prompts, stop asserting the next question is on screen, vary same-domain collect copy, switch to reverse-verify after adopt, and let coverage route interview without blocking can_adopt.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-02 13:11:22 +08:00
co-authored by Cursor
parent bd79689f66
commit aab3ad4b84
22 changed files with 1019 additions and 82 deletions
@@ -309,7 +309,7 @@ test("training gate closed still withholds yearless varga cards", () => {
assert.notEqual(plan.next_followup?.intent, "distinguish_candidates");
});
test("training complete with no renderable distinguish card allows offering a range without adopt", () => {
test("training complete with no renderable distinguish card still allows adopt when the engine does", () => {
const blocked = decideRectification({
engineCeiling: OPEN_ENGINE_CAPABILITY_CEILING,
methodCoverageAll: false,
@@ -317,11 +317,14 @@ test("training complete with no renderable distinguish card allows offering a ra
candidateScores: NARROW_LEAD,
discriminatorProbe: null,
});
// 原断言 canAdopt=false、sessionOutcome=provisional_range
// → 新断言 canAdopt=true、sessionOutcome=adopt_representative。
// coverage(含 occupation)只做问询路由,不再挡采用;确认门仍 fail-closed。
assert.equal(blocked.canOfferRange, true);
assert.equal(blocked.canAdopt, false);
assert.equal(blocked.canAdopt, true);
assert.equal(blocked.canConfirmExactMinute, false);
assert.equal(blocked.nextAction, "offer_provisional_range");
assert.equal(blocked.sessionOutcome, "provisional_range");
assert.equal(blocked.sessionOutcome, "adopt_representative");
const stillClosed = decideRectification({
engineCeiling: OPEN_ENGINE_CAPABILITY_CEILING,
methodCoverageAll: false,