openreader/compute/worker/src/worker-loop-policy.ts
Richard R e1483ab80a refactor(worker): modularize worker entrypoint and add vitest infra
move worker startup logic from server.ts to runtime.ts for better modularity
add worker-loop-policy.ts for loop control abstraction
delete legacy unit tests under tests/unit/ related to compute worker and control-plane
add vitest config and test directories for compute-core and compute-worker
add vitest workflow for CI
update package.json scripts for new test commands and add vitest as dev dependency

BREAKING CHANGE: worker entrypoint is now compute/worker/src/runtime.ts instead of server.ts; legacy Playwright-based unit tests for compute worker are removed in favor of Vitest
2026-05-30 11:00:01 -06:00

22 lines
823 B
TypeScript

import type { WorkerOperationKind } from '@openreader/compute-core/api-contracts';
export type RetryAction = 'nak_retry' | 'term_fail';
export function buildQueueWaitTiming(queuedAt: number, now: number): { queueWaitMs: number } | undefined {
if (!Number.isFinite(queuedAt) || !Number.isFinite(now)) return undefined;
return { queueWaitMs: Math.max(0, Math.floor(now - queuedAt)) };
}
export function decideRetryAction(input: {
kind: WorkerOperationKind;
deliveryCount: number;
pdfAttempts: number;
whisperMaxDeliver?: number;
}): RetryAction {
const whisperMaxDeliver = input.whisperMaxDeliver ?? 1;
if (input.kind === 'whisper_align') {
return input.deliveryCount < whisperMaxDeliver ? 'nak_retry' : 'term_fail';
}
return input.deliveryCount < input.pdfAttempts ? 'nak_retry' : 'term_fail';
}