{"record":{"id":"e5478bcd36a1ccf4","repo":"chenglou/pretext","slug":"firefox-is-not-currently-supported-for-letter-spac","errorCode":null,"errorMessage":"Firefox is not currently supported for letter-spacing oracle checks","messagePattern":"Firefox is not currently supported for letter-spacing oracle checks","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/letter-spacing-check.ts","lineNumber":208,"sourceCode":"    predictedLineCount: report.predictedLineCount ?? null,\n    browserLineCount: report.browserLineCount ?? null,\n    geometryMatches,\n    firstBreakMismatch: report.firstBreakMismatch ?? null,\n    extractorSensitivity: report.extractorSensitivity ?? null,\n    message: report.message ?? null,\n  }\n}\n\nasync function runBrowser(browser: AutomationBrowserKind, port: number): Promise<OracleResult[]> {\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  const results: OracleResult[] = []\n\n  try {\n    if (session === null || reportBrowser === null) {\n      throw new Error('Firefox is not currently supported for letter-spacing 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=letter-spacing` +\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":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/chenglou/pretext/blob/ac49b09b7d83ede19581fa94a8b892b07d309baf/scripts/letter-spacing-check.ts#L190-L226","documentation":"runBrowser() in letter-spacing-check.ts hard-rejects firefox: even though parseBrowsers accepts it, the letter-spacing oracle probe path sets reportBrowser to null for firefox and throws before creating a session. This is a deliberate, consistent limitation shared with the other oracle checks.","triggerScenarios":"Running `bun run letter-spacing-check -- --browser=firefox` or including firefox in the list. It clears the parse step but fails immediately in runBrowser.","commonSituations":"A maintainer expects firefox parity across check scripts; the letter-spacing probe deliberately omits it.","solutions":["Remove firefox from the list: `--browser=chrome,safari` (default).","Adding firefox support is a feature change to letter-spacing-check.ts runBrowser, not a runtime flag."],"exampleFix":"# before\nbun run letter-spacing-check -- --browser=firefox\n\n# after\nbun run letter-spacing-check -- --browser=chrome,safari","handlingStrategy":"validation","validationCode":"// letter-spacing-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":["The oracle scripts (keep-all, letter-spacing, pre-wrap) all hard-reject firefox despite parseBrowsers accepting it.","Default to `--browser=chrome,safari`."],"tags":["browser-automation","firefox","unsupported","cli"],"backgroundTag":null,"analyzedSha":"ac49b09b7d83ede19581fa94a8b892b07d309baf","analyzedAt":"2026-08-12T17:03:16.263Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}