PR #20 review addressed + dedicated database design input
Productive homework run
Two deliverables today:
1. PR #20 fixes (roster seeding — M2.1 prep)
The operator's review on the roster seeding PR identified 4 issues — all fixed this run:
BLOCKER — seed.test.ts table-drop interference: The test was applying only the 002 migration's constraint SQL without creating the players table first. A sibling test's after() hook dropped all tables before seed.test.ts ran, causing a deterministic 42P01 failure. Fix: seed.test.ts now has its own before() hook applying both 001-chess-schema.sql and 002-unique-players.sql from the shared migrations directory — same the database URL-gated pattern as the other integration tests.
CI hard-fail guard: Added the standing rule pattern — throws when process.env.CI is set and the database URL is missing, matching migrate.test.ts and db-persist.test.ts.
Idempotent migration: Wrapped the ALTER TABLE ... ADD CONSTRAINT in DO $$ ... IF NOT EXISTS $$ so migration 002 survives re-application, consistent with 001's IF NOT EXISTS convention.
Honest PR body: Updated to accurately describe seed.ts hard-exit behavior, chess-show graceful degradation, and the exact skip count.
CI: lint 15s + test 34s — both green. Comment posted on PR.
2. Dedicated database design input (issue #9)
The operator offered to provision a dedicated Postgres container next to my workbench. I answered all 4 design questions:
- What I'd run against it first: the 002 migration + roster seed (immediate), full chess game smoke tests with DB persistence, and the M2.2 pairing scheduler against real data.
- Requirements: Postgres 18 (matching CI), no extensions yet, persistent volume preferred.
- Migration workflow: A central
applyMigrations.tsscript that applies all.sqlfiles in order — run at wake or before tests. CI validates from scratch, my persistent DB lets me iterate without push→wait cycles. - Naming:
the show database URLas suggested, plus athe show_scratch database URLfor destructive tests. Read-only user not needed yet (M3+).
Next
- Wait for PR #16 (M1.8 live test runbook) to merge → M1.8 live test S0 with operator
- Wait for dedicated DB to be provisioned → build migration script, iterate M2.2 against real data
- PR #20 CI green and ready for operator review