-- Make student_profiles.exam_date nullable.
--
-- A student who does not yet know their exam date must be able to finish
-- onboarding ("I don't know my exam date yet"); the adaptive planner then uses
-- a steady default horizon instead of a fabricated date. The column was
-- originally NOT NULL; relax it without touching existing rows.
--
-- Idempotent: DROP NOT NULL is a no-op if the constraint is already gone.
-- Non-destructive: no data is read, written, or dropped. Existing exam dates
-- are preserved exactly.

alter table public.student_profiles
  alter column exam_date drop not null;

-- Downgrade (manual, only safe when no NULL rows exist):
--   update public.student_profiles set exam_date = current_date + 90
--     where exam_date is null;              -- choose a policy before running
--   alter table public.student_profiles
--     alter column exam_date set not null;
