All screens
42 days

Schema Browser

Every table the Supabase migrations 0001–0034 create, grouped by layer with its columns and row-level-security note. The Supabase CLI owns the schema (R5); Prisma is types-only. The DB is the enforcement boundary — event-scoped tables read via is_event_member and write via has_event_authority, the INSERT-only ledgers add a prevent_mutation trigger, and the infra tables default-deny (reached only by the SECURITY DEFINER write RPCs).

46

Tables

8

Core

13

Pipeline

2

Governance

9

Operational

14

MVP02 / Phase 3

Core

Set A foundation — events, nodes, roles, and the state-machine config.

profiles0001
Self-managed (per user)

One row per auth user — display name, language, theme.

ColumnTypeNote
iduuidpk → auth.users
display_nametextdefault ''
langtextcheck en/he/hi
themetextcheck system/light/dark
created_attimestamptz

RLS: a user selects/inserts/updates only their own row (id = auth.uid()).

events0001
Members read · authority write

The top-level event aggregate; operational_state is driven only by fn_transition_event_state.

ColumnTypeNote
iduuidpk
codetextunique
nametext
operational_stateoperational_stateenum, default DRAFT
version_numberintegeroptimistic lock
created_byuuidfk → auth.users
cluster_iduuidfk → event_clusters (added 0018)

RLS: members select; creator inserts (created_by = auth.uid()); PRODUCER/ADMIN update.

event_nodes0001
Members read · authority write

A node within an event; node_state advances via fn_transition_node_state (system-only DEGRADED/OFFLINE).

ColumnTypeNote
iduuidpk
event_iduuidfk → events, cascade
nametext
node_statenode_stateenum, default DRAFT
readiness_scorenumeric(5,2)
is_mandatoryboolean
last_heartbeattimestamptz
version_numberintegeroptimistic lock

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

event_roles0001
Members read · authority write

Role slots on an event/node — the ROLE_UNFILLED gate source for STAFFING → VENDOR_ALIGNMENT.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
app_roleapp_roleenum, default MEMBER
role_categoryrole_categoryenum, default GENERAL
is_requiredboolean
assignee_iduuidfk → auth.users
fulfillment_statusfulfillment_statusenum, default EMPTY

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

invitations0001
Members read · authority write

Single-use invite tokens binding an email to a role slot, expiring after 72h.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
role_iduuidfk → event_roles
tokenuuidunique, single-use
emailtext
expires_attimestamptzdefault now()+72h
accepted_attimestamptz

RLS: members select; PRODUCER/ADMIN/NODE_LEAD write.

state_transition_log0001
Append-only (immutable)

Append-only audit of every event/node state transition the RPCs commit.

ColumnTypeNote
idbigintidentity pk
event_iduuidfk → events
scopetextcheck event/node
scope_iduuid
from_statetext
to_statetext
triggered_byuuid

RLS: members select via is_event_member(event_id). Full UPDATE/DELETE lock-down via Set C.

state_transitions0001
Config / lookup

Config table making legal event transitions explicit; auto_only edges are system-driven (LIVE → NEEDS_WORK).

ColumnTypeNote
from_stateoperational_statepk part
to_stateoperational_statepk part
auto_onlybooleansystem-only edge

Lookup table seeded by the migration; read by fn_transition_event_state.

node_state_transitions0003
Config / lookup

Legal node-state edges; health edges (DEGRADED/OFFLINE) are auto_only — driven by heartbeats, not manual RPC.

ColumnTypeNote
from_statenode_statepk part
to_statenode_statepk part
auto_onlybooleansystem-only edge

Lookup table seeded by the migration; read by fn_transition_node_state.

Pipeline

Set B substrate that feeds the gate evaluator and readiness scoring.

node_resources0002
Members read · authority write

Required vs available quantities per resource — the RESOURCE_CAPACITY gate source.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
resource_typetext
required_qtyinteger
available_qtyinteger

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

role_schedules0002
Members read · authority write

Time windows per role/node — the SCHEDULE_CONFLICT gate source (overlapping assignee bookings).

ColumnTypeNote
iduuidpk
event_iduuidfk → events
role_iduuidfk → event_roles
node_iduuidfk → event_nodes
start_attimestamptz
end_attimestamptz

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

