chenglou/pretext · error · Error
Firefox is not currently supported for symbol oracle checks
Error message
Firefox is not currently supported for symbol oracle checks
What it means
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).
Source
Thrown at scripts/symbol-check.ts:129
report.predictedHeight === report.actualHeight &&
report.firstBreakMismatch === null
)
}
function caseRunsInBrowser(testCase: ProbeOracleCase, browser: AutomationBrowserKind): boolean {
return testCase.browsers === undefined || testCase.browsers.includes(browser)
}
async function runBrowser(browser: AutomationBrowserKind, port: number): Promise<boolean> {
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
let ok = true
try {
if (session === null || reportBrowser === null) {
throw new Error('Firefox is not currently supported for symbol 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=symbol-runs` +
`&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
- 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.
Example fix
# before bun run scripts/symbol-check.ts --browser=chrome,safari,firefox # after bun run scripts/symbol-check.ts --browser=chrome,safari
Defensive patterns
Strategy: validation
Validate before calling
// Filter firefox out before launching symbol-check, since the run path is unimplemented.
const requested = (parseStringFlag('browser') ?? 'chrome,safari')
.split(',').map(s => s.trim().toLowerCase()).filter(Boolean) as AutomationBrowserKind[]
const runnable = requested.filter(b => b !== 'firefox')
if (runnable.length < requested.length) {
console.error('symbol-check: firefox is not supported; running', runnable)
}
if (runnable.length === 0) process.exit(2) Type guard
const symbolSupported = (b: AutomationBrowserKind): b is 'chrome' | 'safari' => b !== 'firefox'
Prevention
- 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.
When it happens
Trigger: --browser=firefox or --browser=chrome,firefox with symbol-check. The firefox lock is acquired (line 121) and released in the finally; no measurement runs.
Common situations: Reusing a --browser=chrome,firefox,safari matrix that works for pre-wrap-check; CI config copied across checkers without per-checker filtering.
Related errors
- Missing pre-wrap result for ${testCase.label}
- symbol batch failed
- Timed out waiting for local port ${port}
- ${session.message ?? session.error}
- ${tree.message ?? tree.error}
AI-assisted analysis of chenglou/pretext@ac49b09b7d (2026-08-12).
Data as JSON: /api/errors/6e3659c617b2b3e5.
Report an issue: GitHub.