Skip to content
Verification Final Report logo

Verification Final Report

> **Skill Purpose:** Final verification, validation reporting, and quality assurance patterns

SKILL.md

Full skill instructions

Verification Final Report

Skill Purpose: Final verification, validation reporting, and quality assurance patterns


Core Skill Pattern

Objective: Establish comprehensive final verification processes with detailed reporting, quality assessment, and validation completion procedures.

Universal Pattern:

  1. Define verification scope and acceptance criteria
  2. Create comprehensive testing and validation procedures
  3. Set up detailed reporting and documentation
  4. Establish quality assessment and sign-off procedures
  5. Create final verification and delivery patterns

Key Decisions (Project-Specific):

  • Verification scope and depth requirements
  • Testing methodologies and coverage criteria
  • Reporting detail and stakeholder needs
  • Quality thresholds and acceptance criteria
  • Sign-off authority and delivery procedures

Project-Specific Implementation Notes

Customize per project:

  • Verification scope based on project complexity and risk
  • Testing depth based on quality requirements and resources
  • Reporting detail based on stakeholder needs and compliance
  • Quality thresholds based on project maturity and requirements
  • Sign-off procedures based on governance and accountability needs

Example Implementation (Final Verification Pattern)

Note: This is an example pattern for final verification and reporting. Adapt verification methods and reporting based on your specific project requirements and quality standards.

Prerequisites (Example)

  • All development work completed
  • Testing environment prepared
  • Quality criteria defined
  • Stakeholder approval process established

Example: Final Verification Implementation

Framework-Specific Example: This demonstrates final verification patterns. Adapt for your verification methods and reporting requirements.

1. Verification Planning

// Verification plan configuration
interface VerificationPlan {
  id: string;
  name: string;
  scope: VerificationScope;
  criteria: AcceptanceCriteria[];
  procedures: VerificationProcedure[];
  stakeholders: Stakeholder[];
  timeline: VerificationTimeline;
}

interface VerificationScope {
  components: string[];
  features: string[];
  integrations: string[];
  documentation: string[];
  performance: PerformanceCriteria;
  security: SecurityCriteria;
}

interface AcceptanceCriteria {
  id: string;
  category: 'functional' | 'performance' | 'security' | 'usability' | 'compliance';
  description: string;
  requirement: string;
  testMethod: string;
  passThreshold: string;
  weight: number;
}

interface VerificationProcedure {
  id: string;
  name: string;
  type: 'automated' | 'manual' | 'hybrid';
  description: string;
  steps: ProcedureStep[];
  expectedOutcome: string;
  duration: number;
  dependencies: string[];
}

interface ProcedureStep {
  id: string;
  description: string;
  action: string;
  expectedResult: string;
  evidenceRequired: boolean;
}

// Example verification plan
const verificationPlan: VerificationPlan = {
  id: 'ver-001',
  name: 'Project Alpha Final Verification',
  scope: {
    components: ['ui', 'api', 'database', 'auth'],
    features: ['user-management', 'content-creation', 'reporting'],
    integrations: ['payment-gateway', 'email-service'],
    documentation: ['api-docs', 'user-manual', 'deployment-guide'],
    performance: {
      responseTime: '< 2s',
      throughput: '> 1000 req/​min',
      availability: '> 99.9%'
    },
    security: {
      authentication: 'MFA enabled',
      dataEncryption: 'AES-256',
      accessControl: 'RBAC implemented'
    }
  },
  criteria: [
    {
      id: 'ac-001',
      category: 'functional',
      description: 'User can register and authenticate',
      requirement: 'User registration flow works end-to-end',
      testMethod: 'Automated E2E tests',
      passThreshold: '100% test pass rate',
      weight: 10
    }
  ],
  procedures: [
    {
      id: 'vp-001',
      name: 'User Registration Flow Test',
      type: 'automated',
      description: 'Verify complete user registration process',
      steps: [
        {
          id: 'step-001',
          description: 'Navigate to registration page',
          action: 'Open /​register URL',
          expectedResult: 'Registration form loads',
          evidenceRequired: true
        }
      ],
      expectedOutcome: 'User successfully registered and logged in',
      duration: 5,
      dependencies: []
    }
  ],
  stakeholders: [
    { id: 'sh-001', name: 'Product Owner', role: 'approver' },
    { id: 'sh-002', name: 'QA Lead', role: 'validator' }
  ],
  timeline: {
    startDate: new Date(),
    endDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),
    milestones: [
      { name: 'Testing Complete', date: new Date(Date.now() + 5 * 24 * 60 * 60 * 1000) }
    ]
  }
};

