v1.55.8
[1.55.8] — 2026-05-19
feat(tracker): server-side pagination + clickable funnel chips (UX-8).
✨ Features
- Server:
GET /api/trackergains optional?page/?pageSize/?statusquery params. With none, the response is byte-for-byte the legacy{ rows: [...] }(every existing caller/test untouched). With them, it returns{ rows: slice, total, page, pageSize, funnel }—pageSizeclamped to[1,500],pageclamped to≥1,statusfiltersrows+total, andfunnelis the whole-history status→count breakdown (independent of the page or status filter, so the UI chips are always accurate). #/tracker: a new clickable funnel summary chip bar at the top — "all statuses · N · Applied · N · Interview · N · Offer · N · Rejected · N …" (ordered Applied → Responded → Interview → Offer → Rejected → Discarded → Evaluated → SKIP). Clicking a chip sets the Status filter (clicking the active chip clears it); the active chip isaria-pressedand visually highlighted. The pipeline state is now legible at a glance instead of buried behind a dropdown. Feedback/forms lens.- New i18n key
track.funnelAria×8 locales; new token-based.tracker-funnel/.tracker-chip/.tracker-chip--activeCSS.
🧪 Tests
test: tests/tracker-server-paged.test.mjs(new, 7 cases, CI-isolated, in-process Express on an ephemeral port + tempCAREER_OPS_ROOTapplications.md fixture — CLAUDE.md #2/#8): back-compat (no params ⇒ exactly{rows}, no envelope leak);?page&pageSizeslice +total+page+pageSize+fullfunnelsumming to N; last partial page with no overlap; out-of-range page ⇒ empty rows + valid total;?status=filters total/rows while funnel stays whole-history;pageSizecap; plus a source-static lock on the.tracker-funnelchip bar (toggle-on-reclick,aria-pressed,track.funnelAria×8, CSS). 793 → 800.