@gaunt-sloth/batch 2.0.0-alpha.24 → 2.0.0-alpha.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +8 -6
  2. package/dist/BatchRunner.d.ts +20 -0
  3. package/dist/BatchRunner.js +28 -2
  4. package/dist/BatchRunner.js.map +1 -1
  5. package/dist/blindExport.d.ts +88 -0
  6. package/dist/blindExport.js +129 -0
  7. package/dist/blindExport.js.map +1 -0
  8. package/dist/classification.d.ts +52 -0
  9. package/dist/classification.js +140 -0
  10. package/dist/classification.js.map +1 -0
  11. package/dist/classificationRender.d.ts +24 -0
  12. package/dist/classificationRender.js +96 -0
  13. package/dist/classificationRender.js.map +1 -0
  14. package/dist/classificationReport.d.ts +11 -0
  15. package/dist/classificationReport.js +60 -0
  16. package/dist/classificationReport.js.map +1 -0
  17. package/dist/classificationTypes.d.ts +311 -0
  18. package/dist/classificationTypes.js +40 -0
  19. package/dist/classificationTypes.js.map +1 -0
  20. package/dist/evalCompare.d.ts +108 -0
  21. package/dist/evalCompare.js +246 -0
  22. package/dist/evalCompare.js.map +1 -0
  23. package/dist/evalRunner.d.ts +34 -3
  24. package/dist/evalRunner.js +259 -9
  25. package/dist/evalRunner.js.map +1 -1
  26. package/dist/evalSuite.d.ts +12 -2
  27. package/dist/evalSuite.js +534 -8
  28. package/dist/evalSuite.js.map +1 -1
  29. package/dist/evalTypes.d.ts +358 -5
  30. package/dist/evalTypes.js +98 -0
  31. package/dist/evalTypes.js.map +1 -1
  32. package/dist/index.d.ts +15 -1
  33. package/dist/index.js +14 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/metrics.d.ts +50 -0
  36. package/dist/metrics.js +433 -0
  37. package/dist/metrics.js.map +1 -0
  38. package/dist/pipelineCli.js +1 -1
  39. package/dist/pipelineCli.js.map +1 -1
  40. package/dist/raterTarget.d.ts +94 -0
  41. package/dist/raterTarget.js +328 -0
  42. package/dist/raterTarget.js.map +1 -0
  43. package/dist/reporters/reporterTypes.d.ts +9 -0
  44. package/dist/reporters/textReporter.js +21 -0
  45. package/dist/reporters/textReporter.js.map +1 -1
  46. package/dist/types.d.ts +14 -2
  47. package/dist/types.js +14 -2
  48. package/dist/types.js.map +1 -1
  49. package/dist/workflow/runWorkflow.d.ts +1 -1
  50. package/dist/workflow/runWorkflow.js +2 -2
  51. package/dist/workflow/runWorkflow.js.map +1 -1
  52. package/package.json +3 -3
@@ -2,6 +2,22 @@ import { runBatchMatrix } from '#src/BatchRunner.js';
2
2
  import { runDeterministicChecks } from '#src/deterministicChecks.js';
3
3
  import { runToolCallChecks } from '#src/toolChecks.js';
4
4
  import { runToolResultChecks } from '#src/toolResultChecks.js';
5
+ import { mechanismNeedsPermissiveRating } from '#src/evalTypes.js';
6
+ import { UNRECOGNIZED_LABEL } from '#src/classificationTypes.js';
7
+ import { extractClassificationValue, readRaw } from '#src/classification.js';
8
+ import { buildClassificationReport } from '#src/classificationReport.js';
9
+ /**
10
+ * BATCH-25 — a case's tags, read defensively.
11
+ *
12
+ * `EvalCase.tags` is REQUIRED and `parseEvalSuite` always supplies it (`[]` when the case declares
13
+ * none), following this layer's stated convention that arrays default to `[]` so callers never need
14
+ * an existence check. But `EvalSuite` is a public export that a caller can also construct by hand,
15
+ * and a missing array must degrade to "no tags" rather than crash a whole run — the same `?? []`
16
+ * discipline `cellResult.tools`/`toolResults` already get here.
17
+ */
18
+ function caseTags(evalCase) {
19
+ return evalCase.tags ?? [];
20
+ }
5
21
  /** A block applies to an identity when it names no identities (unscoped → all) or explicitly names
6
22
  * this one. For the single-run pseudo-identity (`undefined`) only unscoped blocks apply — and the
7
23
  * parser guarantees a no-identities suite has only unscoped blocks. */