2. Verification Execution

// Verification execution engine
class VerificationEngine {
  private plan: VerificationPlan;
  private results: VerificationResult[] = [];
  
  constructor(plan: VerificationPlan) {
    this.plan = plan;
  }
  
  async executeVerification(): Promise<VerificationReport> {
    console.log(`Starting verification: ${this.plan.name}`);
    
    // Execute all procedures
    for (const procedure of this.plan.procedures) {
      const result = await this.executeProcedure(procedure);
      this.results.push(result);
    }
    
    // Generate final report
    return this.generateReport();
  }
  
  private async executeProcedure(procedure: VerificationProcedure): Promise<VerificationResult> {
    console.log(`Executing procedure: ${procedure.name}`);
    
    const startTime = Date.now();
    const steps: StepResult[] = [];
    
    try {
      for (const step of procedure.steps) {
        const stepResult = await this.executeStep(step);
        steps.push(stepResult);
        
        if (!stepResult.passed) {
          throw new Error(`Step failed: ${step.description}`);
        }
      }
      
      const duration = Date.now() - startTime;
      
      return {
        procedureId: procedure.id,
        procedureName: procedure.name,
        status: 'passed',
        duration,
        steps,
        evidence: this.collectEvidence(procedure),
        executedAt: new Date()
      };
    } catch (error) {
      const duration = Date.now() - startTime;
      
      return {
        procedureId: procedure.id,
        procedureName: procedure.name,
        status: 'failed',
        duration,
        steps,
        error: error instanceof Error ? error.message : 'Unknown error',
        executedAt: new Date()
      };
    }
  }
  
  private async executeStep(step: ProcedureStep): Promise<StepResult> {
    console.log(`Executing step: ${step.description}`);
    
    try {
      // Execute the step action
      const result = await this.performAction(step.action);
      
      // Validate expected result
      const passed = this.validateResult(result, step.expectedResult);
      
      return {
        stepId: step.id,
        description: step.description,
        passed,
        actualResult: result,
        expectedResult: step.expectedResult,
        evidence: step.evidenceRequired ? this.captureEvidence() : undefined,
        executedAt: new Date()
      };
    } catch (error) {
      return {
        stepId: step.id,
        description: step.description,
        passed: false,
        error: error instanceof Error ? error.message : 'Unknown error',
        executedAt: new Date()
      };
    }
  }
  
  private async performAction(action: string): Promise<any> {
    // Implementation for performing actions
    // This could be:
    // - Making API calls
    // - Interacting with UI
    // - Running database queries
    // - Executing shell commands
    
    return { success: true, data: 'Action completed' };
  }
  
  private validateResult(actual: any, expected: string): boolean {
    // Implementation for validating results
    // Compare actual result with expected outcome
    
    return true;
  }
  
  private collectEvidence(procedure: VerificationProcedure): Evidence[] {
    // Collect evidence for the procedure
    return [
      {
        type: 'screenshot',
        description: 'Final state screenshot',
        timestamp: new Date()
      },
      {
        type: 'log',
        description: 'Execution logs',
        timestamp: new Date()
      }
    ];
  }
  
  private captureEvidence(): Evidence {
    return {
      type: 'screenshot',
      description: 'Step completion evidence',
      timestamp: new Date()
    };
  }
  
  private generateReport(): VerificationReport {
    const passedProcedures = this.results.filter(r => r.status === 'passed');
    const failedProcedures = this.results.filter(r => r.status === 'failed');
    
    const overallStatus = failedProcedures.length === 0 ? 'passed' : 'failed';
    const passRate = (passedProcedures.length / this.results.length) * 100;
    
    return {
      planId: this.plan.id,
      planName: this.plan.name,
      overallStatus,
      passRate,
      totalProcedures: this.results.length,
      passedProcedures: passedProcedures.length,
      failedProcedures: failedProcedures.length,
      results: this.results,
      summary: this.generateSummary(),
      recommendations: this.generateRecommendations(),
      generatedAt: new Date()
    };
  }
  
  private generateSummary(): string {
    const passed = this.results.filter(r => r.status === 'passed').length;
    const total = this.results.length;
    
    return `Verification completed with ${passed}/​${total} procedures passed (${((passed/​total) * 100).toFixed(1)}%).`;
  }
  
