ci: screenshot audit fails on rendered overflow at phone and desktop widths - #441
Merged
Conversation
itd-135 AC 7, itd-136 AC 8 and itd-137 AC 7 all require a screenshot audit that runs as a CI job. Add it: a real browser loads every route family plus one representative adr, intent and issue page at 360, 390, 768 and 1360 px, in a light/full-motion context and a dark/reduced-motion one, and fails when the document scrolls sideways. Optional by construction, and it must stay that way. It is a separate workflow with its own triggers, never a required check and never in the merge queue. adr-47 keeps Node out of the build and admits Playwright in an optional CI job alone; a browser download on the critical path would make every release depend on a registry and a 180MB binary nothing else needs. Rendered layout also goes amber for reasons that are not the author's fault, and blocking merges on that teaches people to bypass gates. It runs in no build or deploy path, holds contents: read, has no environment and no credential. This is the rendered half of a pair. `abcd site check`'s `mobile` gate is the static half — viewport meta, overflow containers, image constraints, inline widths — and that one does gate the release. It reads emitted HTML and CSS, so it cannot see layout. Run against this tree, the static gate reports `ok mobile` while the rendered audit finds /references/ at scrollWidth 484 on a 360px viewport. Complementary, not redundant. The runner lives in site-src/audit/ and can never reach the site: the build copies site-src by an explicit five-file allowlist (copiedSources) with no directory walk anywhere. Verified rather than assumed — building with and without the directory produces byte-identical 758-file trees, and site check reports the same findings either way. Failures name the offending elements and their spans, not just the page, and every run uploads its 80 screenshots so a failure arrives with the picture beside it. Playwright is pinned to 1.62.1 (published 2026-07-30) — the newest release at least 7 days old, mirroring dependabot's cooldown, since a version named in a workflow env is invisible to dependabot and npm offers nothing to verify a download against. zizmor's adhoc-packages finding is suppressed with its reasoning recorded: a lockfile would be stronger, and committing one is an ask-first change that adr-47 bears on. The ACKNOWLEDGEMENTS.md entry that should land with this change is held back: a pre-existing citation in that file collides with a private, machine-local banned-name pattern, so the pre-commit gate refuses any commit that stages it. The entry is written and waiting; it lands as soon as that local list is reconciled. Not bypassed with --no-verify. Assisted-by: Claude:claude-fable-5
REPPL
enabled auto-merge
August 22, 2026 18:10
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
abcd | f167e2d | Aug 22 2026, 06:10 PM |
This was referenced Aug 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The website's integration change: spc-37..40 close and itd-135..138 move to shipped/ (fidelity receipts minted; the audits run against the deployed site), the site's single CHANGELOG entry lands under [Unreleased] citing all four intents, the slice-review rulings enter the decision log (the featured-quote placeholder exclusion, the check's references scoping and verification-shaped attribution escape, the deploy stamp contract, the held install.md lead, the fixed build order), and both brief pages read present truth — seven gates and the preview stamp real, the deploy workflow on the release chain, and exactly one design target left: the first production deploy from a tag.
The maintainer's uncommitted parallel-session work (three research notes and a decision entry) is preserved untouched in the working tree, deliberately not swept into this change.
Assisted-by: Claude:claude-fable-5