@@ -48,6 +64,16 @@ function buildUnits(suite) {
48
64
  * single-turn unit keeps the proven `runCell` + {@link gradeUnit} path byte-for-byte.
49
65
  */
50
66
  export async function runEvalSuite(suite, options) {
67
+ // BATCH-25 Half B — a classification target that never arrived must be LOUD. `options.classify`
68
+ // is optional (a classifier suite can read its label out of an agent answer), so a `rater` suite
69
+ // whose command forgot to build the classifier would otherwise fall through to `runCell` and send
70
+ // every shell command to the chat model as a prompt — a full run, billed, graded against prose,
71
+ // and reported as if it had measured the rater. Fail before anything runs instead.
72
+ if (suite.target.type === 'rater' && !options.classify) {
73
+ throw new Error('runEvalSuite: a "rater" target needs an injected `classify` function — build it with ' +
74
+ '`buildRaterClassifier(suite.target, config)` (#src/raterTarget.js) and pass it as ' +
75
+ '`options.classify`. Without it every case would be run through the ordinary agent.');
76
+ }
51
77
  const units = buildUnits(suite);
52
78
  // I1 — dispatch AND grading are keyed by the guaranteed-unique `inputIndex` (a unit's position in
53
79
  // this array, threaded onto its `MatrixCell`/`CellResult`), NEVER by the composite `cellId`
@@ -103,8 +129,50 @@ export async function runEvalSuite(suite, options) {
103
129
  // cells — `CellRunOutcome` carries one answer, a conversation carries N). Only multi-turn cells
104
130
  // populate this; single-turn cells grade straight from their `CellResult` as before.
105
131
  const conversationOutcomes = new Map();
132
+ // The classification target is only in play for a suite that actually declares a `classification:`
133
+ // block — an injected classifier with no label enum would have no axes to report against.
134
+ const spec = suite.classification;
135
+ const classifier = spec ? options.classify : undefined;
136
+ // BATCH-25 — per-round classification outcomes from an injected classification target, keyed by
137
+ // the same unique `inputIndex`. Populated only on the `options.classify` path.
138
+ const classifyOutcomes = new Map();
106
139
  const dispatchRunCell = async (cell) => {
107
140
  const unit = unitByInputIndex.get(cell.inputIndex);
141
+ // BATCH-25 — a CLASSIFICATION target decides the case itself; there is no agent turn to run.
142
+ // Its per-round outcomes are stashed for grading and ALSO adapted into the conversation stash,
143
+ // so a multi-round classifier case rides the existing per-turn grader unchanged.
144
+ if (classifier) {
145
+ const outcomes = await classifier({
146
+ caseId: unit.evalCase.id,
147
+ inputs: unit.evalCase.turns.map((turn) => turn.user),
148
+ tags: caseTags(unit.evalCase),
149
+ modelFree: unit.evalCase.modelFree,
150
+ // Passed on as DECLARED, per round. The runner is target-agnostic and forms no opinion
151
+ // about what a mechanism implies — `ClassifyRequest.forcedBy` says why that split matters.
152
+ //
153
+ // Where one round declares SEVERAL mechanisms (`ob-05` is the corpus case: an ambiguity
154
+ // preflight AND the floor), a mechanism needing a permissive rating is preferred over one
155
+ // that does not, rather than simply taking the first block. Taking the first made the
156
+ // verdict depend on BLOCK ORDER — `[ambiguity, floor]` passed and `[floor, ambiguity]`
157
+ // failed on identical assertions — because a round left undriven can never let its
158
+ // preflight speak. Preferring the preflight satisfies BOTH claims: the floor's marker comes
159
+ // from `checkHardline`, which is unaffected by the rating either way.
160
+ forcedBy: unit.evalCase.turns.map((turn) => turn.expectations.find((block) => mechanismNeedsPermissiveRating(block.forcedBy))
161
+ ?.forcedBy ??
162
+ turn.expectations.find((block) => block.forcedBy !== undefined)?.forcedBy),
163
+ });
164
+ classifyOutcomes.set(cell.inputIndex, outcomes);
165
+ conversationOutcomes.set(cell.inputIndex, outcomes.map((outcome) => ({
166
+ ok: outcome.ok,
167
+ answer: outcome.rationale,
168
+ error: outcome.error,
169
+ })));
170
+ return {
171
+ ok: outcomes.length > 0 && outcomes.every((outcome) => outcome.ok),
172
+ answer: outcomes[0]?.rationale,
173
+ error: outcomes[0]?.error,
174
+ };
175
+ }
108
176
  // Single-turn: the proven `runSingleShot`-backed path, byte-for-byte (unchanged dispatch).
109
177
  if (unit.evalCase.turns.length <= 1) {
110
178
  return runCellFor(unit.identity)(cell);
@@ -127,15 +195,165 @@ export async function runEvalSuite(suite, options) {
127
195
  unit's array position, preserved through runBatchMatrix), so every result maps to one unit */
128
196
  if (!unit)
129
197
  continue;
198
+ const outcomes = conversationOutcomes.get(cellResult.inputIndex);
199
+ // BATCH-25 — the per-round answers this unit produced, in turn order. A single-turn cell has one
200
+ // (the cell's own answer); a multi-turn / classifier cell has one per round.
201
+ const answersPerTurn = unit.evalCase.turns.length <= 1
202
+ ? [cellResult.answer]
203
+ : unit.evalCase.turns.map((_, index) => outcomes?.[index]?.answer);
204
+ const classifications = buildActualClassifications(unit, spec, answersPerTurn, classifyOutcomes.get(cellResult.inputIndex));
130
205
  if (unit.evalCase.turns.length <= 1) {
131
- results.push(await gradeUnit(unit, cellResult, options.judge));
206
+ results.push(await gradeUnit(unit, cellResult, options.judge, classifications?.[0]));
132
207
  }
133
208
  else {
134
- results.push(await gradeConversationUnit(unit, conversationOutcomes.get(cellResult.inputIndex), cellResult, options.judge));
209
+ results.push(await gradeConversationUnit(unit, outcomes, cellResult, options.judge, classifications));
135
210
  }
136
211
  }
137
212
  const passed = results.filter((result) => result.verdict === 'PASS').length;
138
- return { total: results.length, passed, failed: results.length - passed, cases: results };
213
+ const summary = {
214
+ total: results.length,
215
+ passed,
216
+ failed: results.length - passed,
217
+ cases: results,
218
+ };
219
+ // BATCH-25 — the classifier report (matrices + declared metrics) is attached ONLY for a suite that
220
+ // declares `classification:`, so a #405-era `results.json` is byte-for-byte unchanged.
221
+ if (spec) {
222
+ summary.classification = buildClassificationReport(spec,
223
+ // Same defensive read as `caseTags`: required on the parsed shape, tolerated absent on a
224
+ // hand-constructed one.
225
+ suite.metrics ?? [], toClassifiedCells(results));
226
+ }
227
+ return summary;
228
+ }
229
+ /**
230
+ * BATCH-25 — reduce the graded results to the shape the matrices and metrics read.
231
+ *
232
+ * `scored` is the load-bearing field: a cell whose SUT never ran has NO place in any matrix cell or
233
+ * any metric denominator, and is instead counted as `excluded` and said out loud. Silently treating
234
+ * it as a wrong answer would inflate the error rate; silently dropping it would inflate coverage.
235
+ * Both are how a classifier report comes to claim more than it measured.
236
+ */
237
+ export function toClassifiedCells(results) {
238
+ return results.map((result) => ({
239
+ id: result.identity === undefined ? result.id : `${result.id}__${result.identity}`,
240
+ tags: result.tags ?? [],
241
+ expectedLabel: result.classification?.expectedLabel,
242
+ expectedAction: result.classification?.expectedAction,
243
+ actualLabel: result.classification?.actualLabel,
244
+ actualAction: result.classification?.actualAction,
245
+ scored: result.sutOk && result.classification !== undefined,
246
+ }));
247
+ }
248
+ /**
249
+ * BATCH-25 — build one {@link EvalCaseClassification} per round: what the corpus expected, and what
250
+ * the SUT actually produced.
251
+ *
252
+ * The EXPECTED side comes from the round's APPLICABLE expectation blocks (already filtered to this
253
+ * identity), so an identity-scoped or round-scoped expectation is read correctly. When two
254
+ * applicable blocks declare different expected labels the first wins for reporting purposes — but
255
+ * both are still graded independently, so a contradictory pair fails the case rather than being
256
+ * quietly reconciled here.
257
+ *
258
+ * The ACTUAL side comes from the injected classification target when there is one, and otherwise
259
+ * from the suite's declared extractors reading the round's answer. Either way a value the suite does
260
+ * not declare becomes {@link UNRECOGNIZED_LABEL} — a visible bucket, never a dropped row.
261
+ */
262
+ function buildActualClassifications(unit, spec, answersPerTurn, classifyOutcomes) {
263
+ if (!spec)
264
+ return undefined;
265
+ return unit.evalCase.turns.map((_turn, index) => {
266
+ const applicable = unit.applicablePerTurn[index] ?? [];
267
+ const expectedLabel = applicable.find((block) => block.expectLabel !== undefined)?.expectLabel;
268
+ const expectedAction = applicable.find((block) => block.expectAction !== undefined)?.expectAction;
269
+ const outcome = classifyOutcomes?.[index];
270
+ const answer = answersPerTurn[index];
271
+ let actualLabel;
272
+ let actualAction;
273
+ let raw;
274
+ if (outcome) {
275
+ // A classification target reports its verdict directly — but it is still held to the suite's
276
+ // declared enum, so a target returning an undeclared value shows up as `(unrecognized)`
277
+ // rather than silently widening the axis.
278
+ actualLabel = outcome.ok ? normalizeAgainstEnum(outcome.label, spec.labels) : undefined;
279
+ actualAction =
280
+ outcome.ok && spec.actions.length > 0
281
+ ? normalizeAgainstEnum(outcome.action, spec.actions)
282
+ : undefined;
283
+ raw = outcome.rationale;
284
+ }
285
+ else if (answer !== undefined) {
286
+ actualLabel = extractClassificationValue(answer, spec.labelFrom, spec.labels);
287
+ if (spec.actionFrom) {
288
+ actualAction = extractClassificationValue(answer, spec.actionFrom, spec.actions);
289
+ }
290
+ // Keep the text the extractor actually read when it is NOT just the whole answer, so an
291
+ // `(unrecognized)` result is diagnosable from the per-cell JSON without re-running.
292
+ const readValue = readRaw(answer, spec.labelFrom);
293
+ if (readValue !== undefined && readValue !== answer)
294
+ raw = readValue;
295
+ }
296
+ return {
297
+ expectedLabel,
298
+ expectedAction,
299
+ actualLabel,
300
+ actualAction,
301
+ raw,
302
+ modelCalls: outcome?.modelCalls,
303
+ };
304
+ });
305
+ }
306
+ /** Hold a classification target's own verdict to the suite's declared enum. An absent value stays
307
+ * absent (the target reported nothing on this dimension); an undeclared one becomes
308
+ * {@link UNRECOGNIZED_LABEL}. */
309
+ function normalizeAgainstEnum(value, declared) {
310
+ if (value === undefined)
311
+ return undefined;
312
+ return declared.includes(value) ? value : UNRECOGNIZED_LABEL;
313
+ }
314
+ /**
315
+ * BATCH-25 — grade one round's classification assertions and the `model_free` contract.
316
+ *
317
+ * Returns failure reasons; empty means the round's classification assertions held. The label and
318
+ * the action are graded SEPARATELY and both are reported, because they diverge by design: a
319
+ * deterministic preflight can produce the right action from the wrong label, and a report that
320
+ * collapsed them would hide which component drifted.
321
+ */
322
+ function gradeClassificationBlock(block, classification) {
323
+ const reasons = [];
324
+ if (block.expectLabel !== undefined) {
325
+ const actual = classification?.actualLabel;
326
+ if (actual !== block.expectLabel) {
327
+ reasons.push(`expected label "${block.expectLabel}" but got "${actual ?? '(none)'}"`);
328
+ }
329
+ }
330
+ if (block.expectAction !== undefined) {
331
+ const actual = classification?.actualAction;
332
+ if (actual !== block.expectAction) {
333
+ reasons.push(`expected action "${block.expectAction}" but got "${actual ?? '(none)'}"`);
334
+ }
335
+ }
336
+ return reasons;
337
+ }
338
+ /** BATCH-25 — the `model_free` contract: a case declared free must cost ZERO model calls. A target
339
+ * that quietly rings the model on such a case would otherwise be invisible, and these cases are
340
+ * exactly the cheap, deterministic regression gate (the EXT-55 class — a hardline floor that had
341
+ * silently stopped firing, invisible to build, lint and unit). `undefined` model calls means the
342
+ * target did not report them, which is itself a failure of the contract. */
343
+ function gradeModelFree(evalCase, classification) {
344
+ if (!evalCase.modelFree)
345
+ return [];
346
+ const calls = classification?.modelCalls;
347
+ if (calls === undefined) {
348
+ return [
349
+ 'model_free: the target reported no model-call count, so "zero model calls" could not be ' +
350
+ 'verified.',
351
+ ];
352
+ }
353
+ if (calls > 0) {
354
+ return [`model_free: expected 0 model calls but the target made ${calls}`];
355
+ }
356
+ return [];
139
357
  }
140
358
  /**
141
359
  * BATCH-11 (#405 his #6) — classify a completed suite's {@link EvalSuiteSummary} into a distinct
@@ -153,6 +371,12 @@ export async function runEvalSuite(suite, options) {
153
371
  * Classification is anchored on `sutOk`, not the verdict: a cell that ran (`sutOk === true`) but
154
372
  * whose judge errored (or whose answer failed a check) is a real result → exit `1`, never `2`. A
155
373
  * *mix* of `sutOk:false` and `sutOk:true` cells therefore yields `1`.
374
+ *
375
+ * BATCH-25 adds ONE further way to reach `1`: a breached `gate: fail` metric threshold. That is a
376
+ * product signal of exactly the same kind — and it is the one that a per-case pass/fail sweep cannot
377
+ * express, because a classifier corpus can be entirely within per-case tolerance while its
378
+ * false-approve rate is unacceptable. Per-case verdicts answer "did each case behave"; a gated
379
+ * metric answers "is the aggregate shippable", and only the second gates a release.
156
380
  */
157
381
  export function classifyEvalExit(summary) {
158
382
  // No gradeable results at all → harness/environment error, not a product signal.
@@ -163,6 +387,11 @@ export function classifyEvalExit(summary) {
163
387
  if (summary.failed > 0) {
164
388
  return 1;
165
389
  }
390
+ // BATCH-25 — every cell passed, but a declared metric breached its hard threshold. Still a
391
+ // product signal (exit 1), never a harness one: the run worked, the aggregate is out of bounds.
392
+ if ((summary.classification?.gateFailures.length ?? 0) > 0) {
393
+ return 1;
394
+ }
166
395
  // Every cell passed.
167
396
  return 0;
168
397
  }
@@ -175,7 +404,7 @@ export function classifyEvalExit(summary) {
175
404
  * `judge` field is exactly that block's outcome (back-compat). For a single applicable block this
176
405
  * reproduces the pre-BATCH-12 grading byte-for-byte.
177
406
  */
178
- async function gradeApplicableBlocks(answer, tools, toolResults, applicable, passThreshold, judge) {
407
+ async function gradeApplicableBlocks(answer, tools, toolResults, applicable, passThreshold, judge, classification) {
179
408
  const deterministicFailures = [];
180
409
  const reasons = [];
181
410
  let judgeOutcome;
@@ -188,8 +417,13 @@ async function gradeApplicableBlocks(answer, tools, toolResults, applicable, pas
188
417
  // third input kind, graded by its own checker (#src/toolResultChecks.js) and merged into the
189
418
  // same `reasons` so they drive the same PASS/FAIL/exit contract.
190
419
  const toolResultFailures = runToolResultChecks(toolResults, block);
420
+ // BATCH-25 classification assertions read the cell's CLASSIFICATION (a fourth input kind,
421
+ // beside the answer, the tool trace and the tool results), so they are graded by their own
422
+ // checker and merged into the same `reasons` — the same PASS/FAIL/exit contract as every other
423
+ // assertion.
424
+ const classificationFailures = gradeClassificationBlock(block, classification);
191
425
  deterministicFailures.push(...checks.failures);
192
- reasons.push(...checks.failures, ...toolFailures, ...toolResultFailures);
426
+ reasons.push(...checks.failures, ...toolFailures, ...toolResultFailures, ...classificationFailures);
193
427
  if (block.judgeRubric) {
194
428
  let outcome;
195
429
  if (!judge) {
@@ -218,7 +452,7 @@ async function gradeApplicableBlocks(answer, tools, toolResults, applicable, pas
218
452
  * block passes. For a flat case (exactly one unscoped applicable block) this produces byte-for-byte
219
453
  * the same `reasons`/`checks`/`judge`/`verdict` as the pre-BATCH-12 single-block grader.
220
454
  */
221
- async function gradeUnit(unit, cellResult, judge) {
455
+ async function gradeUnit(unit, cellResult, judge, classification) {
222
456
  const { evalCase, identity, applicablePerTurn } = unit;
223
457
  const applicable = applicablePerTurn[0];
224
458
  const base = {
@@ -235,6 +469,10 @@ async function gradeUnit(unit, cellResult, judge) {
235
469
  // pre-BATCH-21 cell's `<id>.json` keeps its exact keys (JSON.stringify drops undefined).
236
470
  toolResults: cellResult.toolResults,
237
471
  durationMs: cellResult.durationMs,
472
+ // BATCH-25 — omitted entirely (not set to `undefined`) for a non-classifier suite, so a
473
+ // pre-BATCH-25 `<id>.json` keeps its exact key set.
474
+ ...(classification !== undefined ? { classification } : {}),
475
+ ...(caseTags(unit.evalCase).length > 0 ? { tags: caseTags(unit.evalCase) } : {}),
238
476
  };
239
477
  if (!cellResult.ok) {
240
478
  return {
@@ -258,7 +496,8 @@ async function gradeUnit(unit, cellResult, judge) {
258
496
  const answer = cellResult.answer ?? '';
259
497
  const tools = cellResult.tools ?? [];
260
498
  const toolResults = cellResult.toolResults ?? [];
261
- const { reasons, deterministicFailures, judgeOutcome } = await gradeApplicableBlocks(answer, tools, toolResults, applicable, evalCase.passThreshold, judge);
499
+ const { reasons, deterministicFailures, judgeOutcome } = await gradeApplicableBlocks(answer, tools, toolResults, applicable, evalCase.passThreshold, judge, classification);
500
+ reasons.push(...gradeModelFree(evalCase, classification));
262
501
  // A cell PASSES iff nothing was recorded against it: every applicable block's deterministic
263
502
  // checks, tool-trace checks, and judge all passed (a passing judge appends no reason). For a
264
503
  // single applicable block this is exactly the pre-BATCH-12 verdict.
@@ -286,7 +525,7 @@ async function gradeUnit(unit, cellResult, judge) {
286
525
  * `sutOk:false` (exit-2-eligible, like a single-shot SUT failure) while a turn-1-ran/turn-2-failed
287
526
  * cell is `sutOk:true`, a real product signal → exit 1.
288
527
  */
289
- async function gradeConversationUnit(unit, outcomes, cellResult, judge) {
528
+ async function gradeConversationUnit(unit, outcomes, cellResult, judge, classifications) {
290
529
  const { evalCase, identity, applicablePerTurn } = unit;
291
530
  const turnOutcomes = outcomes ?? [];
292
531
  const turnResults = [];
@@ -303,6 +542,7 @@ async function gradeConversationUnit(unit, outcomes, cellResult, judge) {
303
542
  'which is a suite-authoring error.');
304
543
  }
305
544
  const outcome = turnOutcomes[i];
545
+ const classification = classifications?.[i];
306
546
  const label = `turn ${i + 1}`;
307
547
  if (!outcome || !outcome.ok) {
308
548
  // This turn produced no answer: the conversation errored on it, or aborted before reaching it.
@@ -325,6 +565,7 @@ async function gradeConversationUnit(unit, outcomes, cellResult, judge) {
325
565
  ok: false,
326
566
  verdict: 'FAIL',
327
567
  reasons: [detail],
568
+ ...(classification !== undefined ? { classification } : {}),
328
569
  });
329
570
  cellReasons.push(`${label}: ${detail}`);
330
571
  continue;
@@ -333,7 +574,8 @@ async function gradeConversationUnit(unit, outcomes, cellResult, judge) {
333
574
  const answer = outcome.answer ?? '';
334
575
  const tools = outcome.tools ?? [];
335
576
  const toolResults = outcome.toolResults ?? [];
336
- const { reasons, deterministicFailures, judgeOutcome } = await gradeApplicableBlocks(answer, tools, toolResults, applicable, evalCase.passThreshold, judge);
577
+ const { reasons, deterministicFailures, judgeOutcome } = await gradeApplicableBlocks(answer, tools, toolResults, applicable, evalCase.passThreshold, judge, classification);
578
+ reasons.push(...gradeModelFree(evalCase, classification));
337
579
  const turnVerdict = reasons.length === 0 ? 'PASS' : 'FAIL';
338
580
  turnResults.push({
339
581
  user: turn.user,
@@ -347,6 +589,7 @@ async function gradeConversationUnit(unit, outcomes, cellResult, judge) {
347
589
  checks: { passed: deterministicFailures.length === 0, failures: deterministicFailures },
348
590
  judge: judgeOutcome,
349
591
  reasons,
592
+ ...(classification !== undefined ? { classification } : {}),
350
593
  });
351
594
  for (const reason of reasons)
352
595
  cellReasons.push(`${label}: ${reason}`);
@@ -362,6 +605,13 @@ async function gradeConversationUnit(unit, outcomes, cellResult, judge) {
362
605
  sutOk: anyTurnRan,
363
606
  reasons: cellReasons,
364
607
  turns: turnResults,
608
+ // BATCH-25 — the cell-level classification is the LAST round's: a negotiation corpus asserts its
609
+ // outcome on where the exchange ENDED (reject · reject · escalate), so that is the value the
610
+ // confusion matrix and the metrics must read. Every round's own value is in `turns`.
611
+ ...(classifications !== undefined && classifications.length > 0
612
+ ? { classification: classifications[classifications.length - 1] }
613
+ : {}),
614
+ ...(caseTags(evalCase).length > 0 ? { tags: caseTags(evalCase) } : {}),
365
615
  };
366
616
  }
367
617
  //# sourceMappingURL=evalRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evalRunner.js","sourceRoot":"","sources":["../src/evalRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evalRunner.js","sourceRoot":"","sources":["../src/evalRunner.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,8 @@ import type { EvalSuite } from '#src/evalTypes.js';
9
9
  * Rejects, with a clear message, at parse time (never silently no-ops or defers to run time):
10
10
  * - Malformed YAML.
11
11
  * - A suite shape that doesn't match {@link RawSuiteSchema} (missing/wrong-typed fields).
12
- * - `target.type` other than `"gth-agent"`, `"adk-agent"`, or `"ag-ui"` — other pluggable CLI/HTTP
13
- * targets are out of scope.
12
+ * - `target.type` other than `"gth-agent"`, `"adk-agent"`, `"ag-ui"`, or `"rater"` — other pluggable
13
+ * CLI/HTTP targets are out of scope.
14
14
  * - `target.profile` set to anything other than `"default"`/absent — a single suite-wide profile
15
15
  * switch is the `--identities` direction, replaced by the suite-level `identities` list.
16
16
  * - A `"adk-agent"` (BATCH-14) target missing its `url`; an `adk-agent` suite that ALSO uses the
@@ -41,6 +41,16 @@ import type { EvalSuite } from '#src/evalTypes.js';
41
41
  * - A tool-RESULT assertion (`must_error` / `tool_result_json_path`, BATCH-21) against an
42
42
  * `adk-agent` OR `ag-ui` target — tool results exist only on the in-process `gth-agent` target
43
43
  * (the AG-UI wire streams call names but no result payloads; A2A exposes no tool trace at all).
44
+ * - A `"rater"` (BATCH-25 Half B) target missing its `rung`, naming one that is not on the approvals
45
+ * ladder, or carrying a `profile`; a `rater` suite with no `classification:` block (the classifier
46
+ * layer would be inert and every case would silently run through the ordinary agent); a `rater`
47
+ * suite using the `identities` matrix (the classification seam is per-case, not per-identity); or
48
+ * a `rater` suite using ANY tool assertion (no agent runs, so there is no trace to grade).
49
+ * - `model_free: true` on a case of any target EXCEPT `rater` — running a case through an agent IS
50
+ * a model call, so the flag could never bite; and `model_free: true` on a case that ALSO declares
51
+ * a `judge:` rubric, since the judge is a second model call the target's `modelCalls` cannot see.
52
+ * - `forced_by` on any target except `rater`, or naming something that is not a mechanism of the
53
+ * approvals gate.
44
54
  * - A `judge_profile` containing a path separator or `..`.
45
55
  *
46
56
  * @param yamlText Raw suite file content.