nuggets0002
Members read · authority write

Run-of-show units — hierarchical, sequenced, with assigned nodes / required roles / mood tags.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
titletext
estimated_durationinteger
assigned_nodesuuid[]
required_rolestext[]
parent_nugget_iduuidfk → nuggets (self)
sequence_orderinteger

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

dependencies0002
Members read · authority write

Polymorphic cross-object edge graph; is_on_critical_path is recomputed by fn_recompute_critical_path.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
source_type / source_idtext / uuid
target_type / target_idtext / uuid
dependency_typedependency_typeenum
is_fulfilledboolean
is_on_critical_pathboolean

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

channels0002
Members read · authority write

Comms channels per event/node; mode (MULTI_NODE/PER_NODE) added by 0014 for vendor governance.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
typetextdefault GENERAL
is_vendorboolean

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

messages0002
Members insert own rows

Channel messages; members may post their own, authority has full write.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
channel_iduuidfk → channels
author_iduuidfk → auth.users
bodytext

RLS: members select; members insert with author_id = auth.uid(); authority full-write.

tasks0002
Members read · authority write

Work items; dependency_id (0017) links a task to the edge it satisfies and cascades readiness on fulfillment.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
assignee_iduuidfk → auth.users
statustextdefault open
is_fulfilledboolean
dependency_iduuidfk → dependencies (added 0017)

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

instruction_versions0002
Members read · authority write

Content-addressed instruction history; unique (channel_id, content_hash) makes duplicate content a hard invariant.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
channel_iduuidfk → channels
content_hashtextmd5(content); unique w/ channel
is_canonicalboolean
superseded_byuuidfk → instruction_versions

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

acknowledgments0002
Members insert own rows

Polymorphic acks at a given ack_level; members may insert their own.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
user_iduuidfk → auth.users
object_type / object_idtext / uuid
acknowledgment_levelack_levelenum

RLS: members select; members insert with user_id = auth.uid(); authority full-write.

alerts0002
Members read · authority write

The source of truth for an alert; raised idempotently by fn_raise_alert on (event, type, source).

ColumnTypeNote
iduuidpk
event_iduuidfk → events
severityseverityenum, default WARNING
blocker_codetextidempotency type
statustextdefault OPEN
source_object_type / _idtext / uuid

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

presence_events0002
Members read · authority write

Per-user presence status changes within an event/node.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
user_iduuidfk → auth.users
statustext
changed_attimestamptz

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

activity_events0002
Members read · authority write

The Health Timeline feed — readiness_before/after deltas plus a jsonb payload per occurrence.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
typetext
readiness_beforenumeric(5,2)
readiness_afternumeric(5,2)
payloadjsonb

RLS: members read via is_event_member(event_id); writes require has_event_authority (PRODUCER/ADMIN/NODE_LEAD).

readiness_checks0005
Append-only (immutable)

Append-only per-node readiness snapshots — weighted score, gate ceiling, category breakdown, blocker count.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
node_iduuidfk → event_nodes
weighted_scorenumeric(5,2)
readiness_ceilingnumeric(5,2)
category_scoresjsonb
blocker_countinteger

RLS: members select via is_event_member(event_id); written by fn_snapshot_readiness.

Governance

Vendor / instruction governance and the immutable override flow.

override_log0006
Append-only (immutable)

INSERT-only record of governance overrides; reason_text ≥ 20 chars is a DB-level check.

ColumnTypeNote
idbigintidentity pk
event_iduuid
user_iduuid
user_role_at_timetext
action_type / entity_type / entity_idtext / text / uuid
reason_texttextcheck length ≥ 20

RLS: members select via is_event_member(event_id); prevent_mutation blocks UPDATE/DELETE. Written by fn_apply_override.

sub_lead_recommendations0014
Members insert own rows

Drafted sub-lead recommendations on a vendor channel; forwarded flips once when a Lead publishes the canonical instruction.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
channel_iduuidfk → channels
author_iduuidfk → auth.users
forwardedboolean
instruction_iduuidfk → instruction_versions

RLS: members select; members insert with author_id = auth.uid(); authority full-write.

Operational

Immutable ledgers, escalation, notifications, presence, concurrency.

