Documentation Index
Fetch the complete documentation index at: https://astron-bb4261fd.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Temporal Versioning
Z3rno tracks the complete mutation history of every memory. When a memory is updated, the old version is preserved and a new version is created. You can query what an agent knew at any point in time.SCD Type 2 Pattern
Z3rno uses the Slowly Changing Dimension Type 2 (SCD Type 2) pattern, a well-established data warehousing technique adapted for agent memory. Every memory row has two temporal columns:| Column | Type | Description |
|---|---|---|
valid_from | timestamptz | When this version became active |
valid_to | timestamptz | When this version was superseded (NULL if current) |
valid_to = NULL. When a memory is updated, a database trigger:
- Sets
valid_to = NOW()on the current version - Inserts a new row with
valid_from = NOW()andvalid_to = NULL - Copies the
memory_idso all versions share the same logical identity
Point-in-Time Queries
You can query what an agent knew at any specific moment using theas_of parameter:
Point-in-time queries work across all memory types and all query methods (keyword, vector similarity, graph traversal). The temporal filter is applied before any other filtering or ranking.
Full Mutation History
You can retrieve the complete version history of any memory:- Debugging — understanding why an agent behaved a certain way at a specific time
- Compliance — demonstrating what data was active during an incident
- Rollback — reverting to a previous version if an update was incorrect
How Updates Create New Versions
Updates are handled by a PostgreSQL trigger that fires on anyUPDATE to the memories table. The trigger is atomic — the old version closure and new version insertion happen in a single transaction.
memory_id stays the same across all versions, so you can always refer to the logical memory by its ID and get the current version, or pass as_of to get a historical version.
Version metadata
Each version also tracks:| Field | Description |
|---|---|
version | Auto-incrementing version number (1, 2, 3, …) |
updated_by | The API key or system process that made the change |
update_reason | Optional free-text reason for the update |
importance | Importance score at the time of this version |
Indexing and Performance
Temporal queries are fast because Z3rno creates a GiST index on the(valid_from, valid_to) range using PostgreSQL’s built-in range types:
[valid_from, valid_to) range, even across millions of memory versions.