fix: drop false-positive committed_reservation_for_existing_id integrity check

The rule flagged every committed reservation pointing at an existing task ID
as an anomaly, but that's the happy-path steady state — reservations
transition to `committed` immediately after the task row is inserted, so a
committed reservation is always expected to reference an existing task. On
any node with task history, the dashboard banner fired with hundreds of
"affected" IDs and the store emitted a spurious `[task-id-integrity] anomaly
detected` error log.

Removes the rule, its type/label/reader, and updates tests (core regression
guard now asserts committed reservations don't trigger anomalies; dashboard
server-test fixtures use a still-valid anomaly kind).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-05-12 23:04:56 -07:00
parent 585e47e35a
commit 33a1a9df1e
5 changed files with 13 additions and 47 deletions

View File

@@ -6,7 +6,6 @@ export type TaskIdIntegrityAnomalyKind =
| "duplicate_active_id"
| "id_in_active_and_archived"
| "next_sequence_at_or_below_used"
| "committed_reservation_for_existing_id"
| "task_row_outside_known_prefix";
export interface TaskIdIntegrityAnomaly {
@@ -24,7 +23,6 @@ export interface TaskIdIntegrityReport {
type TaskRow = { id: string; source: "tasks" | "archivedTasks" };
type StateRow = { prefix: string; nextSequence: number };
type ReservationRow = { prefix: string; taskId: string; status: string };
type DuplicateRow = { id: string; duplicateCount: number };
function parseTaskId(taskId: string): { prefix: string; sequence: number } | null {
@@ -79,20 +77,6 @@ function readStateRows(db: Database): StateRow[] {
}
}
function readCommittedReservations(db: Database): ReservationRow[] {
if (!hasTable(db, "distributed_task_id_reservations")) {
return [];
}
try {
return db
.prepare("SELECT prefix, taskId, status FROM distributed_task_id_reservations WHERE status = 'committed'")
.all() as ReservationRow[];
} catch {
return [];
}
}
function readDuplicateActiveIds(db: Database): DuplicateRow[] {
if (!hasTable(db, "tasks")) {
return [];
@@ -215,24 +199,6 @@ export function detectTaskIdIntegrityAnomalies(db: Database): TaskIdIntegrityRep
}
}
const existingIds = new Set(allRows.map((row) => row.id));
const committedReservationsByPrefix = new Map<string, string[]>();
for (const row of readCommittedReservations(db)) {
if (!existingIds.has(row.taskId)) {
continue;
}
const prefix = row.prefix.trim().toUpperCase() || parseTaskId(row.taskId)?.prefix || "unknown";
committedReservationsByPrefix.set(prefix, [...(committedReservationsByPrefix.get(prefix) ?? []), row.taskId]);
}
for (const [prefix, affectedIds] of committedReservationsByPrefix) {
anomalies.push({
kind: "committed_reservation_for_existing_id",
prefix,
affectedIds: uniqueSorted(affectedIds),
details: `Committed reservation rows still reference task IDs that already exist for prefix ${prefix}.`,
});
}
return buildReport(checkedAt, anomalies);
} catch {
return buildReport(checkedAt, []);