  private generateRecommendations(): string[] {
    const recommendations: string[] = [];
    const failedProcedures = this.results.filter(r => r.status === 'failed');
    
    if (failedProcedures.length > 0) {
      recommendations.push('Address failed procedures before release');
      recommendations.push('Review test environment stability');
    }
    
    if (this.results.some(r => r.duration > 300000)) { // 5 minutes
      recommendations.push('Optimize slow-running procedures');
    }
    
    return recommendations;
  }
}

// Type definitions
interface VerificationResult {
  procedureId: string;
  procedureName: string;
  status: 'passed' | 'failed' | 'skipped';
  duration: number;
  steps: StepResult[];
  evidence?: Evidence[];
  error?: string;
  executedAt: Date;
}

interface StepResult {
  stepId: string;
  description: string;
  passed: boolean;
  actualResult?: any;
  expectedResult?: string;
  evidence?: Evidence;
  error?: string;
  executedAt: Date;
}

interface Evidence {
  type: 'screenshot' | 'log' | 'file' | 'video';
  description: string;
  timestamp: Date;
  data?: any;
}

interface VerificationReport {
  planId: string;
  planName: string;
  overallStatus: 'passed' | 'failed' | 'partial';
  passRate: number;
  totalProcedures: number;
  passedProcedures: number;
  failedProcedures: number;
  results: VerificationResult[];
  summary: string;
  recommendations: string[];
  generatedAt: Date;
}

3. Quality Assessment

// Quality assessment framework
interface QualityMetrics {
  functionality: FunctionalityMetrics;
  performance: PerformanceMetrics;
  security: SecurityMetrics;
  usability: UsabilityMetrics;
  maintainability: MaintainabilityMetrics;
}

interface FunctionalityMetrics {
  testCoverage: number;
  defectDensity: number;
  requirementsTraceability: number;
  featureCompleteness: number;
}

interface PerformanceMetrics {
  responseTime: number;
  throughput: number;
  resourceUtilization: number;
  scalability: number;
}

interface SecurityMetrics {
  vulnerabilityCount: number;
  securityTestCoverage: number;
  complianceScore: number;
  accessControlEffectiveness: number;
}

class QualityAssessor {
  assessQuality(verificationReport: VerificationReport): QualityAssessment {
    const metrics = this.calculateMetrics(verificationReport);
    const score = this.calculateQualityScore(metrics);
    const grade = this.determineGrade(score);
    
    return {
      overallScore: score,
      grade,
      metrics,
      strengths: this.identifyStrengths(metrics),
      weaknesses: this.identifyWeaknesses(metrics),
      recommendations: this.generateQualityRecommendations(metrics),
      assessedAt: new Date()
    };
  }
  
  private calculateMetrics(report: VerificationReport): QualityMetrics {
    return {
      functionality: this.calculateFunctionalityMetrics(report),
      performance: this.calculatePerformanceMetrics(report),
      security: this.calculateSecurityMetrics(report),
      usability: this.calculateUsabilityMetrics(report),
      maintainability: this.calculateMaintainabilityMetrics(report)
    };
  }
  
  private calculateFunctionalityMetrics(report: VerificationReport): FunctionalityMetrics {
    return {
      testCoverage: report.passRate,
      defectDensity: this.calculateDefectDensity(report),
      requirementsTraceability: 95, // Example value
      featureCompleteness: report.passRate
    };
  }
  
  private calculatePerformanceMetrics(report: VerificationReport): PerformanceMetrics {
    const avgDuration = report.results.reduce((sum, r) => sum + r.duration, 0) / report.results.length;
    
    return {
      responseTime: avgDuration,
      throughput: 1000, // Example value
      resourceUtilization: 75, // Example value
      scalability: 85 // Example value
    };
  }
  
  private calculateSecurityMetrics(report: VerificationReport): SecurityMetrics {
    return {
      vulnerabilityCount: 0, // Example value
      securityTestCoverage: 90, // Example value
      complianceScore: 95, // Example value
      accessControlEffectiveness: 100 // Example value
    };
  }
  
  private calculateUsabilityMetrics(report: VerificationReport): UsabilityMetrics {
    return {
      userSatisfaction: 85, // Example value
      taskCompletionRate: report.passRate,
      errorRate: 5, // Example value
      learnabilityScore: 80 // Example value
    };
  }
  
