{"record":{"id":"1f3dc8c9faa87791","repo":"chenglou/pretext","slug":"unsupported-browser-browser-expected-chrome-or-1f3dc8","errorCode":null,"errorMessage":"Unsupported browser ${browser}; expected chrome or safari","messagePattern":"Unsupported browser (.+?); expected chrome or safari","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/corpus-font-matrix.ts","lineNumber":350,"sourceCode":"    throw new Error(`Invalid value for --${name}: ${raw}`)\n  }\n  return parsed\n}\n\nfunction parseOptionalNumberFlag(name: string): number | null {\n  const raw = parseStringFlag(name)\n  if (raw === null) return null\n  const parsed = Number.parseInt(raw, 10)\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid value for --${name}: ${raw}`)\n  }\n  return parsed\n}\n\nfunction parseBrowser(value: string | null): BrowserKind {\n  const browser = (value ?? process.env['CORPUS_CHECK_BROWSER'] ?? 'chrome').toLowerCase()\n  if (browser !== 'chrome' && browser !== 'safari') {\n    throw new Error(`Unsupported browser ${browser}; expected chrome or safari`)\n  }\n  return browser\n}\n\nasync function loadSources(): Promise<CorpusMeta[]> {\n  return await Bun.file('corpora/sources.json').json()\n}\n\nfunction parseOptions(): MatrixOptions {\n  const id = parseStringFlag('id')\n  if (id === null) {\n    throw new Error(`Missing --id. Available corpora: ${Object.keys(FONT_MATRIX).join(', ')}`)\n  }\n\n  const samples = parseOptionalNumberFlag('samples')\n  const start = parseNumberFlag('start', 300)\n  const end = parseNumberFlag('end', 900)\n  const step = parseNumberFlag('step', 10)","sourceCodeStart":332,"sourceCodeEnd":368,"githubUrl":"https://github.com/chenglou/pretext/blob/ac49b09b7d83ede19581fa94a8b892b07d309baf/scripts/corpus-font-matrix.ts#L332-L368","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nbun run scripts/corpus-font-matrix.ts --id=ja-kumo-no-ito --browser=firefox\n// after\nbun run scripts/corpus-font-matrix.ts --id=ja-kumo-no-ito --browser=chrome","handlingStrategy":"validation","validationCode":"const ALLOWED = new Set(['chrome', 'safari'])\nfunction normalizeMatrixBrowser(raw: string | null, env: string | undefined): 'chrome' | 'safari' {\n  const value = (raw ?? env ?? 'chrome').trim().toLowerCase()\n  if (!ALLOWED.has(value)) throw new Error(`Unsupported browser ${value}; expected chrome or safari`)\n  return value as 'chrome' | 'safari'\n}","typeGuard":"function isMatrixBrowser(value: string): value is 'chrome' | 'safari' {\n  return value === 'chrome' || value === 'safari'\n}","tryCatchPattern":null,"preventionTips":["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."],"tags":["cli","validation","browser","corpus-font-matrix"],"backgroundTag":null,"analyzedSha":"ac49b09b7d83ede19581fa94a8b892b07d309baf","analyzedAt":"2026-08-12T17:03:16.263Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}