Files
Jyotisha/frontend/tests/rectification-collect-date-reliability-20260907.test.ts
T
Jesse_ChenandCursor 8e31680b45 fix(rectification): honor declared birth-time uncertainty and split windows over two hours (BUG-571–573)
Intake stores how sure the user is; rectification now searches that range, offers a one-click widen when event fit is low at the edge, and trisects windows longer than two hours before the minute grid.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 12:18:50 +08:00

90 lines
2.6 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import {
DATE_RELIABILITY_PROMPT,
classifyDateReliabilityUtterance,
pendingDateReliabilityEvidence,
} from "../src/lib/rectification-agentic/v9/date-reliability.ts";
import {
buildMethodFollowupPlan,
planWithDateReliability,
} from "../src/lib/rectification-agentic/v9/method-followup.ts";
const TURN_ID = "33333333-3333-4333-8333-333333333333";
const monthEvent = {
id: "ev-month",
status: "confirmed",
domain: "education",
datePrecision: "month",
occurredFrom: "2016-09-01",
occurredTo: "2016-09-30",
eventKind: "education_start",
sourceTurnId: TURN_ID,
};
const dayEvent = {
id: "ev-day",
status: "confirmed",
domain: "relationship",
datePrecision: "day",
occurredFrom: "2024-08-08",
occurredTo: "2024-08-08",
eventKind: "relationship_end",
sourceTurnId: TURN_ID,
};
test("a day-precision event recorded this turn becomes the date reliability prompt", () => {
const plan = planWithDateReliability(
buildMethodFollowupPlan({
evidence: [dayEvent],
sessionOutcome: "collect_evidence",
}),
[dayEvent],
TURN_ID,
);
assert.equal(plan.next_followup?.user_prompt_hint, DATE_RELIABILITY_PROMPT);
assert.equal(plan.next_followup?.date_reliability_evidence_id, "ev-day");
});
test("a month-precision event does not ask date reliability", () => {
const plan = planWithDateReliability(
buildMethodFollowupPlan({
evidence: [monthEvent],
sessionOutcome: "collect_evidence",
}),
[monthEvent],
TURN_ID,
);
assert.notEqual(plan.next_followup?.user_prompt_hint, DATE_RELIABILITY_PROMPT);
});
test("凭记忆 maps to medium and 查过 maps to high", () => {
assert.equal(classifyDateReliabilityUtterance("凭记忆"), "medium");
assert.equal(classifyDateReliabilityUtterance("那天是查过记录的"), "high");
assert.equal(classifyDateReliabilityUtterance(""), null);
});
test("an already tagged day event is not asked again", () => {
const tagged = { ...dayEvent, dateReliability: "medium" };
const plan = planWithDateReliability(
buildMethodFollowupPlan({
evidence: [tagged],
sessionOutcome: "collect_evidence",
}),
[tagged],
TURN_ID,
);
assert.notEqual(plan.next_followup?.user_prompt_hint, DATE_RELIABILITY_PROMPT);
});
test("historical day events are not asked on a later collect turn", () => {
assert.equal(pendingDateReliabilityEvidence([dayEvent], "other-turn"), null);
const plan = buildMethodFollowupPlan({
evidence: [dayEvent],
sessionOutcome: "collect_evidence",
});
assert.notEqual(plan.next_followup?.user_prompt_hint, DATE_RELIABILITY_PROMPT);
});