Build the actual local benchmark viewer in ./paper_bench/. The user explicitly requests Claude Opus 5.5 high, using claude -p and the frontend-design method. Do the implementation, not just a plan. Read first: - ../../AGENTS.md and the repository instructions supplied by the caller. Work ONLY under this paper2_bench directory. Never alter main checkout main/, the manuscript/builder, reference MATLAB code, or existing benchmark MATLAB/data files. - C:/Users/Victus/.claude/plugins/cache/claude-code-plugins/frontend-design/1.1.0/skills/frontend-design/SKILL.md. Apply its plan/critique/build/critique method explicitly. Save a short design rationale in paper_bench/DESIGN.md. - C:/Users/Victus/.codex/skills/build-technical-report/SKILL.md and its references design-system.md, articles-and-components.md, reusable-blocks.md, interactive-plots.md. An unmodified scaffold already exists in paper_bench. Follow the component/report registry architecture. Keep Plotly vendored, pinned, offline-capable. - C:/Users/Victus/.codex/skills/uncodixify/SKILL.md. Validate ALL created/edited HTML with its native tool. You may run node C:/Users/Victus/.codex/skills/uncodixify/node_modules/tsx/dist/cli.mjs C:/Users/Victus/.codex/skills/uncodixify/toolchain/uncodixify.ts ABSOLUTE_HTML_PATH. Fix until successful. No bash/WSL dependency. - paper_code_bridge_findings.txt and paper_code_bridge_equations.tex are the factual source. Earlier paper_simple_findings is superseded. Do not conceal bad seeds or idle results behind J. Purpose: let an engineering author VISUALLY CHECK the benchmark for all eight cases and inspect differences between code, paper, one/two/three code-derived changes, older alternatives and four/five-change diagnostics. Page name/URL directory is paper_bench. This is an evidence viewer, not marketing. Keep explanations short and adjacent to plots. Real data only. Data contract (the parent agent is generating these concurrently; do not generate/alter data or MATLAB): paper_bench/data/manifest.json: {title,target:0.4,unsafeThreshold:0.38,scoreStart:5,scenarios:[{id,label,seedOffset,idle}], methods:[{id,label,changes,options}],cases:[{id,history,band,adaptive}],sources:[...],notes:[...]} Scenario ids: original (offset 0), seed-7000, seed-8000, seed-9000, idle (offset 0; excitation off 55--70 s). Method ids: code,paper,reference,ref-gate,ref-gate-up,ref-gate-guard,ref-gate-activity,ref-gate-smooth,old-rho,slow-rho,four,five. paper_bench/data/runs/{scenarioId}/{methodId}.json: {scenarioId,methodId,target,unsafeThreshold,scoreStart,cases:[{id,history,band,adaptive,metrics:{err,rough,travel,unsafe},tc:[...],delta:[...],b_est:[...],b_true:[...],lambda:[...],signals:'data/signals/{scenarioId}/{methodId}/case-{id}.json.gz'}]} All margin/lambda arrays have the SAME tc, 8 Hz, full 120 s; initial unavailable estimates are null. They are authentic MATLAB outputs. metrics are exact runner metrics (t>=5 s). Each method has its OWN b_true, because active lambda changes the actual loop. Never overlay one common true curve for different active methods. The optional lazy signal file is gzip-compressed JSON {t:[...],dc:[...],dm:[...]}, full 256 Hz sampled traces, displacement mm. Fetch as ArrayBuffer/blob and use native DecompressionStream('gzip') to decode. Do not ask server to decompress or use fake signals. This can be an expandable plot below the main detail. No initial load of every signal file. All-study summary: data/study-summary.csv and data/seed-metrics.csv, copied verbatim from study exports. Can provide download links and a filterable table for the complete 22-single/21-pair/39-triple study; time-series plots are the 12-method shortlist, clearly distinguish them. data/idle-memory.json: {methods:[labels],evidenceHighPct:[numbers],evidenceLowPct:[numbers]} from controlled one-second idle check. If data isn't present yet build against this schema and show a useful loading state. Do not overwrite data/. The parent will finish data and perform browser verification. Required UX: 1. Opening view: live eight-case visual matrix, selected method (default ref-gate-up or paper), original seed, with code/paper shortcuts. Meaningful compact heading, no giant hero. All eight cases individually labelled sudden/gradual, wide/narrow, fixed/active lambda. 2. Each case shows true vs estimated margin, b_tar=0.4 dashed line and unsafe threshold=0.38 distinct dotted line. Shade damage intervals or show delta underneath. Explicit unsafe interval indication and per-case unsafe %, error; don't average away Cases 7/8. Fixed cases say lambda fixed. 3. Use one Plotly scattergl figure with subplots for the eight-case matrix to avoid exhausting WebGL contexts. It can be 4x2 desktop and 8x1 mobile. Click/select a case to inspect it. Provide semantic case buttons for keyboard access (not only canvas clicks). 4. Case detail: margin estimate AND method-specific true margin, lambda, signed estimation error b_est-b_true, damage delta vs time. Comparative selector for another method (default code). Show matching per-case metric table, explain scoring t>=5 s, roughness=1000*median absolute second differences; unsafe is percentage below 0.38. Avoid overfull legends. Case changes can use dropdown and a labelled slider with visible Case 1..8 value. 5. Detail plots share time range, with obvious Full record / Damage / Idle window and Reset zoom controls. Native Plotly legends toggle traces, zoom/reset works, and use uirevision intelligently. Clearing/resetting must visibly reset axes. Preserve method comparison semantics. 6. Scenarios: original + EACH unseen seed independently + drive-idle-drive, all eight cases. Show actual seed per case = offset+11/12/21/22. Never invent an averaged time history. 7. Separate findings/methods article explains reference timing, arithmetic gate, third-change tradeoffs, parameters; separate idle evidence section (controlled memory test distinct from real drive-idle-drive). Highlight code itself fails seed 7021 and idle tests. Avoid claiming validated safety or certified NCF beyond supplied benchmark definitions. 8. Data/source links, per-case/whole-run JSON download, complete summary CSV downloads. Fetch scope local only, no backend needed. Any equations use MathML/plain readable math. 9. Responsive and accessible, 13px minimum dense labels, legible axes; disabled/loading state on selectors only as necessary. No clipped content/overlap. Dark restrained engineering report, readable wide plots; theme toggle if scaffold provides it. Colors: measured displacement blue #007CA8; command Copperwood #AC6420; margin estimate green #39BF5E; lambda red #901500; true margin black/light foreground depending theme contrast; force purple only if present (no force data here). Pair colors with labels/styles. Consistent styles across views. 10. No placeholder articles/metrics or demo plots remain. No network-loaded chart library. IBM Plex font request may use fallback offline. Keep UI components in components/, behavior scripts/, CSS styles/, config registry data/report-config.json. Don't modify manifest/runs/signals/study data. Workflow boundaries: - Use pnpm for any JS packages, never npm. Prefer no new build dependencies. - Do NOT run MATLAB or physical hardware. Parent owns data export and source numerical checks. - Do NOT start browsers or install browser tooling; parent will inspect the finished site. - Do NOT start a server (parent will keep it running). No commits or pushes. - Run technical-report structural validator and native uncodixify validator on all HTML. These checks are explicitly authorized and required. Ensure no modified HTML remains unvalidated. - Add no screenshots/images unless justified by benchmark evidence. The time histories are the main visual. - Finish by listing implemented files, checks, and any real remaining issue. Do not claim browser testing you did not perform.