The card-inset gate, outliving the defect it was written for (#215) - #216
Merged
Conversation
bdelanghe
force-pushed
the
claude/bounded-tools-review-330px6
branch
from
August 21, 2026 01:57
d5a48d4 to
fb14493
Compare
…215) The two provenance cards this branch was opened to fix no longer exist — the homepage rewrite (#219) cut them — so the CSS half of the original change is gone with them. What remains is the part worth keeping. The card-inset gate ships anyway. `.card` is still used by the three repo cards and the try-it card on the homepage, and across /map, /desk, /contracts and /conformance, and the failure mode it guards is a class that forgets to declare an inset. Retiring a gate because its first catch got fixed is how the second one ships. Re-aimed where it had to be: the mutation step injected `.provenance { padding: 0 }`, a class that is now absent. A mutation aimed at a class that is gone proves nothing and passes quietly — the exact failure the step exists to prevent. It now strips `.proof-card`, and the workflow's own script (extracted from the YAML, not retyped) takes the gate red on 6 cards. 8 card renders across 13 pages, down from 16: the rewritten homepage carries half as many cards as the old one did. check-jargon keeps the comment strip, completed to `(?:-->|$)` so an unterminated comment swallows to end of file rather than surviving it. The path-traversal fix stays as it was: the server serves from an allowlist built by walking dist, so no filesystem path is derived from a request. Verified through the workflow's own probe — four traversal shapes non-200, real routes still 200.
bdelanghe
force-pushed
the
claude/bounded-tools-review-330px6
branch
from
August 21, 2026 13:53
45cc609 to
85f1ddf
Compare
bdelanghe
marked this pull request as ready for review
August 21, 2026 13:55
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.
Closes #215. Rebuilt on the rewritten homepage — what this PR is has changed, so here it is again honestly.
What's left of the original
The two provenance cards this branch was opened to fix no longer exist: the homepage rewrite (#219, merged as c7dceb8) cut them. The
.provenanceCSS went with them, and the copy fix went with the copy.What remains is the part worth keeping.
The gate ships anyway
.cardis still used by the three repo cards and the try-it card on the homepage, and across/map,/desk,/contractsand/conformance. The failure mode it guards — a card variant that forgets to declare an inset, so its copy renders flush against a 1px border — is a property of the component, not of the two cards that happened to have it first.Retiring a gate because its first catch got fixed is how the second one ships.
Eight renders, down from sixteen: the rewritten homepage carries half as many cards as the old one did.
One thing that had to be re-aimed
The mutation step injected
.provenance { padding: 0 }— a class that is now absent. A mutation aimed at a class that's gone proves nothing and passes quietly, which is the exact failure the step exists to prevent. It strips.proof-cardnow, and the workflow's own script (extracted from the YAML, not retyped) takes the gate red on 6 cards.That is the second time this lane's self-test has been wrong in a way that looked green. The first was a probe I validated as a hand-copy while CI ran a different one. Both times the fix was to run the committed script rather than a retyping of it.
Also here
The path-traversal fix. CodeQL was right that
join("dist", req.url)escapes the root — verified,join("dist", "/../../../../etc/passwd")resolves to/etc/passwd. The server now serves from an allowlist built by walkingdist, so no filesystem path is derived from a request at all. That's the org's own default-deny reasoning — unknown is not permission — with the property a filter can't have: an escape nobody thought of has nothing to escape into.The lane proves it, over a raw socket because
fetch()and every browser normalize..out before sending:check-jargonkeeps the comment strip, completed to(?:-->|$)so an unterminated comment swallows to end of file rather than surviving it. An authoring note that names a term was demanding a link for text that never renders.Verified
20 checks green on
85f1ddf, including this PR's owncard-insetlane and CodeQL. Locally:npm run check, brandcontent/coverage, axe (13 pages, 0 serious), the traversal probe and the mutation step both run from the committed workflow.