Skip to content

v4.15.0 — Hardening I: single-repo first-class + e2e breadth

Choose a tag to compare

@alexherrero alexherrero released this 03 Jun 18:13
· 193 commits to main since this release

MINOR. The harness now runs on a single repo with zero Obsidian / Google Drive / vault dependency — opt in with install.sh --local-state (or agentm_config.py --state-mode local) and harness state lives in <repo>/.harness/ instead of a MemoryVault. This is the first front of Hardening I ("know when we break things"): single-repo mode is now a tested, first-class path, the cross-repo (crickets) install residue that produced the "N fragment(s) skipped" boot error is gone, and a first substantial batch of end-to-end tests exercises whole phases, every memory hook, and the memory engine round-trip in both state modes — so a regression in any of these surfaces before release.

Added

  • First-class repo-local (vault-less) state — install.sh --local-state / install.ps1 -LocalState. Writes "state_mode": "local" to the on-host .agentm-config.json and skips vault wiring; every phase write lands in <repo>/.harness/ with no ValueError. A per-repo <repo>/.harness/.project-mode marker overrides the device default for one repo.
  • agentm_config.py --state-mode {local,vault} — flip the device-level run mode post-install without re-running the installer.

Changed

  • State-mode configuration is on-host only (ADR 0009). .agentm-config.json is the single source of truth for how agentm runs (a new state_mode key); the vault holds data, never configuration. Resolution is two on-host layers — repo-local marker → device state_mode — and the mode is never inferred from a missing vault_path (which is ambiguous between never-configured and transiently-unreachable). Removed the former in-vault .project-mode marker + a dead harness_state_mode registry field.
  • Retired the install-state-sync SessionStart hook — redundant in standalone agentm, couldn't unregister removed hooks, and was the live source of the boot-time "N fragment(s) skipped" error. Retiring it also removed the last chunk of crickets install coupling.

Internal

  • End-to-end test breadth (the regression net). Three new hermetic e2e scripts (verify-phases.sh — phase lifecycle in both state modes; verify-memory-roundtrip.sh — engine round-trip embed→save→recall→reflect→vec-index→lint) plus three subprocess hook-firing tests proving each memory hook fires + graceful-skips + never blocks. All wired into scripts/check-all.sh (11 gates) + the Linux/Mac CI workflows.

Builds on v4.14.0 (decouple from crickets). Full notes: CHANGELOG.md.