test(fabrika): drive the prototyping eval set's FORFEITED terminal with a sixth fixture - #5306
Conversation
…al-6 FORFEITED was one of nine terminals in the prototyping skill's closed §TERM vocabulary and the only one no fixture reached: the word appeared in an enumeration and in a negative assertion, and nowhere else. eval-6 is a spike whose three runs all died in setup and never reached the phase the question was about, abandoned with `spike dispose --forfeit`. The fixture's transcript carries that invocation as EXECUTED returning 0 with the workspace removed, because SKILL.md's A-TERMINAL-IS-AN-EXIT-YOU-READ rule forbids naming a terminal from a code the run only predicted — a fixture that stopped short of the forfeit could assert the word without ever reaching the state. The set's notes retire the COVERAGE GAP sentence and state what is still unmeasured: the recorded benchmark is five cases against the pre-fix skill, eval-6 is ungraded, and the re-grade is #5305. Part of #5265
No preview deploy
|
|
review-skill: PASS @ 7b633fe — merge-ready Reviewed-head: @ 7b633fe Verified PR #5306 against the acceptance criteria of #5265 + the skill-rigor checklist. Non-blocking (§CP: The central check — does the case genuinely reach FORFEITED, or merely assert the word?It genuinely reaches it. Verified at source, not accepted from the PR body:
Real discrimination, not a giveaway. Non-blocking observation, for #5305 to measure rather than a defect here: the transcript prints Acceptance criteria
Ruling — partial delivery with the gap disclosed is CORRECT here; this should not have waitedThe forcing constraint is real, verified at source. So the two alternatives to shipping partial were both worse: fabricate numbers nobody ran — a false claim, and precisely the failure mode this ticket exists to close — or hold the fixture hostage to an unrelated stage-admission change. The author took neither. And this shape is contract-sanctioned, not a tolerated lapse. §DEV class 1 says it outright: "A What this PASS does and does not certify. It certifies the scope this PR actually claims. It does not certify #5265 complete: AC3 and AC4's second half remain open work on #5265 and #5305, and #5265 must stay open after merge. That is the designed behaviour of Ruling — the derived tier, re-derived independentlyI did not take the author's number. I read the authoritative lexicon ( Matches the claim exactly, and the stated grounds hold: all six of case 6's assertions are judgements and none hits the cue lexicon. ( Ruling — the deliberately-unfixed
|
The
prototypingskill lists nine ways a run can end, and one of them —FORFEITED, abandoning aspike that never produced an answer — had no test behind it. The word showed up in a list and in a
"don't do this" assertion, and nowhere else. This adds a sixth eval fixture that actually ends there,
and rewrites the set's notes to say plainly what the recorded benchmark still does not measure.
Part of #5265
What's here
claude-plugins/fabrika/skills/prototyping/evals/fixtures/eval-6.md— a spike on the fictionalorrery/beaconwhose three runs all died in setup (the sandbox will not open more than 64 of the500 sockets), so no run ever reached the phase the question was about. The session abandoned it
with
spike dispose --forfeitand is asked to finish the run.claude-plugins/fabrika/skills/prototyping/evals/evals.json— case 6 with six assertions, and arewritten
notes.Why the fixture contains the forfeit instead of stopping before it
SKILL.md's
A-TERMINAL-IS-AN-EXIT-YOU-READrule forbids naming a terminal from an exit code the runreasoned its way to rather than read, and
FORFEITEDis defined as0fromspike dispose --forfeit. A fixture that stopped one command before the forfeit would therefore make the correctanswer "the terminal is pending" — the case could assert the word
FORFEITEDwhile no run couldhonestly reach the state. So the fixture's transcript carries the
--forfeitinvocation as EXECUTED,returning
0with"workspace":"removed","forfeited":true, exactly the way eval-5 carries itsobserved
17. What the case grades is the behaviour after that observed result: namingFORFEITEDrather than its near-miss
DISPOSED(both are0from dispose; only one had a captured decision),not dressing three aborted runs up as an answer, not trying to revive a workspace that is proven
gone, and routing the still-open question forward as fresh work.
The case derives the graded tier — all six assertions are judgements about what the run
concluded, none matches the mechanical cue lexicon. Verified through the real decoder, not asserted:
fabrika eval casesreports6 case(s): 0 deterministic, 6 graded.Deviations
Scope narrowing — Said: prototyping skill evals never exercise the FORFEITED terminal outcome #5265's AC3 asks the set to be re-graded on both arms against the
post-fix skill, and AC4 asks the
PRE-FIX skillcaveat to be removed or replaced with the newrun's provenance. Did: shipped the fixture and the notes rewrite; did not re-grade. The
notes keep the pre-fix caveat and now state exactly what it covers — five cases, pre-fix skill,
eval-6 ungraded. Why:
fabrika eval runtakes--stagefrom the liveSTAGESvocabulary(
triage,build,review,ship-it—packages/fabrika-cli/src/eval/corpus.ts) andprototypingis not a member, so the harness refuses this set at the flag. Admitting a stage hasits own rules (the stage-admission rule in
packages/fabrika-cli/src/eval/README.md) and belongsin its own change; writing numbers nobody ran would be worse than the gap. Disposition:
follow-up re-grade the prototyping eval set (both arms, six cases) against the post-fix skill #5305 filed and named in the notes, and this PR is
Part of #5265per §9, so the issuestays open.
Scope narrowing — Said: prototyping skill evals never exercise the FORFEITED terminal outcome #5265's AC1 names assertion
1cas the instrument that grades the§TERM closed set verbatim. Did: matched
1e(and its siblings2f/5f) instead. Why:1cis about routing question 3 away from prototyping;1eis the assertion that enumerates allnine terminals verbatim, so it is the instrument the AC means. Disposition: no action needed.
Known defect left unfixed — Said: nothing in the issue asks for this. Did: left
assertion
2c's wording alone, although its "by exit code 14" phrasing hits the cue lexicon andmis-derives that assertion as
mechanicalrather than the judgement it is. Why: prototyping skill evals never exercise the FORFEITED terminal outcome #5265 puts theweak-instrument defect on
1e/2fexplicitly out of scope, and editing a graded set's existingassertions is the same class of change. Disposition: for the reviewer to judge; not filed
separately, because it sits next to the already-tracked open question 2 on Authoring brief: the
prototypingskill — throwaway code answering ONE question, never grown into the product #5020.