Summary
Investigation (directed by Captain, following the R&R-005 citation cleanup, #35) into whether the §9.3/§10 pooled attribute-κ gate is ready for ratification. Full writeup: qa/rr-study/RR-007.md.
Finding: ratification cannot proceed, and not for the reason §9.3 anticipated. The originally-flagged concern (S4's positive population includes sub-threshold SNRs, same class of contamination as R&R-005's S1 ANOVA problem — 21/66 = 31.8% of S4 signals sit below the −12 dB decodable floor) is real, but is not the binding constraint.
The binding problem: harness/matcher.py's S4 truth/matching records one pooled truth row per (part, trial) — not one per injected message — and scores a match as "did the appraiser decode any one of the N pooled messages." Every other correct decode in that cycle is discarded (falls through to Pass 2 as a spurious "false positive", excluded from κ by the false_positive == False filter). This creates a ceiling effect: run 793a298 shows both appraisers at a perfect TP=15/FN=0, κ=1.000, PASS — while the same run, same build's S7 (which correctly matches per-message) shows OpenWSFZ recovering only 40% of co-channel stacks vs WSJT-X's 100%. S4 cannot currently distinguish good QRM handling from bad.
Recommendation
- Attribute-κ gate remains advisory (no change to current behavior).
- Scope a harness redesign so S4 records and matches truth per individual message (carrying that message's own SNR), analogous to S7's existing per-message design — a prerequisite for evaluating the decodable-SNR-restricted population §9.3 already calls for.
- Re-run S4 and re-evaluate pooled κ against real per-message data before revisiting ratification.
See qa/rr-study/RR-007.md §4 for candidate acceptance criteria (draft, not yet ratified).
Scope note
Investigation and recommendation only — implementation not started, pending Captain decision on how to proceed.
Summary
Investigation (directed by Captain, following the R&R-005 citation cleanup, #35) into whether the §9.3/§10 pooled attribute-κ gate is ready for ratification. Full writeup:
qa/rr-study/RR-007.md.Finding: ratification cannot proceed, and not for the reason §9.3 anticipated. The originally-flagged concern (S4's positive population includes sub-threshold SNRs, same class of contamination as R&R-005's S1 ANOVA problem — 21/66 = 31.8% of S4 signals sit below the −12 dB decodable floor) is real, but is not the binding constraint.
The binding problem:
harness/matcher.py's S4 truth/matching records one pooled truth row per (part, trial) — not one per injected message — and scores a match as "did the appraiser decode any one of the N pooled messages." Every other correct decode in that cycle is discarded (falls through to Pass 2 as a spurious "false positive", excluded from κ by thefalse_positive == Falsefilter). This creates a ceiling effect: run793a298shows both appraisers at a perfect TP=15/FN=0, κ=1.000, PASS — while the same run, same build's S7 (which correctly matches per-message) shows OpenWSFZ recovering only 40% of co-channel stacks vs WSJT-X's 100%. S4 cannot currently distinguish good QRM handling from bad.Recommendation
See
qa/rr-study/RR-007.md§4 for candidate acceptance criteria (draft, not yet ratified).Scope note
Investigation and recommendation only — implementation not started, pending Captain decision on how to proceed.