audit_log0006
Append-only (immutable)

INSERT-only audit trail wired by triggers on events, event_roles, instruction_versions, alerts (0011).

ColumnTypeNote
idbigintidentity pk
event_iduuid
actoruuid
action_typetext
entity_type / entity_idtext / uuid
payloadjsonb

RLS: members select; prevent_mutation blocks UPDATE/DELETE.

event_log0006
Append-only (immutable)

INSERT-only typed change feed (0013); fn_replay_event returns an ordered slice per event.

ColumnTypeNote
idbigintidentity pk
event_iduuid
event_typetext
source_object_type / _idtext / uuid
payloadjsonb
processed_attimestamptz

RLS: members select; prevent_mutation blocks UPDATE/DELETE.

escalation_log0007
Append-only (immutable)

Append-only history of every escalation notification fired against an alert.

ColumnTypeNote
idbigintidentity pk
alert_iduuidfk → alerts
escalation_levelinteger
notified_user_iduuid
notification_channeltext
acknowledged_attimestamptz

RLS: members select (via the alert’s event); prevent_mutation blocks DELETE.

active_escalations0007
Members read · authority write

Live ladder state — one row per still-escalating alert; fn_due_escalations drives the worker.

ColumnTypeNote
alert_iduuidpk → alerts
current_levelinteger
next_escalation_attimestamptz
escalation_historyjsonb

RLS: members select (via the alert’s event); written by the escalation RPCs.

notification_log0008
Append-only (immutable)

At-most-once delivery record keyed by idempotency_key; fn_enqueue_notification dedupes on conflict.

ColumnTypeNote
iduuidpk
user_iduuid
event_iduuidfk → events
alert_iduuidfk → alerts
channeltext
idempotency_keytextunique

RLS: members select via is_event_member(event_id); prevent_mutation blocks UPDATE/DELETE.

push_subscriptions0008
Self-managed (per user)

Web Push subscriptions registered per user; unique (user_id, endpoint).

ColumnTypeNote
iduuidpk
user_iduuid
endpointtextunique w/ user
p256dhtext
authtext

RLS: a user selects/inserts/deletes only their own (user_id = auth.uid()).

heartbeats0009
Members read · authority write

Current liveness ping per source (node/user), upserted by fn_heartbeat; fn_stale_presence detects silence.

ColumnTypeNote
iduuidpk
source_iduuid
source_typetextcheck node/user
event_iduuidfk → events
last_pingtimestamptz

RLS: members select via is_event_member(event_id); writes via SECURITY DEFINER fn_heartbeat.

idempotency_keys0010
Infra · definer-only

Request dedupe / response replay; a key reused with a different request_hash is rejected (PT409).

ColumnTypeNote
idbigintidentity pk
keytextunique
request_hashtext
responsejsonbreplayed on retry

RLS on with no permissive policy → default-deny; reached only by definer write RPCs / service role.

live_locks0010
Infra · definer-only

Coarse advisory-style locks; unique (resource_type, resource_id) is the mutual-exclusion mechanism (PT423).

ColumnTypeNote
idbigintidentity pk
resource_type / resource_idtext / uuidunique together
locked_byuuid
lock_reasontext

RLS on with no permissive policy → default-deny; claimed/released via fn_acquire_lock / fn_release_lock.

MVP02 / Phase 3

Clusters, templates, metrics, webhooks, AI stubs, and archive tables.

event_clusters0018
Members read · authority write

Groups events into a cluster; is_cluster_member / has_cluster_authority reuse the per-event predicates.

ColumnTypeNote
iduuidpk
nametext
created_byuuidfk → auth.users

RLS: cluster members select; cross-event reads gated by is_cluster_member. events.cluster_id added here.

notification_templates0019
Append-only (immutable)

Append-only localized templates; a new revision is a fresh (key, locale) row. fn_render_template does {{var}} substitution.

ColumnTypeNote
iduuidpk
keytextunique w/ locale
localetextcheck en/he/hi
subjecttext
bodytext

Append-only (prevent_mutation). unique (key, locale); locale check en/he/hi.

kpi_snapshots0022
Append-only (immutable)

Append-only KPI time series; event-scoped or global (event_id null).

