Context
Standing up the staging environment (docs/staging/setup-checklist.md). Staging runs the same code as prod — only env vars differ. Step 1 creates the sapling-staging Supabase project; Step 6 applies schema + seed, but it blocks on a seed_staging.py that hasn't landed yet (docs/staging/setup-checklist.md:54). Migrations now have a runner (#252).
The staging DB is empty, so the course catalog needs to be moved over from main/prod and the DB populated before the app is usable there.
Goal
Fresh sapling-staging → schema applied → course catalog + minimal supporting rows populated → app renders.
Work
Acceptance
- Fresh staging DB →
python -m db.migrate → seed_staging.py → /api/graph/<user>/courses returns the catalog and the gradebook landing shows the course grid.
Pointers
Context
Standing up the staging environment (
docs/staging/setup-checklist.md). Staging runs the same code as prod — only env vars differ. Step 1 creates thesapling-stagingSupabase project; Step 6 applies schema + seed, but it blocks on aseed_staging.pythat hasn't landed yet (docs/staging/setup-checklist.md:54). Migrations now have a runner (#252).The staging DB is empty, so the course catalog needs to be moved over from main/prod and the DB populated before the app is usable there.
Goal
Fresh
sapling-staging→ schema applied → course catalog + minimal supporting rows populated → app renders.Work
SUPABASE_DB_URL=<direct> python -m db.migrate.coursesrows from prod (CS 101, MA 121, CS 112, MA 311, MA 213, …) vs. synthesize a representative set. Security must-do: fake data only in staging (setup-checklist.md:85) — seed a representative catalog, never real student data.seed_staging.pyto populatecoursesand the minimaluser_coursesenrollments / supporting rows so the graph + gradebook render.migrate, then seed).Acceptance
python -m db.migrate→seed_staging.py→/api/graph/<user>/coursesreturns the catalog and the gradebook landing shows the course grid.Pointers
docs/staging/setup-checklist.md(Step 1, Step 6)backend/db/archive/seed.py— existing catalog/assignment seed to adaptbackend/db/migrate.py— migration runner (feat(db): migration runner + ordered migrations (#197, #196) #252)