fix(retrieval-gate): the judge reads a passage as its exact reconstruction — M15 felled, row 7 15 of 15
Row 8's judge required every delivered text to be the whole concept's bytes
(the row-6 identity), which is older than v1.1 C1: an excerpt `as_passage` cut
to its answering passage was class e even when its span carried the citation.
PM's re-measurement of e503f6a found that the dominant miss class of row 8 on
the real set.
`passage_span` accepts a passage only when the delivered text IS what the
bundle's bytes rebuild: the span is body[start:end] byte for byte in the
DELIVERED body (the offsets land a frontmatter's length off in the file), `of`
is that body's length, `[...]` stands exactly where text is left out, and the
one other line allowed is a heading line of the body above the span, or a
prefix of one. The citation is read in the span alone. A passage that is not
its reconstruction is class e with its own detail. A quote only in the heading
or the markers is class d.
Chose to check that the heading is one of the body's own heading lines above
the span, and not to re-derive WHICH heading `as_passage` picks, because the
guarantee is "the bundle's bytes"; the nearest-heading rule is the product's
presentation and a judge that copies it agrees by construction.
M15 (a passage carrying one sentence the file does not) is row 7's fifteenth
mutant. No synthetic concept was long enough to be cut, so a new fixture
delivers one (DELIVERY, ~6 600 characters, set set-passage.json); the corpus
pin moved with it. MUTANT_BAR unchanged, src/ untouched.
Gate, synthetic: rows 1 and 6 13/13 -> 14/14, row 7 14/14 -> 15 of 15 GREEN
(M15 -> row 1, 6), rows 2/3/4 unchanged, GATE RED: rows 5, 8. Row 8 rerun on
the real set: no class e miss remains (its numbers are kept out of this public
history, per the wiki directive). Suite after git add,
FORCE_COLOR unset: 2450 passed, 1 skipped (+6). ruff, format, mypy --strict
clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
70c388d419
commit
cb0c10b421
5 changed files with 199 additions and 29 deletions
31
CLAUDE.md
31
CLAUDE.md
|
|
@ -1318,24 +1318,37 @@ and fixtures, never code.
|
|||
what a bundle looks like, this asks whether the payload for a question
|
||||
carries the fasit. **Written RED, no capability**: eight rows, exit 0 only
|
||||
when all are green, 1 otherwise, 2 on wrong input, `--json`. Rows 1-4, 6, 7
|
||||
run against a synthetic corpus this repo GENERATES and seven sets it ships
|
||||
run against a synthetic corpus this repo GENERATES and eight sets it ships
|
||||
pinned by sha256 -- no network, no private corpus, no clock; a set whose
|
||||
bytes moved is exit 2, never a quiet continuation, because **a gold set is
|
||||
an INPUT and never a constant here** (`okf_consume_measure.py`'s rule, and
|
||||
this repo is public). **THE CORPUS IS PINNED THE SAME WAY** since
|
||||
2026-09-19 (`SPECS_SHA256`). Today (measured on the default run
|
||||
2026-09-22): **1 (13/13) - 2 (7/7) - 3 (5/5) - 4 (6/6) - 5 (0/1) -
|
||||
6 (13/13) - 7 (14/14) - 8 (0 of 1 set, NOT RUN without `--real`)**,
|
||||
2026-09-22): **1 (14/14) - 2 (7/7) - 3 (5/5) - 4 (6/6) - 5 (0/1) -
|
||||
6 (14/14) - 7 (15/15) - 8 (0 of 1 set, NOT RUN without `--real`)**,
|
||||
`GATE RED: rows 5, 8`. **Row 7 fells 14 of 14 since 2026-09-22**: the three
|
||||
that survived v1.1 (M06 passage body, M07 title/path weight, M10
|
||||
`bm25.RRF_K`) each got a fixture that makes its mechanism decide a delivery
|
||||
(`PASSAGE`, `PATH`, `FUSION`, set `set-mechanisms.json`; the fusion one keeps
|
||||
its lead through K = 180 and loses it at 190), with `src/` untouched. **Row
|
||||
8's judge predates v1.1's passage delivery**: it requires a delivered text to
|
||||
be the whole concept's bytes, so an excerpt `as_passage` cut is class (e)
|
||||
even when it carries the citation -- the dominant miss class when row 8 is
|
||||
run on the real set. Not changed here (a closing round on rows 7 and 8
|
||||
measured it and left it for its own order).
|
||||
its lead through K = 180 and loses it at 190), with `src/` untouched.
|
||||
**THE JUDGE READS A PASSAGE AS A PASSAGE (2026-09-22).** It predated v1.1
|
||||
C1 and required a delivered text to be the whole concept's bytes, so every
|
||||
excerpt `as_passage` cut was class (e) even when its span carried the
|
||||
citation -- the dominant miss class when row 8 was run on the real set.
|
||||
`passage_span` now accepts a passage only when the delivered text IS its
|
||||
exact reconstruction: the span is `body[start:end]` byte for byte, `of` is
|
||||
the body's length, a `[...]` stands exactly where text is left out, and the
|
||||
one other line allowed is a heading line of the body above the span (or a
|
||||
prefix of one); WHICH heading is the product's choice and is not re-derived.
|
||||
The citation is read in the SPAN alone, never in the heading, the markers or
|
||||
across the seam. Two traps are pinned by tests: the offsets count in the
|
||||
DELIVERED body (read in the concept file they land a frontmatter's length
|
||||
off), and "the span occurs somewhere in the text" accepts an invented
|
||||
sentence beside it. **M15** (a passage carrying one sentence the file does
|
||||
not, M14's shape for passages) is row 7's fifteenth mutant, felled through a
|
||||
new fixture that delivers a passage (`DELIVERY`, set `set-passage.json`),
|
||||
because no synthetic concept was long enough to be cut. `src/` untouched;
|
||||
`MUTANT_BAR` unchanged.
|
||||
**THE K2 TEST TRACK IS RETIRED (operator 2026-09-21, v1.1 K)**: material
|
||||
tied to the operator's employer is not re-measured and not frozen, and
|
||||
public tests and gates run on invented material. Row 9 (K2) and the `r761`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue