Skip to content
31 changes: 30 additions & 1 deletion crates/buzz-db/src/runtime/migration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -702,7 +702,7 @@ mod postgres_tests {
let mut migrations: Vec<_> = MIGRATOR.iter().collect();
migrations.sort_by_key(|migration| migration.version);

assert_eq!(migrations.len(), 44);
assert_eq!(migrations.len(), 45);
assert_eq!(migrations[0].version, 1);
assert_eq!(&*migrations[0].description, "initial schema");
assert!(migrations[0]
Expand Down Expand Up @@ -1165,6 +1165,35 @@ mod postgres_tests {
assert!(heartbeat_vacuum.contains("vacuum_truncate = false"));
assert!(desired_schema.contains("vacuum_truncate = false"));

// Workflow revision capture is additive: nullable 32-byte event IDs on
// both the materialized definition and run, with identical fresh-schema
// constraints and no backfill hidden in startup migration state.
assert_eq!(migrations[44].version, 45);
let workflow_revision_binding = migrations[44].sql.as_str();
assert!(workflow_revision_binding.contains("ALTER TABLE workflows"));
assert!(workflow_revision_binding.contains("ALTER TABLE workflow_runs"));
assert!(workflow_revision_binding.contains("octet_length(definition_event_id) = 32"));
assert!(!workflow_revision_binding.contains("UPDATE workflows"));
let revision_guard = |sql: &str| {
let start = sql
.find("CREATE FUNCTION invalidate_workflow_revision()")
.unwrap();
let end = sql[start..]
.find("FOR EACH ROW EXECUTE FUNCTION invalidate_workflow_revision();")
.unwrap();
sql[start..start + end].to_owned()
};
assert_eq!(
revision_guard(workflow_revision_binding),
revision_guard(desired_schema)
);
assert_eq!(
desired_schema
.matches("octet_length(definition_event_id) = 32")
.count(),
2
);

// pgschema intentionally reconciles DDL, not seed DML or table storage
// parameters. Its post-apply reconciliation must restore and verify
// both parts of the live heartbeat contract for fresh bootstraps.
Expand Down
Loading
Loading