Migration notes for akm v0.8.0
This release combines the 0.8.0 CLI/storage break with the final improve-owned maintenance migration work that landed before release validation closed.
Key operator-facing changes:
akm index --enrichandakm index --re-enrichare removed.- Plain
akm indexnow owns metadata enhancement only. - Memory inference and graph extraction now run from
akm improveafter consolidation, not fromakm index. - Graph schema redesign (DB_VERSION 12 → 13):
graph_filesre-keyed onentry_idwith FK cascade toentries(id), child tables follow. Upgrade drops the graph tables and repopulates them on the nextakm improvecycle; non-graph tables rebuild automatically. Runakm improveonce after the storage migration to repopulate graph data. - Manual QA and sandbox guidance now require isolating
AKM_DATA_DIRin addition toHOME, XDG dirs, andAKM_STASH_DIR. akm healthis available for post-upgrade runtime checks againststate.db, task-history integrity, agent availability, and recent improve telemetry.
Primary public command family for 0.8.0:
akm improve [<type>|<ref>]akm propose <type> <name> (--task "..." | --file <path>)akm proposal listakm proposal show <id>akm proposal diff <id>akm proposal accept <id>akm proposal reject <id> --reason "..."
Proposal-queue and improvement workflows are consolidated around this family. Update scripts, prompts, docs, and agent instructions before upgrading.
Behavior changes worth noting:
akm searchwith no query now fails withMISSING_REQUIRED_ARGUMENT.akm remember --enrichis fail-soft: if no LLM is configured, the memory is still written.akm wiki stash <wiki> <url>once again fetches and stores URL snapshots inwikis/<name>/raw/.akm health --since 24hprovides a fast operator check for state-db round-trip health, task-log backing, and recent improve outcomes.- The
akm improvelock is now properly released even whenopenStateDatabase()or budget-timer setup throws, preventing lock leaks (up to 4 hours) on error paths.
New in the final 0.8.0 RC cycle:
End-of-Run Git Sync (akm improve --sync)
akm improve now auto-commits the git-backed primary stash at the end of every
non-dry-run pass. Detection is based on a .git directory — no remote required.
defaultandthoroughprofiles: sync + push enabled by defaultquickandmemory-focusprofiles: sync disabled (lightweight passes)--sync/--no-sync: force on or off for a single run--push/--no-push: push or commit-only override for a single run
The commit message defaults to akm improve auto-sync and supports {token}
placeholders: {timestamp}, {date}, {time}, {scope}, {refs},
{accepted}. Configure via profiles.improve.<name>.sync.message in config.
The result envelope includes a sync field: { committed, pushed, skipped, reason? }. A stash_synced event is emitted to state.db. Sync failures are
non-fatal — they never fail a successful improve run.
Consolidate Reliability
- Pre-flight stale-DB filter: consolidate now filters out entries that have become stale in the DB before making any LLM calls, eliminating wasted tokens on already-processed content.
- Defense-in-depth merge guards: three layers of guards prevent incorrect merges, improving consolidation correctness on edge cases.
Proposal Drain Refinements
DrainDeferReasonnow has two variants:"mid-band"and"possible-dup". The"possible-contradiction"variant has been removed.DrainResultgains astagedfield: items the judgment tier resolved as "accept" that were not yet promoted in queue mode. These are reported as resolved, not deferred.contentBodyLineCountnow uses the canonicalparseFrontmatterfor consistent CRLF/BOM handling.
Workflow when_to_use Now Optional
Workflow frontmatter no longer requires when_to_use. The field is still
supported and recommended but the validator no longer rejects workflows that
omit it.
Release validation status for the final 0.8.0 cut:
- Full repo test suite passed.
- Docker install matrix passed for both Bun and binary install paths.