Bake the Phase-4 font-ladder rungs and the Inter Bold weight axis
The Phase-4 design sheets and the handoff ladder (tokens.json) call for
per-device role sizes and 600/700 title weights that had no baked atlas,
forcing every fidelity pass to snap to the nearest rung or the 1 px
synthetic bold smear. Bake them:
- New regular rungs: sans 11/13/14/15/17 (tab labels, Stick rows, Stick
header, Cardputer title, CoreInk title), mono 14/17/56 (mask/bond rows,
Stick TOTP list codes, handoff mono.xl PIN hero).
- New weight axis: Inter Bold (700) at 10-24 px, vendored from the same
rsms/inter v4.1 release, gated per board by
KLEIDOS_FONT_SANS_USE_BOLD_<n> and routed like the regular segments.
- text_renderer: ladder-driven resolution (nearestInLadder over the full
per-family rung set) plus weight-aware resolveStyledAtlas — a bold
TextStyle now draws and measures from a baked bold rung within a 1.2x
resample window, falling back to the synthetic offset otherwise;
textWidth/fontHeight grow a defaulted bold parameter so datum-aligned
bold runs measure the face they draw.
- Variants link their sheet's role rungs (Stick 11/13/14 + bold 11-16,
Cardputer 13-17 + bold, CoreInk 11/14/17 + bold, large panels 13/15 +
bold 13-20 + mono 56).
- Native suite covers the new rungs (sans-14 metrics, bold/regular
line-metric parity, bold ink dominance); test_aa_font links the sans 14
regular + bold fixtures.
- The large-file hook gets a scoped, documented exclude for the generated
AA atlas segments (mono-56 crosses 512 KB by design), mirroring the
existing BrandAtlas exception.
Existing atlases are byte-identical (same subset, same pipeline); role
default mappings are intentionally unchanged — screens adopt the new
rungs in the per-device fidelity passes.
Claude-Session: https://claude.ai/code/session_01P6BNTpbgrvnZXSJnNuj8ZJ