The header used '{:3}core' (7 chars) while load-average values used
'{:>6.2f}' (6 chars), so '16core' overhung the right edge by 1
character compared to '0.96'/'0.81'/'0.83'. Drop the int padding and
rjust the whole corecount cell to the same width as the value cells
(6 chars), keeping right edges aligned across all four rows of the
block.
Two new tests pin the invariant: every value cell shares the same
width, and every rendered line has the same total width.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two related changes:
1. Top row order (v4 fidelity):
build_frame now sorts frame.top / frame.left / frame.right by their
slot-declared position (TOP_SLOT / LEFT_SLOT / RIGHT_SLOT), not the
discovery order. Discovery is alphabetical (cpu, load, mem); v4
renders cpu -> mem -> load. The sort fixes the order regardless of
discovery order.
2. load plugin per-plugin TUI renderer:
LOAD 16core
1 min 0.96
5 min 0.81
15 min 0.83
- Line 1: LOAD HEADER + Ncore suffix from cpucore (which is marked
internal, so the generic renderer would skip it; here we use it
specifically as the header suffix, mirroring v4).
- Lines 2-4: 1 min / 5 min / 15 min + value formatted as {:>6.2f}.
- Color decoration from _levels.minN (min5 / min15 watched).
- Irix mode (v4 --disable-irix) deferred until v5 has the flag.
Reference: glances/plugins/load/__init__.py::msg_curse.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>