Runs on every PR and on main after merge, fully separate from deploy.yml so it can never affect deploys. Catches type/lint/test regressions that previously had no CI at all. Integration + e2e (which need a DB service) are a follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>