# Changelog

All notable changes to mneme are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the
project adheres to [Semantic Versioning](https://semver.org/) — see
[`book/src/versioning.md`](book/src/versioning.md) for the project's
pre-1.0 cadence and 1.0 gates.

Subsequent entries are auto-generated by `release-plz` from
Conventional Commits on the `main` branch; this seed entry summarises
the work that landed before automation was wired up.

## [0.2.3](https://github.com/tr0mb1r/mneme/compare/v0.2.2...v0.2.3) - 2026-04-29

### Documentation

- bump version mention to 0.2.3 in README + book intro
- align docs with v0.2.2 shipped state

### Fixed

- wire L3 producer + replace export CLI stub

## [0.2.2](https://github.com/tr0mb1r/mneme/compare/v0.2.1...v0.2.2) - 2026-04-29

### Documentation

- *(install)* document Homebrew + cargo install paths
- *(book)* trim claude-code-config permissions to mneme-only
- *(book)* add Claude Code config kit page

## [0.2.1] - 2026-04-29

First release published under the `mneme-mcp` crate name on crates.io.
No code changes vs. `0.2.0`; this version exists to anchor the rename
so future `cargo install mneme-mcp` users land on the renamed crate.

### Changed

- **Crate renamed on crates.io: `mneme` → `mneme-mcp`.** The bare
  `mneme` name is held by an unrelated event-sourcing library
  ([github.com/jwilger/mneme](https://github.com/jwilger/mneme), last
  published 2025-03-14). To unblock `cargo install` post-1.0 without
  contesting the name, we publish under `mneme-mcp`. The binary,
  library, project name, data directory (`~/.mneme/`), MCP server
  identity, repo URL, and all CLI commands are unchanged — only the
  crates.io package identifier moved. From the user's perspective:
  `mneme run` / `mneme stats` / etc. work exactly as before; only
  `cargo install mneme-mcp` (when crates.io publishing is eventually
  enabled post-1.0) replaces the hypothetical `cargo install mneme`.

## [0.2.0] - 2026-04-29

Phase 6 (polish + release) baseline. Code-side feature work for 1.0
is complete; remaining gates are operational (30-day soak, Homebrew
formula, public release pipeline).

### Added

- **L4 semantic store** — `remember`, `recall`, `update`, `forget`
  tools backed by redb + WAL + an `instant-distance` HNSW index;
  atomic re-embedding on `update` via `WalOp::VectorReplace` +
  `HnswIndex::replace`.
- **L3 episodic store** — `recall_recent` and `summarize_session`
  tools backed by a redb hot tier and zstd-compressed cold quarters;
  consolidation scheduler promotes hot → warm → cold on idle.
- **L1 working session** — checkpoint scheduler (wall-clock + turn-
  count triggers), `mneme://session/{id}` resource, fold-in into
  `Orchestrator::build_context` so working turns participate in
  auto-context.
- **L0 procedural** — `pin` / `unpin` tools backed by a JSONL file
  with hot-reload via `notify`; `mneme://procedural` resource.
- **Auto-context** — `mneme://context` resource assembles all four
  layers under a token budget with per-layer reservations.
- **Diagnostics** — `stats`, `list_scopes`, `export` tools and
  `mneme://stats` resource with consolidation + working observability
  blocks.
- **Scoping** — `switch_scope` tool plus process-lifetime
  `ScopeState`; write tools fall back to the live scope when the
  caller omits one, filter tools treat omission as no-filter.
- **Embeddings** — BGE-M3 (default, ~1.5 GB) and MiniLM-L6 (~80 MB)
  via `candle`; automatic re-embed migration when
  `config.embeddings.model` changes; `pytorch_model.bin` weight-file
  fallback for BGE-M3; dim-mismatch tolerance during WAL replay.
- **Backup / restore** — `mneme backup` and `mneme restore`
  subcommands with full round-trip; covered by
  `cli::restore::tests::backup_then_restore_preserves_data`.
- **Schema migration** — v0 → v1 path with realistic-fixture test
  (`migrate::tests::migrates_realistic_v0_install_to_v1`).
- **CLI** — real `mneme stats` and `mneme inspect` (previously stubs
  through v0.9), `scripts/install.sh` from-source installer with
  `--minilm` and `--prefix` flags.
- **MCP** — JSON-RPC over stdio against protocol `2025-06-18`,
  12 tools, 5 resources; survives malformed JSON, oversize frames,
  and EOF cleanly.
- **Documentation** — `docs/CLAUDE_CODE_SETUP.md`,
  `docs/MEMORY_LAYERS.md`, mdBook scaffold under `book/`,
  Claude Code lifecycle hook examples under
  `docs/examples/claude-code-hooks/` with regression coverage in
  `tests/hook_scripts.rs`.
- **CI** — cross-build matrix (5 targets), `cargo-deny`,
  `cargo-audit`, GitHub Pages publication for the mdBook.
- **Release infrastructure** — `release.yml` (tag-triggered
  cross-build + GitHub Release), `release-plz.yml` +
  `release-plz.toml` (auto-bump release PRs, CHANGELOG generation).

### Fixed

- `mneme backup` `EISDIR` on symlink-to-dir entries — walked with
  `symlink_metadata` so symlinks land in the archive as symlinks.
- Windows CI timing-budget block — gated the `Duration` import and
  dropped the timing assertion on Windows; correctness checks intact.
- Field-schema unification across all three memory layers (canonical
  `kind` + `created_at` + `tags` + `scope`); `PinnedItem` accepts
  `#[serde(alias = "added_at")]` for one release.

### Documentation

- Issue and PR templates added under `.github/`.
- `CONTRIBUTING.md` durability-path policy made concrete:
  `scripts/manual_test.sh --stub` is the floor for any change
  touching WAL / redb / HNSW / backup-restore.

[0.2.1]: https://github.com/tr0mb1r/mneme/releases/tag/v0.2.1
[0.2.0]: https://github.com/tr0mb1r/mneme/releases/tag/v0.2.0
