Skip to Content
ReferenceData model

Data model

288 tables today, 514 numbered migrations behind them. Every operator-scoped table carries an operator_scope column and a row-level-isolation policy the database enforces. This page names the shape.

Entity families

FamilyEntitiesPurpose
Identity & accessOperators, workspaces, groups, org-units, delegations, sessions, WebAuthn credentials, Cradle device-keysThe identity plane every other table joins to
Departments & PearlsDepartments, Pearl configurations, memory registers, insight rows, playbook selections, prediction tracesThe reasoning substrate for each operational domain
Operational workProjects, tasks, decisions, comments, task-department bindings, activity eventsThe tracker every operator-scoped work item lands in
SignalsSignals, acknowledgements, escalations, resolutionsThe cross-domain risk plane the Orchestrator maintains
Audit chainAudit events, chain anchors, verification receiptsEvery operator-touching mutation elsewhere in the substrate lands one row here
Attachments & ingestionUploaded documents, meeting recordings, indexed content, embeddingsRow-level isolated from the moment of upload
Governance & substrateADR nodes, doctrine clusters, ratification events, drift trackers, incident postmortemsThe self-describing corpus the platform reasons about itself with

The row-level-isolation contract

Every operator-scoped table carries a not-null operator_scope column and a database-enforced policy that every SELECT, UPDATE, DELETE, and INSERT filters by. The policy resolves the caller’s identity to a list of scopes at auth time and applies the predicate under the query planner — application code cannot bypass it.

See Row-level isolation for the mechanism and the failure modes.

Discovery & introspection

The full schema is served via:

  • https://api.nebbos.ai/api/v1/openapi.json — endpoint shapes
  • Platform admin API — table & column metadata (Architect-tier only)
  • https://api.nebbos.ai/api/v1/schema/head — current migration head

New tables ship via numbered migrations; the current head is the latest number.

For an operator-scoped export of every row your identity owns, see Portability & export.