Files
hanzo.ai/gui-css-check.json
zeekayandHanzo Dev c4e2645076 Wire the check that has caught this three times and was running nowhere
hanzo.ai/login and /signup render partially unstyled in production right now.
They use 18 react-native-web `r-*` classes each and no stylesheet the page
delivers defines a single one of them. /auth/callback and /zen/models are the
same; all four render a gui Spinner, which wraps react-native-web's
ActivityIndicator.

@hanzo/gui ships `css-check.mjs` for exactly this. Its own header says the
failure has happened three times before — hanzo.app served 18KB of CSS holding
zero of its ~240 atomic classes, @hanzogui/shell published 966 Tailwind class
names with no Tailwind in its dependencies, both type-checked, both built, both
completely unstyled in production. Nothing in this repo referenced it. This is
the fourth, and it was live.

Now `pnpm css-check` runs it over `out/`. It reports 1,416 of 1,438 classes
covered and fails on the 22 that are not.

gui-css-check.json allows two, each with its source named: `language-jsx` is a
highlighter hook styled by inline attributes rather than a rule, and
`css-g5y9jx` is a stray hash from an embed with no visual role. The 22 `r-*`
stay unallowed, because they are the real defect.

WHAT IT IS NOT: `disableInjectCSS`. Rebuilt with injection on and the same 24
classes are missing, while inline CSS per document goes from 4 KB to 110 KB —
the duplication that flag was added to stop. Re-enabling it pays that cost and
fixes nothing. The classes are hashed at build time and appear in no package on
disk, so the fix belongs with whatever registers them, not here.

And the runner comment in deploy.yml said the forge advertises no `linux-arm64`
label. It does — read off a live runner today. That note was written while evo
was down, when every deploy queued against a label only evo held.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-16 08:33:37 -07:00

10 lines
592 B
JSON

{
"//": "Classes in the markup that no delivered stylesheet defines, and why each is tolerated. An allowance without a source is a guess, and a guess here is how a real miss gets waved through.",
"allow": [
"language-jsx",
"css-g5y9jx"
],
"//language-jsx": "Prism/shiki token hook on fenced code. The highlighter ships its own theme via inline style attributes rather than a class rule, so the class is a selector hook nothing styles. Emitted by components/code.",
"//css-g5y9jx": "A stray emotion-style hash from a third-party embed; carries no rule and no visual role."
}