Problem
Models game structured-output evals with vacuous {} / {"answer": ""} / all-null payloads that still validate against the schema.
Pattern
Add src/scorers/json-nonempty.ts exporting a Scorer (sibling: json-schema.ts), register in registry.ts builtinScorers; test in tests/scorers.test.ts via ctx()/run() helpers. Wrap schema validation with emptiness checks (minKeys, rejectBlankStrings, rejectNulls, defaults 1/true/true); fail outputs with zero non-empty leaf values.
Acceptance
New type json-nonempty. ctx('{}') with minKeys: 1 fails-before; ctx('{"answer": "Paris"}') passes-after.
Problem
Models game structured-output evals with vacuous
{}/{"answer": ""}/ all-null payloads that still validate against the schema.Pattern
Add
src/scorers/json-nonempty.tsexporting aScorer(sibling:json-schema.ts), register inregistry.tsbuiltinScorers; test intests/scorers.test.tsviactx()/run()helpers. Wrap schema validation with emptiness checks (minKeys,rejectBlankStrings,rejectNulls, defaults 1/true/true); fail outputs with zero non-empty leaf values.Acceptance
New type
json-nonempty.ctx('{}')withminKeys: 1fails-before;ctx('{"answer": "Paris"}')passes-after.