fix: compact quick verify report records

This commit is contained in:
Codex
2026-06-26 14:12:19 +00:00
parent abad0706f6
commit cc9dab29da
+62 -13
View File
@@ -2021,6 +2021,18 @@ function finalizeQuickVerifyFailure(state: SentinelCicdState, input: {
}
function recordQuickVerify(state: SentinelCicdState, payload: Record<string, unknown>): Record<string, unknown> {
const views = compactQuickVerifyRecordViews(record(payload.views));
const summary = {
reason: payload.reason,
status: payload.status,
elapsedMs: payload.elapsedMs,
failure: payload.failure,
warnings: Array.isArray(payload.warnings) ? payload.warnings : [],
analysis: payload.analysis,
promptSource: payload.promptSource,
steps: Array.isArray(payload.steps) ? payload.steps.map(compactQuickVerifyRecordStep) : [],
valuesRedacted: true,
};
const recordResult = callSentinelService(state, "POST", "/api/runs/record", {
runId: payload.runId,
scenarioId: payload.scenarioId,
@@ -2030,25 +2042,62 @@ function recordQuickVerify(state: SentinelCicdState, payload: Record<string, unk
reportJsonSha256: payload.reportJsonSha256,
findingCount: payload.findingCount,
artifactCount: payload.artifactCount,
summary: {
reason: payload.reason,
status: payload.status,
elapsedMs: payload.elapsedMs,
failure: payload.failure,
warnings: Array.isArray(payload.warnings) ? payload.warnings : [],
analysis: payload.analysis,
promptSource: payload.promptSource,
steps: payload.steps,
valuesRedacted: true,
},
summary,
findings: payload.findings,
views: payload.views,
views,
screenshot: payload.screenshot,
publicOrigin: payload.publicOrigin ?? stringAt(state.publicExposure, "publicBaseUrl"),
maintenance: payload.reason === "maintenance-stop",
valuesRedacted: true,
}, 60);
return { ...payload, recordResult, valuesRedacted: true };
return withWarnings({ ...payload, views, recordResult, valuesRedacted: true }, recordResult.ok === true ? [] : ["quick verify completed but sentinel report index record failed; report/dashboard may lag until record payload is reduced or retried."]);
}
function compactQuickVerifyRecordViews(views: Record<string, unknown>): Record<string, unknown> {
const compacted: Record<string, unknown> = {};
for (const [key, value] of Object.entries(views)) {
const item = record(value);
compacted[key] = {
...item,
renderedText: boundQuickVerifyRecordText(item.renderedText, key === "summary" ? 12_000 : 16_000),
valuesRedacted: true,
};
}
return compacted;
}
function compactQuickVerifyRecordStep(value: unknown): Record<string, unknown> {
const item = record(value);
return {
phase: stringAtNullable(item, "phase"),
ok: item.ok === true ? true : item.ok === false ? false : null,
promptIndex: numberAtNullable(item, "promptIndex"),
checkId: stringAtNullable(item, "checkId"),
failure: stringAtNullable(item, "failure"),
result: compactQuickVerifyRecordStepResult(record(item.result)),
valuesRedacted: true,
};
}
function compactQuickVerifyRecordStepResult(value: Record<string, unknown>): Record<string, unknown> {
return {
ok: value.ok === true ? true : value.ok === false ? false : null,
status: stringAtNullable(value, "status"),
view: stringAtNullable(value, "view"),
exitCode: numberAtNullable(value, "exitCode"),
timedOut: value.timedOut === true ? true : value.timedOut === false ? false : null,
stdoutBytes: numberAtNullable(value, "stdoutBytes"),
stderrBytes: numberAtNullable(value, "stderrBytes"),
stdoutPreview: boundQuickVerifyRecordText(value.stdoutPreview, 500),
stderrPreview: boundQuickVerifyRecordText(value.stderrPreview, 500),
valuesRedacted: true,
};
}
function boundQuickVerifyRecordText(value: unknown, maxChars: number): string | null {
if (typeof value !== "string") return null;
if (value.length <= maxChars) return value;
return `${value.slice(0, maxChars)}\n[truncated ${value.length - maxChars} chars]`;
}
function callSentinelService(state: SentinelCicdState, method: "GET" | "POST", pathWithQuery: string, body: Record<string, unknown> | null, timeoutSeconds: number): Record<string, unknown> {