20260723_140_rule_run_artifacts.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. """Add a stable, correlation-scoped catalog for runner artifacts."""
  2. from alembic import op
  3. revision = "20260723_140"
  4. down_revision = "20260723_130"
  5. branch_labels = None
  6. depends_on = None
  7. def upgrade() -> None:
  8. op.execute(
  9. """
  10. CREATE TABLE public.rule_run_artifacts (
  11. id UUID PRIMARY KEY,
  12. correlation_id UUID NOT NULL,
  13. binding_id UUID NOT NULL
  14. REFERENCES public.dataflow_dataset_bindings(id)
  15. ON DELETE RESTRICT,
  16. artifact_ref VARCHAR(1000) NOT NULL,
  17. artifact_digest CHAR(64) NOT NULL,
  18. row_count BIGINT NOT NULL CHECK (row_count >= 0),
  19. schema_hash CHAR(64) NOT NULL,
  20. schema_fields JSONB NOT NULL,
  21. artifact_kind VARCHAR(20) NOT NULL
  22. CHECK (artifact_kind IN ('input','lookup','output')),
  23. expires_at TIMESTAMPTZ NOT NULL,
  24. created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
  25. UNIQUE (correlation_id, binding_id, artifact_digest)
  26. );
  27. CREATE INDEX idx_rule_run_artifacts_resolve
  28. ON public.rule_run_artifacts
  29. (correlation_id, binding_id, created_at DESC);
  30. """
  31. )
  32. def downgrade() -> None:
  33. # Runtime handoff evidence is immutable and intentionally retained.
  34. pass