fix(rectification): persist stop scores and deliver a range card (BUG-581–582)
Independent Staging Quality Gate / validate (push) Successful in 14m1s
Independent Staging Quality Gate / publish (push) Failing after 19m46s

Stop/idle reuse the scored evidence path so existing answers stay on the range. Delivery uses one range card (Skill 10.0.15) instead of four minute cards.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-07 19:22:01 +08:00
co-authored by Cursor
parent 058ad693cd
commit ab57d03f06
55 changed files with 2853 additions and 670 deletions
@@ -15,6 +15,7 @@ const acceptSchema = z.object({
resultId: z.string().uuid(),
candidateId: z.string().uuid(),
requestId: z.string().uuid(),
mode: z.literal("range").optional(),
}).strict();
function errorResponse(error: unknown) {
@@ -22,6 +22,7 @@ import { previousInferenceFromReceipt } from "@/lib/rectification-agentic/v9/inf
import { publicDecisionFields } from "@/lib/rectification-agentic/core/rectification-decision";
import { collectionProgressFromReceipt } from "@/lib/rectification-agentic/v9/evidence-model";
import { slimDecisionReceipt } from "@/lib/rectification-agentic/v9/case-receipt-projection";
import { rangeDeliveryForSnapshot } from "@/lib/rectification-agentic/v9/divergence-panel";
export const runtime = "nodejs";
@@ -165,9 +166,22 @@ function publicLatestResult(
) {
if (!latest) return null;
const projected = overlayPublicDecision(latest, decision);
if (fullDetail || !projected.decisionReceipt) return projected;
return {
const rangeDelivery = rangeDeliveryForSnapshot({
decisionReceipt: projected.decisionReceipt,
candidates: projected.candidates,
representativeTime: projected.representativeTime ?? decision.representativeTime,
representative_time: projected.representativeTime ?? decision.representativeTime,
credibleRange: projected.credible_range ?? decision.credibleRange,
credible_range: projected.credible_range ?? decision.credibleRange,
});
const withDelivery = {
...projected,
range_delivery: rangeDelivery,
rangeDelivery,
};
if (fullDetail || !projected.decisionReceipt) return withDelivery;
return {
...withDelivery,
decisionReceipt: slimDecisionReceipt(projected.decisionReceipt, dossier),
};
}