  private calculateMaintainabilityMetrics(report: VerificationReport): MaintainabilityMetrics {
    return {
      codeComplexity: 70, // Example value
      codeDuplication: 10, // Example value
      documentationCoverage: 90, // Example value
      technicalDebt: 15 // Example value
    };
  }
  
  private calculateQualityScore(metrics: QualityMetrics): number {
    const weights = {
      functionality: 0.3,
      performance: 0.2,
      security: 0.25,
      usability: 0.15,
      maintainability: 0.1
    };
    
    const functionalityScore = (metrics.functionality.testCoverage + metrics.functionality.featureCompleteness) / 2;
    const performanceScore = (100 - (metrics.performance.responseTime / 1000)) * 0.5 + metrics.performance.throughput / 20 * 0.5;
    const securityScore = (metrics.security.complianceScore + metrics.security.accessControlEffectiveness) / 2;
    const usabilityScore = (metrics.usability.userSatisfaction + metrics.usability.taskCompletionRate) / 2;
    const maintainabilityScore = 100 - metrics.maintainability.technicalDebt;
    
    return (
      functionalityScore * weights.functionality +
      performanceScore * weights.performance +
      securityScore * weights.security +
      usabilityScore * weights.usability +
      maintainabilityScore * weights.maintainability
    );
  }
  
  private determineGrade(score: number): 'A' | 'B' | 'C' | 'D' | 'F' {
    if (score >= 90) return 'A';
    if (score >= 80) return 'B';
    if (score >= 70) return 'C';
    if (score >= 60) return 'D';
    return 'F';
  }
  
  private identifyStrengths(metrics: QualityMetrics): string[] {
    const strengths: string[] = [];
    
    if (metrics.functionality.testCoverage >= 90) {
      strengths.push('Excellent test coverage');
    }
    
    if (metrics.security.complianceScore >= 95) {
      strengths.push('Strong security compliance');
    }
    
    return strengths;
  }
  
  private identifyWeaknesses(metrics: QualityMetrics): string[] {
    const weaknesses: string[] = [];
    
    if (metrics.performance.responseTime > 5000) {
      weaknesses.push('Slow response times detected');
    }
    
    if (metrics.maintainability.technicalDebt > 20) {
      weaknesses.push('High technical debt');
    }
    
    return weaknesses;
  }
  
  private generateQualityRecommendations(metrics: QualityMetrics): string[] {
    const recommendations: string[] = [];
    
    if (metrics.functionality.testCoverage < 80) {
      recommendations.push('Increase test coverage to improve quality');
    }
    
    if (metrics.performance.responseTime > 2000) {
      recommendations.push('Optimize performance to improve user experience');
    }
    
    return recommendations;
  }
}

interface QualityAssessment {
  overallScore: number;
  grade: 'A' | 'B' | 'C' | 'D' | 'F';
  metrics: QualityMetrics;
  strengths: string[];
  weaknesses: string[];
  recommendations: string[];
  assessedAt: Date;
}

interface UsabilityMetrics {
  userSatisfaction: number;
  taskCompletionRate: number;
  errorRate: number;
  learnabilityScore: number;
}

interface MaintainabilityMetrics {
  codeComplexity: number;
  codeDuplication: number;
  documentationCoverage: number;
  technicalDebt: number;
}

4. Final Report Generation

// Final report generation
class FinalReportGenerator {
  generateFinalReport(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): FinalReport {
    return {
      executiveSummary: this.generateExecutiveSummary(verificationReport, qualityAssessment),
      verificationResults: verificationReport,
      qualityAssessment,
      riskAssessment: this.assessRisks(verificationReport, qualityAssessment),
      recommendations: this.generateFinalRecommendations(verificationReport, qualityAssessment),
      signOff: this.prepareSignOff(verificationReport, qualityAssessment),
      appendices: this.generateAppendices(verificationReport, qualityAssessment),
      generatedAt: new Date()
    };
  }
  
  private generateExecutiveSummary(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): ExecutiveSummary {
    return {
      projectStatus: verificationReport.overallStatus,
      qualityGrade: qualityAssessment.grade,
      keyFindings: this.extractKeyFindings(verificationReport, qualityAssessment),
      criticalIssues: this.identifyCriticalIssues(verificationReport),
      releaseRecommendation: this.makeReleaseRecommendation(verificationReport, qualityAssessment),
      nextSteps: this.defineNextSteps(verificationReport, qualityAssessment)
    };
  }
  
