fix(rectification): typecheck answered probe_id for staging publish
Independent Staging Quality Gate / validate (push) Successful in 10m47s
Independent Staging Quality Gate / publish (push) Successful in 11m26s

Docker next build failed on ProbeAnswer.id and optional decisionReceipt,
so staging never received the month-lock SHA.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-28 11:00:18 +08:00
co-authored by Cursor
parent 797a423af7
commit 589ada6d03
4 changed files with 88 additions and 8 deletions
@@ -60,7 +60,7 @@ export type DecisionDossier = Readonly<{
};
latestResult: {
resultId?: string;
decisionReceipt: Readonly<Record<string, unknown>> | null;
decisionReceipt?: Readonly<Record<string, unknown>> | null;
selectionAllowed?: boolean;
confirmationAllowed?: boolean;
candidates?: readonly Readonly<{
@@ -124,13 +124,13 @@ function holdoutStatusFromState(state: InferenceState) {
}
export function contrastPacketFromLatestResult(
latest: DecisionDossier["latestResult"],
latest: DecisionDossier["latestResult"] | undefined,
evidence: DecisionDossier["evidence"] = [],
): CandidateContrastPacket {
const windowScan = windowScanFromDecisionReceipt(latest?.decisionReceipt ?? null);
const refinement = refinementFromDecisionReceipt(latest?.decisionReceipt ?? null);
const inference = previousInferenceFromReceipt(latest?.decisionReceipt ?? null);
const answered = new Set((inference?.answered_probes ?? []).map((item) => item.id));
const answered = new Set((inference?.answered_probes ?? []).map((item) => item.probe_id));
const fromInference: EngineContrastProbe[] = (inference?.probes ?? []).flatMap((probe) => {
if (answered.has(probe.id) || probe.information_gain <= 0) return [];
if (probe.source === "known_event_quality") return [];
@@ -172,7 +172,7 @@ export function contrastPacketFromLatestResult(
? [{ layer: "d10", signs: windowScan.d10_sign_names }]
: []),
],
candidateTimes: discriminatorCandidateTimes(latest),
candidateTimes: discriminatorCandidateTimes(latest ?? null),
transitions: windowScan?.transitions ?? [],
askedKeys: askedDiscriminatorKeys(latest?.decisionReceipt, evidence),
volunteeredDomains: volunteeredDomainsFromEvidence(evidence),
@@ -202,15 +202,15 @@ export function contrastPacketFromDossier(dossier: DecisionDossier): CandidateCo
}
export function rectificationFollowupCatalog(
latest: DecisionDossier["latestResult"],
latest: DecisionDossier["latestResult"] | undefined,
evidence: DecisionDossier["evidence"] = [],
) {
const receipt = latest?.decisionReceipt ?? null;
const refinement = refinementFromDecisionReceipt(receipt);
const inference = previousInferenceFromReceipt(receipt);
return {
contrastPacket: contrastPacketFromLatestResult(latest, evidence),
topCandidateTimes: discriminatorCandidateTimes(latest),
contrastPacket: contrastPacketFromLatestResult(latest ?? null, evidence),
topCandidateTimes: discriminatorCandidateTimes(latest ?? null),
askedProbeKeys: askedDiscriminatorKeys(receipt, evidence),
eventProbes: refinement.discriminating_event_probes,
eventClarificationProbes: refinement.event_clarification_probes,
@@ -189,7 +189,7 @@ function contrastPacketFromLatest(
latest: NonNullable<DossierForTools["latestResult"]> | null | undefined,
evidence: DossierForTools["evidence"] = [],
) {
return contrastPacketFromLatestResult(latest, evidence);
return contrastPacketFromLatestResult(latest ?? null, evidence);
}
function snapshotSourceFromDossier(