Files
attune/docs/migrations/migration-consolidation-plan.md

9.4 KiB

Migration Consolidation Plan

Status: Pre-production consolidation
Date: 2026-02-04
Goal: Consolidate migrations into a clean, minimal set before initial release

Background

Since this project has no production deployments, we can freely consolidate migrations to create a cleaner initial state. This document identifies items that are created and then dropped/modified, so we can simplify the migration history.

Issues Identified

1. Runtime Type Enum - Created Then Dropped

Problem: runtime_type_enum is created in the initial migration but dropped in a later migration.

  • Created: 20250101000001_initial_setup.sql (line 42)
  • Dropped: 20260203000001_unify_runtimes.sql (line 35)
  • Associated column: runtime.runtime_type (also dropped)
  • Associated indexes:
    • idx_runtime_type
    • idx_runtime_pack_type
    • idx_runtime_type_created
    • idx_runtime_type_sensor

Action: Remove enum type, column, and indexes from initial creation.

2. Runtime Table Constraints - Created Then Dropped

Problem: Runtime constraints are created with one format, then dropped and not recreated.

  • Created: 20250101000002_core_tables.sql (line 84)
    • runtime_ref_format CHECK (ref ~ '^[^.]+\.(action|sensor)\.[^.]+$')
    • Expected format: pack.type.name
  • Dropped: 20260203000001_unify_runtimes.sql (line 16)
  • New format: pack.name (e.g., core.python instead of core.action.python)

Action: Create constraint with final format initially, or omit if not needed.

3. Webhook Columns - Added Then Consolidated

Problem: Individual webhook columns are added, then dropped in favor of a JSONB column.

Added in 20260120000001_add_webhook_support.sql:

  • webhook_enabled BOOLEAN
  • webhook_key VARCHAR(64)
  • webhook_secret VARCHAR(128)

Added in 20260120000002_webhook_advanced_features.sql:

  • webhook_hmac_enabled BOOLEAN
  • webhook_hmac_secret VARCHAR(128)
  • webhook_hmac_algorithm VARCHAR(32)
  • webhook_rate_limit_enabled BOOLEAN
  • webhook_rate_limit_requests INTEGER
  • webhook_rate_limit_window_seconds INTEGER
  • webhook_ip_whitelist_enabled BOOLEAN
  • webhook_ip_whitelist JSONB
  • webhook_payload_size_limit_kb INTEGER

Consolidated in 20260127000001_consolidate_webhook_config.sql:

  • All individual columns dropped
  • Single webhook_config JSONB column added

Action: Add only webhook_enabled, webhook_key, and webhook_config in initial trigger table creation. Skip intermediate columns.

4. Runtime Data Insertions - Later Truncated

Problem: Runtime records are inserted via SQL, then truncated and moved to YAML files.

Insertions in 20260202000001_add_sensor_runtimes.sql:

  • 4 INSERT statements for sensor runtimes
  • All records truncated in 20260203000001_unify_runtimes.sql

Insertions elsewhere: Check if initial migrations insert any runtime data.

Action: Remove all runtime INSERT statements. Runtime data now loaded from YAML files in packs/core/runtimes/.

5. Workflow Task Execution Table - Created Then Dropped

Problem: Separate table created, then consolidated into execution table JSONB column.

  • Created: 20250101000004_execution_system.sql (line 329)
    • workflow_task_execution table with multiple columns
  • Consolidated: 20260127212500_consolidate_workflow_task_execution.sql
    • Table dropped
    • execution.workflow_task JSONB column added instead

Action: Don't create workflow_task_execution table. Add workflow_task JSONB column to execution table in initial creation.

6. Execution Table Columns - Added for Workflows

Problem: Workflow-related columns added after initial table creation.

Added in 20250101000004_execution_system.sql (line 381):

  • is_workflow BOOLEAN DEFAULT false NOT NULL
  • workflow_def BIGINT REFERENCES workflow_definition(id)

Action: Include these columns in initial execution table creation (line ~60).

7. Is Adhoc Flag - Added Later

Problem: is_adhoc flag added to multiple tables after initial creation.

Added in 20260129140130_add_is_adhoc_flag.sql:

  • action.is_adhoc
  • sensor.is_adhoc
  • rule.is_adhoc

Action: Include is_adhoc BOOLEAN DEFAULT false NOT NULL in initial table definitions.

8. Event Table - Rule Reference Added Later

Problem: Rule tracking added to event table after initial creation.

Added in 20260130000001_add_rule_to_event.sql:

  • event.rule BIGINT
  • event.rule_ref TEXT
  • Foreign key constraint

Action: Include rule columns and constraint in initial event table creation.

9. Worker Role Column - Added Later

