feat(rectification): 出卡加精度门槛,补经历改成系统点名
Independent Staging Quality Gate / validate (push) Failing after 6m28s
Independent Staging Quality Gate / publish (push) Skipped

宽度超过 10 分钟或头名并列时不再出交付卡,改为按大运边界逐条问、
用类型芯片和年/月选择器录入。跳过的线换问法再问一次;答「这类事
都没有过」的不再问。用户说「没有了」仍立刻给目前范围。Skill 10.0.27。

BUG-740~743
This commit is contained in:
jesse-ux
2026-09-16 18:35:27 +08:00
parent 317e9f1886
commit cfb41daf3d
75 changed files with 4763 additions and 383 deletions
@@ -687,6 +687,7 @@ export function engineRequestBody(input: {
candidateRange: { start_time: string; end_time: string };
events: readonly V9EngineEvent[];
askedProbeKeys?: readonly string[];
declinedDomains?: readonly string[];
columnTimes?: readonly string[];
refreshProbes?: boolean;
}): Record<string, unknown> {
@@ -722,11 +723,38 @@ export function engineRequestBody(input: {
timezone_source: snapshot.timezone_source,
local_time_status: snapshot.local_time_status,
...(askedProbeKeys.length ? { asked_probe_keys: askedProbeKeys } : {}),
...(sanitizeDeclinedDomainsForEngine(input.declinedDomains).length
? { declined_domains: sanitizeDeclinedDomainsForEngine(input.declinedDomains) }
: {}),
...(columnTimes.length ? { column_times: columnTimes } : {}),
...(input.refreshProbes === true ? { refresh_probes: true } : {}),
};
}
const ENGINE_COLLECT_DOMAINS = new Set([
"education",
"career",
"relocation",
"relationship",
"family",
"finance",
"health_pressure",
]);
export function sanitizeDeclinedDomainsForEngine(
domains: readonly string[] | null | undefined,
): string[] {
const seen = new Set<string>();
const next: string[] = [];
for (const raw of domains ?? []) {
const domain = raw.trim();
if (!ENGINE_COLLECT_DOMAINS.has(domain) || seen.has(domain)) continue;
seen.add(domain);
next.push(domain);
}
return next;
}
export type V9VedastroValidateResult = Readonly<{
status: "passed" | "failed" | "not_evaluated";
canConfirmExactMinute: boolean;
@@ -840,6 +868,7 @@ export async function runV9CandidateScore(input: {
candidateRange: { start_time: string; end_time: string };
events: readonly V9EngineEvent[];
askedProbeKeys?: readonly string[];
declinedDomains?: readonly string[];
columnTimes?: readonly string[];
refreshProbes?: boolean;
}): Promise<V9EngineScoreResult> {