Skip to content

fix(regression): judge coverage + fault classification (#41 F1/F2/F3) - #94

Merged
huiyu merged 1 commit into
3.0from
fix/41-judge-coverage
Aug 24, 2026
Merged

fix(regression): judge coverage + fault classification (#41 F1/F2/F3)#94
huiyu merged 1 commit into
3.0from
fix/41-judge-coverage

Conversation

@huiyu

@huiyu huiyu commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Campaign-2 fix #5 (final) — #41 judge. From the independent re-verification.

  • F1 (Important) the count check validated cardinality, not coverage — a judge returning the right NUMBER of entries but all n:1 (or n:99), all-pass, passed the scenario while criteria 2..N were never graded (the exact skip-the-failing-criterion threat H1 targets). parseVerdict now requires the criteria to be numbered exactly {1..expectedCount}, each once, else a criteria-coverage-mismatch fault.
  • F3 a structurally malformed entry (no valid verdict) was recomputed to a fail (exit 1, a skill regression) → now a malformed-criterion fault (exit 2), so a broken judge is never mislabeled as a regression.
  • F2 judge.sh swallowed a failed --count into EXPECTED="" and graded "of 0" → now fails loudly (exit 2) on a count-lookup failure or non-positive count.

Verification

test:regression-judge: 15/15 — F1 (duplicate/out-of-range n rejected, complete 1..N passes), F3 fault, existing malformed test updated to expect the fault. Shell logic smoke-tested (valid→count, unknown→exit 2). No vendored files changed.

🤖 Generated with Claude Code

From the independent re-verification of #41's judge:

- F1 (Important): the count check validated cardinality, not coverage — a judge
  returning the right NUMBER of entries but all numbered n:1 (or n:99) all-pass
  passed the scenario while criteria 2..N were never graded (the exact
  skip-the-failing-criterion threat H1 targets). parseVerdict now requires the
  criteria to be numbered exactly {1..expectedCount}, each once, else a
  criteria-coverage-mismatch fault.
- F3: a structurally malformed entry (no valid verdict) was recomputed to a fail
  (exit 1, a skill regression) — now a malformed-criterion fault (exit 2), so a
  broken judge is never mislabeled as a regression.
- F2: judge.sh swallowed a failed --count into EXPECTED="" and graded "of 0";
  it now fails loudly (exit 2) on a count-lookup failure or non-positive count.

Tests: F1 coverage (duplicate/out-of-range n rejected, complete 1..N passes), F3
fault, and the existing malformed test updated to expect the fault.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KwyFyRC6pepaK6DuMK7YeT
@huiyu
huiyu merged commit bfa2e1c into 3.0 Aug 24, 2026
1 check passed
@huiyu
huiyu deleted the fix/41-judge-coverage branch August 24, 2026 13:28
huiyu added a commit that referenced this pull request Aug 24, 2026
…resolved

PRs #90-#94 merged to 3.0; the 3 CRITICAL (C1 #62 writer, C2/C3 #51 claude path)
that the independent pass overturned are re-fixed with real end-to-end tests, and
the 18 further Important/Medium/Minor defects are closed. Residual risks R1-R4
remain post-3.0 by intent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KwyFyRC6pepaK6DuMK7YeT
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