feat: add durable Core Hub absorption runtime
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / pytest-smoke (push) Failing after 2s

This commit is contained in:
tegwick 2026-08-21 16:16:42 +02:00
parent 7e1ec03f0c
commit 8ab1d0c09a
20 changed files with 2423 additions and 15 deletions

View file

@ -0,0 +1,203 @@
"""hub-core durable runtime ports
Revision ID: 0002_runtime_ports
Revises: 0001_core_schema
Create Date: 2026-08-21
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
revision: str = "0002_runtime_ports"
down_revision: Union[str, None] = "0001_core_schema"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.create_table(
"runtime_registrations",
sa.Column("hub_slug", sa.String(120), primary_key=True),
sa.Column("package", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_table(
"runtime_messages",
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),
sa.Column("conversation_id", sa.String(36), nullable=True),
sa.Column("from_address", sa.String(240), nullable=False),
sa.Column("to_addresses", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("body", sa.Text(), nullable=False),
sa.Column("subject_refs", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_runtime_messages_correlation_id", "runtime_messages", ["correlation_id"])
op.create_index("ix_runtime_messages_conversation_id", "runtime_messages", ["conversation_id"])
op.create_index("ix_runtime_messages_created_at", "runtime_messages", ["created_at"])
for name in ("runtime_progress_events", "runtime_interaction_events"):
op.create_table(
name,
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),
sa.Column("event_type", sa.String(160), nullable=False),
sa.Column("occurred_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("subject_refs", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("payload", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("recorded_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index(f"ix_{name}_correlation_id", name, ["correlation_id"])
op.create_index(f"ix_{name}_event_type", name, ["event_type"])
op.create_index(f"ix_{name}_recorded_at", name, ["recorded_at"])
op.create_table(
"runtime_audit_ledger",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("action", sa.String(120), nullable=False),
sa.Column("subject_type", sa.String(80), nullable=False),
sa.Column("subject_id", sa.String(240), nullable=False),
sa.Column("correlation_id", sa.String(36), nullable=True),
sa.Column("payload_hash", sa.String(64), nullable=False),
sa.Column("detail", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("recorded_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_runtime_audit_ledger_action", "runtime_audit_ledger", ["action"])
op.create_index("ix_runtime_audit_ledger_subject_id", "runtime_audit_ledger", ["subject_id"])
op.create_index(
"ix_runtime_audit_ledger_correlation_id", "runtime_audit_ledger", ["correlation_id"]
)
op.create_index(
"ix_runtime_audit_ledger_recorded_at", "runtime_audit_ledger", ["recorded_at"]
)
op.create_table(
"compat_hubs",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("slug", sa.String(120), nullable=False, unique=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", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_compat_hubs_slug", "compat_hubs", ["slug"])
op.create_table(
"compat_manifests",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("hub_id", sa.String(36), sa.ForeignKey("compat_hubs.id"), nullable=True),
sa.Column("hub_slug", sa.String(120), nullable=True),
sa.Column("manifest_version", sa.String(40), nullable=False),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("body", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_compat_manifests_hub_id", "compat_manifests", ["hub_id"])
op.create_index("ix_compat_manifests_hub_slug", "compat_manifests", ["hub_slug"])
op.create_table(
"compat_api_consumers",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("slug", sa.String(120), nullable=True, unique=True),
sa.Column("name", sa.String(240), nullable=False),
sa.Column("description", sa.Text(), nullable=True),
sa.Column("hub_capability_manifest_id", sa.String(36), nullable=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", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_compat_api_consumers_slug", "compat_api_consumers", ["slug"])
op.create_index("ix_compat_api_consumers_name", "compat_api_consumers", ["name"])
op.create_index(
"ix_compat_api_consumers_manifest", "compat_api_consumers", ["hub_capability_manifest_id"]
)
op.create_table(
"compat_api_keys",
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,
),
sa.Column("key_prefix", sa.String(32), nullable=False),
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),
)
op.create_index("ix_compat_api_keys_consumer", "compat_api_keys", ["api_consumer_id"])
op.create_index("ix_compat_api_keys_prefix", "compat_api_keys", ["key_prefix"])
op.create_table(
"compat_widgets",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("hub_id", sa.String(36), sa.ForeignKey("compat_hubs.id"), nullable=False),
sa.Column("name", sa.String(240), nullable=False),
sa.Column("widget_type", sa.String(120), nullable=True),
sa.Column("capability_ref", sa.String(240), nullable=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", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_compat_widgets_hub_id", "compat_widgets", ["hub_id"])
op.create_index("ix_compat_widgets_type", "compat_widgets", ["widget_type"])
op.create_index("ix_compat_widgets_capability", "compat_widgets", ["capability_ref"])
op.create_table(
"compat_migration_runs",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("source", sa.String(120), nullable=False),
sa.Column("schema_version", sa.String(80), nullable=False),
sa.Column("bundle_sha256", sa.String(64), nullable=False),
sa.Column("dry_run", sa.Boolean(), nullable=False),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("counts", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("diagnostics", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_compat_migration_runs_source", "compat_migration_runs", ["source"])
op.create_index("ix_compat_migration_runs_bundle", "compat_migration_runs", ["bundle_sha256"])
op.create_table(
"runtime_import_runs",
sa.Column("id", sa.String(36), primary_key=True),
sa.Column("source", sa.String(120), nullable=False),
sa.Column("schema_version", sa.String(80), nullable=False),
sa.Column("bundle_sha256", sa.String(64), nullable=False, unique=True),
sa.Column("high_water_mark", sa.String(200), nullable=True),
sa.Column("counts", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("content_hashes", postgresql.JSONB(astext_type=sa.Text()), nullable=False),
sa.Column("status", sa.String(40), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index("ix_runtime_import_runs_source", "runtime_import_runs", ["source"])
op.create_index("ix_runtime_import_runs_bundle", "runtime_import_runs", ["bundle_sha256"])
def downgrade() -> None:
op.drop_table("runtime_import_runs")
op.drop_table("compat_migration_runs")
op.drop_table("compat_widgets")
op.drop_table("compat_api_keys")
op.drop_table("compat_api_consumers")
op.drop_table("compat_manifests")
op.drop_table("compat_hubs")
op.drop_table("runtime_audit_ledger")
op.drop_table("runtime_interaction_events")
op.drop_table("runtime_progress_events")
op.drop_table("runtime_messages")
op.drop_table("runtime_registrations")