import { EvolithError } from './errors'; export type ActorKind = 'agent' | 'engine' | 'ci' | 'human' | 'custodian' | 'board'; export interface Actor { readonly id: string; readonly kind: ActorKind; } export declare function isHumanAuthority(actor: Actor): boolean; export type AssertiveAction = 'observe' | 'recommend' | 'attach-evidence' | 'draft-candidate'; export type AuthoritativeAction = 'accept' | 'promote' | 'ratify' | 'waive' | 'enforce'; export type AuthorityAction = AssertiveAction | AuthoritativeAction; export declare function isAssertive(action: AuthorityAction): action is AssertiveAction; export declare function isAuthoritative(action: AuthorityAction): action is AuthoritativeAction; export type PromotionStatus = 'candidate' | 'evaluated' | 'accepted' | 'executable' | 'retired'; export declare const PROMOTION_SEQUENCE: readonly PromotionStatus[]; export declare const PROMOTION_AUTHORITY: Readonly>; export declare function isValidPromotion(from: PromotionStatus, to: PromotionStatus): boolean; export interface Artefact { readonly id: string; readonly kind: string; readonly authoredBy?: string; readonly status?: PromotionStatus; } export interface AuthorityRequest { readonly actor: Actor; readonly action: AuthorityAction; readonly artefact: Artefact; readonly targetStatus?: PromotionStatus; } export type AuthorityRuleId = 'AP-R01' | 'AP-R02' | 'AP-R03' | 'AP-R04' | 'AP-R05' | 'AP-R06'; export interface AuthorityDecision { readonly permitted: boolean; readonly reason: string; readonly rule: AuthorityRuleId; readonly citation: string; } export declare function evaluateAuthority(request: AuthorityRequest): AuthorityDecision; export declare function isPermitted(request: AuthorityRequest): boolean; export declare class AuthorityViolationError extends EvolithError { readonly decision: AuthorityDecision; readonly request: AuthorityRequest; constructor(decision: AuthorityDecision, request: AuthorityRequest); } export declare function requireAuthority(request: AuthorityRequest): void; export declare function formatAuthorityDecision(decision: AuthorityDecision): string;