{"record":{"id":"548d3f00668290e2","repo":"diegosouzapw/OmniRoute","slug":"http-res-status-548d3f","errorCode":null,"errorMessage":"HTTP ${res.status}","messagePattern":"HTTP \\$\\{res\\.status\\}","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/app/(dashboard)/dashboard/cli-code/components/ClaudeClassifierCompatToggle.tsx","lineNumber":41,"sourceCode":" * Claude Code's `--permission-mode auto` sends an internal `/v1/messages` security-classifier\n * request that requires the response to START with `<block>no</block>` (ALLOW) / `<block>yes</block>`\n * (BLOCK). When a combo/fallback route sends that call to a cheap model returning empty content,\n * Claude Code fails closed on every gated action. \"auto\" detects the classifier request and\n * short-circuits with a synthetic ALLOW response without calling upstream; \"always\" applies it to\n * every Claude-format request. Cycles off → auto → always via the existing /api/settings PATCH.\n */\nexport default function ClaudeClassifierCompatToggle() {\n  const t = useTranslations(\"cliTools\");\n  const [mode, setMode] = useState<CompatMode>(\"off\");\n  const [loading, setLoading] = useState(true);\n  const [saving, setSaving] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n\n  const load = useCallback(async () => {\n    setLoading(true);\n    try {\n      const res = await fetch(\"/api/settings\");\n      if (!res.ok) throw new Error(`HTTP ${res.status}`);\n      const data = await res.json();\n      setMode(isCompatMode(data?.claudeClassifierCompat) ? data.claudeClassifierCompat : \"off\");\n      setError(null);\n    } catch (err) {\n      setError(err instanceof Error ? err.message : t(\"classifierCompatLoadFailed\"));\n    } finally {\n      setLoading(false);\n    }\n  }, [t]);\n\n  useEffect(() => {\n    load();\n  }, [load]);\n\n  const cycle = useCallback(async () => {\n    const next = MODES[(MODES.indexOf(mode) + 1) % MODES.length];\n    const previous = mode;\n    setMode(next); // optimistic","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/diegosouzapw/OmniRoute/blob/a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d/src/app/(dashboard)/dashboard/cli-code/components/ClaudeClassifierCompatToggle.tsx#L23-L59","documentation":"Error \"HTTP ${res.status}\" thrown in diegosouzapw/OmniRoute.","triggerScenarios":"Thrown at src/app/(dashboard)/dashboard/cli-code/components/ClaudeClassifierCompatToggle.tsx:41 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d","analyzedAt":"2026-08-25T18:35:09.898Z","schemaVersion":2},"datasetVersion":"2026-08-25T21:54:21.419Z"}