fix: clarify code queue liveness snapshots
This commit is contained in:
@@ -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",
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user