"""Phase 0: Requirements Discovery Node.""" import logging from typing import Any, Dict from app.states.state import GCPArchitectureState from app.skills.loader import SkillLoader logger = logging.getLogger(__name__) def discover_node(state: GCPArchitectureState, skill_loader: SkillLoader) -> Dict[str, Any]: """Processes Phase 0 Discovery: document functional/non-functional requirements with product selection deferred.""" logger.info("Executing discover_node") skill_prompt = skill_loader.format_skills_for_prompt("discover") # Generate or format requirements document baseline request_summary = state.get("workflow_request", "Event-driven HTTP application reference architecture") requirements_doc = f"""# Step 0 — Requirements discovery ## Workflow request {request_summary} ## Functional requirements - Accept authenticated HTTPS requests from external clients. - Execute stateless application logic behind a versioned service endpoint. - Publish asynchronous domain events from the application. - Process events independently and tolerate retry/redelivery. - Persist durable objects and application state separately. - Expose operational logs, metrics, and audit-relevant events. - Support repeatable infrastructure changes through declarative IaC. ## Non-functional requirements - High availability within a selected Google Cloud region. - Horizontal scale for bursty HTTP traffic and asynchronous work. - At-least-once event delivery with idempotent consumers. - Encryption in transit and at rest using managed defaults initially. - Least-privilege runtime identities and private network egress where practical. - Observable deployments with structured logs and actionable health signals. - Reproducible, reviewable, non-deployment validation in CI. ## Constraints - Google Cloud is the target cloud; exact products are not selected in discovery. - Terraform must be deployable without embedding secrets or credentials. - The baseline must not provision resources during validation. - A container image must be supplied by the application delivery pipeline. - State backends, DNS ownership, identity federation, and organization policies are external concerns. ## Assumptions - A single region is acceptable for the initial deployment. - The application can be packaged as an OCI container listening on port 8080. - Events can use at-least-once semantics and consumers can deduplicate. - A dedicated Google Cloud project is available. - Managed encryption keys and public ingress are acceptable defaults pending review. ## Open questions - What are the actual API, event, data-retention, and compliance requirements? - Which clients and identity provider must authenticate requests? - What are traffic, payload-size, latency, RTO, and RPO targets? - Which data is relational, document, object, or analytical? **Product selection deferred:** `true` for this phase. """ active_skills = state.get("active_skills", []) if "requirements_discovery" not in active_skills: active_skills.append("requirements_discovery") return { "requirements_doc": requirements_doc, "product_selection_deferred": True, "current_phase": "discover", "active_skills": active_skills, }