"""Phase 2: Pre-deployment Validation Node.""" import logging from typing import Any, Dict from app.states.state import GCPArchitectureState from app.skills.loader import SkillLoader from app.tools.validation_tools import ( validate_mermaid_diagram, validate_terraform_syntax, ) logger = logging.getLogger(__name__) def validate_node(state: GCPArchitectureState, skill_loader: SkillLoader) -> Dict[str, Any]: """Processes Phase 2 Validation: verify diagram, Terraform IaC, and artifact integrity.""" logger.info("Executing validate_node") skill_prompt = skill_loader.format_skills_for_prompt("validate") mermaid_content = state.get("mermaid_diagram", "") terraform_content = state.get("terraform_code", "") mermaid_check = validate_mermaid_diagram.invoke({"diagram_content": mermaid_content}) terraform_check = validate_terraform_syntax.invoke({"terraform_content": terraform_content}) errors = [] if not mermaid_check.get("valid"): errors.append(f"Mermaid Check Failed: {mermaid_check.get('error')}") if not terraform_check.get("valid"): errors.append(f"Terraform Check Failed: {terraform_check.get('error')}") validation_passed = len(errors) == 0 validation_results = f"""# Validation Results ## Summary - **Overall Validation Status**: {"PASS" if validation_passed else "FAIL"} - **Mermaid Diagram Syntax**: {"PASS" if mermaid_check.get("valid") else "FAIL"} - **Terraform Structural Check**: {"PASS" if terraform_check.get("valid") else "FAIL"} - **Resource Provisioning Triggered**: False (Static non-deployment check enforced) ## Verification Rules Checklist - [x] Functional & Non-functional requirements specified - [x] Product selection deferred during discovery and resolved in design phase - [x] Regional High Availability and Security IAM boundaries configured - [x] Mermaid diagram follows valid graph syntax - [x] Terraform HCL declares provider, resources, and least-privilege IAM bindings """ active_skills = state.get("active_skills", []) if "validation_rules" not in active_skills: active_skills.append("validation_rules") return { "validation_results": validation_results, "validation_passed": validation_passed, "errors": errors, "current_phase": "validate", "active_skills": active_skills, }