fix: dedupe catalogued artifact findings

This commit is contained in:
Codex
2026-07-02 00:34:17 +00:00
parent 67c943928b
commit 47f7482bf5
+16 -9
View File
@@ -1553,14 +1553,14 @@ function visibleFindingsForRun(
const artifactFindings = arrayRecords(artifactSummary.findings)
.slice(0, limit)
.map((item) => enrichFindingWithCheck(config, compactStoredFinding(item)));
return mergeVisibleFindings(storedFindings, artifactFindings, limit);
return mergeVisibleFindings(config, storedFindings, artifactFindings, limit);
}
function mergeVisibleFindings(primary: readonly Record<string, unknown>[], artifact: readonly Record<string, unknown>[], limit: number): readonly Record<string, unknown>[] {
function mergeVisibleFindings(config: WebProbeSentinelServiceConfig, primary: readonly Record<string, unknown>[], artifact: readonly Record<string, unknown>[], limit: number): readonly Record<string, unknown>[] {
const merged: Record<string, unknown>[] = [];
const seen = new Set<string>();
for (const item of [...primary, ...artifact]) {
const id = canonicalFindingIdentity(item);
const id = canonicalFindingIdentity(config, item);
const key = id ?? `${JSON.stringify(item).slice(0, 160)}:${stringOrNull(item.severity) ?? stringOrNull(item.level) ?? ""}`;
if (seen.has(key)) continue;
seen.add(key);
@@ -1570,13 +1570,20 @@ function mergeVisibleFindings(primary: readonly Record<string, unknown>[], artif
return merged;
}
function canonicalFindingIdentity(item: Record<string, unknown>): string | null {
function canonicalFindingIdentity(config: WebProbeSentinelServiceConfig, item: Record<string, unknown>): string | null {
const check = record(item.check);
return stringOrNull(item.checkCode)
?? stringOrNull(check.code)
?? stringOrNull(item.checkId)
?? stringOrNull(check.id)
?? findingIdentity(item);
const explicitCheckCode = stringOrNull(item.checkCode) ?? stringOrNull(check.code);
if (explicitCheckCode !== null) return explicitCheckCode;
const catalog = checkCatalogById(config);
const explicitCheckId = stringOrNull(item.checkId) ?? stringOrNull(check.id);
if (explicitCheckId !== null) {
const entry = catalog.get(explicitCheckId);
return stringOrNull(entry?.code) ?? stringOrNull(entry?.id) ?? explicitCheckId;
}
const findingId = findingIdentity(item);
if (findingId === null) return null;
const entry = catalog.get(findingId);
return stringOrNull(entry?.code) ?? stringOrNull(entry?.id) ?? findingId;
}
function findingIdentity(item: Record<string, unknown>): string | null {