From 5b3283a2b3f366759857221597c5065c46b317f9 Mon Sep 17 00:00:00 2001 From: Matthew Valancy Date: Sat, 20 Jun 2026 09:16:41 -0700 Subject: [PATCH] fix(dashboard): scale-sweep drift chart no longer reads as permanent budget breach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Layout drift" trend (budget 25px) was fed only by scale-sweep rmsFromSavedPx, which measures how far force layout wanders synthetic seeded graphs from their seed positions — expected to grow with size, not a fidelity signal. The real 25px placed-graph fidelity guard is enforced in graph-perf.spec.ts. Retitle to "Layout wander vs size" and drop the misapplied budget so the dashboard stops showing a permanent 136px-vs-25px false breach. Same fix in the static perf report. Co-Authored-By: Claude Opus 4.8 (1M context) --- tests/lib/dashboard/app.mjs | 2 +- tests/lib/reporting/generate-perf-report.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/lib/dashboard/app.mjs b/tests/lib/dashboard/app.mjs index 7f2c6432..cbcb2d5a 100644 --- a/tests/lib/dashboard/app.mjs +++ b/tests/lib/dashboard/app.mjs @@ -67,7 +67,7 @@ const CHART_DEFS = [ { metric: 'graph.loadMs', title: 'Graph load time', unit: 'ms', budget: null }, { metric: 'graph.avgTickMs', title: 'Sim tick cost', unit: 'ms', budget: 8 }, { metric: 'graph.queryP95Ms', title: 'Query p95 latency', unit: 'ms', budget: 800 }, - { metric: 'graph.driftPx', title: 'Layout drift', unit: 'px', budget: 25 }, + { metric: 'graph.driftPx', title: 'Layout wander vs size (scale sweep)', unit: 'px' }, { metric: 'physics.settleSeconds', title: 'Physics settle time', unit: 's' }, { metric: 'vlm.score', title: 'VLM visual score', unit: 'score' }, ]; diff --git a/tests/lib/reporting/generate-perf-report.mjs b/tests/lib/reporting/generate-perf-report.mjs index 8cd78d82..04fd53fc 100644 --- a/tests/lib/reporting/generate-perf-report.mjs +++ b/tests/lib/reporting/generate-perf-report.mjs @@ -99,7 +99,7 @@ ${lineChart('Interaction FPS vs size (drag)', 'interactionFps', { unit: '' })} ${lineChart('Initial load vs size', 'loadMs', { unit: 'ms' })} ${lineChart('Avg simulation tick vs size', 'avgTickMs', { unit: 'ms', budget: 8 })} ${lineChart('Settle time vs size', 'settleMs', { unit: 'ms' })} -${lineChart('Layout drift vs size', 'rmsFromSavedPx', { unit: 'px', budget: 25 })} +${lineChart('Layout wander vs size (seed displacement)', 'rmsFromSavedPx', { unit: 'px' })} ${lineChart('Query p95 latency vs size', 'queryP95Ms', { unit: 'ms', budget: 800 })}

All metrics