Revert "fix(autopilot): give full-cycle dispatch a 30-minute timeout floor (#2852)"

This reverts commit b98fae9b61.
This commit is contained in:
Garry Tan
2026-07-23 12:02:36 -07:00
parent aea6df3da7
commit 9a70945152
3 changed files with 2 additions and 30 deletions
-9
View File
@@ -1,9 +0,0 @@
export function resolveAutopilotDispatchTimeoutMs(
baseIntervalSeconds: number,
fullCycle: boolean,
): number {
const intervalDerivedTimeoutMs = Math.max(baseIntervalSeconds * 2 * 1000, 300_000);
return fullCycle
? Math.max(intervalDerivedTimeoutMs, 1_800_000)
: intervalDerivedTimeoutMs;
}
+2 -5
View File
@@ -38,7 +38,6 @@ import { logSelfUpgrade } from '../core/audit/self-upgrade-audit.ts';
import { detectInstallMethod } from './upgrade.ts';
import { evaluateQuietHours } from '../core/minions/quiet-hours.ts';
import { inspectLock } from '../core/db-lock.ts';
import { resolveAutopilotDispatchTimeoutMs } from './autopilot-timeout.ts';
/**
* v0.37.7.0 #1162 — classify autopilot reconnect-loop errors.
@@ -690,7 +689,7 @@ export async function runAutopilot(engine: BrainEngine, args: string[]) {
const queue = new MinionQueue(engine);
const slotMs = Math.floor(Date.now() / (baseInterval * 1000)) * baseInterval * 1000;
const slot = new Date(slotMs).toISOString();
const timeoutMs = resolveAutopilotDispatchTimeoutMs(baseInterval, false);
const timeoutMs = Math.max(baseInterval * 2 * 1000, 300_000);
// ── v0.40 D17: per-source freshness check ────────────────────
// Runs first; independent of score gate. Submits a 'sync' job per
@@ -932,9 +931,7 @@ export async function runAutopilot(engine: BrainEngine, args: string[]) {
const result = await dispatchPerSource(engine, queue, {
repoPath,
slot,
// Full cycles can outlive short daemon intervals. Keep lighter dispatches
// interval-derived while giving per-source consolidation enough time.
timeoutMs: resolveAutopilotDispatchTimeoutMs(baseInterval, true),
timeoutMs,
fanoutMax,
jsonMode,
});
-16
View File
@@ -15,7 +15,6 @@
import { describe, expect, test } from 'bun:test';
import { readFileSync } from 'fs';
import { join } from 'path';
import { resolveAutopilotDispatchTimeoutMs } from '../src/commands/autopilot-timeout.ts';
const AUTOPILOT_SRC = readFileSync(
join(import.meta.dir, '..', 'src', 'commands', 'autopilot.ts'),
@@ -49,21 +48,6 @@ describe('autopilot.ts ↔ dispatchPerSource wiring', () => {
expect(Math.abs(dispatchIdx - fullCycleIdx)).toBeLessThan(3000);
});
test('applies the 30-minute timeout floor only to full-cycle dispatch', () => {
const baseIntervalSeconds = 60;
const intervalDerivedTimeoutMs = Math.max(baseIntervalSeconds * 2 * 1000, 300_000);
expect(resolveAutopilotDispatchTimeoutMs(baseIntervalSeconds, true)).toBeGreaterThanOrEqual(30 * 60_000);
expect(resolveAutopilotDispatchTimeoutMs(baseIntervalSeconds, false)).toBe(intervalDerivedTimeoutMs);
expect(AUTOPILOT_SRC).toContain(
'const timeoutMs = resolveAutopilotDispatchTimeoutMs(baseInterval, false);',
);
expect(AUTOPILOT_SRC).toMatch(
/dispatchPerSource\(engine, queue, \{[\s\S]{0,300}timeoutMs: resolveAutopilotDispatchTimeoutMs\(baseInterval, true\)/,
);
});
test('updates lastFullCycleAt on dispatch (so the 60-min floor is honored)', () => {
// After the dispatchPerSource call, the lastFullCycleAt module var
// must update so the next tick doesn't immediately re-fan-out.