Skip to content

The eighty-column truncation #24 fixed is still in the ranking and rejections views #35

Description

@vyncint

2.0.0 fixed one line of this, in one view

The chosen configuration's interval was cut mid-value at eighty columns, and
#24 fixed it by dropping
the interval whole when it does not fit. The same defect stands in the two
views below the overview, and one of them is worse.

The ranking view loses every closing bracket

crates/launchbound-tui/tests/golden/ranking-scrolled-80x24.txt — the recorded
frame, so this is shipped behaviour. All five visible rows:

│  c1-0000000000000004  block_x=32 tile=256 unroll=0  0.0520 ms [0.0517, 0.0523│
│  c1-0000000000000005  block_x=32 tile=256 unroll=2  0.0550 ms [0.0547, 0.0553│
│  c1-0000000000000006  block_x=32 tile=256 unroll=4  0.0580 ms [0.0577, 0.0583│
│  c1-0000000000000007  block_x=32 tile=512 unroll=0  0.0610 ms [0.0607, 0.0613│
│  c1-0000000000000008  block_x=32 tile=512 unroll=2  0.0640 ms [0.0637, 0.0643│

One character short, every row. An unclosed interval reads as a rendering
fault rather than as a number.

The rejections view loses the half that tells you what to do

rejections-80x24.txt, and this is the view the README calls the point of the
tool:

│    RC001 at src/lib.rs:33:13: divergence source `warp_id()` splits a 64-threa│
│                                                                              │
│all refused configurations:                                                   │
│      RC001 at src/lib.rs:33:13: divergence source `warp_id()` splits a 64-thr│

The next line is blank — this is truncation, not wrapping. The full reason is:

divergence source warp_id() splits a 64-thread block (2 warps) at a
block-wide barrier; safe only at one warp (<= 32 threads)

The reader gets as far as 64-threa and never reaches safe only at one warp (<= 32 threads) — the only part that says what to do about it. Every refusal
in the list is cut at the same place, and nothing marks the text as truncated,
so it reads as the whole reason.

Fix

Same shape as #24: decide the precedence and shorten by dropping whole fields,
not by cutting bytes.

  • Ranking rows: the id, config and time outrank the interval. Drop
    [lo, hi] when it does not fit whole, as the chosen line now does — the
    helper chosen_tail in app.rs is the pattern.
  • Rejection reasons: these must wrap, not shorten. The rule and span are
    the address; the sentence after them is the content, and the actionable
    clause is at the end. Line/Paragraph with Wrap { trim: false } gives
    the panel the two or three rows it needs. If a hard cap is wanted anyway,
    an ellipsis has to mark it — a silently cut sentence is the failure here.

And a guard, so this stops recurring

Three views, three instances, two fixed one at a time. Worth a test over the
golden frames asserting that no rendered line reaches the right border with a
character that cannot end a field — a digit, ,, [, (, =, - — which
is exactly the scan that found both of these:

awk 'NR>1 && /│$/ { l=$0; sub(/│$/,"",l); if (l ~ /[,\[(=-]$/ || l ~ /[0-9]$/) print FILENAME": "$0 }' *.txt

It would have caught #24 before it shipped, and both of these with it.

Done when

Nothing in any view at eighty columns is cut mid-value or mid-word without an
ellipsis, and a test over the goldens says so.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions