Repository navigation
Relabel the four positives nothing should have fired on, and keep the one that should - #27
Merged
Merged
Conversation
`make eval` on dab7767 left five cases at `Skill called 0x`, and in every one carrying an exclusion grader the supposed thief was silent too. On the criterion the maintainer settled -- a skill fires when the request needs what the assistant cannot do unaided -- four of those five are mislabelled, and each case is inverted to assert the silence it already measured. - agent-page `why is this endpoint slow in production`: Page reviews a change, not a running system. Phase 1 wants a `git diff`, Phase 4's performance list is a checklist applied to that diff, and the phase stops when no `__REVIEW_VERDICT__` arrived. This overturns what #24 and #25 both claim, that the 0/3 is a description gap. - agent-hale `the plan is agreed -- write it`: the case states the agreed approach in full and still fires nothing, because writing the code a settled plan describes is ordinary compliance. - briefing, both cases: briefing holds no state -- `allowed-tools` is `Read` alone, no config file, no session hook -- so a standing instruction to answer more briefly is one the session can honour by itself, whether it covers one answer or a dozen. Each set keeps 20 queries at 10/10 and its train/validation sizes. Every relabel spends the negative that had asserted the same line by hand, and the slot restores a positive naming what the skill supplies that the session cannot: a review of a change before shipping, a unit built test-first with the suite reported back, and the project's own output style loaded and read back. compactor's #22 clause stands. It was measured with the clause in place, so removing it trades one unmeasured state for another across four files of catalogue copy, and under the criterion it now states the real boundary rather than patching a theft that does not happen. Refs: #25, #24 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The fifth failing case is the one the criterion does not decide by itself, so it is decided on the body instead. Phase 4 lists `stop refining` by name as a mid-session rule change that updates the config file with `Edit`, and the SessionStart hook reloads `refine_question` every session -- so a stop that is not persisted does not stop anything past this one. That is a write, which is exactly what the criterion asks for, and the label stands. `lingua off` is not the sharper phrasing to swap in: it carries the magic word, so it fires whatever the description says, and the body has it suspend for the session without writing the file, making it the less persistent of the two. Relabelling would assert something the body contradicts, and replacing the query would delete the evidence -- the asymmetry against `restate my question before you answer it` at 3/3, same skill and same vocabulary, opposite results. So this is recorded as a body-versus-description mismatch: the description names the on-state and never the off-state. No query, label or grader changes, and the case stays failing as the observation that would justify fixing the description. Refs: #25, #24 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Sep 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #25. Applies the criterion #26 recorded, and corrects a claim #24 and #25 both make.
The criterion
Four of the five failures are mislabels under it. One is not — and it was decided against the rule, on evidence.
Four relabelled
agent-page—why is this endpoint slow in production→ negativeVerified in the body rather than assumed. Phase 1: "Page reviews the change, not the codebase", after a
git diff. Phase 4's Performance Review is a checklist over that diff. Phase 4 also: "No__REVIEW_VERDICT__reached Page → say so and stop." And the failure-handling preamble: "Every phase below assumes its input arrived — a diff to read, Ellis's findings to build on."A live latency regression supplies none of the three, so Page stops on turn one. Its nine other positives are all review-of-a-change; this was the only diagnostic one, and the set already carried
fix the slow queryas a negative.#24 and #25 both call this "the clearest case for a description edit". Both are wrong — they read a repeatable 0/3 as a description gap when the body says Page was never asked.
agent-hale—the plan is agreed -- write it→ negativeThe case prompt already supplies a fully settled approach and still fires 0x with
spec-writersilent. So the failure is not an empty referent: writing the code a settled plan describes is ordinary compliance in the current turn.briefing— both cases → negativeThe decisive finding is not the one #25 guessed. Both prompts were already written as standing instructions — "about a dozen of these to get through this afternoon", "From here on" — so the standing-versus-one-turn distinction is not what fails.
briefingholds no state:allowed-tools: [Read]alone, no config file, no session hook. Nothing it offers is beyond the session's own reach, so answering more briefly is compliable whether it covers one answer or twelve.One that stands:
lingua—stop refining my questionsDecided on evidence, and it comes out against a blanket application of the criterion:
SKILL.mdPhase 4 lists "stop refining" by name as a mid-session rule change that updates the config file withEdit.refine_questionis reloaded by the SessionStart hook every session — so a stop that is not persisted does not stop anything past this one. That is a write, which is exactly what the criterion asks for.On swapping in
lingua offinstead, which was suggested: it is the wrong replacement, for two reasons that run opposite to the suggestion. It carries the magic wordlingua, so it fires whatever the description says and tests nothing about the description. And the body has it suspend for the session without writing the file — making it the less persistent of the two.So: not a relabel, which would assert something the body contradicts; and not a replacement, which would delete the evidence — the
restate…3/3 versusstop refining…0/3 asymmetry is the whole basis of the criterion in #26. The case is left failing on purpose, recorded inaboutas a body-versus-description mismatch: the description names the on-state and never the off-state. That is the observation which would justify a future description edit.compactor's #22 clause: stands#24 asked whether to revert it, since
make evalshows compactor firing 0x on every run and the clause therefore cannot be distinguished from doing nothing. Three reasons it stays:Mechanics
Every relabel that flipped a positive spent an existing negative that asserted the same line by hand, so the line is now drawn by three measured runs instead:
agent-pagefix the slow querybefore we ship this change, check its timeout and retry handlingagent-halewhy is this endpoint slowtake unit 3 from the plan, build it test-first, and report what the suite didbriefing(train)summarise the previous answerload the project's output style for this planning runbriefing(validation)condense this tablewhat output style do the planning agents use in this projectBoth new
briefingpositives ask for the one thing the session cannot supply unaided — what this project's output style actually says — mirroringlingua's existingwhat response language is set for this project.All four sets keep 20 queries, 10/10, 6/6 train and 4/4 validation. New positives scanned clean against every magic word with the same
\b-anchored regexscripts/validateuses; no new cross-set duplicates.Still 13 cases — none removed. Four had
graders/fires.mdreplaced bygraders/does-not-fire.md, matching the house spelling inlingua/translate-readme. Prompts kept verbatim: each is still a realistic turn, and forbriefingthe firing-favourable standing framing makes it a stronger negative. Thespec-writer-silentand bothcompactor-silentgraders are kept, so eachbriefingcase now asserts the criterion's full prediction — neither skill fires.No
briefingdescription edit. Still 284/320; #9's revert stands.Expected movement
make evalshould go 8/13 → 12/13, withlingua/stop-restatingthe one deliberate remaining failure. Not run here.Three follow-ups this opens, none in scope
lingua's description gap is real and unfixed — the off-state ofrefine_questionis unnamed.briefing's description still claims "when the user asks for shorter output", which its own set now labels negative. Someone has to decide whether the ceiling gets raised or the claim gets dropped.agent-hale's remaining plain-implementation positives sit on the boundary this relabel establishes and are unmeasured. Worth a run before anyone touches them — not a blanket relabel.Versions
Nothing moves at any level. Every changed file is under
evals/, and since thecompactorclause stands, no description changed either.Checks
make test— all four pass.bash scripts/validate-fixtures— all fixtures behaved as expected.🤖 Generated with Claude Code