From 3d8a9e81d094ccc01c2fe3f6e4b1e0553fe5f39c Mon Sep 17 00:00:00 2001 From: spiky02plateau <155588579+spiky02plateau@users.noreply.github.com> Date: Thu, 23 Jul 2026 18:16:55 +0200 Subject: [PATCH] fix(minions): default timeout for contextual reindex (#2611) --- src/core/minions/handler-timeouts.ts | 5 +++++ test/minions.test.ts | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/core/minions/handler-timeouts.ts b/src/core/minions/handler-timeouts.ts index 334e1f231..8269add1e 100644 --- a/src/core/minions/handler-timeouts.ts +++ b/src/core/minions/handler-timeouts.ts @@ -24,6 +24,7 @@ */ const THIRTY_MIN_MS = 30 * 60 * 1000; +const SIXTY_MIN_MS = 60 * 60 * 1000; const TEN_MIN_MS = 10 * 60 * 1000; /** @@ -42,6 +43,10 @@ export const HANDLER_DEFAULT_TIMEOUT_MS: Readonly> = { // few writes. Generous 10-min budget (vs the tight null-default) covers a // slow gateway without the 30-min loop budget. chronicle_extract: TEN_MIN_MS, + // Per-page contextual reindex jobs process chunks sequentially with one + // rate-leased LLM synopsis call per chunk; large transcript pages need more + // than the standard 30-min long-job budget. + contextual_reindex_per_chunk: SIXTY_MIN_MS, }; /** diff --git a/test/minions.test.ts b/test/minions.test.ts index 3f6bf3c07..04555e43f 100644 --- a/test/minions.test.ts +++ b/test/minions.test.ts @@ -354,6 +354,13 @@ describe('MinionQueue: #1737 per-handler default timeout', () => { expect(sub.timeout_ms).toBe(30 * 60 * 1000); }); + test('contextual per-chunk reindex gets the 60-min default', async () => { + const job = await queue.add('contextual_reindex_per_chunk', { page_slug: 'large-transcript' }, undefined, { + allowProtectedSubmit: true, + }); + expect(job.timeout_ms).toBe(60 * 60 * 1000); + }); + test('explicit timeout_ms always wins over the default', async () => { const job = await queue.add('embed-backfill', { sourceId: 'x' }, { timeout_ms: 5000 }); expect(job.timeout_ms).toBe(5000);