Spec
Design doc: docs/characterization-results-design.md (PR #878).
Model
The three consumers of a characterization run — a written report (quantitative "how well"), a good/bad verdict, and AI input (the sweep) — are three projections over one archived per-play record {config (IV), continuous metrics (DV), labels (thresholded), hypothesis?}. Labels are a lossy, thresholded view (s1=1.2s and s6=5s both get no qoe_vst_breach), so the continuous report is first-class — the only view that ranks the "good" configs. The report's unit is the study (N reps × M variations), not the physical ≤4-concurrent group.
Scope (gaps from the design doc)
Recommended first cut
Gap 0 + Gap 1 together — deliver the study report over the archive (subsumes the current hand-query). Verdict-wiring (Gap 2) and baselines (Gap 3) layer on after.
Spec
Design doc:
docs/characterization-results-design.md(PR #878).Model
The three consumers of a characterization run — a written report (quantitative "how well"), a good/bad verdict, and AI input (the sweep) — are three projections over one archived per-play record
{config (IV), continuous metrics (DV), labels (thresholded), hypothesis?}. Labels are a lossy, thresholded view (s1=1.2s and s6=5s both get noqoe_vst_breach), so the continuous report is first-class — the only view that ranks the "good" configs. The report's unit is the study (N reps × M variations), not the physical ≤4-concurrent group.Scope (gaps from the design doc)
study_id(stamp at launch) and/or a savedscenariofacet filter, plus acontrol_eventscorrelation to strip environmental (non-config) failures at small-N, and interleave configs within reps.plays-summary× labels into a comparison + IV→DV response curve; always show the metric value even when "good"; reps → distribution. UI-first. (First cut, with Gap 0.)verdict. Populate the dead char-matrixverdictcolumn fromworstSeverity()+qoe_tier_*(absolute, class-aware).why/why_textto char-matrix/mode runs to complete the experiment-record model + feed the AI.Report.Summaryfor the archiveplays-summary, or keep only their sample-rich per-step detail.Recommended first cut
Gap 0 + Gap 1 together — deliver the study report over the archive (subsumes the current hand-query). Verdict-wiring (Gap 2) and baselines (Gap 3) layer on after.