Skip to content

feat: v3.5.0 — classic/bold redesigned as 5-row shade weights for exact footprint parity#21

Merged
aedneth merged 1 commit into
mainfrom
feat/v3.5.0-classic-bold-5row-parity
Jun 11, 2026
Merged

feat: v3.5.0 — classic/bold redesigned as 5-row shade weights for exact footprint parity#21
aedneth merged 1 commit into
mainfrom
feat/v3.5.0-classic-bold-5row-parity

Conversation

@aedneth

@aedneth aedneth commented Jun 11, 2026

Copy link
Copy Markdown
Owner

Summary

Dogfooding v3.4.1 in a minimized window surfaced two persistent issues with classic/bold:

  1. They still didn't match the exact dimensions (width/height/footprint) of the other four styles — so cycling styles with d broke the visual composition.
  2. In a minimized, non-zen window, pressing the style cycle to classic/bold showed the plain block style instead (a silent fallback), while every other style rendered perfectly.

Root cause: classic/bold were defined as 9-row tall letterforms (STYLE_METRICS rows: 9 vs 5 for every other style). A 9-row glyph physically cannot occupy the same 5 rows as block/simple/outline/minimal, so the v3.4.1 footprint logic did the only thing it could in a short window — fell back to block — and in taller windows they towered / covered the goal. No scaling trick fixes this; the fonts themselves had to become 5 rows.

Fix: Redesign classic/bold as 5-row shade-weight variants of block — the EXACT same 5-row × 4-col geometry, inked with (classic, light weight) / (bold, heavy) instead of full . All six styles now share one identical footprint; classic/bold render their own ink at every window size, never falling back to block or hiding the goal. The tall-font / fallback-to-block path is removed from planCounter; uniformCounterScale becomes a thin wrapper.

What changed

  • src/lib/bigfont.ts — classic/bold STYLE_METRICS{rows:5,digitW:4,colonW:1} (parity with block); render classic as block geometry inked , bold inked ; removed the 9-row glyph tables + renderTallSolid; uniformCounterScale simplified.
  • src/tui/views/session.tsplanCounter simplified to a single 5-row ladder (no isTall/tallKeepsFootprint/block fallback).
  • src/schemas/config.ts — classic/bold docstrings updated.
  • testsbigfont.test.ts + session-view.test.ts updated for 5-row / fonts: base-row parity, exact width/row-count parity with block, classic / bold (never ), and "no fallback to block in a tight window" guards.
  • docs — README (style descriptions, samples, config table, roadmap), CHANGELOG [3.5.0], version bump.

Verification

  • build ✓ · typecheck ✓ · lint ✓ · 604 tests
  • Empirical sweep across 1189 windows (w 60–140 × h 12–40): classic/bold glyph-row footprint == block in every window; 0 fallbacks to block; goal visibility consistent across all six styles.

🤖 Generated with Claude Code

…ct footprint parity

classic/bold were tall 9-row letterforms that could not share the 5-row
footprint of the other styles: in a minimized, non-zen window with metadata
they towered over the others, covered the session goal, or silently fell back
to the block style (the "press B and only block shows" bug).

Redesign them as 5-row shade-weight variants of block — the EXACT same
5-row × 4-col geometry, inked with ▒ (classic, light weight) / ▓ (bold, heavy)
instead of full █. All six styles now share one identical footprint; classic
and bold render their own ink at every window size, never falling back to block
or hiding the goal. planCounter drops the tall-font / fallback-to-block path;
uniformCounterScale becomes a thin wrapper over computeSessionScale. Verified
across 1189 windows: footprint parity in every window, zero fallbacks, goal
visibility consistent across all six styles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@aedneth aedneth merged commit 1292a40 into main Jun 11, 2026
6 checks passed
@aedneth aedneth deleted the feat/v3.5.0-classic-bold-5row-parity branch June 11, 2026 17:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant