fix(rectification): stop re-asking covered domains after adopt (BUG-590, BUG-591)
Independent Staging Quality Gate / validate (push) Successful in 11m33s
Independent Staging Quality Gate / publish (push) Successful in 7m49s

Yearless-to-collect now skips domains already confirmed, declined, or asked; adopt-exhausted turns skip leftover collect persist. Collect focus collisions only retry with :next when collect_retry is set.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-08 12:27:40 +08:00
co-authored by Cursor
parent 43fd8875ce
commit 7ca6ade244
11 changed files with 613 additions and 36 deletions
@@ -2146,7 +2146,7 @@ test("D9/D10 contrast after occupation coverage asks a discriminator, not adopt"
}), "discriminate_candidates");
});
test("answered duty language skips window D10 and collects a dated education event instead of a yearless D24 card", () => {
test("answered duty language skips window D10 and does not re-ask covered education from a yearless D24 card", () => {
const packet = {
candidateSetVersion: "05:00-05:07",
vargaDifferences: [
@@ -2185,11 +2185,13 @@ test("answered duty language skips window D10 and collects a dated education eve
evidence,
contrastPacket: packet,
});
assert.equal(plan.next_followup?.domain, "education");
// 原值: educationyearless D24 直接变成学业采集)
// 新值: finance
// 原因: CLASSIC_COVERAGE 已有学业;BUG-590 跳过已覆盖领域,改收未覆盖的财务
assert.equal(plan.next_followup?.domain, "finance");
assert.equal(plan.next_followup?.intent, "collect_method_evidence");
assert.equal(plan.next_followup?.choice_frame, null);
assert.match(plan.next_followup?.user_prompt_hint ?? "", /记得住年份/);
assert.doesNotMatch(plan.next_followup?.semantic_key ?? "", /varga\.d10/);
assert.doesNotMatch(plan.next_followup?.semantic_key ?? "", /varga\.d(10|24)/);
});
test("yearless D24 yields to a dated career dasha instead of borrowing the recorded education year", () => {