hub-core/hub_core/runtime/tables.py
tegwick 8ab1d0c09a
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / pytest-smoke (push) Failing after 2s
feat: add durable Core Hub absorption runtime
2026-08-21 16:16:42 +02:00

169 lines
7.3 KiB
Python

from __future__ import annotations
import sqlalchemy as sa
runtime_metadata = sa.MetaData()
runtime_registrations = sa.Table(
"runtime_registrations",
runtime_metadata,
sa.Column("hub_slug", sa.String(120), primary_key=True),
sa.Column("package", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
)
runtime_messages = sa.Table(
"runtime_messages",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("schema_version", sa.String(40), nullable=False),
sa.Column("correlation_id", sa.String(36), nullable=False, index=True),
sa.Column("conversation_id", sa.String(36), nullable=True, index=True),
sa.Column("from_address", sa.String(240), nullable=False),
sa.Column("to_addresses", sa.JSON(), nullable=False),
sa.Column("body", sa.Text(), nullable=False),
sa.Column("subject_refs", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, index=True),
)
def _event_table(name: str) -> sa.Table:
return sa.Table(
name,
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("schema_version", sa.String(40), nullable=False),
sa.Column("correlation_id", sa.String(36), nullable=False, index=True),
sa.Column("event_type", sa.String(160), nullable=False, index=True),
sa.Column("occurred_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("subject_refs", sa.JSON(), nullable=False),
sa.Column("payload", sa.JSON(), nullable=False),
sa.Column("recorded_at", sa.DateTime(timezone=True), nullable=False, index=True),
)
runtime_progress_events = _event_table("runtime_progress_events")
runtime_interaction_events = _event_table("runtime_interaction_events")
runtime_audit_ledger = sa.Table(
"runtime_audit_ledger",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("action", sa.String(120), nullable=False, index=True),
sa.Column("subject_type", sa.String(80), nullable=False),
sa.Column("subject_id", sa.String(240), nullable=False, index=True),
sa.Column("correlation_id", sa.String(36), nullable=True, index=True),
sa.Column("payload_hash", sa.String(64), nullable=False),
sa.Column("detail", sa.JSON(), nullable=False),
sa.Column("recorded_at", sa.DateTime(timezone=True), nullable=False, index=True),
)
compat_hubs = sa.Table(
"compat_hubs",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("slug", sa.String(120), nullable=False, unique=True, index=True),
sa.Column("name", sa.String(240), nullable=False),
sa.Column("domain", sa.String(240), nullable=True),
sa.Column("hub_kind", sa.String(80), nullable=True),
sa.Column("hub_family", sa.String(80), nullable=True),
sa.Column("vsm_function", sa.String(80), nullable=True),
sa.Column("vsm_system", sa.String(80), nullable=True),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("description", sa.Text(), nullable=True),
sa.Column("body", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
)
compat_manifests = sa.Table(
"compat_manifests",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("hub_id", sa.String(36), sa.ForeignKey("compat_hubs.id"), nullable=True, index=True),
sa.Column("hub_slug", sa.String(120), nullable=True, index=True),
sa.Column("manifest_version", sa.String(40), nullable=False),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("body", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
)
compat_api_consumers = sa.Table(
"compat_api_consumers",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("slug", sa.String(120), nullable=True, unique=True, index=True),
sa.Column("name", sa.String(240), nullable=False, index=True),
sa.Column("description", sa.Text(), nullable=True),
sa.Column("hub_capability_manifest_id", sa.String(36), nullable=True, index=True),
sa.Column("rate_limit_per_minute", sa.Integer(), nullable=True),
sa.Column("quota_per_day", sa.Integer(), nullable=True),
sa.Column("key_prefix", sa.String(32), nullable=True),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("body", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
compat_api_keys = sa.Table(
"compat_api_keys",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column(
"api_consumer_id",
sa.String(36),
sa.ForeignKey("compat_api_consumers.id"),
nullable=False,
index=True,
),
sa.Column("key_prefix", sa.String(32), nullable=False, index=True),
sa.Column("key_hash", sa.String(64), nullable=False, unique=True),
sa.Column("scopes", sa.Text(), nullable=True),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
compat_widgets = sa.Table(
"compat_widgets",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("hub_id", sa.String(36), sa.ForeignKey("compat_hubs.id"), nullable=False, index=True),
sa.Column("name", sa.String(240), nullable=False),
sa.Column("widget_type", sa.String(120), nullable=True, index=True),
sa.Column("capability_ref", sa.String(240), nullable=True, index=True),
sa.Column("view_context", sa.String(500), nullable=True),
sa.Column("policy_scope", sa.String(120), nullable=True),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("body", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
compat_migration_runs = sa.Table(
"compat_migration_runs",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("source", sa.String(120), nullable=False, index=True),
sa.Column("schema_version", sa.String(80), nullable=False),
sa.Column("bundle_sha256", sa.String(64), nullable=False, index=True),
sa.Column("dry_run", sa.Boolean(), nullable=False),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("counts", sa.JSON(), nullable=False),
sa.Column("diagnostics", sa.JSON(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
runtime_import_runs = sa.Table(
"runtime_import_runs",
runtime_metadata,
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("source", sa.String(120), nullable=False, index=True),
sa.Column("schema_version", sa.String(80), nullable=False),
sa.Column("bundle_sha256", sa.String(64), nullable=False, unique=True, index=True),
sa.Column("high_water_mark", sa.String(200), nullable=True),
sa.Column("counts", sa.JSON(), nullable=False),
sa.Column("content_hashes", sa.JSON(), nullable=False),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)