Problem: Worker role enum and column added after initial creation.

Added in 20260131000001_add_worker_role.sql:

  • worker_role_enum type
  • worker.worker_role column

Action: Include enum type and column in initial worker table creation.

10. Pack Environments - Added Later

Problem: Pack installers column added after initial creation.

Added in 20260203000002_add_pack_environments.sql:

  • pack_environment_status_enum type
  • pack.installers JSONB column
  • pack_environment table

Action: Include in initial pack/environment setup.

11. Notify Triggers - Added Incrementally

Problem: PostgreSQL LISTEN/NOTIFY triggers added across multiple migrations.

Migrations:

  • 20260119000001_add_execution_notify_trigger.sql - execution events
  • 20260129150000_add_event_notify_trigger.sql - event creation
  • 20260203000003_add_rule_trigger_to_execution_notify.sql - add rule to execution notify
  • 20260204000001_add_enforcement_notify_trigger.sql - enforcement events

Action: Create all notify triggers in a single migration after table creation.

12. Webhook Functions - Created, Modified, Dropped, Restored

Problem: Webhook validation/processing functions have been rewritten multiple times.

Timeline:

  • 20260120000001_add_webhook_support.sql - Initial functions (4 created)
  • 20260120000002_webhook_advanced_features.sql - Advanced functions (7 created)
  • 20260127000001_consolidate_webhook_config.sql - Modified (2 dropped, 3 created)
  • 20260129000001_fix_webhook_function_overload.sql - Fixed overloading (3 dropped)
  • 20260204000001_restore_webhook_functions.sql - Restored (4 dropped, 3 created)

Action: Determine final set of webhook functions needed and create them once.

Consolidation Strategy

Phase 1: Analyze Dependencies

  1. Map all foreign key relationships
  2. Identify minimum viable table set
  3. Document final schema for each table

Phase 2: Create New Base Migrations

Create consolidated migrations:

  1. 00001_initial_setup.sql - Enums, extensions, base types
  2. 00002_identity_and_auth.sql - Identity, keys, auth tables
  3. 00003_pack_system.sql - Pack, runtime, action, sensor tables (with final schema)
  4. 00004_event_system.sql - Trigger, sensor, event, rule tables
  5. 00005_execution_system.sql - Execution, enforcement, inquiry, policy tables (including workflow columns)
  6. 00006_supporting_tables.sql - Worker, notification, artifact, etc.
  7. 00007_webhook_system.sql - Webhook tables, triggers, functions (final versions)
  8. 00008_notify_triggers.sql - All LISTEN/NOTIFY triggers
  9. 00009_pack_testing.sql - Pack test results table

Phase 3: Validation

  1. Test migrations on fresh database
  2. Compare final schema to current production-like schema
  3. Verify all indexes, constraints, triggers present
  4. Load core pack and verify runtime data loads correctly

Phase 4: Documentation

  1. Update migration README
  2. Document schema version
  3. Add migration best practices

Items to Remove Entirely

Never created in consolidated migrations:

  1. runtime_type_enum type
  2. runtime.runtime_type column
  3. runtime_ref_format constraint (old format)
  4. Indexes: idx_runtime_type, idx_runtime_pack_type, idx_runtime_type_created, idx_runtime_type_sensor
  5. Individual webhook columns (9 columns that were later consolidated)
  6. idx_trigger_webhook_enabled index
  7. workflow_task_execution table
  8. All runtime INSERT statements
  9. Intermediate webhook function versions

Items to Include From Start

Must be in initial table creation:

  1. execution.is_workflow column
  2. execution.workflow_def column
  3. execution.workflow_task JSONB column
  4. action.is_adhoc column
  5. sensor.is_adhoc column
  6. rule.is_adhoc column
  7. event.rule and event.rule_ref columns
  8. worker_role_enum type
  9. worker.worker_role column
  10. trigger.webhook_enabled column
  11. trigger.webhook_key column
  12. trigger.webhook_config JSONB column
  13. pack.installers JSONB column
  14. pack_environment table and pack_environment_status_enum

Data Migration Notes

Runtime Data:

  • Remove all INSERT statements from migrations
  • Runtime records loaded from YAML files in packs/core/runtimes/
  • Loader: scripts/load_core_pack.py or pack installation system

Core Pack Data:

  • Check if any other core pack data is inserted via migrations
  • Move to appropriate YAML files in packs/core/

Next Steps

  1. Create this consolidation plan
  2. Review with team
  3. Back up current migration directory
  4. Create consolidated migrations
  5. Test on fresh database
  6. Verify schema matches current state
  7. Replace old migrations
  8. Update documentation

Rollback Plan

Keep copy of old migrations in migrations.old/ directory until consolidated migrations are verified in development environment.