Skip to content

feat: eval suites can score any dataset - #19

Merged
kiyeonjeon21 merged 1 commit into
mainfrom
feat/eval-dataset-flags
Jul 25, 2026
Merged

feat: eval suites can score any dataset#19
kiyeonjeon21 merged 1 commit into
mainfrom
feat/eval-dataset-flags

Conversation

@kiyeonjeon21

Copy link
Copy Markdown
Owner

Why

Stage 2 of 3 for the trap-dataset work. A harder dataset is useless if the harness cannot be pointed at it - and today it cannot: runEngineSuite() is called with zero arguments (eval.ts), so its existing datasetDir/casesFile options are unreachable, and the agent suite's equivalents are never forwarded either.

What

  • --dataset <folder>, --cases-file <path>, --glossary <path> on both suites. --cases keeps its existing meaning (case-id filter), hence --cases-file for the file.
  • loadEvalDataset() is now shared by the engine and agent suites, so they cannot drift on which dataset or curation the engine was grounded in.
  • --glossary applies committed curation through the Stage-1 path. The suites deliberately read no .datactx/ cache, so a glossary must be passed explicitly.
  • Reports record dataset/casesFile/glossary, and the filename now includes the dataset (engine-dataset-<ts>.json) - two datasets would otherwise leave indistinguishable baselines side by side in .datactx/evals/.
  • eval:engine:hard / eval:ab:hard scripts, pointing at the dataset Stage 3 adds.

The committed dataset and cases stay the defaults, deliberately: test/evals.test.ts asserts the engine suite scores exactly 1.0 there, and an agent test hardcodes 12650/9050 from the current CSV bytes.

Verification

  • npm run check exit 0; npm run test:cli 138 pass / 0 fail (136 + 2 new)
  • npm run eval:engine still 18/18 on the default pair
  • The flag is provably honored, not silently ignored: pointing the engine suite at fixtures/data drops it from 18/18 to 3/18, and a new test asserts that plus the recorded identity
  • A second new test proves a --glossary file reaches the grounding context the model actually sees (asserting on the captured system prompt), which is the Stage-1 chain working end to end through the harness

🤖 Generated with Claude Code

https://claude.ai/code/session_01CKZ9UVgw2Mhiu6T5YAG7k6

…ored

Both suites already accepted datasetDir/casesFile - the CLI just never passed
them, and runEngineSuite() was called with zero arguments. This wires them up so
a second, harder dataset is reachable without touching the committed defaults.

- --dataset <folder>, --cases-file <path> and --glossary <path> on both suites.
  Note --cases stays the case-id filter, hence --cases-file for the file.
- loadEvalDataset() is now shared by the engine and agent suites, so the two
  cannot drift on which dataset or curation the engine was grounded in.
- --glossary applies committed curation through the Stage-1 path. The suites read
  no .datactx/ cache by design, so a glossary has to be passed explicitly.
- Reports carry dataset/casesFile/glossary, and the filename includes the dataset
  (engine-dataset-<ts>.json). Two datasets would otherwise leave
  indistinguishable baselines side by side in .datactx/evals/.
- eval:engine:hard and eval:ab:hard scripts, pointing at the dataset that Stage 3
  adds.

The committed dataset and cases stay the defaults: test/evals.test.ts asserts the
engine suite scores exactly 1.0 there, and an agent test hardcodes 12650/9050
from the current CSV bytes.

Proof the flag is honored rather than ignored: pointing the engine suite at
fixtures/data drops it from 18/18 to 3/18, and a new test asserts exactly that.
@kiyeonjeon21
kiyeonjeon21 merged commit 331511c into main Jul 25, 2026
1 check passed
@kiyeonjeon21
kiyeonjeon21 deleted the feat/eval-dataset-flags branch July 25, 2026 14:47
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