gritzko's ruling 2026-08-14: the lite pager gets a notion of an ACTIVE line and an ACTIVE token, rendered as a colour wash (bg lightness shift for the line, a stronger second wash for the token — composes over the diff/why washes, never a hue that drowns them). Keyboard then navigates the cursor, not just the scroll: Enter follows the ACTIVE token's U target when there is one, falling back to the active row's entry (today Enter only fires on the TOP row, _followRow(v.scroll)). A mouse click sets the cursor before following. lite/ pager ONLY for now — be's pager and C bro follow later, on their own tickets.
lite/view/pager.js (LITE-002) has scroll-only state: view = {hunks, path, rows, scroll, cols, wrap}; Enter/click follow via _followRow/_uriAt (hidden U toks), _screenToByte maps a click to a byte. lite/view/bro.js paints rows with attr composition (aOr, the LITE-010 diff wash slots) — the wash machinery the active line/token rendering rides on.
: bar, Enter, -/BS back, R/r, w wrap, h help.{hunk, off, end}); tokens per row come from the hunk's tok32 stream, same walk _screenToByte does.Cursor state + wash rendering + keys, in lite/view/pager.js (+ a paint hook in lite/view/bro.js if the row painter needs an "extra attr" arg).
view.cur = {row, tok}: active display row, active token index within it (tok optional — a line with no tokens is still an active line).U follower, or an F nav-target tok (ticket codes / file refs, the LITE-015 click path) — skipping plain text; a line with none has no active token.U target, F door hand-off), else the active row (the _followRow fallback); click = set cursor to the hit cell, then follow as today._uriAt string) instead of the top-row #L.h) regenerates from the ONE SHORTCUTS table, per BRO-007.lite/view/pager.js, lite/view/bro.js, lite/test/. No jsrc/, no jab/, no C. No VC ops.h → ?, wrap w → W.WASH_CUR_LINE + one WASH_CUR_TOK attr const in bro.js, OR'd in the row paint when the pager passes the cursor down; theme decides light/dark-safe shifts.U-backed tok, cross-row)_followRow fallbackaWash paints an UNWASHED cell grey 253 (near-white) — presumes a light default bg; a dark-terminal shift likely wants a theme probe (follow-up material, not amended here).Worker wt work/LITE-023, base ///lite/#2dc61618, 4 files staged (jab put), NO commit. Orchestrator re-ran the tests in the wt: green as reported.
view/bro.js +21: WASH_CUR_LINE/WASH_CUR_TOK + aWash()/washBg() — a bg LIGHTNESS step, not aOr (OR over bg VALUES would garble the LITE-010 diff washes into one grey); in/rm stay apart under the cursor.view/pager.js +200/-23: per-view cur = {row, tok} (tok=-1 none), wash paint, followable walk (U follower or F tok), scheme-B keys, NEW fwd stack (a/d; a push clears it), help→?, wrap→W, cursor-drags-viewport clamp.test/cursor/{pty.js,run.sh} new: PASS cursor 43 checks under jab (real openpty; frame-byte asserts: j/k wash moves w/o scroll, h/l cross-row hops + stronger wash, Enter follows the active token incl. a hidden-U chooser row, a/d back/fwd, s/w scroll w/o cursor move, ? help from SHORTCUTS, W wrap, click sets cursor). RED verified against the landed pager first.frame0-bar-top (h:→?:), key-j-scrolled frame1-shifted frame1-bar-pct (j = cursor now), key-w-wraps wrap-adds-rows wrap-shows-tail (w→W), enter-on-banner-notes (Enter fires on the active line, not the top row — the ticket's core change).Suggested commit: LITE-023: active line + token in the lite pager, scheme B keys