import { VersionInfo } from '@start9labs/start-sdk' export const v_0_2_29 = VersionInfo.of({ version: '0.2.29:0', releaseNotes: { en_US: 'Server-side benchmark suite orchestration. The benchmark runner has been moved out of dashboard JavaScript and into the relay\'s background workers. Previously, clicking "Run benchmark suite" started a JS for-loop that submitted one permutation at a time, awaited each, then moved to the next — if the operator\'s browser tab closed, mobile phone went to sleep, or anything else interrupted the JS, only the already-in-flight permutations completed and the rest were silently dropped. Net effect: phones, tab switches, refreshes all halted suites mid-run, sometimes after just one permutation. (1) New endpoint POST /admin/test-run-suite accepts the full permutation list + media_url, mints ALL jobs upfront so the dashboard can render them immediately, and orchestrates phase-based concurrent execution in a relay-side setImmediate loop. The suite keeps grinding whether or not any browser is watching. (2) Dashboard now POSTs once to the suite endpoint, then polls /admin/jobs-history?batch_id=X every 5s for progress. (3) Active batch ID persisted to localStorage — if the operator closes the tab and reopens the dashboard, the Jobs tab auto-detects the in-progress batch and resumes the progress poll without manual intervention. (4) Phases group permutations by TX fingerprint (same media + same TX backend + same model = same phase). Within a phase, permutations fire concurrently and share TX via the existing inflight-promise cache; phases themselves run sequentially so the underlying transcribe backends don\'t get overloaded. (5) Failed permutations don\'t abort the suite — each failure is recorded as a row in the Jobs table; the runner moves on to the next perm. (6) Bonus: the extracted executeTestRunWorker function is now reusable for any future workflows that want to programmatically queue test runs (e.g. CLI tooling).', }, migrations: { up: async ({ effects }) => {}, down: async ({ effects }) => {}, }, })