{"record":{"id":"73d72ed15ca5e2f3","repo":"MemPalace/mempalace","slug":"backend-does-not-support-maintenance-kind-kind-r","errorCode":null,"errorMessage":"backend does not support maintenance kind {kind!r}","messagePattern":"backend does not support maintenance kind (.+?)","errorType":"exception","errorClass":"UnsupportedMaintenanceKindError","httpStatus":null,"severity":"error","filePath":"mempalace/backends/base.py","lineNumber":535,"sourceCode":"        \"\"\"Return a structured snapshot of this collection's maintenance state.\n\n        Free-form per backend (e.g. row count, whether a vector index exists,\n        last-analyze age). Used by benchmark harnesses to record state\n        alongside each latency/recall measurement so an un-analyzed store is\n        not compared against a settled one (RFC 001). Defaults to empty.\n        \"\"\"\n        return {}\n\n    def run_maintenance(self, kind: str) -> \"MaintenanceResult\":\n        \"\"\"Run a maintenance ``kind`` and return an observable result (RFC 001).\n\n        Backends advertise supported kinds in ``BaseBackend.maintenance_kinds``\n        and override this. The default supports nothing, so every kind raises\n        :class:`UnsupportedMaintenanceKindError`. Implementations MUST serialize\n        concurrent same-kind runs and report ``already_running`` rather than\n        stacking the work.\n        \"\"\"\n        raise UnsupportedMaintenanceKindError(f\"backend does not support maintenance kind {kind!r}\")\n\n    def lexical_search(\n        self,\n        *,\n        query: str,\n        n_results: int = 10,\n        where: Optional[dict] = None,\n    ) -> LexicalResult:\n        raise UnsupportedCapabilityError(\"backend does not support lexical_search\")\n\n    def update(\n        self,\n        *,\n        ids: list[str],\n        documents: Optional[list[str]] = None,\n        metadatas: Optional[list[dict]] = None,\n        embeddings: Optional[list[list[float]]] = None,\n    ) -> None:","sourceCodeStart":517,"sourceCodeEnd":553,"githubUrl":"https://github.com/MemPalace/mempalace/blob/06cb6987f02610784fefbad4b2bd5d026d164ba6/mempalace/backends/base.py#L517-L553","documentation":"A FileNotFoundError raised by the strict path of the FTS5/VACUUM rebuild helper: the recovered palace directory exists but contains no chroma.sqlite3. SQLite recovery passes strict=True because its bulk upserts must not be declared successful until the derived index is rebuilt and quick_check passes, so a missing database file is fatal rather than a warning.","triggerScenarios":"The post-recovery cleanup (_vacuum_and_rebuild_fts5 with strict=True) runs on a dest_palace directory that lacks chroma.sqlite3 — e.g. the recovery copy step failed to copy the database, or the source palace never had one.","commonSituations":"Recovering a palace from a partial copy, a backup that excluded chroma.sqlite3, or a palace directory that only contains segment folders without the central SQLite DB.","solutions":["Check that the source palace actually contains chroma.sqlite3 at its root.","Re-copy the source palace in full (including chroma.sqlite3) and re-run the recovery.","If the source genuinely lacks the DB, re-mine from original source files instead of recovering."],"exampleFix":"import os\nsrc_db = os.path.join(source_palace, 'chroma.sqlite3')\nassert os.path.isfile(src_db), f'missing {src_db}; recovery will fail strict check'","handlingStrategy":"validation","validationCode":"import os\nassert os.path.isfile(os.path.join(dest_palace, 'chroma.sqlite3')), \\\n    'recovered palace missing chroma.sqlite3; strict cleanup will fail'","typeGuard":null,"tryCatchPattern":"try:\n    _vacuum_and_rebuild_fts5(dest_palace, strict=True)\nexcept FileNotFoundError:\n    # re-copy the SQLite DB from source, then retry cleanup","preventionTips":["Copy palace directories atomically and completely (including chroma.sqlite3).","Verify backups contain chroma.sqlite3 before relying on them for recovery."],"tags":["sqlite","recovery","file-not-found","chromadb"],"backgroundTag":null,"analyzedSha":"06cb6987f02610784fefbad4b2bd5d026d164ba6","analyzedAt":"2026-08-15T03:03:36.213Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}