From d2c9c0696a30f0a2c660388cb9aec9726cd566b0 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Fri, 5 Jun 2026 10:13:49 +0000 Subject: [PATCH] add guard clause when backfilling plan_id to recommendation --- .../0223_recommendation_plan_id_backfill.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql b/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql index 827243d..dc16877 100644 --- a/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql +++ b/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql @@ -1,3 +1,21 @@ +-- Guard: fail if any recommendation is linked to more than one plan. +-- The spec asserts each recommendation belongs to exactly one plan; if real +-- data violates that the backfill cannot pick deterministically and must not +-- proceed silently. +DO $$ +BEGIN + IF EXISTS ( + SELECT 1 + FROM plan_recommendations + GROUP BY recommendation_id + HAVING count(*) > 1 + ) THEN + RAISE EXCEPTION + 'plan_id backfill aborted: one or more recommendations appear in multiple ' + 'plan_recommendations rows. Resolve cardinality before re-running.'; + END IF; +END $$; + UPDATE recommendation r SET plan_id = pr.plan_id FROM plan_recommendations pr