Skip to content

Re-cut the prose-register eval keys the subject disagrees with every run - #69

Open
nonreagent wants to merge 7 commits into
skill-eval-phase2-fixesfrom
eval-fixture-pass
Open

nonreagent wants to merge 7 commits into
skill-eval-phase2-fixesfrom
eval-fixture-pass

Conversation

@nonreagent

@nonreagent nonreagent commented Sep 20, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #68.

Problem

The run (prose-register) check has scored 10 to 12 of 22 on five CI runs, and the same seven cases fail on every run with the same reasoning. A review of those runs (docs/superpowers/specs/2026-09-20-register-eval-review.md, committed here) attributes 11 of the tip run's 12 failures to the eval side: four contested or wrong keys, two cases built without the context or the single difference they need, three grader defects (both detection cases fail by construction, and det-03's matcher missed a quote that dropped the key's first word), and two notes the judge applied as requirements. One failure is the subject producing a different rewrite that the judge fairly rejected.

Motivation

A 40% floor and five arguable flags were #68's way of living with those failures. That keeps the job green without making the suite say anything: a key the model disagrees with on every run cannot detect a regression, and a floor calibrated on it cannot either. The memo's first recommendation is a zero-session fixture pass and one CI run, to settle whether the failure mass is noise or keys before spending sessions on anything else.

Proposed Solution

Seven commits, each green on make preflight (103 offline tests):

  • Commit the review memo as the evidence the rest cites, with an errata section for the five counts the self-review found wrong in it.
  • Detection: match quotes by overlap and let a case floor its recall. A key quote counts as found when a subject quote contains it, sits inside it, or overlaps one of its ends by 20 or more characters; the first-60-characters rule scored det-03 a miss on two runs where the subject had found the em-dash. One subject quote is one finding, credited to every key it holds whole or else to the one it overlaps most, so a quote that runs from one violation into the next is not a find of both. The validator now requires every detection quote to appear in the document verbatim, which caught one trap that ended in an ellipsis. A new min_recall (default 1) lets det-01 and det-02, whose violation lists are not exhaustive, record recall as a score instead of failing on it; a flagged trap still fails at any floor.
  • accepted_rules replaces the grading note in the rule rubric. disc-07's note asked for a two-rule answer and the judge read it as a requirement, passing the one-rule answers and failing the two-rule ones. The judge now sees the reference rule, the skill's rule text and a per-case list of accepted alternatives; grading_note is human-facing again. The transformation rubric keeps its note.
  • Fixture pass on prose-register. disc-09 becomes a two-way pick, original over over_tight: the subject ranked the hand-edited stage last on all five CI runs for a reason the skill's own Lint supports, and original above over_tight on every one of them. disc-11 and disc-12 become one-difference pairs by hand edit. disc-04's variants open with their preceding paragraph. disc-08 and disc-10 accept the breath rule (cited on every disc-08 run, four of five disc-10 runs). trans-06's task states the facts its reference uses, in other words than the reference's; trans-02's voice rubric names no required word. det-01 and det-02 set min_recall: 0. The four edited cases stay arguable until CI runs on the edited pairs show the choices hold. Every departure from source is recorded in the case's note and the provenance block.
  • Decision 12 in the spec, linking the memo and recording the first run of the new shape (15 of 22; choice 12 of 12, detection 3 of 3, rule 8 of 12, rubric 4 of 7).
  • The rule judgment becomes informational (decision 13). On that run every deterministic assert passed and four of the seven remaining failures were the rule judge rejecting a rule the subject named that is true of the passage. The judge still runs and its count prints on the gate's summary line, but a row whose only failed assert is the rule judgment counts as passed for the floor. The choice still gates hard. Rule identifiers (a slug per SKILL.md rule, checked deterministically) are the agreed follow-on and a separate PR.
  • A detection violation may name an anchor. The second run had det-03's subject quote the text on the left of the em-dash, 15 characters of overlap with the key, under the matcher's floor. A one-character violation can be quoted from either side, so a violation may now name a short anchor inside its quote ("artifact —") that counts as a find when any subject quote contains it. Validator-checked.

The floor stays at 0.4 until five CI runs of the new shape exist. det-01 and det-02 now pass on every run and rule-only failures no longer count, so that floor is looser than when it was calibrated; the spec says so and defers recalibration to those runs.

