/** * The Critique contract — the structured result the Critic (Slice 2) produces * from one Team's Slice-1 evaluation. This is what the CLI prints and what the * Slice-3 Designer will reuse to name and explain what it discovers. */ import type { StrengthRow } from '../types.js'; export type Severity = 'high' | 'medium' | 'low'; /** One matchup hole or structural weakness, tied to what exploits it. */ export interface CritiqueWeakness { /** One-line statement of the weakness. */ summary: string; /** Archetype label(s) that exploit it (matching the Gauntlet's labels). */ exploitedBy: string[]; /** Why it happens — the threat plus what the Team lacks. */ mechanism: string; severity: Severity; } /** A concrete, actionable change to shore up a weakness. */ export interface CritiqueFix { change: string; rationale: string; } /** The full critique of one Team. */ export interface Critique { team: string; /** Overall Strength echoed from the evaluation, in [0, 1]. */ strength: number; /** Plain-language summary of the Team's biggest problems. */ overall: string; /** Ranked weaknesses, most severe first. */ weaknesses: CritiqueWeakness[]; fixes: CritiqueFix[]; /** Caveats the Critic flagged — notably where a verdict leans on the Pilot's * known offense bias (ADR 0004). */ caveats: string[]; /** Optional full legal Showdown paste with the fixes applied. */ revisedPaste?: string; /** Which model produced the critique (for reproducibility). */ model: string; /** Gauntlet version and seed of the underlying evaluation. */ gauntletVersion?: string; seed: string; } /** Input to {@link critique}: one Team's paste plus its Slice-1 result. */ export interface CritiqueInput { /** Standard Showdown paste — lets the Critic reason about mechanism and fixes. */ paste: string; /** That Team's row from an `evaluate()` result. */ row: StrengthRow; seed: string; gauntletVersion?: string; }