Prevent duplicate long-running Live turns

Keep short crash-recovery leases without allowing a healthy worker to queue its own generation twice, and surface non-monotonic benchmark journals as errors.\n\nAI-assisted: OpenAI Codex.
This commit is contained in:
Paul Bakaus
2026-07-12 21:18:20 -07:00
parent 960f4b725b
commit 1e4927d86a
4 changed files with 52 additions and 6 deletions
+10 -5
View File
@@ -148,17 +148,22 @@ export function buildInteractionRun(events, { iteration, scenario, goStartedAt,
export function deriveJournalGenerationMetrics(snapshot = {}) {
const timings = snapshot.generationTimings || {};
const at = (phase) => Number(timings[phase]?.at);
const delta = (start, end) => (
Number.isFinite(at(start)) && Number.isFinite(at(end))
? roundMs(Math.max(0, at(end) - at(start)))
: null
);
const timingErrors = [];
const delta = (start, end) => {
if (!Number.isFinite(at(start)) || !Number.isFinite(at(end))) return null;
if (at(end) < at(start)) {
timingErrors.push(`${end}_before_${start}`);
return null;
}
return roundMs(at(end) - at(start));
};
return {
workerPickupToSourceReadyMs: delta('picked_up', 'source_ready'),
workerFirstGenerationToReviewableMs: delta('first_variant_generating', 'first_reviewable'),
workerFirstValidationToReviewableMs: delta('first_variant_validating', 'first_reviewable'),
workerRemainingGenerationToReadyMs: delta('remaining_variants_generating', 'all_variants_ready'),
workerRemainingValidationToReadyMs: delta('remaining_variants_validating', 'all_variants_ready'),
journalTimingErrors: timingErrors,
journalGenerationTimings: timings,
};
}