Three fixes, all rooted in the 25-item recent_turns cap and the 2s poll.
PAGINATION
- Server cap 25 -> 500, env-overridable via SYN_DASHBOARD_RECENT_N
(read in server.ts /data route; delta.ts default also 500).
- Frontend paginates client-side, 25/page, with Prev/Next + "page X of Y"
+ "showing A-B of N". Live behavior is "always live, accept the shift":
renderTurns re-slices the current page from fresh data each poll;
turnsPage persists across polls. Pager hidden when <= 1 page.
DONUT
- renderDonut was tallying model families from the 25-capped recent_turns,
so a run of >25 same-model turns showed that model at 100% and hid the
rest. applyData now sums the uncapped projects[].models (full per-project
counts already in the payload) into a model->count map and passes that in.
Donut total = all-time turns-with-a-known-model across all projects;
decoupled from the turns cap.
POLL
- setInterval 2000 -> 10000. Lighter and steadier; synergizes with the
"accept the shift" pagination since the page re-slices every 10s not 2s.
bump 0.1.14 -> 0.1.15