Stabilize heartbeat suppression cleanup

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-07-09 20:50:34 +00:00
1 parent c47806d6cc
commit ba7b7a9b27
1 file changed
+9 -5
@@ -38,19 +38,23 @@ describeEmbeddedPostgres("heartbeat worktree suppression", () => {
let db!: ReturnType<typeof createDb>;
let tempDb: Awaited<ReturnType<typeof startEmbeddedPostgresTestDatabase>> | null = null;
function isHeartbeatRunEventFkError(error: unknown) {
function isHeartbeatRunDependentFkError(error: unknown) {
const message = error instanceof Error ? `${error.message} ${String(error.cause ?? "")}` : String(error);
return message.includes("heartbeat_run_events_run_id_heartbeat_runs_id_fk");
return (
message.includes("heartbeat_run_events_run_id_heartbeat_runs_id_fk") ||
message.includes("activity_log_run_id_heartbeat_runs_id_fk")
);
}
async function deleteHeartbeatRunsWithEvents() {
async function deleteHeartbeatRunsWithDependents() {
for (let attempt = 0; attempt < 5; attempt += 1) {
await db.delete(heartbeatRunEvents);
await db.delete(activityLog);
try {
await db.delete(heartbeatRuns);
return;
} catch (error) {
if (!isHeartbeatRunEventFkError(error) || attempt === 4) throw error;
if (!isHeartbeatRunDependentFkError(error) || attempt === 4) throw error;
await new Promise((resolve) => setTimeout(resolve, 25));
}
}
@@ -67,7 +71,7 @@ describeEmbeddedPostgres("heartbeat worktree suppression", () => {
await db.delete(documentRevisions);
await db.delete(documents);
await db.delete(activityLog);
await deleteHeartbeatRunsWithEvents();
await deleteHeartbeatRunsWithDependents();
await db.delete(agentWakeupRequests);
await db.delete(issues);
await db.delete(agentRuntimeState);