{"record":{"id":"60552ec8f0691274","repo":"headroomlabs-ai/headroom","slug":"invalid-memory-storage-mode-config-memory-storage","errorCode":null,"errorMessage":"Invalid memory_storage_mode={config.memory_storage_mode!r}; expected one of {[m.value for m in MemoryStorageMode]}","messagePattern":"Invalid memory_storage_mode=(.+?); expected one of (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"headroom/proxy/server.py","lineNumber":1270,"sourceCode":"            # PR-B6: translate the string-typed ``ProxyConfig.memory_mode``\n            # into the typed ``MemoryMode`` enum. Unknown values raise\n            # loudly per the no-silent-fallback policy.\n            from headroom.proxy.memory_handler import MemoryMode\n\n            try:\n                _memory_mode = MemoryMode(config.memory_mode)\n            except ValueError as exc:\n                raise ValueError(\n                    f\"Invalid memory_mode={config.memory_mode!r}; \"\n                    f\"expected one of {[m.value for m in MemoryMode]}\"\n                ) from exc\n\n            from headroom.memory.storage_router import MemoryStorageMode\n\n            try:\n                _storage_mode = MemoryStorageMode(config.memory_storage_mode)\n            except ValueError as exc:\n                raise ValueError(\n                    f\"Invalid memory_storage_mode={config.memory_storage_mode!r}; \"\n                    f\"expected one of {[m.value for m in MemoryStorageMode]}\"\n                ) from exc\n\n            memory_config = MemoryConfig(\n                enabled=True,\n                backend=config.memory_backend,\n                db_path=_mem_db_path,\n                inject_tools=config.memory_inject_tools,\n                use_native_tool=config.memory_use_native_tool,\n                inject_context=config.memory_inject_context,\n                top_k=config.memory_top_k,\n                min_similarity=config.memory_min_similarity,\n                mode=_memory_mode,\n                storage_mode=_storage_mode,\n                project_root_override=config.memory_project_root_override,\n                qdrant_url=config.memory_qdrant_url,\n                qdrant_host=config.memory_qdrant_host,","sourceCodeStart":1252,"sourceCodeEnd":1288,"githubUrl":"https://github.com/headroomlabs-ai/headroom/blob/322425c43bffde1ed0b64fecf3cf5951565dd82b/headroom/proxy/server.py#L1252-L1288","documentation":"During app creation, ProxyConfig.memory_storage_mode is converted to the MemoryStorageMode enum; unknown strings raise with the list of accepted values rather than falling back. This runs immediately after memory_mode validation and gates MemoryConfig construction.","triggerScenarios":"ProxyConfig(memory_storage_mode='sqlite_only') or any string not in MemoryStorageMode; commonly a typo, case mismatch, or version-skewed value.","commonSituations":"Old configs referencing renamed storage backends; documentation drift between releases; direct JSON config use.","solutions":["Use one of the values printed in the error exactly.","Drop the memory_storage_mode key to fall back to its supported default.","After upgrading headroom, validate all memory_* keys against current enums."],"exampleFix":"# before\nProxyConfig(memory_storage_mode=\"sqlite_only\")\n\n# after\nfrom headroom.memory.storage_router import MemoryStorageMode\nProxyConfig(memory_storage_mode=MemoryStorageMode.SQLITE.value)  # use a listed value","handlingStrategy":"type-guard","validationCode":"from headroom.memory.storage_router import MemoryStorageMode\nif cfg[\"memory_storage_mode\"] not in {m.value for m in MemoryStorageMode}:\n    raise SystemExit(f\"must be one of {[m.value for m in MemoryStorageMode]}\")","typeGuard":"from headroom.memory.storage_router import MemoryStorageMode\ndef is_storage_mode(v: str) -> bool:\n    return v in {m.value for m in MemoryStorageMode}","tryCatchPattern":"try:\n    app = create_app(config)\nexcept ValueError as e:\n    if \"memory_storage_mode\" in str(e):\n        fix_config(e)\n    raise","preventionTips":["Use enum .value strings from the installed package.","Drop stale keys so defaults apply."],"tags":["config","enum","validation"],"backgroundTag":null,"analyzedSha":"322425c43bffde1ed0b64fecf3cf5951565dd82b","analyzedAt":"2026-08-15T01:03:05.481Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}