Skip to content

fix(addie): make shadow evaluation attributable and non-self-judging #6843

Description

@bokelley

Parent epic: #6842

Problem

Addie's current shadow-evaluation records combine two semantically different sources:

  1. Suppressed opportunity: Addie did not answer because a human answered first. A fast model generates a hypothetical response without production tool execution, then the same model may judge that response.
  2. Corrected answer: Addie's real production response is followed by a substantive human reply. A fast model judges the production response against that reply.

These are useful signals, but they are not comparable quality samples. The suppressed path is especially biased for questions that require retrieval or account/admin tools. Records also do not persist enough generator/judge/provider/config provenance to support later stratification.

In a recent selected sample, 29 of 31 completed flagged evaluations were labeled knowledge gaps (23/24 corrected-answer captures and 6/7 suppressed captures). That is a bug-discovery queue, not a population failure rate.

Scope

  • Give the two sources explicit evaluation types and separate reporting.
  • Persist source-answer, generator, judge, provider, prompt/config version, tool-set/schema snapshot, and tool-result provenance.
  • Prevent a model from judging its own generated answer by default.
  • Replay suppressed opportunities through production-equivalent orchestration with safe/read-only tools or recorded tool fixtures. Do not merely show tool descriptions to a model that cannot call them.
  • Grade deterministic failures before using an LLM judge: blank output, malformed structured output, wrong tool/mutation class, truncation, and response-shape violations.
  • Keep raw production transcripts and personal data out of issues and versioned fixtures.

Acceptance criteria

  • Suppressed and corrected-answer evaluations have distinct stored/reportable types.
  • Every result records source-answer model when applicable, generator model/provider, judge model/provider, prompt/config version, and timestamp.
  • Tool sets alone are not treated as proof of tool availability; replay records the exposed schemas and tool results or the fixture identifier used.
  • The default judge is independent of the generator/source model; self-judging requires an explicit experimental flag and is excluded from headline metrics.
  • Suppressed evaluation uses production-equivalent orchestration in dry-run/read-only mode, with mutation attempts blocked and recorded.
  • Corrected-answer evaluation grades the actual production answer rather than regenerating a substitute.
  • Blank, malformed, truncated, and orchestration failures count as failures rather than disappearing from the denominator.
  • Reports show source-specific sample sizes and selection-bias warnings.
  • Migration/backfill behavior for existing rows is explicit and tested.

Delivery slices

  1. Provenance schema + writes + source-separated reporting — fix(addie): make shadow evaluations attributable #6852
  2. Independent judge and deterministic grader pipeline — fix(addie): make shadow evaluations attributable #6852
  3. Safe production-orchestration replay for suppressed opportunities.

This is Addie application work; no protocol changeset is required.

Metadata

Metadata

Assignees

No one assigned

    Labels

    addieIssues related to Addie (via any channel)bugSomething isn't workingclaude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.priority:P1High priority: important bug or follow-up, not immediate P0

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions