Skip to content

1.5.0 - 2026-07-22

Choose a tag to compare

@github-actions github-actions released this 22 Jul 18:00

Release Notes

Fixed

  • memd call and memd batch now inherit missing tenant_id and
    project_id values from .memd/project_scope.json, including requests
    routed through a warm worker. An explicit JSON tenant_id remains
    tenant-wide unless the same request also supplies project_id. Malformed
    or unreadable scope files fail closed, and batch scope failures preserve
    per-line receipts under --continue-on-error.

  • bm25-only no 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 --aggressive now perform the merge; the maintenance
    report includes sparse segment counts before and after it.

  • memory.add and memd add return every physical chunk ID created by
    long-document splitting in stored_chunk_ids, with the backward-compatible
    chunk_id first. memory.supersede returns 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.md now 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.md as 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 records derives_from:<csv> lineage and leaves those sources active;
    project-scoped consolidation retains its existing supersedes:<csv> and
    soft-tombstone behavior.

  • WAL replay preserves newer SQLite lifecycle metadata when repairing an
    existing payload location, so restart cannot revert Final, Superseded,
    Expired, or Error rows to the status stored in their original Add record.

Added

  • memory.search accepts ranking_time_ms to 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 JSON null, allowing callers to reject binaries
    that silently ignore ranking_time_ms.

  • Search and agent context now return privacy-safe retrieval episode IDs.
    memd outcome and memory.record_outcome accept explicit used/harmful
    attribution and verifier evidence. outcome-v1 computes bounded,
    project-scoped, time-decayed shadow ranks while production serving remains
    unchanged.

  • memd eval-outcome-ranking writes 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 hidden Candidate chunks. The default
    memd consolidate stops after validation; memd consolidate-review --list
    discovers staged runs, and --accept records durable promotion intent
    before atomically promoting candidates with their same-project sources.
    memd consolidate --promote explicitly 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 = 0 and 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-immediate preserves 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 | sh

Download 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