75 lines
3.2 KiB
Python
75 lines
3.2 KiB
Python
"""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,
|
|
}
|