v4.6.0 — if it needs a person, it is a link
Anything drawn at att or warn is now an anchor to where it can be acted on:
tiles to their banner or their tab, board cards to the row or check behind
them, a failed Stage 5 row to the checks banner.
Calm things stay plain, deliberately. Making everything clickable destroys the
signal the loud things carry, so a tile at level '' renders as a div and a
linked one renders as an — the level decides, not the author.
Cross-panel links open the target's panel before jumping. A fragment that
changes the hash without switching the tab lands the reader on a hidden
section, which is a worse dead end than no link: proven by removing the handler
and watching the hash move to #stage5 while the panel stayed on p-dash with the
target at display:none, height 0.
Two things deliberately left unlinked, both recorded in views.md. A blocked
backlog row is already where it is acted on, so a link there would be a 2-cycle
rather than a route; the link runs board card to row instead. And a check that
passed while covering less than it declared has no banner and nothing on the
page that says more than its own row does — a link landing somewhere silent
about what was clicked is the dead end this change removes.
The banners block now builds before the stat tiles, so a tile can read the id
of the banner that was actually emitted rather than guessing it. Proven a pure
move first: byte-identical output on four page shapes before any substantive
edit.