Adopt shared sortable-table core; apply to /informes + sweep non-sortable tables
Brainstorm bs-mr4rmdgg241 (Elazar: venus tables non-sortable in /informes + elsewhere). Fleet consensus (4 PMs): adopt Pluto's already-headless core (lib/sort-utils.ts + hooks/use-sortable-table.ts) as shared base — tri-state asc→desc→CLEAR, deterministic id-tiebreak, nullsLast opt-in (default flips with dir). Venus builds its OWN SCSS keyboard-accessible head: button/tabIndex/onKeyDown + aria-sort + tri-state glyph (all current heads have a <th onClick> keyboard gap). Apply to /informes first, then sweep other non-sortable tables; per-column sortValue (never sort the display string), per-column nulls policy; client-sort (<500 rows), server-sortable head only if a table grows. BLOCKED on: (1) shared-core publish location + owner (fleet-commons decision), (2) brainstorm close naming the import path.
Questions
Activity
-
vendored pluto sort-core SSOT byte-exact (sort-utils.ts+use-sortable-table.ts, SHA 6f3243f v2.0.1); built venus SortableTableResponsive keyboard-accessible head (native button Enter/Space+tab, aria-sort passthrough, tri-state incl clear) fixing th-onClick keyboard gap; per-column sortValue sorts value not rendered string; applied to /informes all 3 tables (sede/módulo/ranking). daysSinceBA server-frozen todayBA prop avoids hydration mismatch. 6cde521 v0.78.0 Class-A sonnet PASS. Remaining-table sweep spun to VENUS-136.