import { VersionInfo } from '@start9labs/start-sdk' export const v_0_2_116 = VersionInfo.of({ version: '0.2.116:0', releaseNotes: { en_US: "Two related fixes — backend selection bug + operator-internal detail leaking to public clients. (1) The pre-flight 'Spark Control reports STT (parakeet) is offline' 503 short-circuited backend selection. Four routes (summarize-url, transcribe, transcribe-url, analyze) checked hw.{transcribe|analyze}.blocked_reason and 503'd the request BEFORE running planBackend, so even with the operator's configured preference set to gemini_first / gemini_only / hardware_first (Gemini-fallback), a Spark Control 'delegate not ready' state torpedoed Gemini-routable requests too. Now the routes log the blocked state for the operator and let planBackend handle routing normally — when Spark Control marks a service not ready, hw.{transcribe|analyze}.url becomes null, hasHardware = false, and planBackend correctly picks Gemini under any preference except hardware_only (which keeps its existing generic 'hardware_only_not_configured' refusal). (2) Operator-internal wording (Spark Control, parakeet, vLLM, Gemma, Sortformer, TitaNet, LAN IPs / *.local URLs) no longer leaks to public clients. Added a sanitizer (server/sanitize-error.js) that swaps known operator-private terms for generic equivalents ('Parakeet' → 'the transcribe service', 'Spark Control' → 'the operator hardware', etc.) and redacts private-IP / *.local URLs to '(internal)'. Applied centrally in markFailed (so every pipeline-failure path is covered with no per-route edits) — job.error becomes client-safe + job.error_internal preserves the raw text. snapshotJobs (consumed by the admin dashboard) exposes both fields so the operator can still see the raw diagnostic locally. Admin config endpoint now exposes effective_transcribe_blocked_reason and effective_analyze_blocked_reason so the operator's own hardware health panel can display the actual SC-supplied reason without relying on log grep. Net effect: a Recaps cloud user with Gemini selected as preference no longer sees a hardware-down 503; the operator still gets full diagnostic detail in their own logs + admin dashboard.", }, migrations: { up: async ({ effects }) => {}, down: async ({ effects }) => {}, }, })