/**
 * src/skill-loop/adoption.ts
 *
 * Skill adoption — auto-promote and deprecate logic gated by sign-off.
 *
 * Promotion conditions (ALL must hold):
 *   1. EvalResult.pValue < 0.05  (statistical significance)
 *   2. EvalResult.deltaVsIncumbent >= 0.10  (>=10% improvement)
 *   3. A valid approved SignOffRecord exists for the candidateId
 *
 * Violation of condition 3 → throws PromotionWithoutSignOffError.
 *
 * Underperformers (deltaVsIncumbent < -0.05 OR pValue > 0.5) are
 * automatically deprecated via deprecateUnderperformers().
 *
 * @module skill-loop/adoption
 */
import type { SkillCandidate } from "./candidate.js";
import type { EvalResult } from "./evaluator.js";
import type { SignOffRecord } from "./sign-off.js";
export declare class PromotionWithoutSignOffError extends Error {
    readonly candidateId: string;
    constructor(candidateId: string);
}
export type AdoptionStatus = "promoted" | "rejected" | "deprecated" | "pending_signoff" | "insufficient_signal";
export interface AdoptionRecord {
    candidateId: string;
    status: AdoptionStatus;
    evalResult: EvalResult;
    signOff: SignOffRecord | null;
    promotedAt: Date | null;
    deprecatedAt: Date | null;
    reason: string;
}
/**
 * Attempt to promote a candidate to production.
 *
 * @param candidate  - The skill candidate.
 * @param evalResult - Evaluation result against the verifier set.
 * @param signOff    - Approved sign-off record (must be decision === 'approved').
 * @param nowDate    - Optional date override for deterministic testing.
 *
 * @throws PromotionWithoutSignOffError if signOff is null or not approved.
 */
export declare function promoteCandidate(candidate: SkillCandidate, evalResult: EvalResult, signOff: SignOffRecord | null, nowDate?: Date): AdoptionRecord;
/**
 * Reject a candidate explicitly (e.g. sign-off decision = rejected).
 */
export declare function rejectCandidate(candidate: SkillCandidate, evalResult: EvalResult, signOff: SignOffRecord | null, reason: string): AdoptionRecord;
/**
 * Automatically deprecate underperforming candidates from a pool.
 *
 * A candidate is an underperformer if:
 *   - deltaVsIncumbent < -0.05 (degrades by more than 5%)
 *   - OR (deltaVsIncumbent < 0 AND pValue > 0.5) — statistically noisy & negative
 *
 * Deprecation is automatic — no sign-off required (sign-off is only for promotion).
 *
 * @param candidates  - Pool of (candidate, evalResult) pairs to assess.
 * @param nowDate     - Optional date override.
 * @returns AdoptionRecords for every deprecated candidate.
 */
export declare function deprecateUnderperformers(candidates: Array<{
    candidate: SkillCandidate;
    evalResult: EvalResult;
}>, nowDate?: Date): AdoptionRecord[];
//# sourceMappingURL=adoption.d.ts.map