What
Running keystone audit on a styled page produces contrast rows like:
✗ G40 Contrast
span: APCA Lc 5 < 60
fix: raise text lightness or lower bg lightness
22+ rows, all identical except the Lc number. No selector, no class chain, no computed fg/bg pair — in the markdown report AND in keystone-audit-report.json (evidence: "span: APCA Lc 5 < 60"). There is no way to triage which element to fix without guessing or re-inspecting manually.
Repro
node engine/audit.mjs rextor-architecture.html --out . on any page with badges/chips/micro-labels (Catppuccin-style colored tags). Report: 22 G40 rows, zero actionable targets.
Suggestion
- evidence should include a selector breadcrumb (closest id/class chain, e.g.
.fdetails .d-role) + the computed pair (#a6adc8 on #181825)
- group repeated same-pair rows into one entry with a count
- engine likely has the pair at check time (it computes APCA from fg/bg) — surface it
Environment
keystone @getpipher/keystone (pi npm install), engine/audit.mjs path mode, 2026-08-30 run.
What
Running
keystone auditon a styled page produces contrast rows like:22+ rows, all identical except the Lc number. No selector, no class chain, no computed fg/bg pair — in the markdown report AND in
keystone-audit-report.json(evidence: "span: APCA Lc 5 < 60"). There is no way to triage which element to fix without guessing or re-inspecting manually.Repro
node engine/audit.mjs rextor-architecture.html --out .on any page with badges/chips/micro-labels (Catppuccin-style colored tags). Report: 22 G40 rows, zero actionable targets.Suggestion
.fdetails .d-role) + the computed pair (#a6adc8 on #181825)Environment
keystone @getpipher/keystone (pi npm install), engine/audit.mjs path mode, 2026-08-30 run.