v5.7.0 — V5-6 routing-plane de-vaulting
MINOR. The kernel's routing layer is now backend-agnostic. Three mechanisms that previously built vault_path() / … filesystem paths — resolve_project / _vault_projects_dir, repo_registry, and the state_mode resolver — now speak Locators to the V5-1 storage seam. On the obsidian-vault backend behavior is byte-identical (LC-1). A fresh install with only device-local can now host a project, its harness state, and the repo registry without a vault. state_mode: vault in device config and .project-mode markers is aliased to state_mode: backend at read time — no operator migration required (LC-5). Gate extensions enforce the no-Path-leak and one-way-import-direction invariants on the routing layer. AGENTM_DEVICE_LOCAL_ROOT env-var override added for test isolation in CI environments without the obsidian-vault plugin. This is the third and final leg of the V5 de-vaulting arc. Gates: 20/20, CI green across Linux/Mac/Windows.
Added
-
V5-6 —
resolve_project/_vault_projects_dirvia seam (b762987).harness_memory._vault_projects_dirsignature changed from(vault: Path) -> Pathto(backend: StorageBackend) -> Locator;resolve_projectreturns{slug, project_locator, backend, project_root, layout}instead of{slug, vault_path, project_root, layout}. Callers inprocess_seam.pyandmemory_mcp_tools.pyupdated to useproject_locator.key. 10 new tests. LC-7 parallel-run:VaultBackendLocatorresolves to same on-disk path. -
V5-6 —
repo_registryonto the seam (3af7fa6).registry_path(vault) -> Pathreplaced byregistry_locator(backend) -> Locator;_vault_or_none()replaced by_backend_or_none()(lazy-importsselect_backend()); all five public functions (read_registry,write_registry,register_repo,unregister_repo,list_repos) now takeStorageBackend._mutate_registrydropsvault_mutex(held internally byVaultBackend.write());write_registryadds an explicit content-hash CAS. CLI graceful-skip fires whenselect_backend()raises, not merely whenMEMORY_VAULT_PATHis unset. 10 new/rewritten tests. -
V5-6 —
state_mode: vault→backendalias (b62e378)._read_config_state_modeand_read_project_modealias"vault"→"backend"at read time — one-line guard, no rewrite, no operator migration (LC-5).agentm_config._STATE_MODESadds"backend"as the canonical value;cmd_set_state_modenormalizes"vault"→"backend"at write time. 5 new/updated tests. -
V5-6 — gate extensions + conformance suite for routing layer (
51b1a32).check-storage-seam-no-path-leak.pyPass 2 checks 8 named routing functions inharness_memory.pyandrepo_registry.pyforpathlib.Pathreturn annotations.check-process-seam-import-direction.shLC-8 block scans routing files forstorage_vaultimports.storage_conformance.pygainscheck_routing_repo_registry()andROUTING_CHECKS;ConformanceSuite.test_routing_repo_registry()is now inherited by all conformance subclasses. 8 new tests across three gate test files. -
V5-6 — ADR 0019 + wiki sweep (
e185946). ADR 0019 records the three-leg de-vaulting arc completion, all locked design calls (LC-1/4/5/6/7/8), and load-bearing assumptions with re-audit triggers.Decisions.md+decisions/_Sidebar.mdupdated.device-wide-architecture.mdv1.0 entry finalized.Storage-Seam.mdrouting layer NOTE updated to complete.Single-Repo-State-Mode.mdupdated:state_modevalue"vault"→"backend"with backward-compat note.
Internal
-
CI test isolation —
AGENTM_DEVICE_LOCAL_ROOT+ backend mocks (4a28b1c).storage_device_local._default_root()reads$AGENTM_DEVICE_LOCAL_ROOTto redirect the device-local root in CI without the vault plugin. 2 subprocess CLI tests updated to use this env var; 2 in-process tests updated to patchbackend_selection.select_backenddirectly. -
CI
verify-phases.shvault pass fix (d055423). SetOBSIDIAN_VAULT_SCRIPTS=$REPO/scriptsso the vault pass can load the kernelVaultBackendas a stand-in when the crickets obsidian-vault plugin is absent in CI.verify-phases: 32/32(was 31/32).
Full changelog: See CHANGELOG.md.