EVAL-001: Evaluation Contract — Flash Evaluations (FEATURE-053)
Locks scoring definitions, ground truth strategy, thresholds, and failure taxonomies for Flash Evaluations before any code is written.
What this file does
Locks scoring definitions, ground truth strategy, thresholds, and failure taxonomies for Flash Evaluations before any code is written.
When to use it
- Pre-committing evaluation methodology before implementation
- Defining parity measurement against an existing model as ground truth
- Setting pass/fail gates and failure taxonomies for model comparison
- Documenting manual validation steps for pseudo-ground-truth baselines
Assumes this stack
EVAL-001: Evaluation Contract — Flash Evaluations (FEATURE-053)
Status: Locked
Sprint: 16
Date: 2026-04-27
Author: Mike Chavez
Purpose
This document defines the evaluation methodology for FEATURE-053: Flash Evaluations. It locks all scoring definitions, ground truth strategy, thresholds, and failure taxonomies before any code is written or eval runs are executed. All decisions are pre-committed to prevent post-hoc rationalization.
Nothing proceeds to implementation until this contract is signed off.
Scope
Sprint 16 (this contract): Tier 1 operations only.
| Operation | Type |
|---|---|
| entity_extraction | Extraction |
| sentiment_analysis | Classification |
| theme_extraction | Extraction |
Tier 2 operations (narrative_generate, narrative_theme_extract, cluster_narrative_gen, narrative_polish, insight_generation) are out of scope for Sprint 16.
Ground Truth Strategy
Method: Parity measurement. Haiku outputs from production (haiku_output field in briefing_drafts collection) are used as pseudo-ground-truth.
What this means: We are measuring whether Flash agrees with Haiku, not whether Flash is objectively correct. This is the appropriate tool for the question being asked: can Flash substitute for Haiku without users noticing a difference? The bar is Haiku, not perfection.
Explicit caveat (to be stated in EVAL-001 meta-doc):
"Haiku outputs used as pseudo-ground-truth. This evaluation measures parity, not absolute accuracy. Manual ground truth was not constructed at scale — appropriate given that the user-facing quality baseline is already Haiku, and the decision is relative substitution, not absolute quality assessment."
Manual validation layer: A stratified spot-check of 30 samples (10 per operation) is performed before scoring runs to validate that Haiku is a trustworthy baseline. See Section: Manual Validation Step.
Manual Validation Step
Purpose
Confirm that Haiku outputs align with human judgment before using them as pseudo-ground-truth. Results inform confidence in parity interpretation but do not override it.
Sampling
- 10 samples per operation (30 total)
- Stratified: ~5 typical samples + ~5 edge cases per operation
- Edge cases defined as: long articles, multiple entities, mixed sentiment, abstract themes
- Selection by quick skim — no formal process required
Process
- Pull 10 samples per operation from the golden set
- Read the input article only — do not look at Haiku's output yet
- Write your own label:
- entity_extraction: list the entities you would extract
- sentiment_analysis: positive, negative, or neutral
- theme_extraction: list the themes you would assign
- Compare your labels against Haiku's output
- Score agreement using identical scoring functions as model outputs (F1 / binary — see Scoring Definitions)
Critical: Manual labels must be scored using the exact same scoring functions as model outputs. No "close enough" judgment. If the scoring function says no match, it is no match.
Single-Reviewer Limitation
Manual validation is performed by a single reviewer (Mike Chavez). This is a directional sanity check, not a statistically robust ground truth. Thresholds should be interpreted accordingly.
Agreement Thresholds
| Agreement Rate | Interpretation | Action |
|---|---|---|
| ≥90% | Strong signal — Haiku is trustworthy baseline | Proceed with confidence. Note in EVAL-001. |
| 75–89% | Normal single-reviewer variance — not necessarily a Haiku problem | Proceed. Note caveat per operation in decision record. |
| <75% | Real red flag — Haiku baseline is unreliable for this operation | Flag operation. Interpret parity scores conservatively. Note prominently in EVAL-001. |
What to Capture
For each operation:
- Agreement rate (%)
- 1–2 sentences on where disagreements cluster (e.g., "Disagreements concentrated in multi-entity sentences" or "Themes were consistently more abstract in Haiku outputs")
Governing rule: Manual validation results do not override parity results. They inform confidence in how parity scores are interpreted.
Golden Set Definition
Source: briefing_drafts MongoDB collection, haiku_output field
Date range: Last 7–14 days from eval run date
Sample size: 50–100 samples per Tier 1 operation (150–300 total)
Stability: Golden set is fixed at extraction time. Same trace_ids used for all eval runs to ensure reproducibility.
Selection criteria:
- Cover last 7–14 days
- Include edge cases (long inputs, multiple articles, high-volume clusters)
- Exclude samples with missing or invalid
haiku_outputfields
Schema:
{
"operation": "entity_extraction",
"input_id": "trace_123abc",
"input_text": "...",
"articles": [],
"timestamp": "2026-04-20T10:30:00Z",
"haiku_output": {}
}
Scoring Definitions
entity_extraction
Score type: F1 (harmonic mean of precision and recall)
What is being measured:
- Precision: what fraction of Flash's extracted entities appear in Haiku's output
- Recall: what fraction of Haiku's entities Flash also caught
- F1: combined score between 0–100
Match method: Normalized string match (lowercase, strip punctuation) plus alias normalization.
Alias normalization: A lookup table of ~20 common entity aliases built from a quick scan of the golden set prior to scoring runs. Examples:
- "fed" → "federal reserve"
- "u.s." → "united states"
The alias table must be documented and version-controlled as part of the evaluation artifacts. This ensures reproducibility and prevents scoring drift between runs.
Rationale for alias normalization: Without it, "Fed" and "Federal Reserve" would score as a mismatch even though they refer to the same entity. This would systematically penalize Flash for being more precise, not less accurate.
Hallucination handling: Extra entities returned by Flash that do not match Haiku's output count against precision. No additional penalty multiplier — precision already captures hallucination.
Sample score: F1 × 100 (0–100 scale)
Sample-level regression flag: F1 score < 0.85
Threshold rationale: 0.85 chosen as a pragmatic threshold balancing tolerance for minor phrasing variation against material degradation. Haiku self-consistency not measured in Sprint 16 — flagged for Sprint 17 as a methodology improvement.
sentiment_analysis
Score type: Binary label match
What is being measured: Does Flash return the same sentiment classification as Haiku? (positive / negative / neutral)
Match method: Exact class match. No partial credit.
Adjacency logging: If Haiku returns neutral and Flash returns positive (or vice versa), this is logged as an adjacent-class mismatch for diagnostic purposes. It still scores 0. Adjacent mismatches are not used to soften the operation-level pass/fail decision.
Confidence scores: If present in output, flag samples where label matches but confidence diverges by >0.2. Logged as diagnostic signal only.
Sample score: 100 if label matches, 0 if not.
Sample-level regression flag: Any label mismatch (score = 0)
Rationale for strict binary: sentiment_analysis is a Tier 1 operation that feeds downstream decisions. neutral vs. negative is not a harmless difference. Introducing partial credit makes metrics look better and conclusions harder to defend. Score binary, analyze nuance separately.
theme_extraction
Score type: Adjusted F1 (two-pass)
What is being measured:
- Pass 1 — normalized string match F1 (same as entity_extraction, no alias table)
- Pass 2 — token overlap check: tokenize both outputs; if ≥50% token overlap between a Flash theme and a Haiku theme, count as match even if strings differ
Rationale for token overlap: Themes are semantic, not discrete. "Rising inflation concerns" and "inflation is increasing" express the same idea but share no 3-word consecutive string. Token overlap at ≥50% captures paraphrases without adding infrastructure.
Match method: Normalized string (Pass 1) + 50% token overlap (Pass 2). Pass 2 adjusts the F1 score upward for near-matches. Score capped at 100.
Sample score: Adjusted F1 × 100 (0–100 scale)
Sample-level regression flag: Adjusted F1 < 0.80
Rationale for lower threshold (0.80 vs 0.85): Semantic variation in theme labeling is expected even between identical-quality models. A slightly more lenient threshold avoids penalizing Flash for legitimate paraphrase.
Operation-Level Pass/Fail Gates
An operation is flagged for regression if either condition is met:
| Condition | Gate |
|---|---|
| Proportion of flagged samples | >5% of samples exceed sample-level regression threshold |
| Mean score delta vs. Haiku | Mean F1 / agreement drops by a material amount (TBD after baseline data — field required in all reporting) |
Both fields must appear in every comparison table. The mean delta field is required even if a threshold is not yet committed for it.
Decision outcome vocabulary:
- SWAP — Flash meets quality threshold, cost savings justify latency increase
- STAY — Flash does not meet quality threshold, or cost savings do not justify risk
- CONDITIONAL — Flash meets threshold under specific conditions (e.g., acceptable for batch processing, not real-time)
Decisions must emerge from data. No outcome is assumed in advance.
Cost Metrics Format
All decision records (MSD-001 through MSD-003) must include cost metrics in the following format:
| Metric | Haiku | Flash | Delta |
|---|---|---|---|
| Cost / 1k tokens | $X.XX | $X.XX | -X% |
| Avg input tokens | N | N | |
| Avg output tokens | N | N | |
| Estimated cost / day @ current volume | $X.XX | $X.XX | |
| Estimated annual savings (if swapped) | — | ~$X,XXX |
Latency must also be reported:
| Metric | Haiku | Flash | Delta |
|---|---|---|---|
| p50 latency (ms) | N | N | +X% |
| p95 latency (ms) | N | N | +X% |
Failure Mode Taxonomy
Applied to worst 10 samples per operation after eval runs complete. Tagging is done before writing decision records. Tags are defined upfront to prevent inconsistent post-hoc labeling.
entity_extraction
missed_entity— Flash failed to extract an entity Haiku caughtextra_entity— Flash returned an entity Haiku did not (hallucination)alias_mismatch— Flash used a different surface form for the same entity (not caught by alias table)boundary_error— Flash extracted a partial span (e.g., "Powell" vs. "Jerome Powell")
sentiment_analysis
polarity_flip— Flash returned opposite polarity (positive ↔ negative)neutral_misclassification— Flash returned neutral when Haiku returned positive or negative, or vice versalow_confidence_divergence— Labels match but confidence scores diverge by >0.2
theme_extraction
semantic_miss— Flash missed a theme entirely (no overlap even after token matching)overgeneralized— Flash returned a broader theme where Haiku was more specificoverly_specific— Flash returned a narrower theme where Haiku was more generalphrasing_mismatch— Same concept, different framing (below token overlap threshold)
Reproducibility Requirements
- Golden set extraction query documented with date range and filters
- Same
trace_idsused for all eval runs (Haiku baseline and Flash variant) - Alias table version-controlled alongside scoring code
- Eval scripts must accept golden set path as input parameter (no hardcoded paths)
- All outputs written to dated output directory
Evaluation Gate
Nothing proceeds to Claude Code implementation until:
- Scoring definitions locked (this document)
- Ground truth strategy locked (parity, explicitly stated)
- Alias table approach defined (built from golden set scan)
- Failure taxonomy defined
- Pass/fail thresholds defined
- Cost metric format defined
- Manual validation sample completed (10 per op, 30 total)
- Golden set extracted from MongoDB and reviewed
- Manual validation agreement rates reviewed and documented
What This Contract Does Not Decide
- Whether to swap any operation to Flash (that is the job of MSD-001 through MSD-003, based on data)
- Tier 2 operation evaluation (deferred to Sprint 17)
- Production routing changes (deferred until after decision records approved)
Related Artifacts
| Artifact | Purpose |
|---|---|
| EVAL-001-model-selection-flash-evaluations.md | Meta evaluation report — findings, methodology, interview narrative |
| MSD-001-entity_extraction.md | Per-operation decision record |
| MSD-002-sentiment_analysis.md | Per-operation decision record |
| MSD-003-theme_extraction.md | Per-operation decision record |
| FEATURE-053 ticket | Full feature spec and implementation notes |
| TASK-078 | Model Selection Rubric |
| TASK-079 | Operation Tier Mapping |
What's inside
14 sections covering scope, ground truth, manual validation, golden set, scoring, pass/fail gates, cost metrics, failure taxonomy, and reproducibility requirements
Change this for your project
- Replace
mikechavez/Backdropwith your repository name - Replace
briefing_draftswith your MongoDB collection name - Replace
haiku_outputwith your model's output field name - Replace
trace_idswith your unique identifier field name
Where it goes
Keep alongside your test suite. Used to define and score model evaluations.
Worth borrowing
- Pre-committing evaluation thresholds before seeing data to prevent post-hoc rationalization
- Using parity measurement against an existing production model as ground truth instead of manual labels
- Stratified manual spot-check with explicit agreement thresholds and single-reviewer caveat
Related Documents
AI Tools for Developers
Curates a personal reference of AI coding tools, models, and setup instructions for VS Code, Xcode, and Cursor.
Voice AI Leaderboards, Benchmarks, and Evaluation Gaps (Jan 2025 -- Feb 2026)
Surveys 20+ voice AI benchmarks from Jan 2025, Feb 2026, identifies evaluation gaps, and provides leaderboard data for STT, TTS, and end-to-end voice agents.
Evaluating AI Agent Systems: Metrics, Benchmarks, and Quality Assurance (2024-2026)
Surveys 2024-2026 metrics, benchmarks, and monitoring tools for evaluating AI agent systems, with recommendations for a self-improving coding agent.
IATA BCBP Standard Compliance
Documents which IATA BCBP fields and barcode formats a Swift library implements, including Version 8 gender code support.