From b7703616f038ca8f4d078e8b4dff0afa197c337a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 14:13:51 +0100 Subject: [PATCH] refactor: share task audit sorting --- src/commands/tasks.ts | 26 ++++++++++++------------- src/tasks/task-registry.audit.shared.ts | 23 ++++++++++++++++++++++ src/tasks/task-registry.audit.ts | 24 ++++++++++++----------- 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/commands/tasks.ts b/src/commands/tasks.ts index 5ed06a30484..cb111ed647c 100644 --- a/src/commands/tasks.ts +++ b/src/commands/tasks.ts @@ -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) { diff --git a/src/tasks/task-registry.audit.shared.ts b/src/tasks/task-registry.audit.shared.ts index 8f25a1aa349..31383fa4bef 100644 --- a/src/tasks/task-registry.audit.shared.ts +++ b/src/tasks/task-registry.audit.shared.ts @@ -24,6 +24,12 @@ export type TaskAuditSummary = { byCode: Record; }; +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; +} diff --git a/src/tasks/task-registry.audit.ts b/src/tasks/task-registry.audit.ts index 63ead4fafa0..d4440a628e7 100644 --- a/src/tasks/task-registry.audit.ts +++ b/src/tasks/task-registry.audit.ts @@ -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[] {