Feedback

  • The first CI run was the test, and it landed at 15 of 22 against a predicted 16 to 19: the deterministic side went clean (choice 12 of 12, detection 3 of 3) and every remaining failure is a judged row. The full reading is in the first comment. The second run, after decision 13, is expected around 19 of 22 for the floor with the same rule count reported alongside.
  • Three hand edits to your text want your eye. disc-11's after keeps "as you assume"; disc-12's after drops "These are hard won lessons, and" and before takes the shipped closing sentence so the pair differs only by the recap; disc-04's variants open with the c8fa24c paragraph. disc-09 losing restored is the largest change to what a case tests; restored still serves as trans-06's reference.
  • code-comment-register loses the grading notes from its rule rubric too. Its notes explain the key rather than list alternatives, so nothing migrates, but its rule judge (7 to 10 of 10 across the five runs) loses that context. Its run on this PR shows whether the count moves.
  • Self-review, two adversarial reviewers, 23 findings, 14 accepted and landed in their owning commits. The ones that changed behaviour: the overlap matcher was crediting one straddling quote to two violations on a real run, and a det-01 trap ending in "..." could never be tripped. The ones that changed claims: disc-10's breath rule was four of five runs, not five; disc-11's first-difference count was two of five, not three, and its wrong choices come from the jargon clause, so it stays arguable; trans-06 failed on a missing mechanism more often than an invented one; trans-02's colour-word failures were two of four; disc-04's denominator was 12 runs, not 7; and disc-09 was unflagged on evidence from a prompt shape that has not run, so it is flagged again. The rest were stale cross-references in the spec and notes.
  • Not in this PR: numbered-rule selection for a deterministic RULE check, the generation-side pilot (skill on versus off over drafts, which the memo names as the measurement the suite does not make), the SKILL.md Lint split, and the CI-versus-local test.

Five CI runs of the prose-register suite at the tip of the eval fixes
branch, recomputed from the latest.json artifacts, with every failing
subject output and judge reason read. The memo attributes the failure
mass to eval-side defects (contested keys, non-minimal pairs, grader
substring bugs, notes the judge reads as requirements), separates the
judge noise from subject variance, and records what the suite does not
measure. The fixture pass that follows cites it case by case.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@nonreagent

Copy link
Copy Markdown
Collaborator Author

First CI run of the new shape: 15 of 22 (run 35495133404), against the memo's predicted 16 to 19.

The deterministic side is clean. Choice 12 of 12, including all four edited pairs (disc-04, disc-09, disc-11, disc-12), and detection 3 of 3. Before this PR those stood at 8 or 9 of 12 and 0 or 1 of 3. Every remaining failure is a judged row: rule 8 of 12 (disc-08, 09, 10, 11) and rubric 4 of 7 (trans-02, 03, 04). Same model as every prior run (claude-sonnet-5).

code-comment-register: 14 of 16, choice 10 of 10, rule 8 of 10. That is inside its prior 7 to 10 range, so dropping the grading notes from its rule rubric did not move it visibly.

Reading. The memo's thesis holds for the deterministic asserts: they went to 12 of 12 and 3 of 3 with no model or prompt change. The total is one row short of the band because the rule judge on the taste cases still fails, in the way the memo's Question 4 predicts. On each of the four rows the subject named a different SKILL.md rule than the key, and each is a defensible reading of the passage: disc-08 the "Not X, but Y" move, disc-09 the breath rule, disc-10 "No flex" (the fifth-run shape the self-review had already flagged), disc-11 the reversal rule. On the rubric side, trans-04 failed for the first time in six runs (the judge read "scraped a knee" and "ran a meter" as verb phrases, not the noun pair the task asks for), trans-03 failed on a partial reframe, and trans-02 failed voice_match again, this time for scrubbing the discomfort entirely rather than for a missing word.

What it argues for. The free-text RULE judgment on the discrimination rows is now the main noise source. The memo's next lever for it is numbered-rule selection against accepted_rules (deterministic, removes 12 judge sessions per run), or making the rule assert advisory. Neither is on this PR.

If you want this run recorded under decision 12, I will fold it into the spec commit together with any review feedback in one push, since each push spends another run of both suites.

