G strands ONE row on a blank screen, W throws without be.wrap, verb-less views mint a junk wrap key, UTF-16 truncationSmall verified defects in the pager's viewport clamp and wrap-default state; batched as one cleanup. 2026-07-07 audit, runtime-VERIFIED except where noted. Method Issues.
render() clamps scroll to rows.length - 1 (pager.js:349), not max(0, rows.length - viewRows): G, page-down past end, and wheel-down at the bottom all land showing a SINGLE row atop a blank screen (VERIFIED: 13 rows, 10-row screen → scroll 12, want 4). less semantics: bottom line rests at screen bottom.W writes be.wrap[...] unguarded (pager.js:480): with the be global absent it throws ReferenceError, with be.wrap missing TypeError — the throw escapes the key loop and KILLS the pager (VERIFIED); wrapFor (pager.js:49) and _composeCall both guard.be://… views) decode verb "" — they open with wrapFor("") (ignoring e.g. the cat default they visually are) and W mints a junk be.wrap[""] key with the message wrap default ?: soft (VERIFIED)._fit/_banner truncate/pad by UTF-16 .length, not display columns (pager.js:427, :384): CJK banners overflow the inverse band; slice(0, cols) can split a surrogate pair → an unpaired surrogate through utf8.Encode (arithmetic-certain; width helper shared with BRO-020).W never throws; a verb-less view maps to a REAL type key (or W refuses politely); banner/status truncation is column-accurate.views/bro/pager.js only; the width helper lands with BRO-020 — depend, don't duplicate.