import type { QualityIntelligence } from "@oscharko-dev/keiko-contracts";
export type QualityIntelligenceReviewTransitionEvent = "approve" | "request-changes" | "reject" | "withdraw" | "revise";
export declare const QUALITY_INTELLIGENCE_REVIEW_TRANSITION_EVENTS: readonly QualityIntelligenceReviewTransitionEvent[];
export type QualityIntelligenceReviewTransitionErrorCode = "TRANSITION_NOT_ALLOWED" | "UNKNOWN_FROM_STATE" | "UNKNOWN_EVENT";
export declare class QualityIntelligenceReviewTransitionError extends Error {
    readonly code: QualityIntelligenceReviewTransitionErrorCode;
    readonly from: QualityIntelligence.QualityIntelligenceReviewState;
    readonly event: QualityIntelligenceReviewTransitionEvent;
    constructor(code: QualityIntelligenceReviewTransitionErrorCode, from: QualityIntelligence.QualityIntelligenceReviewState, event: QualityIntelligenceReviewTransitionEvent, detail: string);
}
export interface NextReviewState {
    readonly state: QualityIntelligence.QualityIntelligenceReviewState;
    readonly by: string;
    readonly at: string;
    readonly event: QualityIntelligenceReviewTransitionEvent;
    readonly from: QualityIntelligence.QualityIntelligenceReviewState;
}
/**
 * Apply a review transition. Returns the next state record on success; throws a
 * typed `QualityIntelligenceReviewTransitionError` on every illegal combination
 * (including unknown `from` state or unknown event).
 *
 * `by` and `at` are pass-through metadata for the caller's audit envelope —
 * this function does not validate them beyond presence (it does not call
 * `Date.parse`; that is the caller's responsibility).
 */
export declare const applyReviewTransition: (currentState: QualityIntelligence.QualityIntelligenceReviewState, event: QualityIntelligenceReviewTransitionEvent, by: string, at: string) => NextReviewState;
//# sourceMappingURL=stateMachine.d.ts.map