fix(checkpoint): fail closed on pause queries
This commit is contained in:
1 parent
a99bcb97c6
commit
f8a90f4402
3 files changed
+32
-6
No files matched your search
@@ -157,7 +157,7 @@ export function createCheckpointEngine(deps: CheckpointDeps) {
|
||||
return db.core.approvals.hasPendingReviewApprovalForAgent(companyId, agentId);
|
||||
} catch (err) {
|
||||
logger.error(`[checkpoint] shouldPauseHeartbeat failed: ${err instanceof Error ? err.message : String(err)}`);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -324,8 +324,8 @@ export function createThreadIntegration({ db, logger, emitEvent, publishDomainCh
|
||||
const waitStates = db.core.threads.listThreadWaitStates(companyId);
|
||||
return waitStates.length > 0;
|
||||
} catch (err) {
|
||||
logger.warn(`[thread-integration] hasUnresolvedWaitStates query failed for company ${companyId}:`, err instanceof Error ? err.message : String(err));
|
||||
return false;
|
||||
logger.warn(`[thread-integration] hasUnresolvedWaitStates query failed for company ${companyId}; treating as blocked:`, err instanceof Error ? err.message : String(err));
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -339,8 +339,8 @@ export function createThreadIntegration({ db, logger, emitEvent, publishDomainCh
|
||||
try {
|
||||
return db.core.threads.hasUnresolvedWaitStateForAgent(companyId, agentId);
|
||||
} catch (err) {
|
||||
logger.warn(`[thread-integration] hasUnresolvedWaitStatesForAgent query failed (company=${companyId} agent=${agentId}):`, err instanceof Error ? err.message : String(err));
|
||||
return false;
|
||||
logger.warn(`[thread-integration] hasUnresolvedWaitStatesForAgent query failed (company=${companyId} agent=${agentId}); treating as blocked:`, err instanceof Error ? err.message : String(err));
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { mkdtemp, rm } from "node:fs/promises";
|
||||
import { join } from "node:path";
|
||||
import { tmpdir } from "node:os";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
import { AppDatabase } from "../../src/main/database";
|
||||
import { createThreadIntegration } from "../../src/main/thread-integration";
|
||||
import { createCheckpointEngine } from "../../src/main/checkpoint-engine";
|
||||
@@ -250,4 +250,30 @@ describe("thread wait + heartbeat integration", () => {
|
||||
|
||||
db.close();
|
||||
});
|
||||
|
||||
it("keeps co-founder heartbeat paused when wait-state lookup fails", async () => {
|
||||
const profileDir = await createTempDir("agentcompany-wait-query-fail-");
|
||||
const db = new AppDatabase(profileDir);
|
||||
db.init();
|
||||
|
||||
const { companyId, engineerId } = createScaffold(db);
|
||||
const threadIntegration = createThreadIntegration({
|
||||
db,
|
||||
logger: createNoopLogger(),
|
||||
});
|
||||
const checkpointEngine = createCheckpointEngine({
|
||||
db,
|
||||
logger: createNoopLogger(),
|
||||
threadIntegration,
|
||||
publishDomainChanged: () => {},
|
||||
notify: () => {},
|
||||
});
|
||||
vi.spyOn(db.core.threads, "hasUnresolvedWaitStateForAgent").mockImplementation(() => {
|
||||
throw new Error("wait-state query failed");
|
||||
});
|
||||
|
||||
expect(checkpointEngine.shouldPauseHeartbeat(companyId, engineerId)).toBe(true);
|
||||
|
||||
db.close();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user