1.5.0 - 2026-07-22
Release Notes
Fixed
-
memd callandmemd batchnow inherit missingtenant_idand
project_idvalues from.memd/project_scope.json, including requests
routed through a warm worker. An explicit JSONtenant_idremains
tenant-wide unless the same request also suppliesproject_id. Malformed
or unreadable scope files fail closed, and batch scope failures preserve
per-line receipts under--continue-on-error. -
bm25-onlyno longer loads the dense index or applies recency, project,
type, or query-text feature bonuses. It preserves BM25 order before any
stored-feedback adjustment. -
Sparse segment compaction now waits for an explicit Tantivy merge instead of
issuing a no-op commit. The compaction runner and
memd maintenance --aggressivenow perform the merge; the maintenance
report includes sparse segment counts before and after it. -
memory.addandmemd addreturn every physical chunk ID created by
long-document splitting instored_chunk_ids, with the backward-compatible
chunk_idfirst.memory.supersedereturns the replacement set in
new_stored_chunk_ids. Initial lifecycle metadata is applied to every split
child, and failed supersession links compensate all children instead of
deleting only the primary chunk. -
Fixed-clock searches ignore future-dated feedback and outcome events. Tier
diagnostics now use the same metadata reranker as standard search, so debug
mode no longer reports a different order from the served path. -
Tiered semantic-cache hits now run and fuse the sparse retrieval leg instead
of returning a dense-only cached ranking. A regression test checks that cold
and warm hybrid searches preserve the same fused result order. -
Exact lexical rescue now ranks the full bounded scan before retaining the
best candidates, so earlier low-scoring matches cannot hide later correction
records. Boundary punctuation is normalized without short-token substring
matches, while dotted identifiers and natural inflections remain searchable. -
memory.mdnow deduplicates project and machine-wide candidates as one
bounded union, including exact chunk IDs, consolidation lineage, and topic
matches. Active-project results are assigned to the project section instead
of appearing twice or leaking into the machine-wide section. -
Startup answerability no longer treats a missing or unreadable
tasks/todo.mdas proof that no tasks are open. The generated project state
records the task source as missing, parsed-empty, parsed-open, or failed. -
CLI, structured-operation, batch, OMF-import, supersession, episode, and
consolidation writes now share one preparation service for tag
normalization, admission, retention, priority, and initial trust. Batch and
single writes no longer diverge on inferred priority or retention defaults. -
Consolidation now admits chunks retrieved after the last-run watermark,
even when those chunks were created earlier. Every candidate is checked
against its current lifecycle and project scope before use. -
Tenant-wide consolidation no longer hides project-scoped source memories.
It recordsderives_from:<csv>lineage and leaves those sources active;
project-scoped consolidation retains its existingsupersedes:<csv>and
soft-tombstone behavior. -
WAL replay preserves newer SQLite lifecycle metadata when repairing an
existing payload location, so restart cannot revertFinal,Superseded,
Expired, orErrorrows to the status stored in their original Add record.
Added
-
memory.searchacceptsranking_time_msto pin recency, feedback, and
outcome decay over a frozen corpus. Fixed-clock searches are read-only with
respect to the usage ledger and retrieval-attribution episodes. Lifecycle
visibility remains live, so this option is not an as-of snapshot. -
Search responses always serialize
retrieval_episode_id. Read-only
fixed-clock searches return JSONnull, allowing callers to reject binaries
that silently ignoreranking_time_ms. -
Search and agent context now return privacy-safe retrieval episode IDs.
memd outcomeandmemory.record_outcomeaccept explicit used/harmful
attribution and verifier evidence.outcome-v1computes bounded,
project-scoped, time-decayed shadow ranks while production serving remains
unchanged. -
memd eval-outcome-rankingwrites JSON and Markdown reports comparing
served and source-deduplicated shadow top-k lists against explicit relevant
and harmful chunk judgments. -
Consolidation runs use durable run, entry, and normalized lineage tables.
Outputs are written as hiddenCandidatechunks. The default
memd consolidatestops after validation;memd consolidate-review --list
discovers staged runs, and--acceptrecords durable promotion intent
before atomically promoting candidates with their same-project sources.
memd consolidate --promoteexplicitly requests that path in one command.
Exact source-set retries reuse the existing run. -
LLM consolidation output must include a concrete agent action, exact source
evidence, and bounded confidence. The journal records the consolidator
command, model, and version and references a permission-restricted,
size-capped raw-response audit artifact with integrity hashes. -
Session start performs bounded consolidation recovery before refreshing
agent context. Recovery isolates per-run errors, protects fresh in-flight
work with a 30-second grace period, promotes only runs with recorded intent,
and refreshes promoted dense-index rows. Background consolidation stages
proposals for later review instead of changing source visibility.
Changed
- Upgrading an existing store is conservative. Previously validated runs gain
promotion_requested = 0and appear in the review list, but cannot be
promoted because they lack the new audit artifact; an acceptance attempt
fails closed and rejects their candidates. Older planned or
candidate-written runs without that artifact are rejected during recovery.
Sources remain active in both cases.--legacy-immediatepreserves the old
one-command behavior for one release and prints a deprecation warning.
Install memd 1.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/fmschulz/memd/releases/download/v1.5.0/memd-installer.sh | shDownload memd 1.5.0
| File | Platform | Checksum |
|---|---|---|
| memd-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| memd-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| memd-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| memd-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |