OpenSpec proposal: openspec/changes/add-measurement-statistical-rigor/
Bundles 4 features
- A1 SPRT adaptive sample size — replace fixed N=5 loop in
packages/core/src/engine.ts with Sequential Probability Ratio Test; terminate when LLR crosses threshold at α=β=0.05; cap N_max=30.
- A2 CrUX field anchor — fetch
chromeuxreport.googleapis.com for URL+origin+formFactor; compute representativeness_score; flag unrepresentative_lab when divergence > 0.3.
- A3 Self-impact subtraction via paired ghost run —
RunMode='instrumented'|'ghost'; subtract observer overhead from headline LCP via passive CDP PerformanceTimeline domain.
- B8 Provenance fingerprint —
sha256(URL + calibration + fixtures + ohmyperfVersion + taxonomyVersion) on Report.meta.captureFingerprint.
Status
Phase 5 OpenSpec artifacts COMMITTED (4e00711). Self-review verdict: APPROVED-WITH-CONDITIONS, 6 fixes applied inline. 5 open questions for user sign-off before M0 starts.
Effort
M-large (~1 week)
Dependencies
None (foundation for #3 and #5)
🤖 Generated by harness-init dogfood + Sisyphus v2 strategy
OpenSpec proposal:
openspec/changes/add-measurement-statistical-rigor/Bundles 4 features
packages/core/src/engine.tswith Sequential Probability Ratio Test; terminate when LLR crosses threshold at α=β=0.05; cap N_max=30.chromeuxreport.googleapis.comfor URL+origin+formFactor; computerepresentativeness_score; flagunrepresentative_labwhen divergence > 0.3.RunMode='instrumented'|'ghost'; subtract observer overhead from headline LCP via passive CDPPerformanceTimelinedomain.sha256(URL + calibration + fixtures + ohmyperfVersion + taxonomyVersion)onReport.meta.captureFingerprint.Status
Phase 5 OpenSpec artifacts COMMITTED (
4e00711). Self-review verdict: APPROVED-WITH-CONDITIONS, 6 fixes applied inline. 5 open questions for user sign-off before M0 starts.Effort
M-large (~1 week)
Dependencies
None (foundation for #3 and #5)
🤖 Generated by harness-init dogfood + Sisyphus v2 strategy