PostgreSQL data model
Rendering of docs/architecture/data-model-mapping.yaml (single source), proven by services/control-plane/tests/test_data_model_mapping.py on a migrated database. Every Control Plane table lives in schema eai; the Platform Manager tables live in schema nm of its own database. Keycloak, Opik, Temporal and OpenFGA keep their schemas and migrations: the platform never writes their internal tables. Large traces stay in Opik and Jaeger, logs in OpenSearch, files in the client object storage.
Reference tables (A6.1)
| Domain | Reference | Kind | Location | Scope |
|---|---|---|---|---|
| core | tenants | table | eai.tenants | global |
| core | organizations | table | eai.organizations | tenant |
| core | business_units | table | eai.business_units | tenant |
| core | environments | table | eai.environments | tenant |
| core | projects | table | eai.projects | tenant |
| core | settings | column | eai.tenants.settings | |
| iam | users | table | eai.users | tenant |
| iam | groups | table | eai.group_mappings | tenant |
| iam | memberships | table | eai.memberships | tenant |
| iam | service_identities | table | eai.service_identities | tenant |
| iam | delegations | table | eai.delegations | tenant |
| iam | access_grants | table | eai.authz_tuples | tenant |
| platform_inventory | clusters | Platform Manager (nm) | nm.clusters | |
| platform_inventory | nodes | Platform Manager (nm) | nm.hosts | |
| platform_inventory | components | Platform Manager (nm) | nm.host_components | |
| platform_inventory | component_versions | Platform Manager (nm) | nm.service_upgrades | |
| platform_inventory | service_instances | Platform Manager (nm) | nm.cluster_services | |
| platform_inventory | dependencies | outside PostgreSQL | navin-manager/catalog | |
| platform_operations | configurations | Platform Manager (nm) | nm.config_groups | |
| platform_operations | configuration_versions | Platform Manager (nm) | nm.config_versions | |
| platform_operations | operations | Platform Manager (nm) | nm.operations | |
| platform_operations | operation_steps | Platform Manager (nm) | nm.tasks | |
| platform_operations | health_checks | Platform Manager (nm) | nm.service_checks | |
| platform_operations | maintenance_windows | Platform Manager (nm) | nm.maintenance_windows | |
| ai | providers | table | eai.llm_providers | tenant |
| ai | models | table | eai.llm_models | tenant |
| ai | model_routes | table | eai.llm_routes | tenant |
| ai | model_categories | table | eai.llm_model_categories | tenant |
| ai | model_deployments | table | eai.vllm_deployments | tenant |
| ai | model_prices | table | eai.price_cards | tenant |
| ai | model_approvals | table | eai.llm_model_rollouts | tenant |
| agents | agents | table | eai.agents | tenant |
| agents | agent_versions | table | eai.agent_versions | tenant |
| agents | agent_deployments | column | eai.agents.current_version | |
| agents | agent_runs | table | eai.runs | tenant |
| agents | subagent_runs | column | eai.runs.parent_run_id | |
| agents | checkpoints | table | eai.checkpoints | tenant |
| agent_sessions | sessions | table | eai.sessions | tenant |
| agent_sessions | action_requests | table | eai.approvals | tenant |
| agent_sessions | tool_invocations | table | eai.tool_invocations | tenant |
| agent_sessions | memory_scopes | column | eai.memory_items.scope_type | |
| agent_sessions | memory_entries | table | eai.memory_items | tenant |
| dev | projects | table | eai.projects | tenant |
| dev | sdk_versions | outside PostgreSQL | sdks | |
| dev | project_templates | outside PostgreSQL | packs/templates | |
| dev | developer_environments | table | eai.environments | tenant |
| dev | test_runs | table | eai.eval_runs | tenant |
| registry_packs | packs | table | eai.marketplace_packages | tenant |
| registry_packs | pack_versions | table | eai.marketplace_versions | tenant |
| registry_packs | pack_installations | table | eai.marketplace_installations | tenant |
| registry_packs | pack_assets | column | eai.marketplace_versions.files | |
| registry_packs | pack_dependencies | column | eai.marketplace_versions.manifest | |
| registry_assets | skills | table | eai.skills | tenant |
| registry_assets | skill_versions | column | eai.skills.version | |
| registry_assets | prompts | table | eai.prompts | tenant |
| registry_assets | prompt_versions | table | eai.prompt_versions | tenant |
| registry_assets | plugins | table | eai.plugins | tenant |
| registry_assets | plugin_versions | column | eai.plugins.version | |
| integration | mcp_servers | table | eai.mcp_servers | tenant |
| integration | mcp_tools | table | eai.mcp_tool_versions | tenant |
| integration | connectors | table | eai.connectors | tenant |
| integration | connector_instances | table | eai.connector_sync_runs | tenant |
| integration | connector_credentials | table | eai.connector_credentials | tenant |
| data | data_sources | column | eai.kb_documents.source_connector | |
| data | datasets | table | eai.datasets | tenant |
| data | documents | table | eai.kb_documents | tenant |
| data | document_acl | column | eai.kb_documents.readers | |
| data | classifications | table | eai.dlp_rules | tenant |
| data | lineage_refs | table | eai.lineage_nodes | tenant |
| rag | collections | table | eai.knowledge_bases | tenant |
| rag | ingestion_jobs | table | eai.kb_reindex_jobs | tenant |
| rag | document_chunks | table | eai.kb_chunks | tenant |
| rag | retrieval_policies | column | eai.knowledge_bases.acl | |
| rag | index_versions | column | eai.knowledge_bases.vector_generation | |
| policy | policy_sets | table | eai.policy_bundles | tenant |
| policy | policy_versions | table | eai.policy_revisions | tenant |
| policy | policy_assignments | table | eai.policies | tenant |
| policy | policy_tests | outside PostgreSQL | deploy/policies/opa | |
| policy | exceptions | table | eai.risk_exceptions | tenant |
| security_signals | security_signals | column | eai.soc_detections.evidence | |
| security_signals | detections | table | eai.soc_detections | tenant |
| security_signals | incidents | table | eai.incidents | tenant |
| security_signals | response_actions | table | eai.incident_actions | tenant |
| security_signals | quarantines | table | eai.containment_orders | tenant |
| security_signals | kill_switches | table | eai.kill_switches | tenant |
| security_approvals | approvals | table | eai.approvals | tenant |
| security_approvals | approval_steps | table | eai.approval_decisions | tenant |
| security_approvals | risk_assessments | table | eai.risk_assessments | tenant |
| security_approvals | dlp_events | column | eai.tool_invocations.dlp_findings | |
| audit | events | table | eai.audit_events | tenant |
| audit | decision_records | table | eai.policy_decisions | tenant |
| audit | evidence_batches | table | eai.audit_seals | tenant |
| audit | evidence_objects | table | eai.audit_payloads | tenant |
| audit | retention_policies | table | eai.retention_policies | tenant |
| audit | exports | table | eai.audit_exports | tenant |
| observability | trace_refs | column | eai.runs.trace | |
| observability | alert_rules | Platform Manager (nm) | nm.alert_definitions | |
| observability | alert_instances | Platform Manager (nm) | nm.alerts | |
| observability | service_slos | table | eai.service_slos | global |
| observability | telemetry_configs | outside PostgreSQL | deploy/observability | |
| finops | budgets | table | eai.quotas | tenant |
| finops | quotas | table | eai.quota_profiles | tenant |
| finops | usage_records | table | eai.usage_events | tenant |
| finops | cost_allocations | table | eai.allocation_policies | global |
| finops | price_catalogs | table | eai.price_cards | tenant |
| storage | profiles | table | eai.storage_profiles | tenant |
| storage | buckets | column | eai.storage_profiles.bucket | |
| storage | storage_policies | column | eai.storage_profiles.purposes | |
| storage | object_refs | table | eai.media | tenant |
| storage | backup_records | Platform Manager (nm) | nm.backups | |
| commercial | licenses | table | eai.licenses | global |
| commercial | license_activations | table | eai.license_installation | global |
| commercial | entitlements | column | eai.licenses.payload | |
| commercial | support_contracts | table | eai.support_contracts | global |
| commercial | license_events | table | eai.license_events | global |
| system | outbox_events | table | eai.event_outbox | tenant |
| system | inbox_events | table | eai.inbox_events | tenant |
| system | scheduled_jobs | table | eai.schedules | tenant |
| system | migrations | table | eai.schema_migrations | global |
| system | feature_flags | column | eai.tenants.settings |
Relations (A6.2)
| Relation | From | Column | To | Kind |
|---|---|---|---|---|
| tenant | eai.organizations | tenant_id | eai.tenants | foreign key |
| tenant | eai.business_units | organization_id | eai.organizations | foreign key |
| tenant | eai.business_units | parent_id | eai.business_units | foreign key |
| tenant | eai.projects | organization_id | eai.organizations | foreign key |
| tenant | eai.projects | business_unit_id | eai.business_units | foreign key |
| tenant | eai.projects | tenant_id | eai.tenants | foreign key |
| tenant | eai.environments | tenant_id | eai.tenants | foreign key |
| tenant | eai.environments | project_id | eai.projects | foreign key |
| cluster | nm.hosts | cluster_id | nm.clusters | nm foreign key |
| cluster | nm.cluster_services | cluster_id | nm.clusters | nm foreign key |
| component | nm.host_components | host_id | nm.hosts | nm foreign key |
| component | nm.config_versions | cluster_id | nm.clusters | nm foreign key |
| agent | eai.agent_versions | agent_id | eai.agents | foreign key |
| agent | eai.runs | agent_id | eai.agents | foreign key |
| agent | eai.agents | current_version | eai.agent_versions | reference column |
| agent_run | eai.run_steps | run_id | eai.runs | foreign key |
| agent_run | eai.runs | parent_run_id | eai.runs | foreign key |
| agent_run | eai.tool_invocations | run_id | eai.runs | reference column |
| agent_run | eai.telemetry_spans | run_id | eai.runs | reference column |
| developer_project | eai.environments | project_id | eai.projects | foreign key |
| developer_project | eai.runs | project_id | eai.projects | reference column |
| developer_project | eai.eval_runs | target_ref | eai.marketplace_versions | reference column |
| pack_version | eai.marketplace_versions | package_id | eai.marketplace_packages | foreign key |
| pack_version | eai.marketplace_versions | manifest | eai.skills | reference column |
| pack_version | eai.marketplace_versions | skill_signatures | eai.skills | reference column |
| user | eai.memberships | user_id | eai.users | foreign key |
| user | eai.delegations | delegator | eai.users | reference column |
| user | eai.approvals | requester | eai.users | reference column |
| user | eai.audit_events | actor | eai.users | reference column |
| policy_version | eai.policy_revisions | policy_id | eai.policies | reference column |
| policy_version | eai.policy_decisions | policy_version | eai.policy_revisions | reference column |
| incident | eai.soc_detections | incident_id | eai.incidents | foreign key |
| incident | eai.incident_actions | incident_id | eai.incidents | foreign key |
| incident | eai.incident_evidence | incident_id | eai.incidents | foreign key |
| license | eai.licenses | installation_id | eai.license_installation | reference column |
| license | eai.license_events | license_id | eai.licenses | reference column |
| license | eai.support_contracts | license_id | eai.licenses | foreign key |
Reference schemas (B7.1)
| Reference schema | Domains |
|---|---|
| core | core |
| platform | platform_inventory, platform_operations |
| iam | iam |
| governance | security_approvals, policy |
| ai | ai |
| models | ai |
| developer | dev, agents, agent_sessions |
| marketplace | registry_packs, registry_assets, integration |
| data | data, rag |
| privacy | data |
| observability | observability |
| audit | audit |
| security | security_signals |
| finops | finops |
| licensing | commercial |
| operations | system, storage |
Common fields (B7.2)
| Field | Tables carrying it |
|---|---|
| id | eai.agents, eai.runs, eai.incidents, eai.storage_profiles |
| tenant_id | eai.agents, eai.runs, eai.incidents, eai.storage_profiles |
| environment_id | eai.usage_events, eai.application_deployments |
| created_at | eai.agents, eai.runs, eai.incidents, eai.storage_profiles |
| updated_at | eai.agents, eai.runs, eai.incidents, eai.storage_profiles |
| created_by | eai.agents, eai.runs, eai.incidents, eai.storage_profiles, eai.organizations, eai.business_units, eai.projects, eai.environments, eai.applications |
| updated_by | eai.llm_model_rollouts, eai.organizations, eai.business_units, eai.projects, eai.environments, eai.agents, eai.applications, eai.incidents |
| version | eai.storage_profiles, eai.memory_items, eai.llm_models, eai.organizations, eai.business_units, eai.projects, eai.environments, eai.agents, eai.applications, eai.incidents |
| status | eai.agents, eai.incidents, eai.storage_profiles, eai.sessions |
| metadata | eai.sessions, eai.kb_documents, eai.connector_credentials, eai.organizations, eai.business_units, eai.projects, eai.environments, eai.agents, eai.applications, eai.incidents |
| classification | eai.memory_items, eai.kb_documents, eai.audit_events, eai.media, eai.knowledge_bases |
| correlation_id | eai.audit_events, eai.usage_events, eai.telemetry_spans, eai.organizations, eai.business_units, eai.projects, eai.environments, eai.agents, eai.applications, eai.incidents |
Global tables without tenant_id
| Table | Reason |
|---|---|
| eai.tenants | Root of isolation: one row per tenant, RLS on id. |
| eai.allocation_policies | Provider GPU costs shared by the platform. |
| eai.licenses | License of the installation, not of a tenant. |
| eai.license_installation | Installation singleton. |
| eai.license_events | Log of the installation license. |
| eai.support_contracts | Support contract of the installation license, without any price. |
| eai.schema_migrations | Migrator registry, administrator role only. |
| eai.service_slos | SLO objectives of the platform services: read by all, written by the platform context only (forced RLS, ADR-0157). |