/**
 * pipeline/attribution.ts
 *
 * Per-document attribution for score changes.
 *
 * Given a ComparisonReport, a list of changed document slugs, and the
 * resolved task mappings, this module classifies each task's score delta
 * as unambiguous (one changed doc), ambiguous (multiple changed docs),
 * or uncorrelated (no changed docs in the task's canonical set).
 *
 * This is Phase 1 of the hybrid attribution approach — zero additional
 * eval cost, purely correlation-based. Phase 2 (targeted LOO) can be
 * layered on top for ambiguous cases when higher precision is needed.
 *
 * @see docs/design-docs/scenario-matrix/per-document-attribution.md
 * @see docs/archive/exec-plans/scenario-matrix-implementation/phase-2-impact-scenarios.md
 */
import type { AttributionReport, ComparisonReport } from "./types.js";
import type { ResolvedMappings } from "./resolve-mappings.js";
/** v0 sentinel — no embedding call in v0; v1.2's flip to a real
 *  model name (e.g., "text-embedding-3-small") mechanically forces
 *  ensembleVersion's right segment to change, invalidating cached
 *  weights downstream. */
export declare const embeddingModel = "none";
/** VER-01 D-02 — co-located ensemble version. Compound semver-ish
 *  shape: "{algorithmVersion}+{embeddingModel}" (per D-02 of Phase
 *  4 CONTEXT.md). Phase 1 landed the constant; Phase 4 wires the
 *  compound shape and the bump-by-calibration discipline
 *  (calibrate-attribution.ts is the ONLY allowed bumper). */
export declare const ensembleVersion: "0.1.0+none";
/** Version tag for the calibration set fixture co-located in the repo.
 *  Bump when the fixture structure changes (e.g. when v1 moves the
 *  calibration set to Content Lake or expands to ~30 stratified rows). */
export declare const calibrationSetVersion = "v0-fixture";
/**
 * Attribute score changes to individual documents.
 *
 * For each area in the comparison report, cross-references the task's
 * canonical_docs with the changed slugs to classify the attribution:
 *
 * - **unambiguous**: exactly 1 changed doc in the task's canonical set
 * - **ambiguous**: 2+ changed docs in the task's canonical set
 * - **uncorrelated**: 0 changed docs in the task's canonical set
 *
 * Tasks with deltas within the noise floor are still attributed but
 * flagged as `withinNoiseFloor: true`.
 *
 * @param comparison - The structured comparison between before/after runs
 * @param changedSlugs - Document slugs that changed
 * @param mappings - Resolved task-to-canonical-docs mappings
 * @param noiseThreshold - Deltas within ±this value are marked as noise
 * @returns Attribution report with per-task classifications
 */
export declare function attributeChanges(comparison: ComparisonReport, changedSlugs: string[], mappings: ResolvedMappings, noiseThreshold: number): AttributionReport;
/**
 * Format an attribution report for console output.
 */
export declare function formatAttributionConsole(report: AttributionReport): string;
/**
 * Format an attribution report as markdown for PR comments.
 */
export declare function formatAttributionMarkdown(report: AttributionReport): string;
