mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-10 15:09:00 +02:00
- The DOM-dump Aside block was the only double-quoted `aside repl` script in
the tree (to splice the function text), which put the agent-filled <url>
inside a double-quoted bash string: a same-origin href carrying $(...) would
run in the reviewer's shell when Phase 3 opened that page. The script is
single-quoted like every other Aside script and the function text enters
through a closed-quote segment ('"$_DUMP"'); the fallback line is
`$B js '('"$_DUMP"')()'`. A free test pins that no rendered Aside script
opens with a double quote.
- The persist block capped dumps at 10 MiB but ran gstack-redact with its
1 MiB default, so every real page between the two was deleted as
DOM_DUMP_REDACTION_BLOCKED; the gate passes --max-bytes at the dump cap and
blocks on any exit other than clean (0) or MEDIUM (2), so a redaction tool
that fails to run can no longer fall through to "persist".
- Dump hygiene removes <template> and <noscript> subtrees (invisible to the
attribute walk), inline on* handlers, and the cross-origin <link> nodes
already named in the note, so the file handed to the engine references no
remote stylesheet.
- Doctrine: the Codex design-voice prompts said "2-3 intentional motions"
against the one-authored-moment rule; the overused-display heading scoped
its ban to Persuade/Experience while the catalog and hard rules ban it
everywhere; design-consultation's Important Rule 4 still said "as primary";
design-html's blacklist header is now "Never include by default" with the
mockup/DESIGN.md/user-ask override the catalog grants; the slop gate honors
Decisions Log and Do's and Don'ts blessings like /review does; the landing
"poster" line says poster in stance, not type size; the design binary's
variant dials no longer flip light/dark for variety; gstack's DESIGN.md
rows name data labels (UI labels stay the DM Sans token) and call the
skill-bar fill and hovers functional transitions.
- design-review names how the base branch is found (gh pr view, then the
repo default; never main) for the source-mode scan and the diff-aware mode.
- frontend-scope matches the config globs at the repo root only, like the
bash arm; the parity test carries nested samples.
- Cleanups: renderCatalog's stale style option, an unused import, the
identity-map bannedFontNames, the checklist header's "same entries" claim,
the catalog header's consumer list, the orphaned main() docstring, the
plan doc's IIFE bullet. design-html's skeleton ceiling is re-measured
(54,184) for the two doctrine sentences.
Tests: AUTO-FIX rendering from the catalog, the E2E slice markers checked in
the free suite, the hygiene cases for templates/noscript/handlers/remote
links, and the review E2E counting detector rows separately from the seven
checklist plants.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
73 lines
3.6 KiB
JSON
73 lines
3.6 KiB
JSON
{
|
|
"capturedAt": "2026-09-08",
|
|
"engine": {
|
|
"version": "0.1.3",
|
|
"release": "engine-v0.1.3",
|
|
"platform": "linux-x64",
|
|
"installedBy": "npx impeccable install (human-initiated, scratch directory outside the repo)",
|
|
"binaryPath": "<skill>/scripts/bin/linux-x64/impeccable",
|
|
"binaryNote": "the engine is installed as a sibling of the launcher (<skill>/scripts/impeccable), not under ~/.impeccable/bin/, in a project-scoped install"
|
|
},
|
|
"registry": {
|
|
"file": "impeccable-antipatterns.json",
|
|
"upstream": "crates/live/assets/antipatterns.json",
|
|
"commit": "87d8f6d686782561fb572758d9a9bb8596a1a0e7",
|
|
"entries": 61,
|
|
"fields": [
|
|
"id",
|
|
"name",
|
|
"category",
|
|
"description"
|
|
],
|
|
"note": "no severity or advisory field in the registry; advisory status (em-dash-overuse) is engine-side"
|
|
},
|
|
"captures": {
|
|
"impeccable-detect-sample.json": {
|
|
"mode": "source",
|
|
"command": "impeccable detect --json index.html styles.css",
|
|
"cwd": "a copy of test/fixtures/review-eval-design-slop.{html,css} named index.html + styles.css so the <link> resolves",
|
|
"exit": 2,
|
|
"stderrBytes": 0,
|
|
"pathsNormalized": {
|
|
"index.html": "test/fixtures/review-eval-design-slop.html",
|
|
"styles.css": "test/fixtures/review-eval-design-slop.css"
|
|
}
|
|
},
|
|
"impeccable-detect-dom-sample.json": {
|
|
"mode": "dom",
|
|
"dump": "review-eval-design-slop.dom.html",
|
|
"dumpedWith": "browse goto http://127.0.0.1:<port>/index.html; browse js '('\"$(cat lib/dom-dump.js)\"')()' --out <tmp>/review-eval-design-slop.dom.html --raw (the arrow function in lib/dom-dump.js, called in the page; same form the skill renders for the fallback engine)",
|
|
"command": "impeccable detect --json review-eval-design-slop.dom.html",
|
|
"exit": 2,
|
|
"stderrBytes": 0,
|
|
"pathsNormalized": {
|
|
"review-eval-design-slop.dom.html": "test/fixtures/review-eval-design-slop.dom.html",
|
|
"http://127.0.0.1:<port>/": "http://127.0.0.1/"
|
|
},
|
|
"cwd": "a temp dir holding only the dump: the engine searches upward from cwd for DESIGN.md, so scanning inside this repo (whose DESIGN.md is in the open format) adds design-system-* findings that the source sample, captured before the conversion, does not have"
|
|
},
|
|
"impeccable-detect-help.txt": {
|
|
"command": "impeccable detect --help"
|
|
}
|
|
},
|
|
"findingFields": [
|
|
"antipattern",
|
|
"name",
|
|
"description",
|
|
"severity",
|
|
"category",
|
|
"file",
|
|
"line",
|
|
"snippet"
|
|
],
|
|
"notes": [
|
|
"HTML-mode findings carry line 0; snippet is the locator",
|
|
"the static engine reads inline <style> in a .html file: the DOM dump yields the same id set as the source scan",
|
|
"without the rgb()->hex fold in the dump script the DOM scan loses ai-color-palette (CSSOM serializes hex as rgb)",
|
|
"a <link rel=stylesheet> left in the dump makes the engine warn on stderr about an unreadable stylesheet; the dump script removes inlined links",
|
|
"the planted fixture has no border-left, so side-tab never fires on it; ai-color-palette is the deterministic slop id",
|
|
"engine 0.1.3 loads a gstack-emitted (spec-format) DESIGN.md from cwd: with the repo's converted DESIGN.md beside a violating page it emits design-system-color, design-system-font, and design-system-radius; without the file only low-contrast (verified 2026-09-08)",
|
|
"the engine discovers DESIGN.md by walking up from the scan's cwd (verified: a dump scanned from test/fixtures picked up the repo root DESIGN.md and emitted design-system-color/font/radius); the committed samples are scanned outside the repo so they pin page rules only"
|
|
]
|
|
}
|