  private extractKeyFindings(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): string[] {
    const findings: string[] = [];
    
    findings.push(`Overall verification pass rate: ${verificationReport.passRate.toFixed(1)}%`);
    findings.push(`Quality assessment grade: ${qualityAssessment.grade}`);
    findings.push(`Total procedures executed: ${verificationReport.totalProcedures}`);
    
    if (verificationReport.failedProcedures > 0) {
      findings.push(`${verificationReport.failedProcedures} procedures failed`);
    }
    
    return findings;
  }
  
  private identifyCriticalIssues(verificationReport: VerificationReport): CriticalIssue[] {
    const criticalIssues: CriticalIssue[] = [];
    
    const failedProcedures = verificationReport.results.filter(r => r.status === 'failed');
    
    for (const procedure of failedProcedures) {
      criticalIssues.push({
        id: `ci-${procedure.procedureId}`,
        title: `Failed Procedure: ${procedure.procedureName}`,
        description: procedure.error || 'Procedure failed during execution',
        severity: 'high',
        impact: 'Blocks release',
        resolution: 'Fix failing procedure and re-run verification'
      });
    }
    
    return criticalIssues;
  }
  
  private makeReleaseRecommendation(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): 'approve' | 'conditional' | 'reject' {
    if (verificationReport.overallStatus === 'failed' || qualityAssessment.grade === 'F') {
      return 'reject';
    }
    
    if (verificationReport.overallStatus === 'passed' && qualityAssessment.grade === 'A') {
      return 'approve';
    }
    
    return 'conditional';
  }
  
  private defineNextSteps(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): string[] {
    const nextSteps: string[] = [];
    
    if (verificationReport.overallStatus === 'failed') {
      nextSteps.push('Address all failed procedures');
      nextSteps.push('Re-run verification after fixes');
    }
    
    if (qualityAssessment.grade === 'C' || qualityAssessment.grade === 'D') {
      nextSteps.push('Implement quality improvements');
      nextSteps.push('Address technical debt');
    }
    
    nextSteps.push('Obtain stakeholder sign-off');
    nextSteps.push('Prepare release documentation');
    
    return nextSteps;
  }
  
  private assessRisks(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): RiskAssessment {
    return {
      overallRiskLevel: this.calculateOverallRisk(verificationReport, qualityAssessment),
      risks: this.identifyRisks(verificationReport, qualityAssessment),
      mitigationStrategies: this.defineMitigationStrategies(verificationReport, qualityAssessment)
    };
  }
  
  private calculateOverallRisk(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): 'low' | 'medium' | 'high' | 'critical' {
    if (verificationReport.overallStatus === 'failed' || qualityAssessment.grade === 'F') {
      return 'critical';
    }
    
    if (verificationReport.passRate < 80 || qualityAssessment.grade === 'D') {
      return 'high';
    }
    
    if (verificationReport.passRate < 95 || qualityAssessment.grade === 'C') {
      return 'medium';
    }
    
    return 'low';
  }
  
  private identifyRisks(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): Risk[] {
    const risks: Risk[] = [];
    
    if (verificationReport.failedProcedures > 0) {
      risks.push({
        id: 'risk-001',
        title: 'Failed Verification Procedures',
        description: 'Some verification procedures failed',
        probability: 'high',
        impact: 'high',
        category: 'quality'
      });
    }
    
    if (qualityAssessment.metrics.performance.responseTime > 3000) {
      risks.push({
        id: 'risk-002',
        title: 'Performance Issues',
        description: 'Response times exceed acceptable limits',
        probability: 'medium',
        impact: 'medium',
        category: 'performance'
      });
    }
    
    return risks;
  }
  
  private defineMitigationStrategies(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): MitigationStrategy[] {
    const strategies: MitigationStrategy[] = [];
    
    if (verificationReport.failedProcedures > 0) {
      strategies.push({
        riskId: 'risk-001',
        strategy: 'Fix all failed procedures before release',
        timeline: '1-2 days',
        owner: 'Development Team',
        status: 'pending'
      });
    }
    
    return strategies;
  }
  
  private generateFinalRecommendations(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): FinalRecommendation[] {
    return [
      {
        category: 'immediate',
        priority: 'high',
        recommendation: 'Address all failed verification procedures',
        rationale: 'Failed procedures block release',
        owner: 'Development Team',
        timeline: '1-2 days'
      },
      {
        category: 'short-term',
        priority: 'medium',
        recommendation: 'Improve test coverage',
        rationale: 'Higher test coverage improves quality',
        owner: 'QA Team',
        timeline: '1 week'
      }
    ];
  }
  
