chenglou/pretext · error · Error

Firefox is not currently supported for letter-spacing oracle

Error message

Firefox is not currently supported for letter-spacing oracle checks

What it means

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.

Source

Thrown at scripts/letter-spacing-check.ts:208

    predictedLineCount: report.predictedLineCount ?? null,
    browserLineCount: report.browserLineCount ?? null,
    geometryMatches,
    firstBreakMismatch: report.firstBreakMismatch ?? null,
    extractorSensitivity: report.extractorSensitivity ?? null,
    message: report.message ?? null,
  }
}

async function runBrowser(browser: AutomationBrowserKind, port: number): Promise<OracleResult[]> {
  const lock = await acquireBrowserAutomationLock(browser)
  const reportBrowser: BrowserKind | null = browser === 'firefox' ? null : browser
  const session = reportBrowser === null ? null : createBrowserSession(reportBrowser)
  let serverProcess: ChildProcess | null = null
  const results: OracleResult[] = []

  try {
    if (session === null || reportBrowser === null) {
      throw new Error('Firefox is not currently supported for letter-spacing oracle checks')
    }

    const pageServer = await ensurePageServer(port, '/probe', process.cwd())
    serverProcess = pageServer.process
    const requestId = `${browser}-${Date.now()}-${Math.random().toString(36).slice(2)}`
    const reportServer = await startPostedReportServer<ProbeBatchReport>(requestId)

    try {
      const url =
        `${pageServer.baseUrl}/probe?batch=letter-spacing` +
        `&requestId=${encodeURIComponent(requestId)}` +
        `&reportEndpoint=${encodeURIComponent(reportServer.endpoint)}`
      const batchReport = await loadPostedReport(
        session,
        url,
        () => reportServer.waitForReport(null),
        requestId,
        reportBrowser,

View on GitHub (pinned to ac49b09b7d)

Solutions

  1. Remove firefox from the list: `--browser=chrome,safari` (default).
  2. Adding firefox support is a feature change to letter-spacing-check.ts runBrowser, not a runtime flag.

Example fix

# before
bun run letter-spacing-check -- --browser=firefox

# after
bun run letter-spacing-check -- --browser=chrome,safari
Defensive patterns

Strategy: validation

Validate before calling

// letter-spacing-check does not support firefox; filter it out before invoking
const requested = (parseStringFlag('browser') ?? 'chrome,safari')
  .split(',').map(s => s.trim().toLowerCase()).filter(b => b !== 'firefox')
if (requested.length === 0) requested.push('chrome', 'safari')

Prevention

When it happens

Trigger: Running `bun run letter-spacing-check -- --browser=firefox` or including firefox in the list. It clears the parse step but fails immediately in runBrowser.

Common situations: A maintainer expects firefox parity across check scripts; the letter-spacing probe deliberately omits it.

Related errors


AI-assisted analysis of chenglou/pretext@ac49b09b7d (2026-08-12). Data as JSON: /api/errors/e5478bcd36a1ccf4. Report an issue: GitHub.