A commit was blocked
The commit hook runs the checks in order and stops at the first failure. Read the last lines of the output, which name the check and the file. The usual fixes:
- Commit subject rejected: use Conventional Commits, such as
feat(pricing): add annual plan. - Test reminder: you changed logic in
src/js/without staging a test. Add one undertests/. - Format or lint: run
bun run formatandbun run lint, then stage the fixes. - Knip: a file or export is no longer used. Delete it rather than ignoring it.
- i18n check: a key, blog post or page exists in one language only. The output lists exactly which ones.
Add a SKIP_<CHECK>=<reason> line to the commit message to record a deliberate
exception. Skipping coverage also needs an entry in AGENT_TODO.md.
Screenshots don't match
bun run screenshots:check writes side-by-side comparisons for every changed image.
If the change was intended, accept it with:
bun run screenshots:update
If a page you deleted still has baseline images, the run reports them as orphans, and
bun scripts/screenshots/screenshot.mjs --prune removes them.
Lighthouse fails
bun run lighthouse:check needs every category at 90 or above. Recheck one page after
a fix:
bun run lighthouse:check --page=/pricing/
Common causes are low colour contrast after a theme change, images without explicit
sizes, and missing alt text.
Browser tests fail locally
- Run
bun run buildfirst, since tests run against the production build in_site/. - Unexpected external requests are blocked by
tests/fixtures.js. Add a route fixture for any new API call. - To see the browser, run
bunx playwright test --headed tests/checkout.spec.js.
The checkout total looks wrong
Prices come from src/_data/plans.json in the selected currency, and the coupon
percentage is applied before tax. To start over, clear site-cart in the browser's
local storage.