Releases: funnaz/memplumb-releases
Release list
MemPlumb v0.13.1 Preview - Unsigned Preview
MemPlumb v0.13.1 Preview
MemPlumb v0.13.1 is a correctness release for the local-first Agent MemoryOps
control plane.
What changed
- Write decisions now carry a transactional expectation for the exact Memory
identity observed by policy evaluation. - SQLite and PostgreSQL verify every expectation before persisting any
Decision, Write Decision Observation, Memory, Change Feed entry, or Webhook
outbox row. - PostgreSQL serializes built-in writes per Actor and re-evaluates a losing
concurrent request against the newly committed Memory. - The pipeline retries at most three write conflicts, persists only the
successful attempt, and reports dedicated retry and exhaustion metrics. - Duplicate normalized
kindpluskeyfacts fail with
DUPLICATE_MEMORY_IDENTITYbefore an Event or idempotency claim is created. - A concurrent
forget()operation wins over an older Event, so a stale
request cannot silently reactivate a deleted Memory. - Newly curated Write Counterfactual Cases use v5 and Write Quality Cases use
v6. They bind policy-evaluation time separately from Event time and preserve
the observed Memory status/update time; strict v3/v4 readers and replay
remain available for historical evidence. - PostgreSQL now takes transaction-scoped Workspace lifecycle locks immediately
afterBEGIN, including shared fences for rate-limit writes and sorted
multi-Workspace maintenance. Actor/Workspace exports use an exclusive,
read-onlyREAD COMMITTEDtransaction; hard purge and restore/import use the
same exclusive lifecycle boundary. This remains safe behind transaction
poolers and prevents an export from opening a stale snapshot while waiting. - Actor hard purge now computes its manifest and counts, deletes all linked
MemoryOps evidence, and commits its privacy-safe receipt in one transaction.
Existing Context, adjudication, review, Replay, embedding, Causality, Change,
Webhook, and Event writes cannot cross that boundary. - Retrieval Case curation re-reads and locks its current Context and
Adjudication, then re-materializes and compares the complete restricted
projection in the final Store transaction. Actor purge or Workspace
replacement cannot leave a stale orphan Case containing deleted evidence. - Memory Store Contract v20, SQLite schema v26, PostgreSQL migration v32, and
Actor export schema v14 makeidempotency_event_fencemandatory. Each ingest
claim binds its Actor to a five-minute lease and an unguessable token stored
only as a SHA-256 hash. - Webhook secrets now bind to one global master-key fingerprint and generation.
Rotation validates and rewraps every endpoint, including deleted endpoints,
in one transaction. Delivery claims increment an ABA-safe lease version, and
guarded dispatch holds the lifecycle fence through DNS and fetch so Actor
purge cannot return while an older outbound request is still in flight.
Webhook creation reads the key and generation together after DNS validation,
so an in-flight rotation cannot produce a mismatched key-state snapshot. - The same request can take over an expired claim with a new token. Complete
and fail require the current token andprocessingstate; completion also
verifies that the Event belongs to the claimed Actor. - Actor export and purge include processing, failed, and completed ingest
idempotency records without claim-token hashes. A late completion returns
409 EVENT_WRITE_FENCE_CONFLICTand cannot fail or complete a newer claim.
Forced Workspace replacement counts and clears the ledger even though
Snapshot v17 intentionally does not import it. Queued purge and replacement
work still runs after an earlier replacement fails validation. - A purged Event makes late trace completion a safe no-op and makes Decision
application fail closed, preventing orphan evidence.
Verification
- Node: 578 discovered, 479 passed, 99 PostgreSQL-gated skips, 0 failed.
- PostgreSQL 17 + pgvector 0.8.5: 113 passed, 0 failed.
- Cloud Runtime: 3 passed. Python SDK: 20 passed.
- TypeScript/Python strict checks, OpenAPI 1.13.0 with 72 paths, and all four
quality benchmarks passed. - The Windows clean-directory acceptance gate and independent reproducibility
build passed. The unsigned executable SHA-256 is
14fb2435740d529937fa50f79179e60d26577b076e2e6a0e22f88fb77cdc6d39,
bundle SHA-256 is
fe2efed9a105db66bcf0dafb283be48d512fd485981fd93df2c9ae77d227231a, and
Build ID issha256:14b878dc9d3eae371a6a23b8.
Five-minute path
Download memplumb-0.13.1-windows-x64.zip, verify SHA256SUMS, extract it,
and run memplumb.exe. The default local Runtime stores data under the current
Windows profile and does not require Docker.
The full walkthrough is available at https://memplumb.com/#quickstart.
Preview boundary
This Windows artifact is reproducible and integrity-addressed but is not
Authenticode signed. Windows may display a reputation warning. It is an
evaluation build, not a generally available production release.
Shared production self-hosting uses the Node Runtime with PostgreSQL. The
experimental Cloudflare Worker + D1 adapter is not the shared production
control plane.
Verify before use
Compare the executable digest with the release SHA256SUMS and
manifest.json. Do not use an executable whose digest differs.
Preview use is governed by the attached EULA.md.
Build and distribution
Unsigned Preview: the Windows executable is integrity-addressed but does not carry an Authenticode publisher signature. Expect Windows SmartScreen warnings.
Artifacts
- Windows x64 portable executable and ZIP, with
manifest.jsonandSHA256SUMS - Python SDK wheel
- TypeScript SDK package
- Container image:
ghcr.io/funnaz/memplumb@sha256:5f6fccf5737d57fa61a9edd6c24fb3c4f3b0ef4ef1991bf088916227fec52af2
The container is published by immutable digest with BuildKit provenance and an SBOM. The mutable latest tag is intentionally not published for v0.x.
Source revision: funnaz/memplumb@599c4c1c124723b6dfdef1a18850b038c6ab0ef4
Verify downloaded files with release-assets-SHA256SUMS. The Windows manifest records the post-signing executable digest and signing state.