docs(773): round-churn is a property, not a class — and review scope is the 4th sampling target
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 9s
PR Gates / Docs update reminder (pull_request) Successful in 13s
PR Gates / decisions lifecycle (pull_request) Successful in 17s
review-verdict/h10 Exempt: docs-only change (no code, no protected path)
Review verdict / Set review-verdict status (pull_request_target) Successful in 13s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Canceled after 1m30s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Canceled after 0s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Canceled after 0s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Canceled after 0s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Canceled after 0s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Canceled after 0s
PR Gates / Script tests (pytest) (pull_request) Canceled after 1m38s
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 9s
PR Gates / Docs update reminder (pull_request) Successful in 13s
PR Gates / decisions lifecycle (pull_request) Successful in 17s
review-verdict/h10 Exempt: docs-only change (no code, no protected path)
Review verdict / Set review-verdict status (pull_request_target) Successful in 13s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Canceled after 1m30s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Canceled after 0s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Canceled after 0s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Canceled after 0s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Canceled after 0s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Canceled after 0s
PR Gates / Script tests (pytest) (pull_request) Canceled after 1m38s
Prompted by a direct question: is "each fix round introduces the next defect" a new shape, or one already recorded? Measured rather than argued. ROUND-CHURN IS MIS-SCOPED IN THIS DOCUMENT. It inherited #773's "string- predicate churn", which names a substrate. Counting records that narrate >=3 review rounds: 18 of 69, spread across EVERY family — A=5, C=3, E=3, D=2, identity=2, and one each in B, overclaim and string-predicate. Only 1 of the 18 sits in the class named after the phenomenon. #697 settles it independently: three BLOCKED rounds on credential scoping, no parser involved. So it is a modifier riding on another failure, like overclaim — new 3.7 says so, and the 2 and 3.6 rows now point at it. THE FOURTH SAMPLING TARGET. 3 named three things sampled instead of enumerated — the fix, the verification, the guard. Review scope is the fourth: a re-review briefed to check the reported finding samples, while the text written to fix the last round is unreviewed by construction. This session is the demonstration — rounds 2 and 3 were briefed on the delta and each shipped a new defect; round 4 was briefed to sweep the whole file and came back clean. 4 now lists it as the one detector with no build step. TWO LIMITS STATED. The count pattern-matches narrative prose, so 18 is a floor, not a total. And #767 — the eight-round case that motivates this whole issue — is absent from the corpus entirely, because it was still open and has no closing record. The headline example is invisible to the measurement meant to characterise it. Refs #773 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -65,7 +65,7 @@ first reported, which if anything strengthens the backward result.
|
||||
| 5 | **Environment divergence** | 7 | 10% | Behaviour differs by interpreter/provider/hardware, untested there |
|
||||
| 6 | **Wrapper drift** | 5 | 7% | A hand-maintained mirror drifted from the contract it mirrors |
|
||||
| 7 | **Overclaim / stale claim** | 3 | 4% | An assertion stronger than its evidence, or since gone false |
|
||||
| 7 | **String-predicate churn** | 3 | 4% | A regex/grep predicate needing repeated rounds |
|
||||
| 7 | **String-predicate churn** | 3 | 4% | A regex/grep predicate needing repeated rounds — but see §3.7: the *rounds* are cross-cutting, only the *substrate* is string-shaped |
|
||||
| 9 | **Identity-not-capability** | 2 | 3% | Authorization scoped by *who*, not by *what is being changed* |
|
||||
| 10 | **Masking guards** | 1 | 1% | Two guards on one condition; one hid the other's total failure |
|
||||
|
||||
@@ -225,7 +225,7 @@ which are cross-era classes drawn from the pre-convention sample and are *not* m
|
||||
| **E** environment divergence | 7 | 10% | |
|
||||
| **D** check-and-use race over mutable state | 5 | 7% | 4 rated `NEW` + #632 rated twin-missed with the race secondary |
|
||||
| — overclaim / stale claim | 3 | 4% | no detector — see §4 |
|
||||
| — string-predicate churn | 3 | 4% | no detector proposed |
|
||||
| — string-predicate churn | 3 | 4% | no detector proposed; see §3.7 — the round-churn it is named for is cross-cutting |
|
||||
| — identity-not-capability | 2 | 3% | |
|
||||
| — unmerged singletons | 4 | 6% | #60, #503, #586, #688 — real, but one instance each |
|
||||
| **Total** | **69** | — | the **n** column is exact; percentages are rounded to the nearest point and sum to 99% |
|
||||
@@ -241,6 +241,44 @@ raters split on. And per §1 limit 2, these are proportions **over a recent, gua
|
||||
the backward sample establishes that the shapes existed before, not that they occurred in these
|
||||
ratios.
|
||||
|
||||
### 3.7 Round-churn is a property, not a class — and the fix text is the fourth sampling target
|
||||
|
||||
The ranked table lists **string-predicate churn** as a class, inherited from #773's own taxonomy
|
||||
("a parser / string-matching predicate needing repeated rounds"). That name identifies a *substrate*
|
||||
when the evidence identifies a *cross-cutting property*. Counting records that narrate three or more
|
||||
review rounds:
|
||||
|
||||
| Family | records with ≥3 rounds |
|
||||
|---|---|
|
||||
| A — population via a sample | 5 (#496, #633, #644, #650, #726) |
|
||||
| C — two copies of one thing | 3 (#510, #649, #754) |
|
||||
| E — environment divergence | 3 (#647, #648, #668) |
|
||||
| D — check-and-use race | 2 (#622, #632) |
|
||||
| identity-not-capability | 2 (#697, #698) |
|
||||
| B, overclaim, **string-predicate** | 1 each (#751, #651, #629) |
|
||||
| **Total** | **18 of 69, spread across every family** |
|
||||
|
||||
**Only 1 of the 18 sits in the class named after the phenomenon.** So repeated-round churn should be
|
||||
read the way §2 reads overclaim — a modifier that rides on another failure, not a class with its own
|
||||
detector. #697 settles it independently: three BLOCKED review rounds on a credential-scoping issue,
|
||||
with no parser anywhere near it.
|
||||
|
||||
**Why the rounds happen, which is the part that generalises.** §3 Family A names three things that
|
||||
get sampled instead of enumerated — the fix, the verification, the guard. There is a fourth: **the
|
||||
review scope.** A re-review briefed to "check the reported finding" samples; the population is the
|
||||
whole changed artifact, and the text written to *fix* the last round is unreviewed by construction at
|
||||
the moment it is written. That is why each round's defect lands in the newest prose rather than in
|
||||
the text under review.
|
||||
|
||||
**Two limits on this section, since it is the one making a claim about its own production.**
|
||||
|
||||
- The ≥3-rounds count comes from pattern-matching narrative prose, not from a structured field. It
|
||||
under-counts records that ran rounds without narrating them, so 18 is a floor.
|
||||
- **#767 — the eight-round case that motivates #773 — is not in this corpus at all.** It was still
|
||||
open when the corpus was drawn, so it has no `## Closing record`. The headline example of the
|
||||
phenomenon is invisible to the measurement characterising it, which is worth stating plainly rather
|
||||
than letting the 18 stand as though it covered the worst case.
|
||||
|
||||
---
|
||||
|
||||
## 4. Detectors
|
||||
@@ -267,6 +305,10 @@ four different names. Two honesty notes on that ranking, because it drives #774'
|
||||
the shape predates that corpus; it does not show the *proportion* holds across eras. Read it as
|
||||
"the largest family in the work we have been doing lately," which is still the right basis for
|
||||
prioritising the next change, but not as a timeless property of the project.
|
||||
- **Detector A also applies to review scope, which is free.** Per §3.7, a re-review briefed to
|
||||
"check the reported finding" samples the artifact. Briefing it to sweep the whole changed artifact
|
||||
enumerates it. This costs one sentence in a review brief and is the only detector here with no
|
||||
build step at all.
|
||||
- **Detector D is weaker than its neighbours in this table and is listed anyway.** A, B, F and G
|
||||
each name a check that fails when violated. D names a *fix pattern* with no general lint — you
|
||||
cannot mechanically spot "this code should have pinned a sha." What makes it actionable is that
|
||||
|
||||
Reference in New Issue
Block a user