refactor: share task audit sorting

This commit is contained in:
Peter Steinberger
2026-04-20 14:13:51 +01:00
parent b79df1796c
commit b7703616f0
3 changed files with 49 additions and 24 deletions

View File

@@ -20,6 +20,7 @@ import {
type TaskAuditCode,
type TaskAuditSeverity,
} from "../tasks/task-registry.audit.js";
import { compareTaskAuditFindingSortKeys } from "../tasks/task-registry.audit.shared.js";
import {
getInspectableTaskAuditSummary,
getInspectableTaskRegistrySummary,
@@ -156,19 +157,18 @@ type TaskSystemAuditFinding = {
};
function compareSystemAuditFindings(left: TaskSystemAuditFinding, right: TaskSystemAuditFinding) {
const severityRank = (severity: TaskSystemAuditSeverity) => (severity === "error" ? 0 : 1);
const severityDiff = severityRank(left.severity) - severityRank(right.severity);
if (severityDiff !== 0) {
return severityDiff;
}
const leftAge = left.ageMs ?? -1;
const rightAge = right.ageMs ?? -1;
if (leftAge !== rightAge) {
return rightAge - leftAge;
}
const leftCreatedAt = left.task?.createdAt ?? left.flow?.createdAt ?? 0;
const rightCreatedAt = right.task?.createdAt ?? right.flow?.createdAt ?? 0;
return leftCreatedAt - rightCreatedAt;
return compareTaskAuditFindingSortKeys(
{
severity: left.severity,
ageMs: left.ageMs,
createdAt: left.task?.createdAt ?? left.flow?.createdAt ?? 0,
},
{
severity: right.severity,
ageMs: right.ageMs,
createdAt: right.task?.createdAt ?? right.flow?.createdAt ?? 0,
},
);
}
function formatAuditRows(findings: TaskSystemAuditFinding[], rich: boolean) {

View File

@@ -24,6 +24,12 @@ export type TaskAuditSummary = {
byCode: Record<TaskAuditCode, number>;
};
type TaskAuditComparableFinding = {
severity: TaskAuditSeverity;
ageMs?: number;
createdAt: number;
};
export function createEmptyTaskAuditSummary(): TaskAuditSummary {
return {
total: 0,
@@ -39,3 +45,20 @@ export function createEmptyTaskAuditSummary(): TaskAuditSummary {
},
};
}
export function compareTaskAuditFindingSortKeys(
left: TaskAuditComparableFinding,
right: TaskAuditComparableFinding,
): number {
const severityRank = (severity: TaskAuditSeverity) => (severity === "error" ? 0 : 1);
const severityDiff = severityRank(left.severity) - severityRank(right.severity);
if (severityDiff !== 0) {
return severityDiff;
}
const leftAge = left.ageMs ?? -1;
const rightAge = right.ageMs ?? -1;
if (leftAge !== rightAge) {
return rightAge - leftAge;
}
return left.createdAt - right.createdAt;
}

View File

@@ -1,4 +1,5 @@
import {
compareTaskAuditFindingSortKeys,
createEmptyTaskAuditSummary,
type TaskAuditCode,
type TaskAuditFinding,
@@ -74,17 +75,18 @@ function findTimestampInconsistency(task: TaskRecord): TaskAuditFinding | null {
}
function compareFindings(left: TaskAuditFinding, right: TaskAuditFinding): number {
const severityRank = (severity: TaskAuditSeverity) => (severity === "error" ? 0 : 1);
const severityDiff = severityRank(left.severity) - severityRank(right.severity);
if (severityDiff !== 0) {
return severityDiff;
}
const leftAge = left.ageMs ?? -1;
const rightAge = right.ageMs ?? -1;
if (leftAge !== rightAge) {
return rightAge - leftAge;
}
return left.task.createdAt - right.task.createdAt;
return compareTaskAuditFindingSortKeys(
{
severity: left.severity,
ageMs: left.ageMs,
createdAt: left.task.createdAt,
},
{
severity: right.severity,
ageMs: right.ageMs,
createdAt: right.task.createdAt,
},
);
}
export function listTaskAuditFindings(options: TaskAuditOptions = {}): TaskAuditFinding[] {