fix: refactored manually
Some checks failed
validation / verify (push) Failing after 15s

This commit is contained in:
2026-09-02 16:08:12 +01:00
parent 43cbd215e2
commit b9a924cf4a
63 changed files with 1398 additions and 6 deletions

5
app/skills/__init__.py Normal file
View File

@@ -0,0 +1,5 @@
"""Skills package."""
from .loader import LocalSkill, SkillLoader
__all__ = ["LocalSkill", "SkillLoader"]

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,22 @@
---
name: architecture_design
phase: design
description: Guidance for GCP product selection, architecture design markdown, Mermaid diagrams, and Terraform IaC generation.
---
# Phase 1: Architecture Design & Product Selection Skill
When designing a Google Cloud Solution Architecture based on `docs/requirements.md`:
1. **Resolve Deferred Product Choices**: Select Google Cloud managed services suited for regional high availability and scale:
- Compute: Cloud Run / Cloud Functions / GKE.
- Messaging & Ingestion: Pub/Sub, Eventarc, or Cloud Tasks.
- State & Storage: Cloud Storage, Firestore, Cloud SQL, or Spanner.
- Identity & Security: Cloud IAM, Secret Manager, KMS, Artifact Registry.
2. **Architecture Documentation (`docs/architecture.md`)**:
- Provide executive summary, component responsibilities, data flow, security model, and cost model.
3. **Mermaid Diagram (`architecture.mmd`)**:
- Render clean, valid Mermaid syntax (`graph TD` or `flowchart TD`) mapping client ingress, compute, messaging, and storage components.
4. **Terraform Infrastructure as Code (`terraform/`)**:
- Produce valid Terraform HCL files (`main.tf`, `variables.tf`, `outputs.tf`, `versions.tf`).
- Ensure planability without credentials or resource provisioning during validation.

105
app/skills/loader.py Normal file
View File

@@ -0,0 +1,105 @@
"""Dynamic Local Skill Loader."""
import logging
from dataclasses import dataclass, field
from pathlib import Path
from typing import Dict, List, Optional
import yaml
logger = logging.getLogger(__name__)
@dataclass
class LocalSkill:
"""Represents a local skill loaded from SKILL.md."""
name: str
phase: str
description: str
content: str
filepath: Path
class SkillLoader:
"""Discovers and parses local skills from SKILL.md files."""
def __init__(self, skills_dir: Path) -> None:
self.skills_dir = skills_dir
self._skills: Dict[str, LocalSkill] = {}
def load_skills(self) -> Dict[str, LocalSkill]:
"""Scan skills_dir and load all valid SKILL.md files."""
self._skills.clear()
if not self.skills_dir.exists():
logger.warning("Skills directory does not exist: %s", self.skills_dir)
return self._skills
for skill_file in self.skills_dir.glob("**/SKILL.md"):
try:
skill = self._parse_skill_file(skill_file)
if skill:
self._skills[skill.name] = skill
logger.info("Loaded skill '%s' (phase: %s)", skill.name, skill.phase)
except Exception as exc:
logger.error("Failed to parse skill file %s: %s", skill_file, exc)
return self._skills
def get_skill(self, name: str) -> Optional[LocalSkill]:
"""Get skill by name."""
if not self._skills:
self.load_skills()
return self._skills.get(name)
def get_skills_by_phase(self, phase: str) -> List[LocalSkill]:
"""Get all skills matching a specific workflow phase."""
if not self._skills:
self.load_skills()
return [skill for skill in self._skills.values() if skill.phase == phase]
def format_skills_for_prompt(self, phase: Optional[str] = None) -> str:
"""Format skill instruction content into a single string for system prompt injection."""
skills = self.get_skills_by_phase(phase) if phase else list(self._skills.values())
if not skills:
return ""
prompt_parts = ["## Injected Skill Instructions\n"]
for skill in skills:
prompt_parts.append(f"### Skill: {skill.name} (Phase: {skill.phase})\n{skill.content}\n")
return "\n".join(prompt_parts)
def _parse_skill_file(self, filepath: Path) -> Optional[LocalSkill]:
"""Parse frontmatter and markdown content from SKILL.md."""
raw_text = filepath.read_text(encoding="utf-8")
if not raw_text.startswith("---"):
return LocalSkill(
name=filepath.parent.name,
phase="general",
description="",
content=raw_text,
filepath=filepath,
)
parts = raw_text.split("---", 2)
if len(parts) < 3:
return None
frontmatter_raw = parts[1]
content = parts[2].strip()
try:
metadata = yaml.safe_load(frontmatter_raw) or {}
except Exception:
metadata = {}
name = metadata.get("name", filepath.parent.name)
phase = metadata.get("phase", "general")
description = metadata.get("description", "")
return LocalSkill(
name=name,
phase=phase,
description=description,
content=content,
filepath=filepath,
)

