{"record":{"id":"6e3659c617b2b3e5","repo":"chenglou/pretext","slug":"firefox-is-not-currently-supported-for-symbol-orac","errorCode":null,"errorMessage":"Firefox is not currently supported for symbol oracle checks","messagePattern":"Firefox is not currently supported for symbol oracle checks","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/symbol-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 symbol 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=symbol-runs` +\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/symbol-check.ts#L111-L147","documentation":"runBrowser maps 'firefox' to reportBrowser=null and session=null, then immediately throws before opening a page server. This is a deliberate, documented gap: the symbol-oracle /probe?batch=symbol-runs automation path is not implemented for Firefox. Because parseBrowsers (error 85) accepts the token, the failure surfaces here at run start, after the browser automation lock has already been acquired (and is released in the finally).","triggerScenarios":"--browser=firefox or --browser=chrome,firefox with symbol-check. The firefox lock is acquired (line 121) and released in the finally; no measurement runs.","commonSituations":"Reusing a --browser=chrome,firefox,safari matrix that works for pre-wrap-check; CI config copied across checkers without per-checker filtering.","solutions":["Drop firefox from the --browser= list for symbol-check: use the default chrome,safari.","If Firefox symbol coverage is genuinely required, implement the Firefox path (wire reportBrowser/session for firefox in runBrowser); it is a TODO, not a config toggle.","Keep pre-wrap-check and symbol-check browser lists separate in CI."],"exampleFix":"# before\nbun run scripts/symbol-check.ts --browser=chrome,safari,firefox\n\n# after\nbun run scripts/symbol-check.ts --browser=chrome,safari","handlingStrategy":"validation","validationCode":"// Filter firefox out before launching symbol-check, since the run path is unimplemented.\nconst requested = (parseStringFlag('browser') ?? 'chrome,safari')\n  .split(',').map(s => s.trim().toLowerCase()).filter(Boolean) as AutomationBrowserKind[]\nconst runnable = requested.filter(b => b !== 'firefox')\nif (runnable.length < requested.length) {\n  console.error('symbol-check: firefox is not supported; running', runnable)\n}\nif (runnable.length === 0) process.exit(2)","typeGuard":"const symbolSupported = (b: AutomationBrowserKind): b is 'chrome' | 'safari' => b !== 'firefox'","tryCatchPattern":null,"preventionTips":["symbol-check supports chrome+safari only; never pass firefox for it.","Do not share one --browser matrix across pre-wrap-check and symbol-check.","This throw is a hard stop by design; do not catch and continue — there is no Firefox session to use."],"tags":["browser-automation","firefox","oracle","test-infra"],"backgroundTag":null,"analyzedSha":"ac49b09b7d83ede19581fa94a8b892b07d309baf","analyzedAt":"2026-08-12T17:03:16.263Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}