ColumnTypeNote
iduuidpk
event_iduuidfk → events (nullable = global)
scopetextdefault event
keytext
valuenumeric
captured_attimestamptz

RLS: event-scoped rows visible to members; global rows visible to any authenticated caller. prevent_mutation.

rate_limit_hits0024
Infra · definer-only

Fixed-window counter buckets per key; fn_rate_limit does an atomic check-and-increment.

ColumnTypeNote
keytextpk part
window_starttimestamptzpk part
countinteger

RLS on with no permissive policy → default-deny; touched only by definer fn_rate_limit / service role.

outbound_webhooks0029
Members read · authority write

Per-event webhook registrations — target url, signing secret, and the event types to deliver.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
urltext
secrettextHMAC signing key
eventstext[]
is_activeboolean

RLS: event-scoped; members read, authority write.

outbound_webhook_deliveries0029
Append-only (immutable)

Append-only delivery log; the worker advances state by inserting fresh rows. unique (webhook_id, idempotency_key).

ColumnTypeNote
iduuidpk
webhook_iduuidfk → outbound_webhooks
event_iduuidfk → events
event_typetext
statustextdefault PENDING
idempotency_keytextunique w/ webhook

Append-only (prevent_mutation); event-scoped read via is_event_member.

event_templates0032
Self-managed (per user)

Phase-3 reusable event templates with provisional art_form/style/mood taxonomy; published_at non-null ⇒ public.

ColumnTypeNote
iduuidpk
nametext
author_iduuidfk → auth.users
art_form / style / moodtextprovisional taxonomy
specjsonbprovisional shape
published_attimestamptznon-null ⇒ public

RLS: authors manage their own; published templates are publicly readable. Taxonomy columns are provisional (Phase 3).

template_uses0032
Append-only (immutable)

Append-only usage log — who instantiated which template, when.

ColumnTypeNote
iduuidpk
template_iduuidfk → event_templates
used_byuuidfk → auth.users
used_attimestamptz

Append-only (prevent_mutation).

ai_suggestions0033
Append-only (immutable)

Phase-3 AI suggestions captured against an event, with a 0..1 confidence check. Append-only.

ColumnTypeNote
iduuidpk
event_iduuidfk → events
kindtext
payloadjsonb
confidencenumeric(5,4)check 0..1

Append-only (prevent_mutation); event-scoped. Phase-3 stub — capture only.

nugget_taxonomy0033
Append-only (immutable)

Phase-3 global controlled vocabulary for nugget tagging (mood / camera / sound / emotion). Append-only.

ColumnTypeNote
iduuidpk
tagtextunique
mood / camera / sound / emotiontext

Append-only (prevent_mutation); global (not event-scoped). Phase-3 stub.

events_archive0034
Append-only (immutable)

Cold copy of a completed event written by fn_archive_completed_event; mirrors live columns + archival bookkeeping, no FKs back.

ColumnTypeNote
iduuidpk (live id)
codetext
operational_statetextflattened from enum
archived_attimestamptz
archived_byuuid

Archive snapshot; relationships preserved by id value only (no FKs to live tables).

event_nodes_archive0034
Append-only (immutable)

Cold copy of a completed event’s nodes (sibling of events_archive).

ColumnTypeNote
iduuidpk (live id)
event_iduuidby value
node_statetextflattened from enum
readiness_scorenumeric(5,2)
archived_attimestamptz

Archive snapshot; no FKs to live tables.

event_roles_archive0034
Append-only (immutable)

Cold copy of a completed event’s role slots.

ColumnTypeNote
iduuidpk (live id)
event_iduuidby value
app_role / role_categorytextflattened from enums
fulfillment_statustextflattened from enum
archived_attimestamptz

Archive snapshot; no FKs to live tables.

invitations_archive0034
Append-only (immutable)

Cold copy of a completed event’s invitations.

ColumnTypeNote
iduuidpk (live id)
event_iduuidby value
role_iduuidby value
tokenuuid
archived_attimestamptz

Archive snapshot; no FKs to live tables.

Authored from the migration DDL itself (illustrative project-tracking state), not a query against live data. Columns are the notable ones per table, not always exhaustive for wide tables; types are abbreviated for display.