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:
@@ -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, []);
|
||||
|
||||
Reference in New Issue
Block a user