ai-memory v0.8.0

v0.7.0 Review Synthesis — Fix Dispatch Backlog

Synthesized from 6 parallel reviewers (security/correctness/perf/API-UX/docs/coverage) Base commit: 0536e96 (feat/v0.7.0-grand-slam HEAD with CHANGELOG + ship-readiness fixes) Reviewer baseline: ef92bd7 / 64528b1 (pre-ship-readiness reconciled trunk) Issue: #767 Date: 2026-05-15

Reviewer source counts (raw findings)

Lens File CRIT HIGH MED LOW INFO Total
Security review-security/docs/internal/v070-review-security.md 0 5 9 6 3 23
Correctness review-correctness/docs/internal/v070-review-correctness.md 1 3 6 3 0 13
Performance review-performance/docs/internal/v070-review-performance.md 2 5 6 4 0 17
API+UX review-api-ux/docs/internal/v070-review-api-ux.md 0 5 6 5 4 20
Docs review-docs/docs/internal/v070-review-docs.md 2 6 8 4 0 20
Coverage review-coverage/docs/internal/v070-review-coverage.md 1 4 8 5 0 18
Total raw   6 28 43 27 7 111

Prompt header said “103 findings”; actual count from re-reading the six docs is 111 (likely 103 was based on a pre-finalization head; net total higher by 8). All 111 are absorbed below or classified as INFO / accepted-debt.

Severity summary (after dedup + cluster)

Known dedupes applied

Root issue Dedupe’d from Cluster
UTF-8 panic in compute_atom_span COR-1 CRIT + COV-3 HIGH A
idx_memories_source_uri is dead code PERF-3 HIGH A
row_to_memory drops corrupt provenance JSON silently COR-3 HIGH A
read_atomised_into swallows all DB errors COR-2 HIGH A
Form 1 LLM prompt-injection mass-delete SEC-1 HIGH + COR-6 MED + PERF-7 HIGH (per-candidate content truncation) B
Form 1 verdict drop / synthesis fallback COR-5 MED + COR-6 MED + SEC-11 MED B
signed_events BEGIN DEFERRED race SEC-3 HIGH + SEC-19 LOW (atomisation re-use) + COR-9 MED (read_chain_head NULL collapse) C
L1-6 fail-open + handle_deref IDOR SEC-2 HIGH + SEC-4 HIGH D
MemoryKind parse_csv typo-collapse + Skills CLI/HTTP parity COR-4 HIGH + API-2 HIGH (Skills slice) E
Performance hot-paths: per-store db::open + recall N+1 + touch txn fan-out + mem.clone PERF-1 CRIT + PERF-2 CRIT + PERF-6 HIGH + PERF-10 MED + PERF-14 LOW + PERF-15 LOW F
Form 5 shadow-mode unboundedness + env-var-on-hot-path + calibrate materialisation PERF-4 HIGH + PERF-9 MED + PERF-12 MED G
MCP tool count drift (71 not 63) DOC-4 HIGH + API-1 HIGH + API-7 MED + API-20 LOW H
README/release-notes/MIGRATION/cookbook/API_REF/CLI_REF drift DOC-2/3/5/6/7/8/9/10/11/12/14/15/16/17/18/19 H
Migration filename collisions (0031*, 0018*) COR-13 LOW + DOC-20 LOW J
QW-4 missing / phantom API-12 HIGH + DOC (implicit in DOC-2) K
CHANGELOG silent for Forms/QW/WT-1 DOC-1 CRIT → RESOLVED by bbeb1e8 (verified: 59 matches for Form/atomise/persona/offload/calibrate in current CHANGELOG.md) Already-fixed
Postgres integration tests not running in CI COV-1 CRIT + COV-6 HIGH I
Missing acceptance/handler-envelope tests COV-2/4/9/10/11/12/13/14 (folded into A/B/D/G + I)
K10 HMAC negative cross-method test COV-5 HIGH C (test-pin add-on)
Form 7 governance matcher: substring vs regex + args=Vec::new() + lossy command_str SEC-12 MED + SEC-13 MED + SEC-17 LOW + COR-10 MED D

Fix dispatch clusters

Each cluster is a self-contained fix-agent prompt. Clusters are designed to be parallel-safe unless the Parallel-safe with / Dependencies rows say otherwise.

CLUSTER A — Form 4 fact-provenance correctness + atomisation idempotency

CLUSTER B — Form 1 synthesis security + verdict-application correctness + prompt-injection guard

CLUSTER C — Signed-events chain integrity (BEGIN IMMEDIATE + drainer DLQ + HMAC negative tests)

CLUSTER D — L1-6 governance fail-open + handle_deref IDOR + matcher correctness

CLUSTER E — Form 6 kind-filter inversion + L1-5 skill HTTP/CLI parity + capability skills CLI

CLUSTER F — Performance hot-paths (memory_store / memory_recall)

CLUSTER G — Form 5 shadow-mode unboundedness + sampling + calibration streaming

CLUSTER H — Docs + cookbook + CLI-help accuracy sweep (DOCS-ONLY)

CLUSTER I — CI test-runner expansion (postgres integration tests not running)

CLUSTER J — Migration filename collisions cleanup

CLUSTER K — QW-4 honest disposition (operator decision)

CLUSTER L — INFO / accepted-debt / operator-document-only (no fix-agent dispatch)

These are real findings but operator-defensible or explicitly scoped out of v0.7.0. Flag for documentation rather than code change.


Already-fixed (verified at 0536e96)


Parallel-safe dispatch order

Group 1 (parallel, low/no shared-write-surface overlap):

Group 2 (after Group 1; touch overlapping write-path files):

Coordination notes:

Group 3 (operator decision):

Already-fixed verification:


Operator decision points (cannot autonomously resolve)

  1. CLUSTER K disposition — QW-4: ship (a), re-attribute (b), or defer (c)? Recommendation: (c) defer, accompanied by HTTP-coverage gap honesty-doc in MIGRATION_v0.7.md.
  2. CLUSTER H sub-scoping — DOC-16 alone is 12-20 hours. Split off as cluster H-2 “Hook pipeline + Federation + K8 quotas + K10 SSE + Transcripts + Signed-events dedicated docs” and defer to v0.7.0.1 doc-only point release? Or block tag-cut on it?
  3. CLUSTER E Skills HTTP routes — confirm CLI Skills are wanted alongside HTTP (operator may prefer MCP-only by design); if so, downscope E to MemoryKind+CLI alias only.
  4. CLUSTER F PERF-5 default — reduce max_retries from 3 to 1 on Synchronous path? This is a behavior change visible to operators relying on aggressive retry.
  5. API-5 error-code convention ADR — pick UPPER_SNAKE vs lowercase.dotted as canonical (recommend lowercase.dotted).
  6. LOE > 2-session clusters:
    • H (docs sweep, ~3 sessions; split as H-1 stale-fix and H-2 net-new MVP docs).
    • F if PERF-5 default change requires a deprecation cycle.
  7. API-6 breaking-change alias decision — keep /api/v1/memory_load_family working with Deprecation header (recommend) vs hard-rename (breaks v0.7.0-rc users).

End-of-synthesis checklist

— Cold mountain.