feat(calibration): register the slop gate score as the registry's first ceiling knob, report-only#8275
Merged
Merged
Conversation
…st ceiling knob, report-only (#8224) The registry gains the orientation axis #8224's design finding called for: a floor knob (every prior entry) loosens DOWNWARD toward hardMinimum; a ceiling knob — the slop gate blocks when risk/100 >= the value — loosens UPWARD toward a declared hardMaximum, with the classifier math unchanged (both knob families fire on value >= threshold). evaluateKnobLoosening and evaluateKnobDrift branch on orientation (including the drift direction label: above-live is LOOSER for a ceiling), and the structural invariants pin ceiling entries to report_only with no tightening ladder until the live storage generalizes. slop_gate_score enters report-only: shipped 0.60 (the gate constant /100), two raises [0.65, 0.70], hard ceiling 0.70, the registry's strictest 50/12 sample floors — bounds rationale in the entry comment. The generic report-only proposals path picks it up with zero new plumbing, and the knobs endpoint now lists EVERY registry knob labeled by applyMode. quality_gate_score stays out (no global shipped default to anchor on), recorded in the registry comment; the flip-to-live issue gets filed only after proposals with real evidence exist.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
loopover-ui | d875094 | Commit Preview URL Branch Preview URL |
Jul 23 2026, 10:22 PM |
Contributor
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Contributor
Logic backtestReplayed 0 historical case(s) for Backtest comparison:
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8275 +/- ##
==========================================
- Coverage 92.16% 92.16% -0.01%
==========================================
Files 788 788
Lines 79164 79173 +9
Branches 23926 23932 +6
==========================================
+ Hits 72962 72968 +6
Misses 5062 5062
- Partials 1140 1143 +3
Flags with carried forward coverage won't be shown. Click here to find out more.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #8224 (per its recorded re-scope: quality stays out, slop enters via the orientation axis).
LoosenableKnobgainsorientation: "floor" | "ceiling"— a floor knob (every prior entry) loosens DOWNWARD towardhardMinimum; a ceiling knob loosens UPWARD toward a newhardMaximum. The classifier math is unchanged (both knob families fire on value ≥ threshold — verified against the calibration: capture writers + corpus mappings for the slop and quality gate scores #8223 capture:confidence = slopRisk/100, block at ≥ threshold), so only the candidate direction, the bound, and the drift direction LABEL branch (above-live islooserfor a ceiling — the inverted label the issue's design finding flagged as the blocker to registering slop honestly).slop_gate_scoreenters report-only: shipped 0.60 (DEFAULT_SLOP_BLOCK_THRESHOLD / 100, now exported with the matching engine-twin edit), raises[0.65, 0.70], hard ceiling 0.70, the registry's strictest 50/12 sample floors — written bounds rationale in the entry comment. The generic report-only proposals path picks it up with zero new plumbing (pinned by a test seeding a real signal store and running the shipped default-registry path).hardMaximum, stayreport_only, and carry no tightening ladder until the live storage generalizes; defensive nullish arms proven to refuse rather than treat a missing bound as infinity.applyModefield (loadAllKnobStatuses), so operators see report-only evidence surfaces before any flip-to-live exists. The advisor's reliability recs stay live-only by design.quality_gate_scorestays out (no global shipped default to anchor on) — recorded in the registry comment; the flip-to-live issue gets filed only after proposals with real evidence exist, per the issue's boundary.Validation
npm run test:cion the pre-rebase base: green except (a) three engine-parity tests that were correctly demanding the matching gate-decision twin edit — now committed (gate-advisory.tsmirrors the export; parity suite 14/14 green) — and (b) the knownsatisfaction-floor-loosening-runfirst-test load-timeout flake, 23/23 standalone.npm audit --audit-level=moderateclean.loosening-knobs.ts,knob-loosening-run.ts,advisory.ts, and the routes line (lcov vs exact diff hunks), including both defensive nullish arms and the orientation branches on both sides.