/** * Validator - Core validation logic for workflow * Simplified for Core build (basic quality gates only) * @requirement REQ-V2-003 - Validation command */ import type { WorkflowState } from '@shadel/workflow-core'; import type { PatternValidationResult } from './pattern-provider.js'; /** * Validation result * @requirement REQ-V2-003 - Validation result structure */ export interface ValidationResult { passed: boolean; message: string; details?: any; } /** * Complete validation results */ export interface CompleteValidationResult { workflow: ValidationResult; files: ValidationResult; overall: boolean; patterns?: PatternValidationResult[]; } /** * Cursor verification for a pattern */ export interface CursorVerification { verified: boolean; verifiedAt: string; notes?: string; } /** * Validation results with caching support */ export interface ValidationResults { timestamp: string; taskId: string; commitHash?: string; results: { workflow: ValidationResult; files: ValidationResult; patterns?: PatternValidationResult[]; }; cursorVerified: { [patternId: string]: CursorVerification; }; overall: boolean; } /** * Validation options */ export interface ValidationOptions { saveToContext?: boolean; useCachedResults?: boolean; mode?: 'commit' | 'state'; expectedState?: WorkflowState; } /** * Validator - Basic quality gate checking * @requirement REQ-V2-003 - Core validation logic */ export declare class Validator { private contextDir; private configDir; /** * Create a new Validator instance * @param contextDir - Directory containing .ai-context files (default: '.ai-context') * @param configDir - Directory containing config files (default: 'config') */ constructor(contextDir?: string, configDir?: string); /** * Validate workflow state * @requirement REQ-V2-003 - Workflow state validation */ validateWorkflow(): Promise; /** * Validate required files exist * @requirement REQ-V2-003 - Required files validation */ validateFiles(): Promise; /** * Run all validations * @requirement REQ-V2-003 - Complete validation * @requirement CRITICAL-FIX - Enforce READY_TO_COMMIT state * @requirement task-1765392140135 - Auto-pass validation when task is already completed */ validateAll(options?: ValidationOptions): Promise; /** * Validate for commit (explicit commit mode) * Enforces READY_TO_COMMIT state requirement for pre-commit validation * @param options - Validation options (saveToContext, useCachedResults) * @returns Complete validation results */ validateForCommit(options?: Omit): Promise; /** * Validate for specific state (explicit state mode) * Validates quality without enforcing READY_TO_COMMIT state * @param state - Expected workflow state * @param options - Validation options (saveToContext, useCachedResults) * @returns Complete validation results */ validateForState(expectedState: WorkflowState, options?: Omit): Promise; /** * Get next steps based on current state * @requirement CRITICAL-FIX - State progression guidance */ private getNextStepsForState; /** * Check if ready to commit * @requirement REQ-V2-003 - Commit readiness check */ isReadyToCommit(): Promise; /** * Save validation results to context */ saveValidationResults(results: CompleteValidationResult): Promise; /** * Load validation results from context */ loadValidationResults(): Promise; /** * Load Cursor verifications from validation results */ private loadCursorVerifications; /** * Apply Cursor verifications to validation results */ /** * Normalize pattern identifier for matching * Supports multiple formats: pattern ID, pattern title, check name */ private normalizePatternId; /** * Find verification for a pattern using multiple matching strategies */ private findVerification; applyCursorVerifications(results: CompleteValidationResult): Promise; /** * Check if validation results are stale * Relaxed for results with Cursor verifications (preserve verifications) */ isResultsStale(results: ValidationResults): Promise; /** * Get current git commit hash */ private getCurrentCommitHash; /** * Verify a pattern (mark as verified by Cursor) */ verifyPattern(patternId: string, notes?: string): Promise; }