View File

@@ -0,0 +1,20 @@
---
name: packaging_guide
phase: package
description: Guidance for assembling the comprehensive solution-architecture-guide.md.
---
# Phase 3: Solution Packaging Skill
When producing `solution-architecture-guide.md`:
1. **Consolidate Artifacts**: Combine key insights from `docs/requirements.md`, `docs/architecture.md`, `architecture.mmd`, `terraform/`, and `validation-results.md`.
2. **Guide Structure**:
- Executive Overview & Problem Statement.
- Selected GCP Product Architecture & Rationale.
- Embedded Mermaid Architecture Diagram.
- Terraform Infrastructure Blueprint & Deployment Instructions.
- Pre-deployment Validation Evidence & Compliance Matrix.
- Operations, Monitoring, and Maintenance Runbook.
3. **Completeness & Quality**:
- Ensure clear markdown formatting, code block highlighting, and actionable developer instructions.

View File

@@ -0,0 +1,19 @@
---
name: requirements_discovery
phase: discover
description: Guidance for discovering, analyzing, and documenting GCP solution requirements.
---
# Phase 0: Requirements Discovery Skill
When performing requirements discovery for a Google Cloud Solution Architecture:
1. **Analyze Workflow Request**: Extract functional and non-functional requirements from the user request or baseline specification.
2. **Defer Product Selection**: During discovery, product selection must explicitly be marked as `deferred: true`. Do not commit to specific GCP products (e.g. Cloud Run vs GKE) until the design phase.
3. **Capture Core Requirements**:
- Authenticated HTTPS ingress, stateless processing, asynchronous domain events.
- High availability within a selected GCP region.
- At-least-once delivery with idempotent processing.
- Least-privilege IAM service accounts and private networking where practical.
4. **Document Assumptions and Open Questions**: Highlight unknowns regarding scale, traffic spikes, compliance, and specific region requirements.
5. **Output Standard**: Produce a valid `docs/requirements.md` file matching the phase spec.

View File

@@ -0,0 +1,19 @@
---
name: validation_rules
phase: validate
description: Guidance for verifying Terraform syntax, Mermaid diagrams, and repository artifact completeness.
---
# Phase 2: Pre-Deployment Validation Skill
When validating solution architecture artifacts:
1. **Static File Validation**:
- Verify existence and non-emptiness of `workflow.yaml`, `requirements.yaml`, `docs/requirements.md`, `docs/architecture.md`, `architecture.mmd`, `terraform/main.tf`, `solution-architecture-guide.md`.
2. **Mermaid Syntax Validation**:
- Check diagram for matching subgraphs, valid node definitions, arrow syntaxes, and clean structure.
3. **Terraform Integrity**:
- Ensure Terraform modules, variables, and resource blocks adhere to Google Cloud provider standards.
- Ensure static non-provisioning check passes (`deploy_resources: false`).
4. **Output Report**:
- Generate `validation-results.md` summarizing pass/fail status across all verification rules.