@nonreagent

Copy link
Copy Markdown
Collaborator Author

Second run, after decision 13 (run 35528316122): prose-register 18 of 22 for the floor (16 strict), code-comment-register 16 of 16 (14 strict).

Gate lines as printed by CI:

18/22 passed (rate 81.8%, floor 40%); rule 9/12 informational
16/16 passed (rate 100.0%, floor 75%); rule 8/10 informational

Components on prose-register: choice 11 of 12, rule 9 of 12, rubric 5 of 7, detection 2 of 3. The four rows that count against the floor: disc-04 (chose before again even with the preceding paragraph; arguable, so it counts rather than gates), trans-04 and trans-05 (judge variance on the two subjective rubrics; trans-04 has now failed twice in seven runs after five passes), and det-03.

det-03 is a grader gap the second run exposed. The subject flagged the em-dash for the em-dash rule, as on every prior run, but this time quoted the text on its left, "Same company, same invoice, same artifact —". That overlaps the key quote by 15 characters, under the matcher's 20-character floor, so it scored a miss. A one-character violation can be quoted from either side and no span heuristic knows that. The fix is the memo's original suggestion: an optional per-violation anchor (here "artifact —"), validated as a substring of the quote, that counts as found when any subject quote contains it. I have it queued for the next push rather than spending a run on it alone.

Two runs of the new shape now exist for calibration; the floor stays at 0.4 until five do.

nonreagent and others added 6 commits September 20, 2026 21:44
The detection grader required the first 60 characters of each key quote
to appear verbatim in the subject's output. det-03's subject found the
em-dash on all five CI runs and was scored a miss on two of them because
it dropped the key's first word. Both strings are verbatim runs of the
same document, so the grader now counts a subject quote that contains
the key, sits inside it, or overlaps one of its ends by at least 20
characters. One subject quote is one finding: it is credited to every
key it holds whole, or else to the one key it overlaps most, so a quote
that runs from one violation into the opening of the next is not a find
of both (seen on one CI run of det-02). Traps use the same rule, and a
fixture test keeps any violation quote from overlapping a trap.

Overlap matching needs every key quote to appear in the document
verbatim; the validator now enforces that, and det-01's one trap that
ended in an ellipsis is quoted in full.

A detection case may set min_recall in [0, 1]. Below 1 the case passes
at that recall and records recall as its score, for lists the author
says are not exhaustive (prose-register's det-01 and det-02 failed every
run by construction). A flagged trap still fails at any floor. The
default of 1 keeps every existing case's behaviour.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The rule rubric passed each case's grading_note to the judge as the
source of accepted alternatives. disc-07's note asks for a precise
answer that cites both the "just" prohibition and the hedge rule; across
five CI runs the judge passed the RULE lines that cited one rule and
failed the ones that cited both, reading a human-facing note as a
requirement.

A discrimination case now lists its alternatives in accepted_rules, a
non-empty array of rule strings, and the rubric shows the judge only the
reference rule, the skill's rule text and that list. grading_note is
human-facing again and never reaches the rule judge. The transformation
rubric keeps its note: those notes are written as grading guidance and
none of the five runs showed the judge misreading one.

code-comment-register shares the rubric. Its ten discrimination notes
explain the key rather than list alternatives, so none migrates, and its
rule judge loses that context; the CI run on this branch measures the
effect against its 7 to 10 of 10 across the five prior runs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Five CI runs at the tip of the fixes branch failed the same seven
prose-register cases with the same reasoning each time. A key the model
disagrees with consistently is a fixture defect, not sampling noise, and
each one here is fixed at the fixture with zero model sessions.

- disc-09 becomes a two-way pick, original over over_tight. The subject
  ranked the hand-edited 'restored' stage last on all five CI runs
  because it is five declaratives of similar pressure, which SKILL.md's
  own Lint fails, and ranked original above over_tight on every one of
  them. 'restored' survives as trans-06's reference. The pair has not
  run yet, so it stays arguable until CI shows the choice holds.
- disc-11 keeps 'as you assume' in both variants, and disc-12's 'after'
  drops 'These are hard won lessons, and' while both variants share the
  shipped closing sentence, so each pair differs in one place. Both are
  hand edits from the shipped text, recorded in the grading notes and
  the provenance block, as disc-01's was.
