{"record":{"id":"1a039e5e61d329da","repo":"HKUDS/DeepTutor","slug":"layer-must-be-l2-or-l3","errorCode":null,"errorMessage":"layer must be L2 or L3","messagePattern":"layer must be L2 or L3","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"deeptutor/api/routers/memory.py","lineNumber":71,"sourceCode":"logger = logging.getLogger(__name__)\nrouter = APIRouter()\n\nLayer = Literal[\"L2\", \"L3\"]\n\n\n# ── Helpers ──────────────────────────────────────────────────────────────\n\n\ndef _validate_doc_key(layer: Layer, key: str) -> None:\n    if layer == \"L2\" and key not in SURFACES:\n        raise HTTPException(status_code=404, detail=f\"unknown surface {key!r}\")\n    if layer == \"L3\" and key not in L3_SLOTS:\n        raise HTTPException(status_code=404, detail=f\"unknown L3 slot {key!r}\")\n\n\ndef _validate_layer(layer: str) -> Layer:\n    if layer not in {\"L2\", \"L3\"}:\n        raise HTTPException(status_code=400, detail=\"layer must be L2 or L3\")\n    return layer  # type: ignore[return-value]\n\n\ndef _validate_surface(surface: str) -> Surface:\n    if surface not in SURFACES:\n        raise HTTPException(status_code=404, detail=f\"unknown surface {surface!r}\")\n    return surface  # type: ignore[return-value]\n\n\n# ── Overview / list ──────────────────────────────────────────────────────\n\n\n@router.get(\"/overview\")\nasync def get_overview():\n    store = get_memory_store()\n    rows = [asdict(r) for r in store.overview()]\n    backup_dir = paths.backup_root()\n    backups: list[str] = []","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/api/routers/memory.py#L53-L89","documentation":"Error \"layer must be L2 or L3\" thrown in HKUDS/DeepTutor.","triggerScenarios":"Thrown at deeptutor/api/routers/memory.py:71 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":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}