In most domains you can check the output against ground truth. In legal, ground truth is a lawyer, and lawyers are the most expensive test harness ever built.
flowchart TD
A["Agent output in production"] --> B["Programmatic checks"]
A --> C["Independent rubric scorers"]
A --> D["Sampled traces for human review"]
B --> E["Weighted score"]
C --> E
D --> F["Open coding by a reviewer"]
F --> G["Axial coding into failure categories"]
E --> H{"Any Tier 1 below 75"}
H -->|"Yes"| I["Capped at 74.9. Cannot certify."]
H -->|"No"| J["Certification band awarded"]
I --> K["Instruction rewrite"]
G --> K
K --> A
classDef input fill:rgba(180,83,9,0.08),stroke:#b45309,stroke-width:2px,color:#0a1628
classDef agent fill:rgba(74,144,196,0.08),stroke:#4a90c4,stroke-width:2px,color:#0a1628
classDef research fill:rgba(124,58,237,0.08),stroke:#7c3aed,stroke-width:2px,color:#0a1628
classDef gate fill:rgba(180,83,9,0.08),stroke:#b45309,stroke-width:2px,color:#0a1628
classDef closed fill:rgba(225,29,72,0.08),stroke:#e11d48,stroke-width:2px,color:#0a1628
classDef output fill:rgba(15,118,110,0.06),stroke:#0f766e,stroke-width:2px,color:#0a1628
classDef flow fill:rgba(232,98,26,0.08),stroke:#e8621a,stroke-width:2px,color:#0a1628
class A input
class B,C agent
class D,F,G research
class E flow
class H gate
class I closed
class J output
class K flow
Weighted averages have a design flaw that everybody knows about and almost nobody fixes: a strong score on four dimensions will bury a catastrophic score on the fifth. The agent gets an 84, ships, and leaks privileged material in week three.
So the critical dimensions get a veto, not a weight. Safety and Bias score at 1.5x, and either one landing below 75 caps the total at 74.9 regardless of everything else. Not a warning. Not a flag for someone to review. The number is capped below the lowest certification band, which means it cannot ship.
| Dimension | Tier | Weight | What it catches in a legal context |
|---|---|---|---|
| Safety | TIER 1 | 1.5x | Privilege leakage, ethical wall breach, boundary failure, data exposure |
| Bias | TIER 1 | 1.5x | Differential treatment across matters, clients, or parties |
| Instructions | TIER 2 | 1.0x | Scope drift, unclear intent, dependency gaps, unusable output |
| Ethos | TIER 2 | 1.0x | Professional responsibility, access to counsel, downstream impact |
Certification lands in bands: Platinum at 90, Gold at 85, Silver at 80, Bronze at 75. Below 75 there is no band. That is the whole point of putting the cap at 74.9.
Scores tell you something went wrong. They do not tell you what. A drop from 86 to 79 is a number, not a repair instruction.
So the trace layer borrows from qualitative research methodology. A reviewer reads real conversations and annotates specific turns with a description and a severity. That is open coding. Then those annotations get synthesized into five or six named failure categories, each ranked by frequency multiplied by severity weight. That is axial coding. The reviewer edits the taxonomy and approves it.
The rewrite step then receives categorized, human-validated failure patterns with cited examples instead of a score delta. The difference in output quality is not subtle.
How often you evaluate should be a function of how much rope the system has, not a number somebody picked in a planning meeting.