Revisions
A revision is an append-only journal row: a record-scoped change with an operation, optional payload and transforms, and stable record_ref identity. Revisions are the audit log and replay source for records.
Trove is a personal content graph backed by an append-only log: modules append revisions to create and enrich records, link them with references (planned), and attach blobs.
See spec §3 and planning/revision-rename.md.
Shape (supported today)
{
"id": "01JREV...",
"time": "2026-07-10T10:00:00+12:00",
"operation": "apply",
"record_ref": "01JREC...",
"type": "trove://type/note/quick/1",
"schema_ref": "sha256-...",
"source": "shortcuts",
"payload": { "text": "hello" },
"transforms": [],
"blob_ref": null
}
| Field | Notes |
|---|---|
id |
ULID; sortable, unique |
time |
Event time from source (not host commit time) |
operation |
apply or delete (see below) |
record_ref |
Stable record identity |
type |
trove://type/... when set |
source |
External origin (topic, device, app) |
completeness |
Not on revisions — see records |
Planned fields
| Field | Notes |
|---|---|
producer |
Host-stamped module identity (e.g. module.http-ingest); modules must not set |
references |
List of { ref, rel? } edges — see references planning |
recorded_at |
Host commit time for deterministic replay |
caused_by |
Optional trove://revision/... derivation pointer |
Operations
Supported
| Operation | Purpose |
|---|---|
apply |
Create or amend record body (merge payload, apply transforms) |
delete |
Tombstone; body retained on record head |
Planned
| Operation | Purpose |
|---|---|
link |
Add reference edges without merging body |
unlink |
Remove reference edges without merging body |
apply + references |
Replace or clear the record’s reference list while merging body |
Full semantics: planning/references.md.
Immutability
Revisions are never updated. Record changes are new revisions materialized into a new
version on record_heads. Wipe projections and replay revisions to rebuild.
Router
Processor modules declare consumes type URI patterns; the router dispatches matching
revisions (not records). Modules guard operation in Process / Handle when
they should ignore delete or (later) link / unlink.
Implementation
| Area | Status |
|---|---|
apply, delete |
Supported — journal, planning/journal.md |
link, unlink, references |
Planned — planning/references.md |
producer, recorded_at, sequence |
Planned — open-items |