- disc-04's variants open with the paragraph that precedes them in
  c8fa24c, so the connective has something to join.
- disc-02, disc-07, disc-08, disc-10 and disc-11 list their accepted
  alternative rules in accepted_rules. disc-08 and disc-10 accept the
  breath rule, which the subject cited on every disc-08 run and four of
  five disc-10 runs; disc-07's note no longer asks the judge for a
  two-rule answer.
- trans-06's task states the mechanism and duration the reference uses,
  in other words than the reference's, instead of asking for facts only
  the author knows; trans-02's voice rubric stops naming the reference's
  words as required.
- det-01 and det-02 set min_recall 0: their violation lists are not
  exhaustive, so recall is recorded as the score and only a trap hit
  fails them.

The floor stays at 0.4 until five CI runs of the new shape exist.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
accepted_rules, min_recall and the overlap matcher join the Phase 2
revisions as decision 12, with the review memo as their evidence. The
grading section describes what the rule judge and the detection assert
see now, and the After Phase 2 paragraph drops the two keys the pass
settled and names the measurement the suite still does not make: no
row samples a draft written under the skill.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
On the first run after the fixture pass every deterministic assert
passed (choice 12 of 12, detection 3 of 3) and four of the seven
remaining failures were the rule judge rejecting a rule the subject
named that is true of the passage: the "Not X, but Y" move on disc-08,
the breath rule on disc-09, "No flex" on disc-10, the reversal rule on
disc-11. A passage usually breaks more than one rule, the skill's
master rule absorbs cases keyed to others, and widening accepted_rules
run by run ends with any true rule passing.

The judge still runs and its verdict is recorded per case, and the
gate prints the rule count on its summary line, but a row whose only
failed asserts are the rule judgment now counts as passed for the
floor. The choice still gates hard, and an arguable case whose choice
is wrong still counts against the floor whatever its rule verdict.
Decision 13 in the spec records this and names rule identifiers as the
follow-on that makes the check deterministic.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
On the second CI run after the fixture pass det-03's subject flagged
the em-dash for the em-dash rule, as on every prior run, and quoted the
text on its left: "Same company, same invoice, same artifact —". That
shares 15 characters with the key quote, under the overlap matcher's
20-character floor, so the row scored a miss. A violation one character
wide can be quoted from either side, and no span heuristic knows which.

A violation (or trap) may now name an anchor inside its quote; any
subject quote containing the anchor counts as a find of that violation
whatever else it covers. The validator requires the anchor to be a
non-empty substring of its quote. det-03 anchors on "artifact —".

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@nonreagent

Copy link
Copy Markdown
Collaborator Author

Third run, with the det-03 anchor (run 35539965533): prose-register 18 of 22 for the floor (15 strict), code-comment-register 16 of 16 (15 strict).

18/22 passed (rate 81.8%, floor 40%); rule 8/12 informational
16/16 passed (rate 100.0%, floor 75%); rule 9/10 informational

Components on prose-register: choice 10 of 12, rule 8 of 12, rubric 5 of 7, detection 3 of 3. Counting against the floor: disc-04 and disc-11 (both arguable, both chose before), trans-02 and trans-05 (rubric). det-03 quoted the right side of the dash this time, so the anchor was not needed on this run; it covers the left-side case the second run produced.

Three runs of the new shape, per edited case.

  • disc-09 (two-way pair): choice right 3 of 3.
  • disc-12 (one-difference pair): choice right 3 of 3, against 0 of 5 on the unedited pair. The hand edit did what it was for.
  • disc-11 (one-difference pair): choice right 1 of 3. The subject keeps reading "underleveled with great reviews" as the concrete detail. Arguable holds it out of the hard gate; it is a taste case and may not belong in a gate at all.
  • disc-04 (preceding paragraph added): choice right 1 of 3. The context did not settle it; the subject calls the bare question leaner and the connective filler. Same standing as disc-11.
  • det-01, det-02: recall recorded, no trap hits, 3 of 3.
  • det-03: 3 of 3.

Floor calibration now has three runs at 19, 18, 18 for the floor. Two more before the 0.4 floor is revisited, per decision 11.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant