A tour of the storage layer — every kind, every attribute, every assertion the chronicle remembers. Read-only, same paths the live app uses.
The model is a single typeless facts table: (entity, attribute, value, asserted_at, asserted_by). Every kind is just a value in the kind column on some entity; every attribute is described by the catalog below. New attributes are one line in catalog.go, never a SQL migration.
participant
292 entities
| attribute | type | edit | flags | bounds |
|---|---|---|---|---|
auth |
text |
author |
content | |
endpoint |
text |
author |
content | |
first_name |
text |
author |
content |
maxlen 40 |
is_operator |
int |
author |
||
kind |
text |
author |
||
last_name |
text |
author |
content |
maxlen 40 |
lifecycle |
text |
system |
enum: pending, verified, revoked |
|
p256dh |
text |
author |
content | |
pid |
text |
author |
||
profile_pixels |
blob |
author |
content | |
status_message |
text |
author |
content |
maxlen 80 |
tombstoned |
bool |
system |
||
verified_lat |
real |
system |
||
verified_lng |
real |
system |
State machine on lifecycle — initial pending.
pending → verified
revoked → terminal
verified → revoked
publication
0 entities
| attribute | type | edit | flags | bounds |
|---|---|---|---|---|
body |
text |
author |
content |
maxlen 16000 |
kind |
text |
system |
||
slug |
text |
system |
req | |
title |
text |
author |
req content |
maxlen 77 |
tombstoned |
bool |
system |
range
1 entities
| attribute | type | edit | flags | bounds |
|---|---|---|---|---|
after |
int |
author |
||
before |
int |
author |
||
category |
text |
author |
enum: need, offer, lost-and-found, alertop-only: alert |
|
description |
text |
author |
content |
maxlen 1000 |
ends_at |
time |
author |
||
kind |
text |
system |
||
lat |
real |
author |
||
layer |
text |
author |
enum: background, ground, foreground |
|
lifecycle |
text |
system |
enum: open, claimed, done |
|
lng |
real |
author |
||
pixels |
blob |
system |
content | |
pixels_h |
int |
author |
min 1 max 512 | |
pixels_w |
int |
author |
min 1 max 512 | |
starts_at |
time |
author |
req | |
title |
text |
author |
content |
maxlen 77 |
tombstoned |
bool |
system |
State machine on lifecycle — initial open.
claimed → open, done
done → terminal
open → claimed
tag_membership
0 entities
| attribute | type | edit | flags | bounds |
|---|---|---|---|---|
kind |
text |
system |
||
range |
text |
system |
||
tag |
text |
system |
||
tombstoned |
bool |
system |
Every read on this page goes through one of these:
Snapshot.entitiesOfKind(kind) — pivots current_facts into one EntityRow per entity, every attribute as a column. Powers the kind list pages.Snapshot.factWithStamp(entity, attr) — latest value plus when + who. Powers the HEAD column on entity detail pages.Snapshot.EntityHistory(entity) — every assertion ever made on one entity. Powers the log on entity detail pages.Snapshot.QueryFacts(q) — raw facts table with filters. Powers the facts page.