fix(688): pin p95's inclusivity; drop a stale ratio and hedge the gap width
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 20s
PR Gates / Docs update reminder (pull_request) Successful in 32s
Review verdict / Set review-verdict status (pull_request_target) Successful in 11s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 1m34s
PR Gates / Script tests (pytest) (pull_request) Successful in 1m42s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 19s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 6m24s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 22m10s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 22m46s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
PR Gates / decisions lifecycle (pull_request) Successful in 14s
review-verdict/h10 Review-verdict: MERGEABLE @ efc34a3 (base: main)
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 20s
PR Gates / Docs update reminder (pull_request) Successful in 32s
Review verdict / Set review-verdict status (pull_request_target) Successful in 11s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 1m34s
PR Gates / Script tests (pytest) (pull_request) Successful in 1m42s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 19s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 6m24s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 22m10s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 22m46s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
PR Gates / decisions lifecycle (pull_request) Successful in 14s
review-verdict/h10 Review-verdict: MERGEABLE @ efc34a3 (base: main)
Round 7's second reviewer returned MERGEABLE on the previous head after re-measuring every figure and running a 48-mutant battery — and reported ZERO wrong or unverified numbers, which ends this branch's five-commit streak of them. It also independently confirmed the round-6 adjudication: at `f394d6ce`, the sha the record cites, the #620-era distribution really is n=167, min 2, median 26, p90 52, next value 83. All five figures correct as written. This commit clears its four non-blocking items. - `marks_tail`'s UPPER inclusivity was the last meaningful surviving mutant: `ceiling <= p95` mutated to `<` survived the whole suite. Notice-only rather than blocking, but an unpinned boundary is how a documented claim quietly stops being true — the same defect the previous commit fixed for the coarse band. Both ends now pinned; verified the mutant fails. - "the largest by ~1.6x" was TRUE at `f394d6ce` (230/147 = 1.56) and is stale today (230/198 = 1.16). Unlike the consolidation table two paragraphs down, that sentence was never scoped to a sha — so rather than re-pin a number that will rot again, it now just says "the longest", which stays true however the tail moves. - The validator docstring asserted the 60->81 gap flatly; a 70-line record existed as recently as `8f6d4f443^`, so the gap's WIDTH is more volatile than that implied. Hedged to say it is the shape as measured today, not a constant. Nothing asserts it either way. - Rewrapped a mid-sentence line break left by the previous commit. Three surviving mutants are accepted and left: the crosscheck's not-a-mapping branch is unreachable from any fixture, the None -> "" normalisation only matters for an explicit YAML null no record has, and `_frontmatter_block` returning "" instead of None is a downstream no-op. Verification: 432 scripts/tests pass; ruff at baseline parity (47, and `ruff format --check` at parity 9/9); validator exits 0 with no drift notice; corpus at p90=60, 18/183, calibrated. Decisions-Edit: yes Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -67,8 +67,7 @@ printed as a `::notice::` — the same treatment `stale_records` gets, and for t
|
||||
a constant going out of date is the passage of time, not a defect in this change. What stays
|
||||
blocking is only what no SINGLE ordinary addition can break — each record moves a fraction by at
|
||||
most 1/N, so from **18/183** over the ceiling it takes **38** consecutive over-ceiling additions to
|
||||
BREACH the
|
||||
25% cap (37 lands exactly on 0.25, which still passes), against **one** record to break v4.
|
||||
BREACH the 25% cap (37 lands exactly on 0.25, which still passes), against **one** record to break v4.
|
||||
|
||||
**The floor is a fraction, not `> 0`, and review is why.** The first draft of v5 asserted only
|
||||
`0 < fraction_over < 1/3`, which measured against the real corpus accepted **every ceiling from 39
|
||||
@@ -99,7 +98,7 @@ is restated as a self-referential fact** for the same reason: the warning report
|
||||
numbers on every run, and a number frozen in prose is one edit away from being a lie.
|
||||
|
||||
**Size is a proxy for the thing we actually care about, and the proxy is demonstrably wrong.** Of
|
||||
the records over the ceiling, the largest by ~1.6x —
|
||||
the records over the ceiling, the longest —
|
||||
`scan.libraryfolder-unique-identity`, 230 lines — is a dozen-odd **distinct** hard-won traps (MySQL
|
||||
`utf8mb4_bin` PAD SPACE, create-the-composite-index-before-dropping-its-predecessor, clearing the
|
||||
connection pool per MySQL fixture, lazy hash healing that must never abort a scan…). Shortening it
|
||||
|
||||
@@ -769,8 +769,9 @@ def ceiling_calibration(records, ceiling: int) -> CeilingCalibration:
|
||||
|
||||
`marks_tail` — `p90 <= ceiling <= p95`. Correct as a definition of "start of the tail", but an
|
||||
order statistic over a SPARSE distribution is a STEP function: the lengths climb to the ceiling
|
||||
and then jump STRAIGHT to 81 with nothing in between, so ONE new record could move p90 by 21
|
||||
lines and the only remedy the assertion admitted was to raise the ceiling. It is real signal,
|
||||
and then jump straight to 81 with nothing in between AS MEASURED TODAY (the gap's width moves
|
||||
with the corpus — this is the shape, not a constant), so ONE new record could move p90 by 21
|
||||
lines, and the only remedy the assertion admitted was to raise the ceiling. It is real signal,
|
||||
but it is signal about the CONSTANT drifting, not a defect in the commit under test — the same
|
||||
shape as `stale_records`, and it is reported the same way: a notice, never a failure.
|
||||
|
||||
|
||||
@@ -1064,6 +1064,13 @@ def test_ceiling_calibration_detects_drift_in_BOTH_directions():
|
||||
assert not dv.ceiling_calibration(recs, 10).marks_tail, "below p90 it cuts into the bulk"
|
||||
assert not dv.ceiling_calibration(recs, 999).marks_tail, "above p95 it is parked among outliers"
|
||||
|
||||
# BOTH ends of `marks_tail` are inclusive. Review found the upper one unpinned — `ceiling <= p95`
|
||||
# mutated to `<` survived the whole suite. It is notice-only rather than blocking, but an
|
||||
# unpinned boundary is how a documented claim quietly stops being true.
|
||||
assert dv.ceiling_calibration(recs, 20).marks_tail, "p90 itself must satisfy the lower bound"
|
||||
assert dv.ceiling_calibration(recs, 200).marks_tail, "p95 itself must satisfy the upper bound"
|
||||
assert not dv.ceiling_calibration(recs, 201).marks_tail, "one line above p95 must not"
|
||||
|
||||
# and the coarse property separates the same two failure modes
|
||||
assert not dv.ceiling_calibration(recs, 999).flags_minority, "a ceiling nobody is over signals nothing"
|
||||
assert not dv.ceiling_calibration(recs, 10).flags_minority, "100% over the ceiling is not a tail"
|
||||
|
||||
Reference in New Issue
Block a user