import type { EvalFragment } from './eval-fragment.js'; import { type FrictionReport } from './friction-schema.js'; import { type NormalizedGrading } from './grading-adapter.js'; import { type ToolEvalReport } from './tool-eval-schema.js'; /** * Assemble the run's aggregate grading result (skill-creator's flat * `grading.json` shape) from every eval's per-eval grader fragment (issue #145 * Task 4/5). vat is the SOLE writer of the aggregate; this is that assembly * step — the result feeds {@link import('./grading-adapter.js').reconcileGrading} * unchanged. * * Every fragment must carry the SAME `runNonce` the harness stamped for this * run — a mismatch means a fragment was not produced for this run (forged, * stale, or left behind by untrusted skill code in the shared sandbox) and is * rejected via {@link GradingNonceError}, never silently dropped. * * Zero fragments in → zero expectations out. This is deliberate: the existing * "graded nothing" guard in `reconcileGrading` already throws * `GradingSkewError` on an empty `expectations[]`, so that case is NOT * special-cased here. */ export declare function mergeFragmentsToGrading(fragments: EvalFragment[], runNonce: string): NormalizedGrading; /** * Assemble the run's aggregate friction report from every eval's fragment * (vat-owned; see friction-schema.ts). Concatenates each fragment's * `friction` items (fragments without any are treated as empty), de-dups * byte-identical items, then validates the result against * {@link FrictionReportSchema} — vat's own output contract, strict, no * passthrough. */ export declare function mergeFragmentsToFriction(fragments: EvalFragment[]): FrictionReport; /** * Assemble vat's `tool-eval.json` from every eval's fragment (issue #145 * Phase T; see tool-eval-schema.ts). A SEPARATE channel from `grading.json` * and from friction (C2) — tool verdicts judge declared `toolExpectations` * against the transcript, not prose expectations or packaging friction. * * Fragments carry only the `tool` BODY (no `evalId` — see * {@link import('./tool-eval-schema.js').ToolVerdictBodySchema}); this merge * re-attaches each fragment's own `evalId` to produce a full * {@link import('./tool-eval-schema.js').ToolVerdict}. Fragments with no * `tool` body are OMITTED — not every eval declares `toolExpectations`, so * "no tool block" is a legitimate, non-error case, not a zero-filled verdict. */ export declare function mergeFragmentsToToolEval(fragments: EvalFragment[]): ToolEvalReport; //# sourceMappingURL=fragment-merge.d.ts.map