Back to .md Directory

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.

May 2, 2026
0 downloads
3 views
ai eval
View source

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

MongoDBClaude Code

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.

OperationType
entity_extractionExtraction
sentiment_analysisClassification
theme_extractionExtraction

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

  1. Pull 10 samples per operation from the golden set
  2. Read the input article only — do not look at Haiku's output yet
  3. 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
  4. Compare your labels against Haiku's output
  5. 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 RateInterpretationAction
≥90%Strong signal — Haiku is trustworthy baselineProceed with confidence. Note in EVAL-001.
75–89%Normal single-reviewer variance — not necessarily a Haiku problemProceed. Note caveat per operation in decision record.
<75%Real red flag — Haiku baseline is unreliable for this operationFlag 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_output fields

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:

ConditionGate
Proportion of flagged samples>5% of samples exceed sample-level regression threshold
Mean score delta vs. HaikuMean 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:

MetricHaikuFlashDelta
Cost / 1k tokens$X.XX$X.XX-X%
Avg input tokensNN
Avg output tokensNN
Estimated cost / day @ current volume$X.XX$X.XX
Estimated annual savings (if swapped)~$X,XXX

Latency must also be reported:

MetricHaikuFlashDelta
p50 latency (ms)NN+X%
p95 latency (ms)NN+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 caught
  • extra_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 versa
  • low_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 specific
  • overly_specific — Flash returned a narrower theme where Haiku was more general
  • phrasing_mismatch — Same concept, different framing (below token overlap threshold)

Reproducibility Requirements

  • Golden set extraction query documented with date range and filters
  • Same trace_ids used 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

ArtifactPurpose
EVAL-001-model-selection-flash-evaluations.mdMeta evaluation report — findings, methodology, interview narrative
MSD-001-entity_extraction.mdPer-operation decision record
MSD-002-sentiment_analysis.mdPer-operation decision record
MSD-003-theme_extraction.mdPer-operation decision record
FEATURE-053 ticketFull feature spec and implementation notes
TASK-078Model Selection Rubric
TASK-079Operation 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/Backdrop with your repository name
  • Replace briefing_drafts with your MongoDB collection name
  • Replace haiku_output with your model's output field name
  • Replace trace_ids with 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