Depends on #27; consumed by the #28 pages and pushed live by #29.
Decision 2026-08-05: no JS charting libraries and no d3/React islands — charts are SVG emitted by the server and updated by fragment patches like everything else.
Scope
- A small chart module (hand-rolled SVG or a light crate like
poloto/charming-svg — evaluate, but hand-rolled is likely fine for line/scatter): fitness over generations, novelty score distribution, per-island best
- Emit stable element ids so Datastar morphs chart updates instead of replacing them (no flicker on live update)
- Hover detail via CSS +
<title> tooltips, or data-on-click on points → server patches a detail panel — no JS
- Dark/light friendly: use CSS variables for stroke/fill so the page theme flows into the SVG
Definition of done
Run overview shows live-updating fitness + novelty charts during an active evolution, pixel-stable between patches except for genuinely new data.
Depends on #27; consumed by the #28 pages and pushed live by #29.
Decision 2026-08-05: no JS charting libraries and no d3/React islands — charts are SVG emitted by the server and updated by fragment patches like everything else.
Scope
poloto/charming-svg — evaluate, but hand-rolled is likely fine for line/scatter): fitness over generations, novelty score distribution, per-island best<title>tooltips, ordata-on-clickon points → server patches a detail panel — no JSDefinition of done
Run overview shows live-updating fitness + novelty charts during an active evolution, pixel-stable between patches except for genuinely new data.