export type ValidationModeName = 'sdlc' | 'architecture' | 'ruleset' | 'adr' | 'adhoc'; export interface EvaluatedRuleFinding { readonly ruleId: string; readonly severity: 'MUST' | 'SHOULD' | 'COULD'; readonly title: string; readonly description?: string; readonly file?: string; readonly blocking: boolean; readonly evaluated?: boolean; } export interface RulesetEvaluationOutcome { readonly status: 'passed' | 'failed' | 'warning'; readonly rulesChecked: number; readonly rulesSkipped?: number; readonly rulesErrored?: number; readonly rulesTotal?: number; readonly skippedRuleIds?: string[]; readonly erroredRuleIds?: string[]; readonly issues: readonly EvaluatedRuleFinding[]; } export interface RulesetEvaluationPort { validate(satellitePath: string, corePath?: string, selection?: { readonly rulesetRef?: string; readonly policyRefs?: readonly string[]; }): Promise; } export interface ValidationContext { satellitePath: string; corePath?: string; engine: 'native' | 'opa'; topology?: string; phase?: string; rulesetId?: string; adrId?: string; filePath?: string; customRules?: unknown[]; evaluator?: RulesetEvaluationPort; } export interface ModeValidationResult { mode: ValidationModeName; status: 'passed' | 'failed' | 'warning' | 'skipped'; rulesChecked: number; rulesSkipped?: number; rulesErrored?: number; rulesTotal?: number; skippedRuleIds?: string[]; erroredRuleIds?: string[]; issues: ModeValidationIssue[]; evidence?: unknown; metadata?: Record; } export interface ModeValidationIssue { ruleId: string; status: 'pass' | 'fail' | 'warn'; message: string; severity: 'error' | 'warning' | 'info'; file?: string; line?: number; remediation?: string; } export interface ValidationMode { readonly name: ValidationModeName; canHandle(context: ValidationContext): boolean; validate(context: ValidationContext): Promise; }