  private prepareSignOff(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): SignOffSection {
    return {
      recommendation: this.makeReleaseRecommendation(verificationReport, qualityAssessment),
      conditions: this.defineSignOffConditions(verificationReport, qualityAssessment),
      approvers: this.defineApprovers(),
      status: 'pending'
    };
  }
  
  private defineSignOffConditions(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): string[] {
    const conditions: string[] = [];
    
    conditions.push('All critical issues resolved');
    conditions.push('Quality assessment meets minimum standards');
    conditions.push('Stakeholder approval obtained');
    
    return conditions;
  }
  
  private defineApprovers(): Approver[] {
    return [
      { name: 'Product Owner', role: 'Business Approver', status: 'pending' },
      { name: 'QA Lead', role: 'Quality Approver', status: 'pending' },
      { name: 'Tech Lead', role: 'Technical Approver', status: 'pending' }
    ];
  }
  
  private generateAppendices(
    verificationReport: VerificationReport,
    qualityAssessment: QualityAssessment
  ): Appendix[] {
    return [
      {
        title: 'Detailed Test Results',
        content: this.formatTestResults(verificationReport.results)
      },
      {
        title: 'Quality Metrics Details',
        content: this.formatQualityMetrics(qualityAssessment.metrics)
      }
    ];
  }
  
  private formatTestResults(results: VerificationResult[]): string {
    return JSON.stringify(results, null, 2);
  }
  
  private formatQualityMetrics(metrics: QualityMetrics): string {
    return JSON.stringify(metrics, null, 2);
  }
}

// Type definitions for final report
interface FinalReport {
  executiveSummary: ExecutiveSummary;
  verificationResults: VerificationReport;
  qualityAssessment: QualityAssessment;
  riskAssessment: RiskAssessment;
  recommendations: FinalRecommendation[];
  signOff: SignOffSection;
  appendices: Appendix[];
  generatedAt: Date;
}

interface ExecutiveSummary {
  projectStatus: string;
  qualityGrade: string;
  keyFindings: string[];
  criticalIssues: CriticalIssue[];
  releaseRecommendation: string;
  nextSteps: string[];
}

interface CriticalIssue {
  id: string;
  title: string;
  description: string;
  severity: 'low' | 'medium' | 'high' | 'critical';
  impact: string;
  resolution: string;
}

interface RiskAssessment {
  overallRiskLevel: 'low' | 'medium' | 'high' | 'critical';
  risks: Risk[];
  mitigationStrategies: MitigationStrategy[];
}

interface Risk {
  id: string;
  title: string;
  description: string;
  probability: 'low' | 'medium' | 'high';
  impact: 'low' | 'medium' | 'high';
  category: string;
}

interface MitigationStrategy {
  riskId: string;
  strategy: string;
  timeline: string;
  owner: string;
  status: 'pending' | 'in-progress' | 'completed';
}

interface FinalRecommendation {
  category: 'immediate' | 'short-term' | 'long-term';
  priority: 'low' | 'medium' | 'high';
  recommendation: string;
  rationale: string;
  owner: string;
  timeline: string;
}

interface SignOffSection {
  recommendation: string;
  conditions: string[];
  approvers: Approver[];
  status: 'pending' | 'approved' | 'rejected';
}

interface Approver {
  name: string;
  role: string;
  status: 'pending' | 'approved' | 'rejected';
}

interface Appendix {
  title: string;
  content: string;
}

Integration Patterns

Department Head Integration

  • Final verification of sub-agent work
  • Quality gate enforcement
  • Sign-off authority and responsibility

Cross-Department Integration

  • Multi-department verification coordination
  • Shared quality standards and criteria
  • Integrated reporting and documentation

Stop Conditions

STOP verification and escalate if:

  • Critical security vulnerabilities discovered
  • Major functionality failures detected
  • Performance below acceptable thresholds
  • Compliance requirements not met
  • Stakeholder approval withheld

PAUSE verification if:

  • Testing environment issues
  • External dependencies unavailable
  • Resource constraints
  • Scope changes requested

Quality Standards

Verification Quality:

  • 100% critical path coverage
  • 95% overall test pass rate

  • Complete documentation
  • Stakeholder approval

Reporting Quality:

  • Comprehensive evidence collection
  • Clear and actionable findings
  • Risk-based prioritization
  • Professional presentation format