fix(retrieval-gate): rows 2 and 3 count against the pinned set, not the run
PM's J10 and J8. Two mechanisms, one per attack, and neither is a pin a capability session can edit in the same breath as the code. J10 -- THE DENOMINATOR IS THE SET'S. `Unit` now carries the class its question DECLARES. Row 2's denominator is the misses plus every forced fixture that came back a hit, and row 3's is every unit whose set declares a withheld class (b, c, e -- (a) is not in the bundle and (d) was delivered, so neither can carry a printed reason) plus whatever the run withheld besides. A fixture that stops producing its declared class is a BROKEN PREMISE, printed as one, and it counts against its row: at `k = 32` row 2 stays RED with its denominator held and row 3 keeps 5 units where it had shrunk to 2 and called that green. J8 -- THE ROW CARRIES A KNOWN-POSITIVE. With `--source-quota` off, every printed reason is true; that reading is not a lie, it is an empty measurement, and row 3 must say so rather than print `6 of 6 GREEN` beside row 1 falling to 8 of 9. A set may now declare `source_quota_in_force`, and the row is NOT RUN for such a set when the default cut and the quota-off cut deliver the same concepts everywhere. THE CONTROL'S OWN PREMISE WAS MEASURED FIRST, and it was false where it was first put: over the five existing sets the two cuts deliver the SAME concepts (the quota is topped back up), so 52 labels move `source_quota_exceeded` -> `below_k` without one delivery changing. `set-quota.json` is the set where the quota genuinely decides -- measured, `oversikt-08` is delivered without the quota and withheld with it, and the fasit `svar/broennproeve` is delivered only with it -- so the requirement is declared there and nowhere else. It survives the honest fix, which changes labels and not the cut. Rows 1 and 6 go 9 of 9 to 10 of 10: one added fixture, one added hit, both green before and after. Rows 2 (7 of 7), 3 (2 of 5), 4, 5, 7, 8, 9 and the verdict `GATE RED: rows 3, 4, 5, 7, 8, 9` are unchanged. 52 passed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
6105fc4193
commit
be899106c4
3 changed files with 132 additions and 14 deletions
|
|
@ -578,9 +578,12 @@ def test_the_gate_is_red_today_and_says_which_rows(tmp_path: Path) -> None:
|
|||
by_number = {row.number: row for row in rows}
|
||||
assert sorted(by_number) == [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
assert [row.number for row in rows if row.fails] == [3, 4, 5, 7, 8, 9]
|
||||
assert (by_number[1].k, by_number[1].m) == (9, 9)
|
||||
# 10, not 9: `set-quota.json` adds row 3's known-positive, one question the
|
||||
# source quota genuinely decides, and it is a hit.
|
||||
assert (by_number[1].k, by_number[1].m) == (10, 10)
|
||||
assert (by_number[2].k, by_number[2].m) == (7, 7)
|
||||
assert (by_number[6].k, by_number[6].m) == (9, 9)
|
||||
assert (by_number[3].k, by_number[3].m) == (2, 5)
|
||||
assert (by_number[6].k, by_number[6].m) == (10, 10)
|
||||
|
||||
|
||||
def test_the_same_tree_measures_the_same_twice(tmp_path: Path) -> None:
|
||||
|
|
@ -824,14 +827,18 @@ def test_j10_a_wider_cut_does_not_make_rows_two_and_three_green(tmp_path: Path)
|
|||
"""PM's J10: `k = 32` took rows 1, 2, 3 and 6 green at once, and not one
|
||||
label had become true -- the denominator of rows 2 and 3 IS the misses, so
|
||||
delivering more broadly shrinks it to the cases that were already honest."""
|
||||
baseline = _attack(tmp_path)
|
||||
rows = _attack(tmp_path, k=32)
|
||||
assert rows[2].status == gate.RED, rows[2]
|
||||
assert rows[3].status == gate.RED, rows[3]
|
||||
assert rows[3].status != gate.GREEN, rows[3]
|
||||
assert rows[3].fails
|
||||
# The three fixtures that declare class b are delivered under this cut, so
|
||||
# their premise no longer holds -- and a broken premise counts against the
|
||||
# row rather than leaving it.
|
||||
# row rather than leaving it. NEITHER denominator shrinks: that is the whole
|
||||
# of the defect.
|
||||
assert any("premise" in detail for detail in rows[2].details), rows[2].details
|
||||
assert rows[2].m >= 7
|
||||
assert rows[2].m >= baseline[2].m
|
||||
assert rows[3].m >= baseline[3].m
|
||||
|
||||
|
||||
def test_j8_removing_the_quota_leaves_row_three_unable_to_say_anything(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue