Contexte
La relecture post-audit (finding par finding) a trouvé deux micro-items perf qui figuraient sur la ligne 127 de la roadmap passe 2 (lot P2-C : « memo(LiteMarkdown), fixes HRT (rows, LabChart hover), heatmap Journal montée ») mais qui n'ont pas été livrés et n'ont pas été annotés « non livré ». Les deux autres items de la ligne (memo(LiteMarkdown), HRT rows) ont bien été faits.
Ni l'un ni l'autre n'est bloquant — ce sont des micro-optimisations de rendu. Mais ils étaient dans le plan, donc on les trace.
1. LabChart — recalcule toute la géométrie à chaque survol
packages/web/src/app/flow/HRT/components/LabChart.tsx
coords / linePath / areaPath sont calculés inline au render (≈ lignes 201-206), pas dans un useMemo. Le survol met à jour hover (setHover, ligne 170) → chaque mouvement de souris re-render le composant et recalcule tout le tracé SVG. C'est exactement le motif que l'audit pointait.
Correctif : useMemo sur coords/linePath/areaPath (deps : points/échelles), de sorte que le survol ne recalcule que l'index actif (active), pas la géométrie.
2. Journal — la heatmap se démonte/remonte à chaque toggle
packages/web/src/app/flow/Journal/views/PrimaryColumn.tsx:88 fait {!chartCollapsed ? <Chart /> : null} → démontage/remontage complet du graphe à chaque ouverture/fermeture.
Mood fait déjà mieux (packages/web/src/app/flow/Mood/views/PrimaryColumn.tsx:120-136) : le <Chart/> reste monté en permanence, masqué par une transition CSS grid-rows (1fr ↔ 0fr). Pas de remontage, pas de recalcul heatmap.
Correctif : appliquer le pattern Mood à Journal (garder le Chart monté derrière le collapse CSS).
Critères d'acceptation
Réf : docs/Audit-2026-06-passe2.md ligne 127 ; relecture post-audit.
Contexte
La relecture post-audit (finding par finding) a trouvé deux micro-items perf qui figuraient sur la ligne 127 de la roadmap passe 2 (lot P2-C : «
memo(LiteMarkdown), fixes HRT (rows, LabChart hover), heatmap Journal montée ») mais qui n'ont pas été livrés et n'ont pas été annotés « non livré ». Les deux autres items de la ligne (memo(LiteMarkdown), HRT rows) ont bien été faits.Ni l'un ni l'autre n'est bloquant — ce sont des micro-optimisations de rendu. Mais ils étaient dans le plan, donc on les trace.
1. LabChart — recalcule toute la géométrie à chaque survol
packages/web/src/app/flow/HRT/components/LabChart.tsxcoords/linePath/areaPathsont calculés inline au render (≈ lignes 201-206), pas dans unuseMemo. Le survol met à jourhover(setHover, ligne 170) → chaque mouvement de souris re-render le composant et recalcule tout le tracé SVG. C'est exactement le motif que l'audit pointait.Correctif :
useMemosurcoords/linePath/areaPath(deps : points/échelles), de sorte que le survol ne recalcule que l'index actif (active), pas la géométrie.2. Journal — la heatmap se démonte/remonte à chaque toggle
packages/web/src/app/flow/Journal/views/PrimaryColumn.tsx:88fait{!chartCollapsed ? <Chart /> : null}→ démontage/remontage complet du graphe à chaque ouverture/fermeture.Mood fait déjà mieux (
packages/web/src/app/flow/Mood/views/PrimaryColumn.tsx:120-136) : le<Chart/>reste monté en permanence, masqué par une transition CSSgrid-rows(1fr↔0fr). Pas de remontage, pas de recalcul heatmap.Correctif : appliquer le pattern Mood à Journal (garder le Chart monté derrière le collapse CSS).
Critères d'acceptation
Réf :
docs/Audit-2026-06-passe2.mdligne 127 ; relecture post-audit.