import type { ReviewItem } from "../review-resource.js"; import type { ReviewWorkbenchResult } from "./review-workbench.js"; export type ReviewDecisionModeIssueCode = "unknown-decision-mode" | "decision-not-allowed" | "candidate-not-in-item"; export interface ReviewDecisionModeIssue { readonly code: ReviewDecisionModeIssueCode; readonly message: string; } /** * The subset of a {@link ReviewWorkbenchResult} a decision-mode check inspects. */ export type ReviewDecisionModeResult = Pick; /** * Validates a review result against the item's declared `producerPolicy.decisionMode`. * * Returns an empty array when the item declares no `producerPolicy` or no * `decisionMode` (the default, un-enforced posture). For a known mode it checks: * `keep-current` — only a `keep-current` decision is admissible. * `current-proposed` — only the current or proposed candidate role may be selected. * `free-select` — the selected candidate must be one declared on the item. * An unrecognized `decisionMode` string fails closed with a single * `unknown-decision-mode` issue. */ export declare function validateReviewDecisionMode(item: ReviewItem, result: ReviewDecisionModeResult): ReviewDecisionModeIssue[]; export declare class DecisionModeViolationError extends Error { readonly name = "DecisionModeViolationError"; readonly issues: readonly ReviewDecisionModeIssue[]; constructor(reviewItemName: string, issues: readonly ReviewDecisionModeIssue[]); } /** * Asserts a review result satisfies the item's declared decision mode, throwing * a {@link DecisionModeViolationError} otherwise. Mirrors the * validate-then-assert idiom in `review-authorizing.ts`. */ export declare function assertReviewDecisionModeAllows(item: ReviewItem, result: ReviewDecisionModeResult): void;