Tracevault
OverviewInstallWritingQueryData model

Shape

Every event lands in one JSONB-first row. There are no separate old_values / new_values columns — the library stays event-oriented. See the shipped SQL under node_modules/tracevault/sql/ or use generateInitSql for an equivalent combined DDL.

ColumnTypeNotes
idUUIDGenerated per event.
eventVARCHAREvent name (required on emit).
actor_idVARCHARNullable.
actor_typeVARCHARNullable.
target_idVARCHARNullable.
target_typeVARCHARNullable.
dataJSONBFree-form payload.
metaJSONBFree-form metadata.
modeVARCHARsync | async.
occurred_atTIMESTAMPTZProvided or generated at emit-time.
created_atTIMESTAMPTZDB default now().
correlation_idVARCHARNullable.
request_idVARCHARNullable.
environmentVARCHARNullable.
outcomeVARCHAR(64)Generated (002+). NULLIF(BTRIM(data->>'outcome'),''). Omitted on insert.
error_codeVARCHAR(255)Generated. NULLIF(BTRIM(data->'error'->>'code'),''). Omitted on insert.
severityVARCHAR(32)Generated (003+). NULLIF(BTRIM(data->>'severity'),''). Omitted on insert.

Indexes (defaults)

Reading

Generated columns exist to make narrow, indexed reads pleasant via audit.query. For analytics, JSONB path filters, or joins, use the SQL tool you already rely on — Tracevault does not block raw access.

Canonical reference: README.