Commands
What passes
Two tests are flaky in the full suite and pass in isolation:
App.test.tsx and LandingFooter. Ignore them as full-suite drift; do not chase them as regressions.
Expect chunk-size warnings from the build. They are pre-existing and are not what the bundle budget check guards.
Traps
forge test rewrites contracts/deployments.json because Deploy.t.sol writes fixtures into it. Always run git checkout -- contracts/deployments.json afterwards. CI fails if it is dirty, and a polluted copy breaks the shared contracts module and /verify at runtime.supabase/tests/quotes_anon_write_lockout.sql cannot run until this is repaired.
Docker is required for pgTAP. OrbStack provides it at /usr/local/bin/docker; there is no docker on the default PATH.
Guards that fail CI
Do not resolve a build error by re-adding a static import of
@/config/appkit. That single import is what put 5.0 MB into the entry chunk and produced a 4,908 ms first paint on every route.CI
.github/workflows/ci.yml.
Testing conventions
Red-test commit before green-implementation commit, as separate commits. Never--no-verify. Never amend after a hook failure — investigate it.
Any change to address derivation must re-run the full fork and invariant suite and verify a real deploy-and-sweep on Base Sepolia. Fork tests skip silently without their environment variables, so a green local run does not prove they ran.
Any change to the fee split needs a regression test asserting the partner’s 0.25% is computed on gross and unaffected. Partner earnings display $0.00 in the dashboard, so a regression there is invisible.
Verifying against production
role "merchant" does not exist means something regressed. See Authentication.
For a live payment against testnet: