Skip to content

1.6.0 - 2026-07-25

Choose a tag to compare

@github-actions github-actions released this 25 Jul 22:43

Release Notes

Changed

  • OutcomeKind is now #[non_exhaustive]. Adding verifier_error below breaks
    any downstream exhaustive match on it, so the marker lands in the same
    release: consumers absorb one break now instead of another every time the
    eligibility model gains a state. Match arms on the enum need a _ arm.

Added

  • verifier_error outcome state, for a verifier that produced no verdict
    because it crashed, timed out, or returned something unparseable. Until now
    the closest available state was failed, which asserts the task was verified
    and did not succeed and therefore penalises the chunks that were retrieved.
    Reporting a broken verifier that way turns endpoint flakiness into permanent
    negative priors on memories that may be perfectly good. Observed at benchmark
    scale while judging a memory benchmark: 41 empty judge responses and 19
    client timeouts were scored as wrong answers for the system under test.

    A verifier_error credits nothing in either direction, even when used and
    harmful chunk IDs are supplied, so it can be reported without knowing what
    the run would have concluded. The event is still persisted and queryable, so
    verifier failures stay visible instead of silently moving ranking. The
    evidence requirement is unchanged: verifier types that require an evidence
    reference still require one, since a broken run is exactly when the log or
    job reference matters.

    No migration is needed, but the state is not readable by older binaries.
    Downgrading after recording one makes the outcome list for that episode fail
    to parse; other episodes and all ranking reads are unaffected.

Fixed

  • Background consolidation had no machine-wide ceiling. The 1.5.1 lock is keyed
    on tenant and project, which stops one project stacking spawns but leaves the
    machine unbounded: every project whose dirty region crosses MIN_REGION adds
    another detached child, and they all queue on the one store writer. A machine
    with several active projects could therefore still reproduce the starvation
    1.5.1 set out to fix. Spawning now also claims one of four interchangeable
    slot locks under the data directory, so at most four background
    consolidations run at once regardless of how many scopes are active. A spawn
    past the ceiling returns {"skipped": "consolidation_slots_busy"} and is
    reported by session-start as a skip reason rather than a start. The scope
    lock is still claimed first, so a contended scope reports itself as such
    instead of consuming a slot it would not use.

  • session-start dropped background-spawn errors. Only a skipped reason was
    surfaced, so a spawn that failed outright reported
    consolidation_spawned: false with no reason, which reads as "nothing needed
    doing". 1.5.1 moved scope resolution and lock acquisition into the parent,
    making that path reachable, and the error is now reported.

  • cargo test was intermittently red, roughly three runs in twenty. The 1.5.1
    lock test holds a child process while the rest of the suite runs, and fork
    copies the whole descriptor table, so an unrelated test asserting on a freshly
    released file lock could observe a copy still held by a child that had not yet
    reached its exec. Both affected assertions now retry briefly, matching the
    allowance the 1.5.1 test already made for its own release check. Twenty
    consecutive runs pass.

Install memd 1.6.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/fmschulz/memd/releases/download/v1.6.0/memd-installer.sh | sh

Download memd 1.6.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