From 439446f1ce280ab583ab78a5454e32d50e1c77f2 Mon Sep 17 00:00:00 2001 From: HasNoBeef Date: Tue, 28 Apr 2026 15:20:32 -0700 Subject: [PATCH] docs: add launch publishing assets --- .github/CODEOWNERS | 3 +- .github/workflows/release.yml | 1 - .planning/README.md | 11 +++ .../2026-04-19-roadmap-to-prime-time.md | 0 .../planning/2026-04-20-delivery-plan.md | 0 ...20-mission-scope-and-recovery-benchmark.md | 0 .../2026-04-20-render-surface-audit.md | 0 ...2026-04-21-rolls-royce-engineering-plan.md | 0 ...aude-codex-harness-integration-research.md | 0 .../planning/2026-04-24-current-handoff.md | 6 +- ...-04-24-multi-agent-memory-control-plane.md | 0 .../2026-04-24-transparent-agent-harness.md | 0 ...6-04-27-cold-start-rehydration-protocol.md | 0 .../2026-04-27-progressive-recall-ladder.md | 0 .../planning/2026-04-27-public-readiness.md | 0 .../2026-04-28-memory-product-gap-scan.md | 0 ...4-28-publication-readiness-and-channels.md | 0 AGENTS.md | 9 +-- CHANGELOG.md | 21 +++--- CONTRIBUTING.md | 2 +- README.md | 1 + RELEASING.md | 2 +- SECURITY.md | 4 +- benchmarks/recovery/README.md | 2 +- benchmarks/recovery/SCORING.md | 2 +- .../01-example-session-context-loss.json | 22 +++--- .../01-example-session-context-loss.md | 2 +- .../scenarios/02-fresh-machine-recovery.json | 8 +-- .../scenarios/03-native-adapter-drift.json | 10 +-- crates/mimir-librarian/README.md | 2 +- crates/mimir-librarian/src/lib.rs | 2 +- crates/mimir-librarian/src/quorum.rs | 4 +- crates/mimir-mcp/README.md | 2 +- crates/mimir-mcp/src/lib.rs | 3 +- crates/mimir-mcp/src/server.rs | 2 +- docs/README.md | 5 +- ...26-04-28-agent-memory-compiler-pipeline.md | 70 +++++++++++++++++++ docs/concepts/README.md | 2 +- docs/integrations/claude-code-hook.md | 2 +- docs/integrations/claude-desktop-config.md | 2 +- docs/launch-posting-plan.md | 33 +++++---- docs/launch-readiness.md | 12 ++-- plugins/mimir/README.md | 2 + 43 files changed, 174 insertions(+), 75 deletions(-) create mode 100644 .planning/README.md rename {docs => .planning}/planning/2026-04-19-roadmap-to-prime-time.md (100%) rename {docs => .planning}/planning/2026-04-20-delivery-plan.md (100%) rename {docs => .planning}/planning/2026-04-20-mission-scope-and-recovery-benchmark.md (100%) rename {docs => .planning}/planning/2026-04-20-render-surface-audit.md (100%) rename {docs => .planning}/planning/2026-04-21-rolls-royce-engineering-plan.md (100%) rename {docs => .planning}/planning/2026-04-24-claude-codex-harness-integration-research.md (100%) rename {docs => .planning}/planning/2026-04-24-current-handoff.md (98%) rename {docs => .planning}/planning/2026-04-24-multi-agent-memory-control-plane.md (100%) rename {docs => .planning}/planning/2026-04-24-transparent-agent-harness.md (100%) rename {docs => .planning}/planning/2026-04-27-cold-start-rehydration-protocol.md (100%) rename {docs => .planning}/planning/2026-04-27-progressive-recall-ladder.md (100%) rename {docs => .planning}/planning/2026-04-27-public-readiness.md (100%) rename {docs => .planning}/planning/2026-04-28-memory-product-gap-scan.md (100%) rename {docs => .planning}/planning/2026-04-28-publication-readiness-and-channels.md (100%) create mode 100644 docs/blog/2026-04-28-agent-memory-compiler-pipeline.md diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f47005a..a34b2e6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -12,8 +12,7 @@ /crates/mimir-core/src/canonical.rs @AlainDor /crates/mimir-core/src/dag.rs @AlainDor -# Release pipeline + CI workflows — load-bearing for supply-chain safety -# once the release pipeline lands (per docs/planning/.../Phase 1.5). +# Release pipeline + CI workflows — load-bearing for supply-chain safety. /.github/workflows/ @AlainDor /Cargo.toml @AlainDor /Cargo.lock @AlainDor diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 936bf72..19d1846 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,6 @@ name: Release # 1. push of a `v*` tag -> full release flow, real publish if tag is non-prerelease # 2. workflow_dispatch -> dry-run by default; flip `real_publish` to actually publish # -# Phase 1.5 of `docs/planning/2026-04-19-roadmap-to-prime-time.md`. # This workflow is end-to-end runnable today (dry-run). Tag pushes must build # binaries and draft the GitHub Release before crates are published; manual # dispatch still exercises the artifact gate without creating a release. diff --git a/.planning/README.md b/.planning/README.md new file mode 100644 index 0000000..50a51e6 --- /dev/null +++ b/.planning/README.md @@ -0,0 +1,11 @@ +# Planning Archive + +This hidden archive holds historical project planning notes. These files are provenance for maintainers and agents, not public user documentation. + +Use the public docs tree for current user-facing material: + +- [`../README.md`](../README.md) +- [`../STATUS.md`](../STATUS.md) +- [`../docs/README.md`](../docs/README.md) +- [`../docs/launch-readiness.md`](../docs/launch-readiness.md) +- [`../docs/launch-posting-plan.md`](../docs/launch-posting-plan.md) diff --git a/docs/planning/2026-04-19-roadmap-to-prime-time.md b/.planning/planning/2026-04-19-roadmap-to-prime-time.md similarity index 100% rename from docs/planning/2026-04-19-roadmap-to-prime-time.md rename to .planning/planning/2026-04-19-roadmap-to-prime-time.md diff --git a/docs/planning/2026-04-20-delivery-plan.md b/.planning/planning/2026-04-20-delivery-plan.md similarity index 100% rename from docs/planning/2026-04-20-delivery-plan.md rename to .planning/planning/2026-04-20-delivery-plan.md diff --git a/docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md b/.planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md similarity index 100% rename from docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md rename to .planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md diff --git a/docs/planning/2026-04-20-render-surface-audit.md b/.planning/planning/2026-04-20-render-surface-audit.md similarity index 100% rename from docs/planning/2026-04-20-render-surface-audit.md rename to .planning/planning/2026-04-20-render-surface-audit.md diff --git a/docs/planning/2026-04-21-rolls-royce-engineering-plan.md b/.planning/planning/2026-04-21-rolls-royce-engineering-plan.md similarity index 100% rename from docs/planning/2026-04-21-rolls-royce-engineering-plan.md rename to .planning/planning/2026-04-21-rolls-royce-engineering-plan.md diff --git a/docs/planning/2026-04-24-claude-codex-harness-integration-research.md b/.planning/planning/2026-04-24-claude-codex-harness-integration-research.md similarity index 100% rename from docs/planning/2026-04-24-claude-codex-harness-integration-research.md rename to .planning/planning/2026-04-24-claude-codex-harness-integration-research.md diff --git a/docs/planning/2026-04-24-current-handoff.md b/.planning/planning/2026-04-24-current-handoff.md similarity index 98% rename from docs/planning/2026-04-24-current-handoff.md rename to .planning/planning/2026-04-24-current-handoff.md index c5642ef..dc8eaa2 100644 --- a/docs/planning/2026-04-24-current-handoff.md +++ b/.planning/planning/2026-04-24-current-handoff.md @@ -80,9 +80,9 @@ Functional changes: Documentation changes: - `docs/concepts/consensus-quorum.md` added as a draft spec. -- `docs/planning/2026-04-24-current-handoff.md` added as this continuation note. -- `AGENTS.md`, `STATUS.md`, `docs/concepts/README.md`, `docs/concepts/scope-model.md`, and `docs/planning/2026-04-24-multi-agent-memory-control-plane.md` updated to include consensus quorum. -- `docs/planning/2026-04-24-transparent-agent-harness.md` added to capture the `mimir [agent args...]` launch-boundary agreement, with cross-links from `AGENTS.md`, `STATUS.md`, `scope-model.md`, and the control-plane plan; later updated to record the shipped first scaffold. +- This continuation note was originally added under the public docs planning tree and is now archived under `.planning/planning`. +- `AGENTS.md`, `STATUS.md`, `docs/concepts/README.md`, `docs/concepts/scope-model.md`, and the multi-agent memory control-plane planning note were updated to include consensus quorum. +- The transparent agent harness planning note captured the `mimir [agent args...]` launch-boundary agreement, with cross-links from `AGENTS.md`, `STATUS.md`, `scope-model.md`, and the control-plane plan; later updated to record the shipped first scaffold. - `crates/mimir-librarian/README.md` updated for submit/sweep/lifecycle/run usage. ## Verification diff --git a/docs/planning/2026-04-24-multi-agent-memory-control-plane.md b/.planning/planning/2026-04-24-multi-agent-memory-control-plane.md similarity index 100% rename from docs/planning/2026-04-24-multi-agent-memory-control-plane.md rename to .planning/planning/2026-04-24-multi-agent-memory-control-plane.md diff --git a/docs/planning/2026-04-24-transparent-agent-harness.md b/.planning/planning/2026-04-24-transparent-agent-harness.md similarity index 100% rename from docs/planning/2026-04-24-transparent-agent-harness.md rename to .planning/planning/2026-04-24-transparent-agent-harness.md diff --git a/docs/planning/2026-04-27-cold-start-rehydration-protocol.md b/.planning/planning/2026-04-27-cold-start-rehydration-protocol.md similarity index 100% rename from docs/planning/2026-04-27-cold-start-rehydration-protocol.md rename to .planning/planning/2026-04-27-cold-start-rehydration-protocol.md diff --git a/docs/planning/2026-04-27-progressive-recall-ladder.md b/.planning/planning/2026-04-27-progressive-recall-ladder.md similarity index 100% rename from docs/planning/2026-04-27-progressive-recall-ladder.md rename to .planning/planning/2026-04-27-progressive-recall-ladder.md diff --git a/docs/planning/2026-04-27-public-readiness.md b/.planning/planning/2026-04-27-public-readiness.md similarity index 100% rename from docs/planning/2026-04-27-public-readiness.md rename to .planning/planning/2026-04-27-public-readiness.md diff --git a/docs/planning/2026-04-28-memory-product-gap-scan.md b/.planning/planning/2026-04-28-memory-product-gap-scan.md similarity index 100% rename from docs/planning/2026-04-28-memory-product-gap-scan.md rename to .planning/planning/2026-04-28-memory-product-gap-scan.md diff --git a/docs/planning/2026-04-28-publication-readiness-and-channels.md b/.planning/planning/2026-04-28-publication-readiness-and-channels.md similarity index 100% rename from docs/planning/2026-04-28-publication-readiness-and-channels.md rename to .planning/planning/2026-04-28-publication-readiness-and-channels.md diff --git a/AGENTS.md b/AGENTS.md index f8e9f4f..7bf1996 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,7 +20,7 @@ > - If CI is currently disabled (`gh api /repos/buildepicshit/Mimir/actions/permissions` returns `enabled: false`), do not re-enable without asking. The owner-approved exception was 2026-04-27 after adding more Actions usage. > - Dependabot is set to **monthly** cadence (not weekly) and groups all non-major updates into one PR per ecosystem per cycle, for the same quota reason. -> **Naming history.** Public name `Mimir` (Norse: Mímir, the wise being whose preserved head Odin consulted for counsel). Pre-cutover codename was `engram`; the Mimir cutover happened 2026-04-20 (see [`docs/planning/2026-04-19-roadmap-to-prime-time.md` § Naming + cutover history](docs/planning/2026-04-19-roadmap-to-prime-time.md#naming--cutover-history)). Pre-cutover history lives in the archived `buildepicshit/Engram` repo; this repo's git history starts at the cutover commit. Use `mimir-*` everywhere in new code, prose, env vars, and tool names. +> **Naming history.** Public name `Mimir` (Norse: Mímir, the wise being whose preserved head Odin consulted for counsel). Pre-cutover codename was `engram`; the Mimir cutover happened 2026-04-20 (see [`.planning/planning/2026-04-19-roadmap-to-prime-time.md` § Naming + cutover history](.planning/planning/2026-04-19-roadmap-to-prime-time.md#naming--cutover-history)). Pre-cutover history lives in the archived `buildepicshit/Engram` repo; this repo's git history starts at the cutover commit. Use `mimir-*` everywhere in new code, prose, env vars, and tool names. ## What Mimir Is @@ -124,9 +124,10 @@ Mimir is a [BES Studios](https://github.com/buildepicshit) project. Sibling flag | Architectural invariants | this file | | Engineering principles & tooling policy | [`PRINCIPLES.md`](PRINCIPLES.md) | | Design specs | [`docs/concepts/`](docs/concepts/) — 14 authoritative implementation specs plus draft [`scope-model.md`](docs/concepts/scope-model.md) and [`consensus-quorum.md`](docs/concepts/consensus-quorum.md) | -| Multi-agent mandate | [`docs/concepts/scope-model.md`](docs/concepts/scope-model.md), [`docs/concepts/consensus-quorum.md`](docs/concepts/consensus-quorum.md), and [`docs/planning/2026-04-24-multi-agent-memory-control-plane.md`](docs/planning/2026-04-24-multi-agent-memory-control-plane.md) | -| Transparent agent harness | [`docs/planning/2026-04-24-transparent-agent-harness.md`](docs/planning/2026-04-24-transparent-agent-harness.md) | +| Multi-agent mandate | [`docs/concepts/scope-model.md`](docs/concepts/scope-model.md) and [`docs/concepts/consensus-quorum.md`](docs/concepts/consensus-quorum.md) | +| Transparent agent harness | [`README.md`](README.md#running-mimir) and [`docs/first-run.md`](docs/first-run.md) | | Observability schema | [`docs/observability.md`](docs/observability.md) | | Prior art attribution | [`docs/attribution.md`](docs/attribution.md) — primary-source verified | -| Roadmap to v1.0 / public launch | [`docs/planning/2026-04-19-roadmap-to-prime-time.md`](docs/planning/2026-04-19-roadmap-to-prime-time.md) | +| Roadmap to v1.0 / public launch | [`STATUS.md`](STATUS.md), [`docs/launch-readiness.md`](docs/launch-readiness.md), and [`docs/launch-posting-plan.md`](docs/launch-posting-plan.md) | | Experimental measurement | `benchmarks/recovery/` for public benchmark assets; ignored local scratch stays out of the public tree | +| Historical planning archive | [`.planning/planning/`](.planning/planning/) | diff --git a/CHANGELOG.md b/CHANGELOG.md index 60bd442..d8c5e54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Mim ## [Unreleased] +### Added — launch publication assets + +- **Launch article and posting assets** — added the public launch article, linked it from the docs index and README, and aligned the posting plan with the approved launch channels: GitHub, launch article, Show HN / X / LinkedIn, Codex plugin bundle, and crates.io/docs.rs alpha with MCP registry submission deferred. +- **Hidden planning archive** — moved historical planning notes into `.planning/planning` and removed stale public-doc links to planning scratch. + ### Changed — public launch surface - **Public artifact cleanup** — moved the recovery benchmark harness and fixtures into `benchmarks/recovery`, removed scratch prototype research fixtures from the tracked public tree, and rewrote stale public references to deleted private research artifacts. @@ -170,13 +175,13 @@ The actual benchmark run is a separate authorization event. This PR ships only t Project name + crate names + binary names + env vars + CLI command names + tracing event names + workspace identifiers + canonical-log magic header all renamed in a single mechanical pass on `2026-04-20`. Cargo.toml `[package].name` for the three crates: `mimir-core`, `mimir-cli`, `mimir-mcp` (all confirmed free on crates.io 2026-04-19 and re-verified 2026-04-20). Repository URL updated to `buildepicshit/Mimir`. Per-tool MCP names: `mimir_status`, `mimir_read`, `mimir_verify`, `mimir_list_episodes`, `mimir_render_memory`, `mimir_open_workspace`, `mimir_write`, `mimir_close_episode`, `mimir_release_workspace`. Env vars: `MIMIR_WORKSPACE_PATH`, `MIMIR_MCP_LOG`, `MIMIR_MCP_LEASE_TTL_SECONDS`. Wire-format magic: `b"EGRM"` → `b"MIMR"` (4 bytes; format version still `1`; pre-1.0 alpha so the breaking wire change costs nothing — no external users yet). -The cutover ships as **the initial commit of the `buildepicshit/Mimir` repo with fresh history**. Pre-cutover history (Phase 0 → Phase 2.4 + this re-audit) lives in the now-archived `buildepicshit/Engram` repo. Per the documented cutover plan: dropped local `~/buildepicshit/Engram/` clone, re-cloned `buildepicshit/Mimir` cleanly. Public history starts here; `cargo install mimir-mcp` will see only the Mimir name from day one. Decision history at `docs/planning/2026-04-19-roadmap-to-prime-time.md` § Naming + cutover plan. +The cutover ships as **the initial commit of the `buildepicshit/Mimir` repo with fresh history**. Pre-cutover history (Phase 0 → Phase 2.4 + this re-audit) lives in the now-archived `buildepicshit/Engram` repo. Per the documented cutover plan: dropped local `~/buildepicshit/Engram/` clone, re-cloned `buildepicshit/Mimir` cleanly. Public history starts here; `cargo install mimir-mcp` will see only the Mimir name from day one. Decision history lives in the hidden planning archive under `.planning/planning`. The CHANGELOG entries below are written as if Mimir had always been the name — historical mentions of `engram_*` paths and the `EGRM` magic header have been textually replaced. The git history of the original Engram repo preserves the literal pre-rename text if forensic detail is ever needed. ### Added — pre-cutover hardening (2026-04-20 v1.1 re-audit follow-up) -The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel; canonical synthesis at `analysis/reports/Mimir-analysis.md`) graded Mimir **B (uncapped, weighted 4.00)** — up from D (P0-capped, weighted 3.85) on 2026-04-19. Zero P0 findings remain. This change addresses every P2/P3 finding worth fixing before the Mimir cutover + first hands-on Claude session, and explicitly defers the rest with documented rationale. +The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel) graded Mimir **B (uncapped, weighted 4.00)** — up from D (P0-capped, weighted 3.85) on 2026-04-19. Zero P0 findings remain. This change addresses every P2/P3 finding worth fixing before the Mimir cutover + first hands-on Claude session, and explicitly defers the rest with documented rationale. #### Lease security correctness (security findings F1, F2, F3) - **`crates/mimir-mcp/src/server.rs::mint_lease_token`** rewritten to source 16 bytes from `getrandom::getrandom` (OS entropy pool: `/dev/urandom`, `BCryptGenRandom`, `getentropy` per target). Replaces the previous `RandomState` + `SystemTime` derivation, which was acknowledged as non-cryptographic. Falls back to time-derived bytes with a `tracing::warn!` line if `getrandom` errors (extremely rare; would indicate a misconfigured embedded or seccomp-restricted environment). Survives the move from stdio (no observable timing channel) to any future networked transport without revisiting the entropy model. Closes Sec F1. @@ -222,7 +227,7 @@ The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel; canonical s - **`crates/mimir-mcp/README.md`** — header sentence rephrased from "any MCP-compatible client (Claude Desktop, Cursor, Cline, Continue, Windsurf, Claude Code, …)" → "Claude (both Claude Desktop and Claude Code)". Dropped the `### Cursor` config section. Added a prominent Claude-only V1 callout citing `AGENTS.md` invariant #5. Bumped status banner from "Phase 2.1 scaffold" → "Phase 2.3 (full read + write surface)" and replaced the placeholder one-tool table with the full 9-tool surface. - **`crates/mimir-mcp/src/lib.rs`** — module-level doc rephrased from "any MCP-compatible client (Claude Desktop, Cursor, Cline, Continue, Windsurf, Claude Code)" → "Claude (Claude Desktop and Claude Code)" with explicit reference to invariant #5. - **`crates/mimir-mcp/Cargo.toml`** — `description` field rephrased to drop the off-spec client list. The Cargo.toml description shows on the eventual crates.io listing — keeping it Claude-only there sets the right expectation for first-time discoverers. -- **`docs/planning/2026-04-19-roadmap-to-prime-time.md`** — locked-decision #1 was drift I introduced when first writing the roadmap (claimed "every MCP-compatible client" as a target, contradicting AGENTS.md). Rephrased to Claude-only with explicit invariant citation. Phase 5.3 marketplace plan dropped the "in-client directories: Cursor, Cline, Continue, Windsurf" line for the same reason; replaced with a parenthetical noting cross-model directories are explicitly out of scope and tied to invariant lift. +- **Roadmap archive** — locked-decision #1 was drift I introduced when first writing the roadmap (claimed "every MCP-compatible client" as a target, contradicting AGENTS.md). Rephrased to Claude-only with explicit invariant citation. Phase 5.3 marketplace plan dropped the "in-client directories: Cursor, Cline, Continue, Windsurf" line for the same reason; replaced with a parenthetical noting cross-model directories are explicitly out of scope and tied to invariant lift. ### Added — `mimir-mcp` write tools + workspace lease (Phase 2.3 of the prime-time roadmap) - **`mimir_open_workspace`** — opens (or creates with the MIMR magic header) a canonical log at the supplied `log_path` and mints a 30-minute write lease. Returns `{workspace_id, log_path, lease_token, lease_expires_at}` where `lease_token` is a 32-char lowercase-hex 128-bit token derived from per-call `RandomState` instances. `ttl_seconds` argument allows per-call override (must be > 0, capped at 24h via `MAX_LEASE_TTL_SECONDS`); the server's default is taken from `MIMIR_MCP_LEASE_TTL_SECONDS` env var at startup, falling back to `DEFAULT_LEASE_TTL_SECONDS` (1800 = 30min). Errors with `lease_held` (and the existing lease's expiry) if a non-expired lease is already alive. @@ -313,7 +318,7 @@ The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel; canonical s - **Canonical log carries an 8-byte header** — `MIMR` ASCII magic + `u32` LE format version (currently `1`) — written eagerly when `CanonicalLog::open` is called against an empty file, validated on every reopen. Pre-fix logs (no header) fail to open with the new `LogError::IncompatibleFormat`; the open call surfaces the error **before** any truncation, append, or recovery logic, closing the destructive-truncate footgun where `Store::open` against a misrouted path (e.g., a config file, an arbitrary user file) silently zeroed the target. This is the v1.1 fresh assessment's Security F1 (P1) finding. Header is physically transparent: `LogBackend::{len, read_all, last_checkpoint_end, truncate}` all operate in logical bytes (record stream only) — `CanonicalLog` strips the header on the way out and adds `LOG_HEADER_SIZE` on the way in. In-memory test backends (`FaultyLog`) carry no header. **Any on-disk log written before this commit must be re-created**; the codebase is pre-1.0 and consumes only its own logs, so the migration cost is zero. ### Added -- **Roadmap to prime time** — phased plan from feature-complete pre-1.0 to publicly listed v1.0 at `docs/planning/2026-04-19-roadmap-to-prime-time.md`. Six phases over ~6–9 weeks: morning quick-wins sweep (Phase 0), foundation hardening (Phase 1), `mimir-mcp` build (Phase 2 — closes the P0 from the 2026-04-19 fresh assessment), validation + first public test (Phase 3), v0.1.0-alpha cut + crates.io publish (Phase 4), public flip + marketplace listing (Phase 5), v1.0 path (Phase 6). Locked Day-1 decisions: `mimir-mcp` Rust crate (not Skill), public flip in Phase 5 (after marketplace + writeup), LLM-fluency hypothesis blocks v0.1.0. +- **Roadmap to prime time** — phased plan from feature-complete pre-1.0 to publicly listed v1.0, now archived under `.planning/planning`. Six phases over ~6-9 weeks: morning quick-wins sweep (Phase 0), foundation hardening (Phase 1), `mimir-mcp` build (Phase 2 — closes the P0 from the 2026-04-19 fresh assessment), validation + first public test (Phase 3), v0.1.0-alpha cut + crates.io publish (Phase 4), public flip + marketplace listing (Phase 5), v1.0 path (Phase 6). Locked Day-1 decisions: `mimir-mcp` Rust crate (not Skill), public flip in Phase 5 (after marketplace + writeup), LLM-fluency hypothesis blocks v0.1.0. - **Per-crate Cargo metadata** — `keywords`, `categories`, `readme`, `homepage`, `documentation` on `crates/mimir_core/Cargo.toml` and `crates/mimir-cli/Cargo.toml`. Enables crates.io faceted search ranking + sidebar links + correct README rendering on first publish. - **Per-crate `LICENSE`** — symlinks from `crates/mimir_core/LICENSE` and `crates/mimir-cli/LICENSE` to root `LICENSE`. Closes Apache-2.0 § 4(a) compliance gap on first `cargo publish`. - **Per-crate `README.md`** — `crates/mimir_core/README.md` (~50 lines: install + quickstart + what's in here + engineering posture) and `crates/mimir-cli/README.md` (~30 lines: install + 4 subcommands + exit codes). Required for non-empty crates.io listing pages. @@ -321,7 +326,7 @@ The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel; canonical s ### Changed — honesty-of-surface (audit-to-fix sweep, Phase 0) - `README.md` — dropped "Design. No production code yet" phase claim and "Private while it is design-phase" framing. Added 5-line `git clone` → `cargo build` → `cargo test` → `cargo run -p mimir-cli -- --help` quickstart. Truthful status: 245+ tests, 14 specs `authoritative`, p50 ≈ 0.57 µs reads. -- `AGENTS.md` "Where to Look" table — `docs/concepts/` and `docs/attribution.md` no longer marked "to be authored" (both have substantial content). Added rows for `PRINCIPLES.md`, `docs/observability.md`, and the new `docs/planning/` roadmap. +- `AGENTS.md` "Where to Look" table — `docs/concepts/` and `docs/attribution.md` no longer marked "to be authored" (both have substantial content). Added rows for `PRINCIPLES.md`, `docs/observability.md`, and the roadmap archive. - `CONTRIBUTING.md` — dropped "During design phase (no code yet), no build setup is required" stanza. Promoted actual `cargo build / test / clippy / fmt` commands to first-class. Updated `rust-toolchain.toml` claim (was: "once the project scaffolds a Cargo workspace (Phase 3+)" — now: "pinned to 1.85.0"). - `PRINCIPLES.md` — graduation banner replaced "Draft, gitignored. Graduates to tracked when content stabilizes." with "Tracked since Phase 2 (PR #2)." - `CHANGELOG.md` — dropped stale "(gitignored during design phase)" parenthetical from PRINCIPLES.md reference at file head. Dropped stale `cargo-fuzz` Pending line (the harness shipped — `fuzz/fuzz_targets/{fuzz_lex,fuzz_parse,fuzz_decoder}.rs`). Replaced with the real Pending items: LLM-fluency measurement (gates v0.1.0 per roadmap Phase 3.2) + `mimir-mcp` agent surface (Phase 2). @@ -375,8 +380,8 @@ The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel; canonical s - `docs/concepts/` — scaffold for architectural specifications (empty during design phase). - `docs/attribution.md` — primary-source verification log, initialized with pending-citation table. - `PRINCIPLES.md` — engineering principles and tooling policy covering testing, error handling, type safety, determinism-vs-ML boundary, logging, perf targets, code style, dependency policy, documentation, semver, deprecation, and release process. Graduated from gitignored draft at Phase 2 completion. -- Tokenizer bake-off research tooling under `research/bake-off/` (gitignored). -- Four-phase design-hygiene gap analysis at `research/GAP_ANALYSIS.md` (gitignored). +- Tokenizer bake-off scratch tooling outside the tracked public tree. +- Four-phase design-hygiene gap analysis scratch notes outside the tracked public tree. ### Changed - **Wire format (schema break)** — `MemoryFlags { projected, stale }` split into kind-specific `SemFlags { projected }` (1 byte, bit 0) and `InfFlags { projected, stale }` (1 byte, bits 0–1) in `mimir_core::canonical` (issue #32). `EpiRecord` and `ProRecord` no longer carry a `flags` field at all — their frame body is one byte shorter. `ir-canonical-form.md` § 5 updated; new § 5.5 documents per-kind flag layout and rationale (stale is only meaningful for Inferentials; shared byte pushed invariant enforcement out of the type system). Decoder enforces "body fully consumed" (`DecodeError::BodyUnderflow`), so pre-break logs with a trailing Epi/Pro flags byte hard-fail rather than silently losing a byte — new test `legacy_{epi,pro}_with_trailing_flags_byte_rejected` locks this in. Any on-disk log written before this commit must be re-encoded before replay. @@ -404,7 +409,7 @@ The 2026-04-20 v1.1 fresh re-audit (8 specialist agents in parallel; canonical s - `docs/concepts/wire-architecture.md` — graduated from `citation-verified` to `authoritative` on 2026-04-19. **Scope call resolved: in-process library only.** Out-of-process `mimird` daemon, Unix-socket protocols, network transport, async queue, typed status channel, fire-and-forget `EnqueueAck`, `:read_after` predicate, and queue-full backpressure were all dropped as unjustified under the Claude-single-writer target. The graduated spec describes the actual shipped API (`Store::commit_batch`, `Pipeline::execute_query`) with synchronous `Result::Err` as the error channel and `EpisodeId` as the correlation key end-to-end (commit return → `CHECKPOINT` → `EpisodeMeta` → Episode-scoped read predicates → `mimir.commit.batch` tracing span). Single-writer invariant is structural via `&mut Store` — Rust's borrow checker serializes writers at compile time. Consequent amendments: `decoder-tool-contract.md` § 9 (live-vs-offline mode collapsed to filesystem-only access) + § 10 invariant 5, `librarian-pipeline.md` § 9 (backpressure rewritten around the borrow checker), `read-protocol.md` escalation wording, `write-protocol.md` cross-ref, `ir-write-surface.md` § 9.3 batch-boundary definition, `workspace-model.md` § 3.3 detection trigger, `docs/concepts/README.md` blurb, `docs/attribution.md` entries for LMAX / Actors (historical) + Rust borrow-checker / POSIX `fsync` (load-bearing). ### Pending -- LLM fluency measurement of the Lisp S-expression write surface (gates v0.1.0 cut per `docs/planning/2026-04-19-roadmap-to-prime-time.md` Phase 3.2). +- LLM fluency measurement of the Lisp S-expression write surface (gates v0.1.0 cut per roadmap Phase 3.2). - `mimir-mcp` agent surface (Phase 2 of the roadmap; closes the v1.1 fresh-assessment P0). ### Scope reduction — 2026-04-18 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 15ef99c..bed6389 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ This file documents the contribution workflow for human contributors and agents - [`AGENTS.md`](AGENTS.md) — authoritative operating manual (architectural invariants, engineering standards, engagement protocol, anti-patterns, commit conventions). - [`STATUS.md`](STATUS.md) — current phase and next milestone. - [`PRINCIPLES.md`](PRINCIPLES.md) — engineering principles and tooling policy (twelve sections covering testing, error handling, type safety, determinism, observability, performance targets, code style, dependency policy, documentation, semver, deprecation, release). -- [`docs/planning/2026-04-19-roadmap-to-prime-time.md`](docs/planning/2026-04-19-roadmap-to-prime-time.md) — phased roadmap from feature-complete pre-1.0 to publicly listed v1.0. +- [`docs/launch-readiness.md`](docs/launch-readiness.md) — public launch readiness and current release gates. ## Development setup diff --git a/README.md b/README.md index c2b36ae..8f953c4 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ mimir remote push - [`docs/concepts/`](docs/concepts/) - architecture specs. - [`docs/launch-readiness.md`](docs/launch-readiness.md) - OSS, engineering, and promise sign-off checklist. - [`docs/launch-posting-plan.md`](docs/launch-posting-plan.md) - launch article, listing, and posting plan. +- [`docs/blog/2026-04-28-agent-memory-compiler-pipeline.md`](docs/blog/2026-04-28-agent-memory-compiler-pipeline.md) - launch article. ## Contributing diff --git a/RELEASING.md b/RELEASING.md index 448f6d2..eb1ce97 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,6 +1,6 @@ # Releasing Mimir -This document is the canonical runbook for cutting a release. The pipeline lives in `.github/workflows/release.yml` (Phase 1.5 of `docs/planning/2026-04-19-roadmap-to-prime-time.md`). +This document is the canonical runbook for cutting a release. The pipeline lives in `.github/workflows/release.yml`. Mimir follows [SemVer](https://semver.org/) once it reaches its first release. Pre-1.0 series may carry breaking wire-format changes between minor versions and will be called out in `CHANGELOG.md` under `### Changed — wire format`. diff --git a/SECURITY.md b/SECURITY.md index dce5635..7b66fe2 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Supported versions -Mimir is currently an implementation-stage pre-release with no tagged versions yet — see [`STATUS.md`](STATUS.md) and [`docs/planning/2026-04-19-roadmap-to-prime-time.md`](docs/planning/2026-04-19-roadmap-to-prime-time.md). Security reports are accepted for the current `main` branch. +Mimir is currently an implementation-stage pre-release with no tagged versions yet — see [`STATUS.md`](STATUS.md) and [`docs/launch-readiness.md`](docs/launch-readiness.md). Security reports are accepted for the current `main` branch. | Version | Supported | |---|---| @@ -61,7 +61,7 @@ The following are explicit non-goals for v1 and are expected behaviour: 2. **Other local processes running as the same UID.** A second process on the same machine, running as the same user, can already read the canonical-log file directly. The shared workspace lock rejects concurrent Mimir writers, but it is not a sandbox against arbitrary same-UID file access. 3. **Compromised local toolchain.** A compromised `cargo` SDK install, a compromised Rust toolchain, or a backdoored compiler will result in arbitrary code execution. Resolving the toolchain via `rustup` and pinning to `rust-toolchain.toml` is recommended; deeper supply-chain pinning is out of scope. 4. **Untrusted-workspace scenarios.** A developer who points `Store::open` at a workspace produced by an untrusted party gets exactly the bytes that workspace contains — the decoder's job is to refuse malformed bytes safely (in scope), not to sandbox a fully-formed adversarial workspace's content. -5. **Tooling not under `crates/`.** Issues in example code, experimental tooling under `research/`, CI helper scripts, or design-document artifacts. Issues in the production crates (`mimir-core`, `mimir-cli`, `mimir-mcp`, `mimir-librarian`, `mimir-harness`) are in scope. +5. **Tooling not under `crates/`.** Issues in example code, local scratch tooling, CI helper scripts, or design-document artifacts. Issues in the production crates (`mimir-core`, `mimir-cli`, `mimir-mcp`, `mimir-librarian`, `mimir-harness`) are in scope. 6. **Social-engineering attacks** on the project owner or contributors. 7. **Physical-access attacks** on the developer's machine. diff --git a/benchmarks/recovery/README.md b/benchmarks/recovery/README.md index 4040cd5..596a4b8 100644 --- a/benchmarks/recovery/README.md +++ b/benchmarks/recovery/README.md @@ -1,6 +1,6 @@ # Recovery benchmark (qualitative v0) -Scaffolding for Delivery Plan item **B** — the qualitative BC/DR recovery benchmark that measures whether Mimir delivers meaningfully better catastrophic-loss recovery than the markdown-file baselines. The *why* lives in [`docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md`](../../docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md) § 8 and [`docs/planning/2026-04-20-delivery-plan.md`](../../docs/planning/2026-04-20-delivery-plan.md) § 2 / B. This directory holds the *how*. +Scaffolding for the qualitative BC/DR recovery benchmark that measures whether Mimir delivers meaningfully better catastrophic-loss recovery than the markdown-file baselines. This directory holds the methodology, fixtures, environment contracts, transcript gates, and score validation. Historical rationale lives in the hidden planning archive. ## Status diff --git a/benchmarks/recovery/SCORING.md b/benchmarks/recovery/SCORING.md index f3e4396..3e69332 100644 --- a/benchmarks/recovery/SCORING.md +++ b/benchmarks/recovery/SCORING.md @@ -1,6 +1,6 @@ # Recovery benchmark — scoring rubric -Five metrics, scored per baseline per scenario. Rubric granularity is where the real design risk lives — the metrics themselves come from [`docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md`](../../docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md) § 8, but how we score them is a methodology choice that shapes the go/no-go call. +Five metrics, scored per baseline per scenario. Rubric granularity is where the real design risk lives: how we score recovery behavior shapes the go/no-go call. ## Metric 1 — Time to productive state diff --git a/benchmarks/recovery/scenarios/01-example-session-context-loss.json b/benchmarks/recovery/scenarios/01-example-session-context-loss.json index 5f3d88b..3e1742e 100644 --- a/benchmarks/recovery/scenarios/01-example-session-context-loss.json +++ b/benchmarks/recovery/scenarios/01-example-session-context-loss.json @@ -56,7 +56,7 @@ "id": "GT04", "category": "operator_profile", "text": "Mimir stays private until the operator is happy it delivers on its promises; phase ordering is not a public deadline.", - "source_refs": ["docs/planning/2026-04-19-roadmap-to-prime-time.md"], + "source_refs": [".planning/planning/2026-04-19-roadmap-to-prime-time.md"], "auto_fail_if_wrong": false }, { @@ -91,49 +91,49 @@ "id": "GT09", "category": "project_state", "text": "Three planning docs were on main: roadmap to prime time, mission scope and recovery benchmark, and delivery plan.", - "source_refs": ["docs/planning/2026-04-19-roadmap-to-prime-time.md", "docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md", "docs/planning/2026-04-20-delivery-plan.md"], + "source_refs": [".planning/planning/2026-04-19-roadmap-to-prime-time.md", ".planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md", ".planning/planning/2026-04-20-delivery-plan.md"], "auto_fail_if_wrong": false }, { "id": "GT10", "category": "project_state", "text": "The delivery plan had four pre-flip deliverables: parse-rate benchmark execution, recovery benchmark v0, Mode 1 client integration, and public-readiness pass.", - "source_refs": ["docs/planning/2026-04-20-delivery-plan.md"], + "source_refs": [".planning/planning/2026-04-20-delivery-plan.md"], "auto_fail_if_wrong": false }, { "id": "GT11", "category": "load_bearing_decision", "text": "Mimir's primary value proposition is catastrophic-loss recovery; token savings, cross-session continuity, and proactive recall are bonuses.", - "source_refs": ["docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], + "source_refs": [".planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], "auto_fail_if_wrong": true }, { "id": "GT12", "category": "load_bearing_decision", "text": "The three-pillar mission is BC/DR, memory graduation, and sanitized cross-agent sharing; Mimir is not a daily-memory replacement.", - "source_refs": ["docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], + "source_refs": [".planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], "auto_fail_if_wrong": true }, { "id": "GT13", "category": "load_bearing_decision", "text": "Agent-native at the runtime surface is load-bearing: MCP responses, retrieved payloads, and recovery digests should be token-dense and structured, while human-readable output belongs to observability surfaces.", - "source_refs": ["AGENTS.md", "docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], + "source_refs": ["AGENTS.md", ".planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], "auto_fail_if_wrong": true }, { "id": "GT14", "category": "load_bearing_decision", "text": "The Phase 5 public flip is gated on deliverables A, B, C, and D completing, not on an external deadline.", - "source_refs": ["docs/planning/2026-04-20-delivery-plan.md"], + "source_refs": [".planning/planning/2026-04-20-delivery-plan.md"], "auto_fail_if_wrong": true }, { "id": "GT15", "category": "load_bearing_decision", "text": "The two librarian modes under consideration were extensions of the shipping design: Mode 1 as Claude-as-librarian plus client integration, and Mode 2 as a local Ollama arbiter implementing the already-specified InferenceProposer hook.", - "source_refs": ["docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], + "source_refs": [".planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md"], "auto_fail_if_wrong": true }, { @@ -154,21 +154,21 @@ "id": "GT18", "category": "recent_feedback_open_work", "text": "The immediate next step in the historical delivery plan was to scout A and B in parallel while CI quota was out; execution was blocked on a batched operator unblock.", - "source_refs": ["docs/planning/2026-04-20-delivery-plan.md"], + "source_refs": [".planning/planning/2026-04-20-delivery-plan.md"], "auto_fail_if_wrong": false }, { "id": "GT19", "category": "recent_feedback_open_work", "text": "Benchmark A's scaffold was verified ready: the corpus parsed 100/100 via verify_corpus.py on 2026-04-20.", - "source_refs": ["docs/planning/2026-04-20-delivery-plan.md"], + "source_refs": [".planning/planning/2026-04-20-delivery-plan.md"], "auto_fail_if_wrong": false }, { "id": "GT20", "category": "recent_feedback_open_work", "text": "There is no production Anthropic API dependency in Mimir; the Phase 3.2 benchmark used the API only as a measurement instrument.", - "source_refs": ["docs/planning/2026-04-20-mission-scope-and-recovery-benchmark.md", "docs/planning/2026-04-20-delivery-plan.md"], + "source_refs": [".planning/planning/2026-04-20-mission-scope-and-recovery-benchmark.md", ".planning/planning/2026-04-20-delivery-plan.md"], "auto_fail_if_wrong": false } ], diff --git a/benchmarks/recovery/scenarios/01-example-session-context-loss.md b/benchmarks/recovery/scenarios/01-example-session-context-loss.md index 0692df0..569eb61 100644 --- a/benchmarks/recovery/scenarios/01-example-session-context-loss.md +++ b/benchmarks/recovery/scenarios/01-example-session-context-loss.md @@ -20,7 +20,7 @@ Identical prompt across all four baselines. ## Ground-truth checklist -Each item is a fact the agent should surface during recovery. Independently verifiable from `git log`, `docs/planning/2026-04-20-*.md`, the operator-specific memory files under `.claude/projects/.../memory/`, or a direct `mimir_read` query against the Mimir log. +Each item is a fact the agent should surface during recovery. Independently verifiable from `git log`, `.planning/planning/2026-04-20-*.md`, the operator-specific memory files under `.claude/projects/.../memory/`, or a direct `mimir_read` query against the Mimir log. ### Operator profile (5 items) 1. Operator is Alain Dormehl, owner of Mimir / BES Studios. diff --git a/benchmarks/recovery/scenarios/02-fresh-machine-recovery.json b/benchmarks/recovery/scenarios/02-fresh-machine-recovery.json index 5a37c23..855b45f 100644 --- a/benchmarks/recovery/scenarios/02-fresh-machine-recovery.json +++ b/benchmarks/recovery/scenarios/02-fresh-machine-recovery.json @@ -35,7 +35,7 @@ "id": "GT01", "category": "project_state", "text": "The transparent harness entry point is `mimir [agent args...]`; recovery should preserve the native agent UI while adding Mimir setup, rehydration, and capture.", - "source_refs": ["AGENTS.md", "docs/planning/2026-04-24-transparent-agent-harness.md"], + "source_refs": ["AGENTS.md", ".planning/planning/2026-04-24-transparent-agent-harness.md"], "auto_fail_if_wrong": false }, { @@ -49,7 +49,7 @@ "id": "GT03", "category": "load_bearing_decision", "text": "Remote pull is always explicit; auto-push is allowed only after capture and librarian handoff when the operator opts in.", - "source_refs": ["crates/mimir-harness/README.md", "docs/planning/2026-04-24-transparent-agent-harness.md"], + "source_refs": ["crates/mimir-harness/README.md", ".planning/planning/2026-04-24-transparent-agent-harness.md"], "auto_fail_if_wrong": true }, { @@ -70,14 +70,14 @@ "id": "GT06", "category": "load_bearing_decision", "text": "Restore drills are explicit and destructive only after opt-in; dry-run planning precedes deleting local state, pulling, verifying, and sanity-querying the restored log.", - "source_refs": ["crates/mimir-harness/README.md", "docs/planning/2026-04-24-transparent-agent-harness.md"], + "source_refs": ["crates/mimir-harness/README.md", ".planning/planning/2026-04-24-transparent-agent-harness.md"], "auto_fail_if_wrong": true }, { "id": "GT07", "category": "recent_feedback_open_work", "text": "Service remotes currently expose only a dry-run adapter contract; real service push and pull are not implemented.", - "source_refs": ["crates/mimir-harness/README.md", "docs/planning/2026-04-24-transparent-agent-harness.md"], + "source_refs": ["crates/mimir-harness/README.md", ".planning/planning/2026-04-24-transparent-agent-harness.md"], "auto_fail_if_wrong": false }, { diff --git a/benchmarks/recovery/scenarios/03-native-adapter-drift.json b/benchmarks/recovery/scenarios/03-native-adapter-drift.json index c161108..2c78171 100644 --- a/benchmarks/recovery/scenarios/03-native-adapter-drift.json +++ b/benchmarks/recovery/scenarios/03-native-adapter-drift.json @@ -35,7 +35,7 @@ "id": "GT01", "category": "load_bearing_decision", "text": "Native adapters are read-only and remain untrusted supplements until their output crosses the draft/librarian path.", - "source_refs": ["docs/planning/2026-04-27-progressive-recall-ladder.md", "AGENTS.md"], + "source_refs": [".planning/planning/2026-04-27-progressive-recall-ladder.md", "AGENTS.md"], "auto_fail_if_wrong": true }, { @@ -49,7 +49,7 @@ "id": "GT03", "category": "project_state", "text": "Each matching native-memory source is classified as supported, missing, or drifted before any data is read.", - "source_refs": ["crates/mimir-harness/README.md", "docs/planning/2026-04-27-progressive-recall-ladder.md"], + "source_refs": ["crates/mimir-harness/README.md", ".planning/planning/2026-04-27-progressive-recall-ladder.md"], "auto_fail_if_wrong": false }, { @@ -70,21 +70,21 @@ "id": "GT06", "category": "load_bearing_decision", "text": "Cold-start recall prefers governed Mimir records before pending drafts, capture summaries, or adapter-derived material.", - "source_refs": ["docs/planning/2026-04-27-cold-start-rehydration-protocol.md", "crates/mimir-harness/src/lib.rs"], + "source_refs": [".planning/planning/2026-04-27-cold-start-rehydration-protocol.md", "crates/mimir-harness/src/lib.rs"], "auto_fail_if_wrong": true }, { "id": "GT07", "category": "recent_feedback_open_work", "text": "Future Copilot session-store support should sit behind the same adapter schema checks instead of broad raw ingestion.", - "source_refs": ["docs/planning/2026-04-27-progressive-recall-ladder.md"], + "source_refs": [".planning/planning/2026-04-27-progressive-recall-ladder.md"], "auto_fail_if_wrong": false }, { "id": "GT08", "category": "load_bearing_decision", "text": "Raw native session stores are not canonical memory; every durable write still goes through drafts and the librarian.", - "source_refs": ["AGENTS.md", "docs/planning/2026-04-27-cold-start-rehydration-protocol.md"], + "source_refs": ["AGENTS.md", ".planning/planning/2026-04-27-cold-start-rehydration-protocol.md"], "auto_fail_if_wrong": true } ], diff --git a/crates/mimir-librarian/README.md b/crates/mimir-librarian/README.md index e5b9404..82129eb 100644 --- a/crates/mimir-librarian/README.md +++ b/crates/mimir-librarian/README.md @@ -4,7 +4,7 @@ The librarian. Ingests prose memory drafts; sanitises them (separates observatio > **Pre-1.0 status.** This crate is part of Mimir's active-development tree. Draft envelopes, CLI flags, quorum artifacts, and processing behavior may change before v1. Public crates.io releases wait for the first alpha. -This is **Category 1** of the 2026-04-21 Rolls Royce engineering plan. See [`docs/planning/2026-04-21-rolls-royce-engineering-plan.md`](../../docs/planning/2026-04-21-rolls-royce-engineering-plan.md) § Category 1 for the full acceptance criteria. +Current release and launch readiness status lives in [`STATUS.md`](../../STATUS.md) and [`docs/launch-readiness.md`](../../docs/launch-readiness.md). ## Status diff --git a/crates/mimir-librarian/src/lib.rs b/crates/mimir-librarian/src/lib.rs index 7aca044..6b4dfea 100644 --- a/crates/mimir-librarian/src/lib.rs +++ b/crates/mimir-librarian/src/lib.rs @@ -4,7 +4,7 @@ //! log via the in-process `mimir_core::Pipeline`. //! //! Category 1 of the 2026-04-21 Rolls Royce engineering plan -//! (`docs/planning/2026-04-21-rolls-royce-engineering-plan.md`). +//! for librarian-governed draft processing. //! //! # Status //! diff --git a/crates/mimir-librarian/src/quorum.rs b/crates/mimir-librarian/src/quorum.rs index 6c967d2..8792721 100644 --- a/crates/mimir-librarian/src/quorum.rs +++ b/crates/mimir-librarian/src/quorum.rs @@ -698,7 +698,9 @@ mod tests { supporting_points: vec!["Launch/capture stay transparent.".to_string()], dissenting_points: vec!["Operator may forget to push.".to_string()], unresolved_questions: vec!["Service adapter protocol remains open.".to_string()], - evidence_used: vec!["docs/planning/2026-04-24-transparent-agent-harness.md".to_string()], + evidence_used: vec![ + ".planning/planning/2026-04-24-transparent-agent-harness.md".to_string() + ], participant_votes: vec![ ParticipantVote { participant_id: "claude".to_string(), diff --git a/crates/mimir-mcp/README.md b/crates/mimir-mcp/README.md index 7489f77..26a945f 100644 --- a/crates/mimir-mcp/README.md +++ b/crates/mimir-mcp/README.md @@ -6,7 +6,7 @@ > **Current MCP surface.** Mimir's 2026-04-24 mandate targets adapter-mediated agent surfaces: Claude and Codex first, future agents through draft/retrieval adapters. This crate remains the Claude MCP surface until `scope-model.md` graduates into implementation. Other clients may technically connect because MCP is standard, but they are not supported by this crate until an adapter is explicitly specified. -> **Phase 2.3 status.** Full read + write surface live (9 tools). See [`docs/planning/2026-04-19-roadmap-to-prime-time.md`](https://github.com/buildepicshit/Mimir/blob/main/docs/planning/2026-04-19-roadmap-to-prime-time.md) for the roadmap-to-public timeline. +> **Current tool status.** Full read + write surface live (9 tools). See [`docs/README.md`](https://github.com/buildepicshit/Mimir/blob/main/docs/README.md) for current public documentation. ## Install diff --git a/crates/mimir-mcp/src/lib.rs b/crates/mimir-mcp/src/lib.rs index e0151af..b7518ca 100644 --- a/crates/mimir-mcp/src/lib.rs +++ b/crates/mimir-mcp/src/lib.rs @@ -7,8 +7,7 @@ //! draft/retrieval adapters. This crate remains the Claude MCP surface //! until scope-aware adapters are specified; other MCP clients may //! technically connect because the protocol is standard, but they are -//! out of scope for testing, support, and design tuning here. Phase 2 -//! of `docs/planning/2026-04-19-roadmap-to-prime-time.md`. +//! out of scope for testing, support, and design tuning here. //! //! The library surface ([`MimirServer`]) is reusable in tests with the //! in-memory `tokio::io::duplex` transport; the binary at `src/main.rs` diff --git a/crates/mimir-mcp/src/server.rs b/crates/mimir-mcp/src/server.rs index 49beba4..afa74af 100644 --- a/crates/mimir-mcp/src/server.rs +++ b/crates/mimir-mcp/src/server.rs @@ -948,7 +948,7 @@ impl ServerHandler for MimirServer { .with_server_info(Implementation::from_build_env()) .with_protocol_version(ProtocolVersion::V_2024_11_05) .with_instructions( - "Mimir MCP server (Phase 2.3: full read+write surface). Status: mimir_status. Read tools (workspace-required): mimir_read (Lisp query → data-marked records), mimir_verify (log integrity), mimir_list_episodes (paginated session history), mimir_render_memory (single data-marked record). Write tools (lease-required): mimir_open_workspace (open store + mint 30-min lease), mimir_write (commit Lisp batch), mimir_close_episode (emit (episode :close)), mimir_release_workspace (drop lease, store stays open for reads). Lease errors: no_lease, lease_expired, lease_token_mismatch, lease_held (on second open while first is alive). See https://github.com/buildepicshit/Mimir/blob/main/docs/planning/2026-04-19-roadmap-to-prime-time.md." + "Mimir MCP server (Phase 2.3: full read+write surface). Status: mimir_status. Read tools (workspace-required): mimir_read (Lisp query -> data-marked records), mimir_verify (log integrity), mimir_list_episodes (paginated session history), mimir_render_memory (single data-marked record). Write tools (lease-required): mimir_open_workspace (open store + mint 30-min lease), mimir_write (commit Lisp batch), mimir_close_episode (emit (episode :close)), mimir_release_workspace (drop lease, store stays open for reads). Lease errors: no_lease, lease_expired, lease_token_mismatch, lease_held (on second open while first is alive). See https://github.com/buildepicshit/Mimir/blob/main/docs/README.md." .to_string(), ) } diff --git a/docs/README.md b/docs/README.md index 2426707..8bf60b9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,6 +10,7 @@ This is the public documentation index for Mimir. Planning notes remain availabl - [`bc-dr-restore.md`](bc-dr-restore.md) - Git-backed backup and restore flow. - [`launch-readiness.md`](launch-readiness.md) - OSS readiness, engineering quality, and promise audit. - [`launch-posting-plan.md`](launch-posting-plan.md) - launch article, posting, and listing plan. +- [`blog/2026-04-28-agent-memory-compiler-pipeline.md`](blog/2026-04-28-agent-memory-compiler-pipeline.md) - public launch article. ## Architecture @@ -28,6 +29,6 @@ This is the public documentation index for Mimir. Planning notes remain availabl - [`integrations/claude-code-hook.md`](integrations/claude-code-hook.md) - Claude hook integration. - [`integrations/claude-desktop-config.md`](integrations/claude-desktop-config.md) - Claude Desktop MCP setup. -## Planning Archive +## Launch Execution -The [`planning/`](planning/) directory contains historical design and launch notes. Use it for provenance, not as the current task list. Current launch execution is tracked in [`launch-readiness.md`](launch-readiness.md) and [`launch-posting-plan.md`](launch-posting-plan.md). +Historical planning notes are kept outside the public docs tree. Current launch execution is tracked in [`launch-readiness.md`](launch-readiness.md) and [`launch-posting-plan.md`](launch-posting-plan.md). diff --git a/docs/blog/2026-04-28-agent-memory-compiler-pipeline.md b/docs/blog/2026-04-28-agent-memory-compiler-pipeline.md new file mode 100644 index 0000000..8100b98 --- /dev/null +++ b/docs/blog/2026-04-28-agent-memory-compiler-pipeline.md @@ -0,0 +1,70 @@ +# Agent Memory Should Be Governed Like A Compiler Pipeline + +Mimir is public today as an experimental local-first memory governance system for AI agents. + +The project starts from a practical failure mode: agent sessions often end with useful context scattered across transcripts, scratch notes, repo-local files, and native client memory. On the next run, the agent either starts cold, reloads too much untrusted prose, or mixes facts from one project into another. That is not a memory system. It is a pile of notes with unclear authority. + +Mimir's thesis is simple: agents may propose memory, but trusted shared memory should be committed through a governed write path. + +## The Librarian Boundary + +Mimir treats incoming memories as drafts. Checkpoints, native agent memories, session exports, and adapter submissions enter as untrusted evidence. The librarian owns the canonical write boundary: it validates candidate records, applies deterministic checks, detects duplicates and conflicts, preserves provenance, and commits accepted records into an append-only log. + +That boundary is the product. It keeps a raw agent-authored note from becoming a durable instruction just because it appeared in a transcript. It also keeps memory isolated by scope until it has enough provenance and governance to move elsewhere. + +## Why A Compiler Pipeline + +The architecture borrows from compiler design because the failure modes look familiar: + +- syntax matters because malformed memory should not commit; +- binding matters because names need stable identity; +- semantic checks matter because later records can supersede earlier ones; +- emit matters because the canonical store should be append-only and replayable; +- diagnostics matter because operators need to understand what was accepted, rejected, deferred, or revoked. + +Mimir is not trying to make memory more human-readable at the storage layer. The canonical store is agent-oriented. Human operability comes from tools that inspect, explain, and verify the governed log without making the log itself a notes folder. + +## The Transparent Harness + +The main user surface is intended to stay boring: + +```bash +mimir codex +mimir claude +``` + +The harness preserves the native agent terminal flow while adding project bootstrap, bounded context rehydration, checkpoint capture, native-memory sweep, and post-session librarian handoff. The agent keeps working in the tool it already uses; Mimir owns the durable memory boundary around that session. + +## What Works Today + +The public repo currently includes: + +- a Rust append-only core with replay, verification, symbol tracking, supersession, and confidence decay; +- a librarian path for draft ingestion, duplicate filtering, conflict handling, raw archival, and governed commit; +- a transparent harness for wrapped agent sessions; +- operator commands for status, doctor checks, bounded context, draft triage, and read-only memory inspection; +- a local stdio MCP surface; +- Git-backed recovery mirroring and restore drills; +- recovery benchmark scaffolding and launch contracts; +- a coherent Codex plugin bundle under `plugins/mimir`. + +The project has been dogfooded locally during its public-launch cleanup, including session checkpoints, wrapper health checks, and post-session draft capture. + +## What We Are Not Claiming Yet + +Mimir is pre-1.0. The implementation is real, but storage details, CLI flags, draft envelopes, MCP schemas, and adapter workflows may change before a stable release. + +We are not claiming production readiness, hosted service availability, stable APIs, or benchmark-proven superiority over other memory systems. Public benchmark claims wait for recorded live runs. + +## What We Want Reviewed + +The useful review lanes are concrete: + +- Rust correctness and append-only log integrity; +- security boundaries around untrusted memory text; +- librarian validation and conflict behavior; +- agent adapter UX for Codex, Claude, and future local clients; +- recovery benchmark methodology; +- documentation clarity for first-run users. + +The repo is open at . diff --git a/docs/concepts/README.md b/docs/concepts/README.md index db403bb..47f7e57 100644 --- a/docs/concepts/README.md +++ b/docs/concepts/README.md @@ -11,7 +11,7 @@ Every spec carries a `> **Status: **` banner in its first paragraph. As o As of 2026-04-24, Mimir also has draft mandate-expansion specs for [`scope-model.md`](scope-model.md) and [`consensus-quorum.md`](consensus-quorum.md). They reflect the accepted shift from absolute workspace isolation to scoped memory governance plus governed cross-agent deliberation. They are not fully implemented yet and do not make the older implementation specs false; they define the next architecture layer those specs must evolve toward. -The accepted product launch-boundary direction is recorded separately in [`../planning/2026-04-24-transparent-agent-harness.md`](../planning/2026-04-24-transparent-agent-harness.md): users launch normal agents as `mimir [agent args...]`, and Mimir preserves the native terminal flow while wrapping the session with governed memory. +The accepted product launch-boundary direction is now part of the public quickstart: users launch normal agents as `mimir [agent args...]`, and Mimir preserves the native terminal flow while wrapping the session with governed memory. See [`../../README.md`](../../README.md#running-mimir) and [`../first-run.md`](../first-run.md). ## The 14 authoritative implementation specs diff --git a/docs/integrations/claude-code-hook.md b/docs/integrations/claude-code-hook.md index ca133fa..44e2947 100644 --- a/docs/integrations/claude-code-hook.md +++ b/docs/integrations/claude-code-hook.md @@ -1,6 +1,6 @@ # Claude Code integration -> **Status: authoritative** (Phase 2.4 of `docs/planning/2026-04-19-roadmap-to-prime-time.md`). +> **Status: authoritative Claude MCP setup recipe.** This document is the canonical setup recipe for the current **Claude Code** MCP surface. The 2026-04-24 mandate expands Mimir toward adapter-mediated Claude and Codex ingestion, but this integration remains Claude-specific until `scope-model.md` graduates into implementation. For Claude Desktop, see [`claude-desktop-config.md`](claude-desktop-config.md). diff --git a/docs/integrations/claude-desktop-config.md b/docs/integrations/claude-desktop-config.md index e49ebb3..1fa86c7 100644 --- a/docs/integrations/claude-desktop-config.md +++ b/docs/integrations/claude-desktop-config.md @@ -1,6 +1,6 @@ # Claude Desktop integration -> **Status: authoritative** (Phase 2.4 of `docs/planning/2026-04-19-roadmap-to-prime-time.md`). +> **Status: authoritative Claude MCP setup recipe.** This document is the canonical setup recipe for the current **Claude Desktop** MCP surface. The 2026-04-24 mandate expands Mimir toward adapter-mediated Claude and Codex ingestion, but this integration remains Claude-specific until `scope-model.md` graduates into implementation; for the CLI, see [`claude-code-hook.md`](claude-code-hook.md). diff --git a/docs/launch-posting-plan.md b/docs/launch-posting-plan.md index c258117..edfac12 100644 --- a/docs/launch-posting-plan.md +++ b/docs/launch-posting-plan.md @@ -4,20 +4,24 @@ This is the concrete publication plan for Mimir's first public opening. It keeps ## Channel Order -1. **GitHub public repo** - canonical source of truth. -2. **Launch article** - explains the problem, librarian boundary, harness, and dogfood evidence without benchmark overclaiming. -3. **Show HN** - after README, docs index, and launch article are live. -4. **X / LinkedIn** - short pointer posts back to GitHub and the article. -5. **Dev.to or BES Studios blog mirror** - optional mirror of the launch article. -6. **Codex plugin bundle** - publish as a coherent Mimir workflow package, not individual skills. -7. **Crates.io / docs.rs alpha** - after package dry-runs and crate README audit. -8. **MCP Registry / MCP directories** - after an OCI image, MCPB bundle, or remote service artifact exists. +1. **GitHub public repo** - canonical source of truth. Status: live. +2. **Launch article** - explains the problem, librarian boundary, harness, and dogfood evidence without benchmark overclaiming. Status: [`blog/2026-04-28-agent-memory-compiler-pipeline.md`](blog/2026-04-28-agent-memory-compiler-pipeline.md). +3. **Show HN + X / LinkedIn** - short pointer posts back to GitHub and the article after the article is merged. +4. **Codex plugin bundle** - publish as a coherent Mimir workflow package, not individual skills. +5. **Crates.io / docs.rs alpha** - after package dry-runs and crate README audit; real publish remains owner-gated and irreversible. + +Deferred: + +- **MCP Registry / MCP directories** - skip for this launch pass until an OCI image, MCPB bundle, or remote service artifact exists. +- **Dev.to or BES Studios blog mirror** - optional article mirror after GitHub + primary posts are live. ## Launch Article -Working title: +Path: [`blog/2026-04-28-agent-memory-compiler-pipeline.md`](blog/2026-04-28-agent-memory-compiler-pipeline.md) + +Title: -> Agent memory should be governed like a compiler pipeline, not appended like notes. +> Agent Memory Should Be Governed Like A Compiler Pipeline Outline: @@ -37,11 +41,11 @@ Title: Body: -`Mimir is an experimental Rust project for agent memory governance. Agents submit untrusted memory drafts; a librarian validates and commits accepted records into an append-only canonical log with provenance. The repo includes a transparent harness (`mimir ...`), local MCP surface, operator inspection commands, Git-backed recovery mirroring, and recovery-benchmark scaffolding. It is pre-1.0: no stable API/storage promises and no benchmark victory claims yet. Looking for review on Rust correctness, security boundaries, agent adapter UX, and benchmark methodology.` +`Mimir is an experimental Rust project for local-first agent memory governance. Agents submit untrusted memory drafts; a librarian validates and commits accepted records into an append-only canonical log with provenance. The repo includes a transparent harness (`mimir ...`), local MCP surface, operator inspection commands, Git-backed recovery mirroring, recovery-benchmark scaffolding, and a Codex plugin bundle. It is pre-1.0: no stable API/storage promises and no benchmark victory claims yet. Looking for review on Rust correctness, security boundaries, agent adapter UX, and benchmark methodology.` ## X Draft -`Mimir is public: experimental local-first memory governance for AI agents. Agents propose drafts; the librarian owns canonical writes. Rust core, transparent agent harness, MCP surface, operator controls, and Git-backed recovery mirror. Pre-1.0, feedback wanted. https://github.com/buildepicshit/Mimir` +`Mimir is public: experimental local-first memory governance for AI agents. Agents propose drafts; the librarian owns canonical writes. Rust core, transparent agent harness, MCP surface, operator controls, Codex plugin bundle, and Git-backed recovery mirror. Pre-1.0, feedback wanted. https://github.com/buildepicshit/Mimir` ## LinkedIn Draft @@ -74,7 +78,8 @@ The public Codex artifact should be the repo plugin bundle at `plugins/mimir`, w Do not publish crates before: -- `cargo package -p --allow-dirty` passes for every crate. +- `cargo publish --dry-run -p mimir-core --allow-dirty` passes. +- `cargo package -p --allow-dirty` or crate-specific publish dry-runs pass for dependent crates after `mimir-core` is available in the crates.io index. - Crate READMEs match the root pre-1.0 story. - `cargo doc --workspace --no-deps` passes. - Release order is confirmed: `mimir-core` before dependent crates. @@ -97,4 +102,6 @@ Until then, GitHub plus the local `mimir-mcp` docs are the canonical MCP distrib - Local gate green. - Main CI green after the single cleanup push. - Launch article committed or published. +- Codex plugin bundle checked as `plugins/mimir`, not individual skills. +- Crates.io alpha release path checked up to dry-run; real publish explicitly approved. - Public issue lanes seeded for correctness, security, adapter UX, benchmarks, and docs. diff --git a/docs/launch-readiness.md b/docs/launch-readiness.md index 835283b..845e126 100644 --- a/docs/launch-readiness.md +++ b/docs/launch-readiness.md @@ -29,9 +29,11 @@ This checklist is the current public-launch sign-off surface for Mimir. It cover | Release runbook | Done | `RELEASING.md`. | | Citation metadata | Done | `CITATION.cff`. | | Dependabot | Done | `.github/dependabot.yml`, monthly cadence. | -| CI | Done on main | GitHub Actions main run was green on 2026-04-28 after PR #11. | +| CI | Done on main | GitHub Actions main run was green on 2026-04-28 after PR #12. | | Docs index | Done | `docs/README.md`. | -| Public artifact hygiene | Done | Scratch research fixtures removed from tracked files; recovery benchmark promoted to `benchmarks/recovery`; stale internal-path sweep returned no hits. | +| Launch article | Done | `docs/blog/2026-04-28-agent-memory-compiler-pipeline.md`, linked from README and docs index. | +| Publishing plan | Done | `docs/launch-posting-plan.md` covers GitHub, launch article, Show HN / X / LinkedIn, Codex plugin bundle, crates.io/docs.rs alpha, and the deferred MCP Registry path. | +| Public artifact hygiene | Done | Scratch research fixtures removed from tracked files; recovery benchmark promoted to `benchmarks/recovery`; historical planning notes moved to `.planning/planning`; stale internal-path sweep returned no hits. | ## Engineering Quality Gate @@ -50,7 +52,7 @@ Additional launch checks: ```bash cargo deny check cargo doc --workspace --no-deps -cargo package -p mimir-core --allow-dirty +cargo publish --dry-run -p mimir-core --allow-dirty cargo test -p mimir-harness --test recovery_benchmark python3 benchmarks/recovery/test_bench.py ``` @@ -88,7 +90,7 @@ Public-surface checks: confirm no tracked files remain under removed scratch dir - Workspace version: `0.1.0`. - Release tags: none. - First public tag target: `v0.1.0`, after cleanup branch is locally green and owner approves tagging. -- Crates.io publishing waits for the `mimir-core` package dry-run, crate README audit, and release ordering through `mimir-core` first. +- Crates.io publishing waits for the `mimir-core` publish dry-run, crate README audit, and release ordering through `mimir-core` first. - docs.rs will build after crates are published to crates.io. ## Deferred After Public Opening @@ -96,7 +98,7 @@ Public-surface checks: confirm no tracked files remain under removed scratch dir - OpenSSF Scorecard run and remediation. - OpenSSF Best Practices Badge self-certification. - Live recovery benchmark report with transcripts and scorecards. -- Broader client setup recipes beyond Claude/Codex/Copilot. +- Broader client setup recipes beyond Claude/Codex. - Relationship/timeline recall APIs. - OCI or MCPB package for official MCP Registry submission. - Hosted service or service remote transport. diff --git a/plugins/mimir/README.md b/plugins/mimir/README.md index c4cbc89..97d0fa7 100644 --- a/plugins/mimir/README.md +++ b/plugins/mimir/README.md @@ -16,6 +16,8 @@ For local dogfood, add this plugin through a Codex marketplace entry that points The canonical repo-local marketplace location is `.agents/plugins/marketplace.json`. Until that catalog file is present, the plugin can still be inspected as a normal local plugin bundle under `plugins/mimir`. +For public launch, distribute the whole `plugins/mimir` bundle. Do not publish `skills/mimir-memory` by itself; without the setup checks and librarian-boundary docs, the skill is incomplete context. + ## Verification ```bash