Residuals from the PR #1865 review (ADR-0053 token tuning, #1842):
- Badge tint distinctness is string-level, not perceptual — pairwise CIE76 dE between the five Paper badge fills has close pairs; if type identification matters, re-space the hues (measure, don't eyeball).
- Two hand-maintained root lists — paper-eyebrow-token.spec.ts EYEBROW_ROOTS (20) vs paperViewLegacySubstrate.spec.ts roots (22) have no mechanical link; a new Paper root can silently miss one list. Derive both from one source.
- Tightened invariant regex now rejects a future correctly-scoped
body.paper .x bridge rule — intentional strictness, but record the escape hatch (rename/annotate) before someone needs it.
- Exempt-rule body check is an exact string match (
.toBe('color-scheme: light;')) — reformatting fails the guard; loosen to a structural match when next touched.
- Core-loop eyebrow guard shape — it asserts no
*__eyebrow* BEM rule declares color, but a core-loop surface could still override .tk-eyebrow by other selectors; note the gap.
- The dark:-is-dead justification rests on
src/style.css:3 @config "../tailwind.config.js", named nowhere in the comment/ADR/PR — one clause in the ADR would pin the mechanism.
Source: PR #1865 review non-blocking items N1-N6.
Residuals from the PR #1865 review (ADR-0053 token tuning, #1842):
body.paper .xbridge rule — intentional strictness, but record the escape hatch (rename/annotate) before someone needs it..toBe('color-scheme: light;')) — reformatting fails the guard; loosen to a structural match when next touched.*__eyebrow*BEM rule declarescolor, but a core-loop surface could still override.tk-eyebrowby other selectors; note the gap.src/style.css:3@config "../tailwind.config.js", named nowhere in the comment/ADR/PR — one clause in the ADR would pin the mechanism.Source: PR #1865 review non-blocking items N1-N6.