Skip to content

Release v1.9.8: fit metric rows to narrow grid columns - #69

Merged
binlecode merged 1 commit into
mainfrom
release-v1.9.8
Aug 13, 2026
Merged

binlecode merged 1 commit into
mainfrom
release-v1.9.8

Conversation

@binlecode

Copy link
Copy Markdown
Owner

Summary

At _GRID_MIN_WIDTH (96 cols) each dashboard box gets ~44 content columns, and the longest rows are wider than that, so Textual clipped their tails. Observed on the published hero GIF (dashboard split against the process table, ~47 cols/column):

  • P-CPU 36% @2121MHz (117°C) avg 35% · max 40 — missing %
  • GPU 100% @1578MHz (103°C) avg 100% · max — max value gone entirely
  • P-CPU [bar] idle64 low1 mid5 — high16 gone
  • ↑ Out 33.8 KB/s avg 33.9 KB/s · max 66.0 — missing unit

Carried open since 1.5.0.

Behavior change

Metric rows are width-adaptive instead of hard-clipped. The rolling context degrades through three tiers, each row picking the widest that fits its own measured width:

avg N% · max N%   ->   ⌀N ▲N%   ->   ▲N%   ->   (nothing)

Applies to every labelled row (P-CPU/E-CPU, GPU, ANE, RAM, Mem BW, the four I/O rates, CPU/GPU/Package power). The reading itself is never shortened to make room for its annotation. Residency rows size their density bar to what a worst-case breakdown leaves (16 chars down to 8, dropped below that), so the four percentages always survive.

The fit is computed from each row's high-water widths, not the current frame's, so a row sitting on a tier boundary holds its form instead of flipping between shapes as digits come and go (avg 8% -> avg 10%, 987MHz -> 1987MHz). Verified live: 12s at 96 cols on an M4 Max, form stable throughout.

? help and docs/SPEC-system.md §6.3 document the ⌀/▲ compact form.

Also in this PR

  • Hero GIF re-recorded off the fixed build (v1.9.8 banner, 4.4 MB / 176 frames); README alt text corrected — the tape has recorded grid + per-core + theme cycling since 1.9.x, but the alt text still described the old stack take.
  • Release-noise rule (CLAUDE.md): normal PRs no longer bump the version, only release PRs do; a new "When to cut a release" section gates releases on user-visible change. 1.9.2–1.9.7 — six releases in forty minutes, each fixing the release pipeline that shipped the one before it — are recorded there as the failure mode. The 1.9.8 notes tell users to skip 1.9.1–1.9.7.

Validation

  • .venv/bin/pytest -q — 150 passed
  • .venv/bin/ruff check . / ruff format --check . — clean
  • .venv/bin/python -m actop.actop --help
  • Ran on macOS 15 / Apple M4 Max at 60, 80, 96, 110, 120, 160 cols (grid and stack, with and without swap in use): no row overflows its column, residency breakdowns intact.
  • New test test_narrow_grid_columns_degrade_context_instead_of_clipping_rows mounts the real dashboard at 96 cols via App.run_test() and drives real SystemSnapshots through update_metrics; test_residency_bar_has_no_gaps_or_overflow_at_full_width renamed and given a settled layout, since a fixed 16-char bar is no longer the contract.

🤖 Generated with Claude Code

At _GRID_MIN_WIDTH (96 cols) each dashboard box gets ~44 content columns,
and the longest rows are wider than that — the P-CPU summary lost the `%`
off `avg 41% · max 41`, every residency row lost `high37` outright, and
with the process table on the GPU/RAM rows lost their max value entirely.

Metric rows are now width-adaptive instead of hard-clipped: the rolling
context degrades through three tiers (`avg N% · max N%` -> `⌀N ▲N%` ->
`▲N%` -> nothing), fitted per row against its own high-water widths so a
row on a tier boundary holds its form instead of flipping on a digit.
Residency rows size their bar to what a worst-case breakdown leaves.

Also: re-records the hero GIF off the fixed build, and gates releases on
user-visible change in CLAUDE.md so the 1.9.2-1.9.7 noise does not recur.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@binlecode
binlecode merged commit 585f080 into main Aug 13, 2026
5 checks passed
@binlecode
binlecode deleted the release-v1.9.8 branch August 13, 2026 12:52
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