diff --git a/CLAUDE.md b/CLAUDE.md index d9f060a..0cd55f7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -557,6 +557,28 @@ Never `corepack enable`; pnpm is already on PATH (`gitea-runners.md` ยง4). negotiates h2, where the `Connection: Upgrade` handshake is not how WebSockets work โ€” you get a 400 from axum that looks like a proxy misconfiguration. +## Run the gate CI runs, not one that looks like it + +Before pushing, from `web/`: + +```sh +pnpm format:check && pnpm lint && pnpm build +``` + +`pnpm build` is `tsc -b && vite build`. **`npx tsc --noEmit` is not a substitute** +โ€” it resolves a different project graph โ€” and `vite build` type-checks nothing at +all, so the pair of them passes code that CI rejects. That is exactly how +`Type '"" | Window | null' is not assignable` reached a build. + +The Rust half, likewise verbatim: + +```sh +cargo fmt --all -- --check +SQLX_OFFLINE=true cargo clippy --all-targets --all-features -- -D warnings +SQLX_OFFLINE=true cargo test --all +git status --porcelain web/src/api/generated/ # must be empty: the drift gate +``` + ## Verifying a change `systemctl is-active` is not evidence this works. A daemon with a node it cannot