Files
zeekayandHanzo Dev 18c16ecf2c Zen is the face, and the check can prove it
The site rendered in the system fallback: @hanzo/design 0.5.x replaced Geist
with Zen, and this app pinned 0.4.6, so the family every surface asked for was
one nothing declared any more. Bumping design alone strands it — @hanzo/ui
inlines a copy of that token block — so the pair moves together, to
@hanzo/design 0.5.21 and @hanzo/ui 8.3.4.

@hanzo/ui depends on none of its @hanzogui/* peers; it declares them, so this
app installs them. With only @hanzo/gui declared, pnpm resolved
@hanzogui/lucide-icons-2 a generation behind, which dragged a second
@hanzogui/core, and every @hanzo/ui component carrying an icon then read a
theme context no provider fills — prerender died on "Missing theme.". Declaring
the cohort, as hanzo.ai and the console already do, collapses it to one core.

The old font test matched /geist|system-ui|sans-serif/, so it passed on the
fallback: the exact failure it existed to catch. Both checks ask the font
loader now. shots.mjs asks for Zen Mono only where a page renders mono, because
a face loads when a glyph wants it; mutation-checked by aborting **/*.woff2.

CommandPalette was controlled, nothing ever owned it, and its global handler
could only close — so Cmd+K opened nothing and its test had never passed. A
palette is the thing Cmd+K opens, so it owns the shortcut and mounts itself.

51 pages, 414/414 gui classes covered, 36/36 e2e, 60/60 routes across
phone+desktop x light+dark.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-24 09:51:17 -07:00
..