Migrations 020–023, with the code that reads each:
- 020 drops people_lists, people_list_members, v_chapters and
v_person_affiliations. Nothing queried any of them.
- 021 renames event_sections to event_scopes and events.section_id
to scope_id, finishing what 015 described. The API sends `scopes`
and `scope_id`, and useEvents, EventListCards and EventCalendar
take `scope`. It also inserts national/regional/partner, which only
the retired seed ever created: a database built from migrations
alone had no scope for the Retreats bands.
- 022 drops events.sort_order and people.sort_order. Events now sort
by date (upcoming soonest first, past latest first, undated last)
on /events, org pages and the countdown. People were only ever
sorted by sort_name on the site. Every other sort_order stays.
- 023 rebuilds teams with created_at and updated_at plus a touch
trigger, so the teams editor gets the same optimistic concurrency
as the other entities.
Awards can be drafted: is_published (added in 011) is on both
descriptor halves with a Publishing group, and the award list, award
page, org awards and event awards leave drafts out.
The migration runner now turns foreign keys off around the per-file
transactions and runs foreign_key_check before each commit. PRAGMA
foreign_keys is a no-op inside a transaction, so 009's warning was
right and a rebuild of a referenced table (023) couldn't be written
otherwise. CLAUDE.md is updated to match.
Also removes the stray src/App.tsx.save.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>