// Existing immutable snapshots retain unknown context metadata; never fabricate old counts. exports.up = pgm => pgm.sql(` ALTER TABLE generated_image_jobs ADD context_included INTEGER, ADD context_total INTEGER, ADD CONSTRAINT generated_image_context_counts CHECK ( (context_included IS NULL AND context_total IS NULL) OR (context_included IS NOT NULL AND context_total IS NOT NULL AND context_included >= 0 AND context_total >= context_included)); CREATE FUNCTION guard_generated_image_context() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN IF (NEW.context_included, NEW.context_total) IS DISTINCT FROM (OLD.context_included, OLD.context_total) THEN RAISE EXCEPTION 'Image context metadata is immutable'; END IF; RETURN NEW; END; $$; CREATE TRIGGER generated_image_context_immutable BEFORE UPDATE ON generated_image_jobs FOR EACH ROW EXECUTE FUNCTION guard_generated_image_context(); `); exports.down = pgm => pgm.sql(` DROP TRIGGER generated_image_context_immutable ON generated_image_jobs; DROP FUNCTION guard_generated_image_context(); ALTER TABLE generated_image_jobs DROP context_included, DROP context_total; `);