/**
 * Intent classifier regression fixtures.
 *
 * **Source-of-truth contract (Mia §6):**
 *
 * - **L2-positive cases** — Steve dogfood mis-labels from 2026-05-06.
 *   Pre-Bug-A these classified as L1/other (Steve's "ORC ignored half my
 *   message" symptom). v0 ships with the 2 confirmed-by-name cases; Sam
 *   is harvesting the remaining ~5 messages from Slack and will append.
 * - **Negative-L2 cases** — at least one example per row of Mia §3 must
 *   stay at the listed tier. This is the over-promotion guard: the
 *   classifier must never promote these to L2 even if a future rule
 *   tweak adds coverage we didn't anticipate.
 * - **L3 cases** — sprint/OKR-shaped messages that should classify as L3
 *   (label only; v0 routes L3=L2 internally per Mia §5 Q1 default).
 *
 * Each entry's `rationale` field links back to the spec section so a
 * future regression points the engineer directly at the rule they broke.
 *
 * Spec: `specs/2026-05-06-intent-classifier-rules.md`.
 *
 * @module services/intent-task/intent-classifier.fixture
 */
import type { IntentLevel, IntentCategory } from '../../types/v2/request.types.js';
/**
 * One regression fixture entry. Every field is required so a failure
 * message includes enough context for the engineer to triage without
 * re-reading the spec.
 */
export interface ClassifierFixture {
    /** The exact user input — verbatim where possible. */
    input: string;
    /** Expected `classifyIntentLevel` output. */
    expectedLevel: IntentLevel;
    /** Expected `classifyIntentCategory` output. */
    expectedCategory: IntentCategory;
    /**
     * Free-form rationale linking back to the spec section. Format:
     * "§N.M [language] [rule name]". Surfaces in test failure messages.
     */
    rationale: string;
    /** Provenance of the case (Steve Slack / Mia spec / synthesised). */
    source: string;
}
/**
 * Steve's mis-labeled messages from 2026-05-06. These MUST classify as
 * L2 with the correct category. Pre-Bug-A all of these returned L1/other
 * → 1 WorkItem instead of N → "ORC ignored half my message" symptom.
 *
 * Sam is harvesting cases #3-#7 from the Slack transcript; v0 ships
 * with #1 + #2 (Mia-confirmed) + a placeholder bound to the planning
 * Request (`ff54231a` from PR #461 F9).
 */
export declare const STEVE_DOGFOOD_FIXTURES: ClassifierFixture[];
/**
 * Cases that MUST NOT classify as L2 even after the promoters fire on
 * adjacent text. At least one example per row of Mia §3.
 *
 * The most-load-bearing assertion is the "quantifier alone" guard: a
 * quantified read query ("show me all 3 statuses") stays L0, not L2.
 */
export declare const NEGATIVE_L2_FIXTURES: ClassifierFixture[];
/**
 * Filtered cases — should be rejected by `isActionableIntent` before
 * classification. These never reach the L0/L1/L2/L3 classifier; the
 * fixture asserts that fact.
 */
export declare const NON_ACTIONABLE_FIXTURES: {
    input: string;
    rationale: string;
    source: string;
}[];
/**
 * Sprint/OKR-shaped messages that should classify as L3 (label only; v0
 * routes L3=L2 internally). At least one ZH case asserts the parity.
 */
export declare const L3_FIXTURES: ClassifierFixture[];
//# sourceMappingURL=intent-classifier.fixture.d.ts.map