{"record":{"id":"92dddaecd0ef8fb8","repo":"chenglou/pretext","slug":"firefox-is-not-currently-supported-for-keep-all-or","errorCode":null,"errorMessage":"Firefox is not currently supported for keep-all oracle checks","messagePattern":"Firefox is not currently supported for keep-all oracle checks","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/keep-all-check.ts","lineNumber":129,"sourceCode":"    report.predictedHeight === report.actualHeight &&\n    report.firstBreakMismatch === null\n  )\n}\n\nfunction caseRunsInBrowser(testCase: ProbeOracleCase, browser: AutomationBrowserKind): boolean {\n  return testCase.browsers === undefined || testCase.browsers.includes(browser)\n}\n\nasync function runBrowser(browser: AutomationBrowserKind, port: number): Promise<boolean> {\n  const lock = await acquireBrowserAutomationLock(browser)\n  const reportBrowser: BrowserKind | null = browser === 'firefox' ? null : browser\n  const session = reportBrowser === null ? null : createBrowserSession(reportBrowser)\n  let serverProcess: ChildProcess | null = null\n  let ok = true\n\n  try {\n    if (session === null || reportBrowser === null) {\n      throw new Error('Firefox is not currently supported for keep-all oracle checks')\n    }\n\n    const pageServer = await ensurePageServer(port, '/probe', process.cwd())\n    serverProcess = pageServer.process\n    const requestId = `${browser}-${Date.now()}-${Math.random().toString(36).slice(2)}`\n    const reportServer = await startPostedReportServer<ProbeBatchReport>(requestId)\n\n    try {\n      const url =\n        `${pageServer.baseUrl}/probe?batch=keep-all` +\n        `&requestId=${encodeURIComponent(requestId)}` +\n        `&reportEndpoint=${encodeURIComponent(reportServer.endpoint)}`\n      const batchReport = await loadPostedReport(\n        session,\n        url,\n        () => reportServer.waitForReport(null),\n        requestId,\n        reportBrowser,","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/chenglou/pretext/blob/ac49b09b7d83ede19581fa94a8b892b07d309baf/scripts/keep-all-check.ts#L111-L147","documentation":"runBrowser() in keep-all-check.ts throws this hard guard when the requested browser is firefox. Although parseBrowsers() accepts 'firefox', the keep-all oracle probe path deliberately does not support it, so reportBrowser is forced to null and the session is never created. This is a deliberate, documented product limitation, not a bug.","triggerScenarios":"Running `bun run keep-all-check -- --browser=firefox` or `--browser=chrome,firefox`. Firefox passes the parseBrowsers validation but fails immediately inside runBrowser.","commonSituations":"A maintainer assumes the shared browser-automation layer supports firefox uniformly across all check scripts; it does for some but not the keep-all oracle.","solutions":["Drop firefox from the keep-all browser list: use `--browser=chrome,safari` (the default).","If firefox support is genuinely needed, that is a feature request against keep-all-check.ts's runBrowser path, not a flag you can set."],"exampleFix":"# before\nbun run keep-all-check -- --browser=chrome,firefox\n\n# after\nbun run keep-all-check -- --browser=chrome,safari","handlingStrategy":"validation","validationCode":"// keep-all-check does not support firefox; filter it out before invoking\nconst requested = (parseStringFlag('browser') ?? 'chrome,safari')\n  .split(',').map(s => s.trim().toLowerCase()).filter(b => b !== 'firefox')\nif (requested.length === 0) requested.push('chrome', 'safari')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remember the oracle scripts (keep-all, letter-spacing, pre-wrap) all hard-reject firefox even though parseBrowsers accepts it.","Default to `--browser=chrome,safari` for these checks."],"tags":["browser-automation","firefox","unsupported","cli"],"backgroundTag":null,"analyzedSha":"ac49b09b7d83ede19581fa94a8b892b07d309baf","analyzedAt":"2026-08-12T17:03:16.263Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}