chenglou/pretext · error · Error
Unsupported browser ${browser}; expected chrome or safari
Error message
Unsupported browser ${browser}; expected chrome or safari What it means
Thrown by parseBrowser in corpus-font-matrix.ts — same shape as [27]. Resolves from --browser, else CORPUS_CHECK_BROWSER, else 'chrome', lowercases, and rejects anything that is not chrome or safari. corpus-font-matrix intentionally does not support Firefox.
Source
Thrown at scripts/corpus-font-matrix.ts:350
throw new Error(`Invalid value for --${name}: ${raw}`)
}
return parsed
}
function parseOptionalNumberFlag(name: string): number | null {
const raw = parseStringFlag(name)
if (raw === null) return null
const parsed = Number.parseInt(raw, 10)
if (!Number.isFinite(parsed)) {
throw new Error(`Invalid value for --${name}: ${raw}`)
}
return parsed
}
function parseBrowser(value: string | null): BrowserKind {
const browser = (value ?? process.env['CORPUS_CHECK_BROWSER'] ?? 'chrome').toLowerCase()
if (browser !== 'chrome' && browser !== 'safari') {
throw new Error(`Unsupported browser ${browser}; expected chrome or safari`)
}
return browser
}
async function loadSources(): Promise<CorpusMeta[]> {
return await Bun.file('corpora/sources.json').json()
}
function parseOptions(): MatrixOptions {
const id = parseStringFlag('id')
if (id === null) {
throw new Error(`Missing --id. Available corpora: ${Object.keys(FONT_MATRIX).join(', ')}`)
}
const samples = parseOptionalNumberFlag('samples')
const start = parseNumberFlag('start', 300)
const end = parseNumberFlag('end', 900)
const step = parseNumberFlag('step', 10)View on GitHub (pinned to ac49b09b7d)
Solutions
- Pass `--browser=chrome` (preferred for the first font-matrix pass per AGENTS.md) or `--browser=safari` (slower, follow-up smoke).
- Clear CORPUS_CHECK_BROWSER if a stale export is leaking.
- Do not run multiple font-matrix jobs in parallel against the same browser — they share one automation session and one temp page-server path.
Example fix
// before bun run scripts/corpus-font-matrix.ts --id=ja-kumo-no-ito --browser=firefox // after bun run scripts/corpus-font-matrix.ts --id=ja-kumo-no-ito --browser=chrome
Defensive patterns
Strategy: validation
Validate before calling
const ALLOWED = new Set(['chrome', 'safari'])
function normalizeMatrixBrowser(raw: string | null, env: string | undefined): 'chrome' | 'safari' {
const value = (raw ?? env ?? 'chrome').trim().toLowerCase()
if (!ALLOWED.has(value)) throw new Error(`Unsupported browser ${value}; expected chrome or safari`)
return value as 'chrome' | 'safari'
} Type guard
function isMatrixBrowser(value: string): value is 'chrome' | 'safari' {
return value === 'chrome' || value === 'safari'
} Prevention
- Use chrome (preferred first pass per AGENTS.md) or safari for font-matrix.
- Clear CORPUS_CHECK_BROWSER if it leaks from another workflow.
- Never run parallel font-matrix jobs against the same browser — they share one automation session.
When it happens
Trigger: parseBrowser returns a lowercased string that is neither 'chrome' nor 'safari'. Triggers on `--browser=firefox`, `--browser=webkit`, `--browser=chromium`, or a leaked CORPUS_CHECK_BROWSER=firefox.
Common situations: Assuming Firefox is supported because BrowserKind includes it; a globally-exported CORPUS_CHECK_BROWSER from a different workflow; variant names (chromium, canary) that do not collapse to chrome.
Related errors
- Unsupported browser ${browser}; expected chrome or safari
- Invalid value for --${name}: ${raw}
- Missing --id. Available corpora: ${Object.keys(FONT_MATRIX).
- --step must be > 0
- Unknown corpus ${options.id}. Available corpora: ${sources.m
AI-assisted analysis of chenglou/pretext@ac49b09b7d (2026-08-12).
Data as JSON: /api/errors/1f3dc8c9faa87791.
Report an issue: GitHub.