feat(scorecard): run the first four-way, and add the column it proved was missing (G4) - #7
Merged
Conversation
… was missing (G4)
`benchmarks/RESULTS.md` now exists. First real sweep of the Nimbus fixture, dgx skipped (the local
Ollama box is behind a tunnel this machine cannot reach — `--skip` was added so an UNREACHABLE
config is declared as absent rather than recorded as a model that failed):
claude recall 1.00 precision 1.00 triage 0.89 policies 9 (0 unusable) 195s
openai recall 0.89 precision 1.00 triage 1.00 policies 7 (0 unusable) 53s
gemini recall 0.67 precision 1.00 triage 1.00 policies 6 (3 unusable) 394s
The run surfaced a column the acceptance never asked for and the table plainly needed. Gemini scored
precision 1.00 and triage 1.00 while emitting `{}` as the spec for 3 of its 6 policies — structured
output validated, because `{}` is a valid dict, and the artifact was useless. Recall, precision and
triage all say the routing was right; none of them notice. `policies (unusable)` counts what
`lint_generated_spec` rejects, reusing machinery the pipeline already runs on every scan. Publishing
the table without it would have flattered a model that routed correctly and then emitted nothing.
That column surfaced a second, older bug in turn: a re-scan into an existing out dir leaves the
previous run's artifacts in `policies/` (32 files for 9 generated policies), so the count is taken
from the run's own `policies.json` index rather than by globbing the directory — otherwise a model
is scored against someone else's leftovers.
Six new tests. 268 pass, coverage 73%.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
benchmarks/RESULTS.mdnow exists, so G4 is checked.First real sweep of the Nimbus fixture,
dgxskipped — the local Ollama box is behind a tunnel thismachine cannot reach.
--skipwas added for exactly that: an unreachable config is declared asabsent from the table rather than recorded as a model that failed, which would be a false red row.
claudeopenaigeminiThe run proved the table needed a column the acceptance never asked for
Gemini scored precision 1.00 and triage 1.00 while emitting
{}as the spec for 3 of its 6policies. Structured output validated —
{}is a valid dict — and the artifact was useless.Recall, precision and triage all say the routing was right. None of them notice. Published as
specified, this table would have flattered a model that routed correctly and then emitted nothing.
policies (unusable)counts whatlint_generated_specrejects — an empty spec, no DENY rule, anOpenAPI fragment missing its envelope — reusing machinery the pipeline already runs on every scan.
No new judgement, just a count that reaches the scorecard.
Flagging it as beyond the stated acceptance: I added it because the alternative was publishing a
misleading table.
Which surfaced an older bug in turn
Counting policies by globbing
policies/gave 32 for Claude's 9 generated — a re-scan into anexisting out dir leaves the previous run's artifacts behind. The count now comes from the run's own
policies.jsonindex, so a model is never scored against someone else's leftovers. Pinned by a test.Also in the table, deliberately
guarantee determinism.
dgxnamed as skipped-because-unreachable.Six new tests · 268 pass · coverage 73% ·
ruffclean.🤖 Generated with Claude Code