Four time axes
One timestamp cannot separate "I moved to Chicago last year" from "I move next year", and cannot express a fact that stopped being true. SodaMem keeps four axes on every fact and lets them disagree.
| field | the question it answers |
|---|---|
occurred_start / occurred_end | when the event happened |
valid_from / valid_until | when the fact was true |
document_time | when the user said it |
created_at | when we stored it |
A sentence typed today can describe an event from last year that stopped being true last month. That is four different dates, and collapsing them loses the only information that makes the fact usable later.
Corrections are ADD-only
A correction writes a new version plus a SUPERSEDES edge. It never rewrites in place.
fact_a "user lives on Kauai" valid_from 2022-01-01 valid_until 2023-05-25
▲
│ SUPERSEDES
fact_b "user lives on Oahu" valid_from 2023-05-25 valid_until —PATCH /v1/memories/{id} closes the old version with a valid_until and leaves it readable. That is the whole difference from DELETE. The superseded fact leaves search and context — it will not pollute an answer — but "what did we believe last March" remains a question with a row behind it.
Deleting for real
An ordinary DELETE archives: the memory leaves search and context, the record and its provenance stay.
Physical erasure exists for right-to-erasure obligations and is off by default. SODAMEM_ALLOW_PURGE=true enables DELETE /v1/memories/{id}?purge=true, which cascades to the fact's roles, edges and vectors.
Purge is irreversible
It also breaks the evidence chain of any answer that cited the fact. Turn it on only when you actually need it.
Status you can filter on
Retrieved evidence carries what it is and where it stands:
kind— fact vs preferencemodality— past event vs current statestatus— active vs superseded
Which is how "list every X you currently believe about me" and "list everything you ever believed" are two different queries against the same store rather than two different stores.

