fix: clarify code queue liveness snapshots

This commit is contained in:
Codex
2026-05-23 12:36:20 +00:00
parent 15d074424c
commit 758377c551
4 changed files with 338 additions and 23 deletions
@@ -147,6 +147,46 @@ export function runCodeQueueSubmitSummaryContract(): JsonRecord {
assertCondition(String(liveStateDisclosure.splitBrainDisposition || "").includes("continue supervision"), "stateDisclosure should explain split-brain-live disposition", liveStateDisclosure);
assertCondition(String(liveStateDisclosure.idsUnavailableMeaning || "").includes("not that there are no tasks"), "stateDisclosure should prevent empty-list misread", liveStateDisclosure);
const transientRiskSubmit = compactSubmitSuccessResponseForTest({
tasks: [task("codex_submitted_queued_during_stale_snapshot", "queued", "high-concurrency")],
queue: {
counts: { running: 7, queued: 1 },
activeTaskIds: { items: [], count: 7, returned: 0, truncated: true },
queuedTaskIds: { items: [], count: 1, returned: 0, truncated: true },
databaseActiveTaskCount: 7,
executionDiagnostics: {
state: "stale-active",
effectiveLiveness: "at-risk",
recommendedAction: "investigate-heartbeat-risk",
databaseActiveTaskCount: 7,
databaseActiveTaskIds: manyIds("stale-db-active", 7),
schedulerActiveRunSlotCount: 0,
activeHeartbeatCount: 7,
lastSchedulerHeartbeatAt: "2026-05-22T23:50:00.000Z",
lastObservedAgentEventAt: "2026-05-22T23:49:30.000Z",
heartbeatExpiredTaskIds: manyIds("stale-db-active", 7),
staleRecoveryCandidateTaskIds: manyIds("stale-db-active", 7),
heartbeatRiskTaskIds: manyIds("stale-db-active", 7),
},
},
}, { ok: true, status: 200 }, { mode: "local-atomic-directory-submit-serialization", acquiredAfterMs: 1, heldMs: 2, throttleMs: 2000 });
const transientQueue = asRecord(asRecord(transientRiskSubmit).queue);
const transientActivity = asRecord(transientQueue.activity);
const transientConcurrency = asRecord(transientQueue.commanderConcurrency);
const transientRecovery = asRecord(transientActivity.recovery);
const transientStateDisclosure = asRecord(transientQueue.stateDisclosure);
const transientDiagnostics = asRecord(transientQueue.executionDiagnostics);
const transientDiagnosticsRecovery = asRecord(transientDiagnostics.recovery);
assertCondition(transientActivity.heartbeatRiskTaskCount === 7 && transientActivity.staleRecoveryCandidateTaskCount === 7, "submit activity should keep stale-active candidates visible", transientActivity);
assertCondition(transientRecovery.disposition === "transient-needs-repoll", "submit stale snapshot should be classified as transient until re-polled", transientRecovery);
assertCondition(transientRecovery.hint === "re-poll supervisor before recovery", "submit stale snapshot should emit the re-poll hint", transientRecovery);
assertCondition(transientRecovery.boundedSnapshot === true && transientRecovery.snapshotRole === "submit-confirmation", "submit recovery context should identify bounded confirmation snapshot", transientRecovery);
assertCondition(transientRecovery.lastObservedAgentEventBeforeSubmit === true, "submit recovery context should compare agent event time with submit time", transientRecovery);
assertCondition(transientRecovery.recoveryMutationAllowedByThisSnapshot === false, "single submit snapshot must not allow recovery mutation", transientRecovery);
assertCondition(transientConcurrency.attentionRequired === true && transientConcurrency.interventionRequired === false, "submit heartbeat risk should require attention but not direct high-risk intervention", transientConcurrency);
assertCondition(transientStateDisclosure.transientRiskHint === "re-poll supervisor before recovery", "stateDisclosure should repeat low-noise re-poll hint", transientStateDisclosure);
assertCondition(transientDiagnosticsRecovery.snapshotRole === "submit-confirmation" && transientDiagnosticsRecovery.hint === "re-poll supervisor before recovery", "submit execution diagnostics should carry submit snapshot recovery semantics", transientDiagnosticsRecovery);
const queuedIdsOmitted = compactSubmitSuccessResponseForTest({
tasks: [task("codex_submitted_already_running", "running", "live-fast-lane")],
queue: {
@@ -177,6 +217,7 @@ export function runCodeQueueSubmitSummaryContract(): JsonRecord {
"running count context falls back to database active ids",
"nonzero count with omitted id lists uses idsUnavailable instead of items=[]",
"split-brain-live submit summary says continue supervision and count as active",
"stale submit snapshots preserve candidates but require re-poll before recovery",
"bounded id previews disclose omitted counts",
"submit confirmation omits prompt text and remains low-noise",
],