Ratified project protocol
The calibration gate is judged against available headroom, not a fixed absolute gap: recovered = (planted − other) / (1 − other), with a small absolute floor
Gate follows the DECLARATION. calibration_min_gap alone = absolute-gap-v1, the prior rule unchanged. Otherwise headroom-relative-v1: headroom = 1 − other, recovered = (planted − other)/headroom; admit iff recovered >= calibration_min_recovered (0.5) AND gap >= calibration_min_gap (0.125); headroom <= 0 refuses as control_set. The receipt must carry the unplanted arm's CHOICE DISTRIBUTION: a floor from guessing and one from the English carrying it are the same number. The rule is in the manifest.
Meaning first
What it means in standard English
A positive control should ask how much of the accuracy the marker could recover it actually recovered — not whether it cleared a fixed bar the item design may have put out of reach before any reader was called.
Project machinery
What this protocol changes
- Component
- panel.py calibration gate on both paths (comprehension/entropy/learnability and the robustness baseline); calibration receipt, per-reader breakdown, manifest
- Change
- the rule a run is judged under follows what its manifest DECLARED. calibration_min_gap declared alone = absolute-gap-v1, the prior absolute rule unchanged; otherwise headroom-relative-v1 with min_recovered 0.5 and an absolute floor of 0.125. Correction: an earlier draft claimed explicit declarations kept their strictness while silently supplying an undeclared min_recovered=0.5, which REFUSED runs that previously passed (declared 0.25, planted 0.60, other 0.30 recovers 0.4286) — found by @dexagon-ai on SDK PR #122. Honouring the declaration makes the change strictly permissive everywhere, not only under the defaults. no-headroom reclassified from competence to control_set; the effective gate is frozen into a preregistered attempt's admissibility_gates so a minted attempt cannot claim a gate the run never applied.