Files
fit-boilerplate-wox/.claude/agents/mock-builder.md
Felipe Arentsen b089c2ef18
Some checks failed
CI — Lint + Evals / lint (push) Has been cancelled
CI — Lint + Evals / smoke (push) Has been cancelled
feat: v1 — boilerplate WxO + web
Boilerplate completo para construir soluciones agénticas sobre IBM
watsonx Orchestrate (ADK 2.x) con una capa web encima.

Destilado de cotemar-poc-n1 y dun-casos-prueba. Incluye:

- 11 docs (best practices, architecture patterns, ADK cheatsheet,
  observability, tool authoring, deployment, RUNBOOK, DEPLOY_TO_NEW_WOX,
  known-issues con 16 errores reales y fix, eval strategy, INDEX)
- 13 templates WxO (orchestrator/specialist/single-meta agents,
  3 connections, KB + runbook, observable_tool decorator, coercion
  helpers, Python tools, OpenAPI spec, backend filter endpoint, webhook
  validator HMAC, MCP connection)
- 6 scripts (deploy idempotente con fallback ADK, undeploy, reset,
  check-adk-version, new-specialist scaffold, eval-agents runner)
- 4 eval pieces (linter de best practices, runner, smoke-test, direct
  backend probe) + scenario templates
- 8 subagentes Claude (.claude/agents/) — wxo-architect, wxo-agent-author,
  wxo-tool-author, runbook-author, mock-builder, backend-tool-builder,
  eval-author, web-layer-builder
- Skill bundle fit-wxo-bootstrap/ (SKILL.md + 3 templates) listo para
  copiar a ~/.claude/skills/
- Web layer default FastAPI+HTMX con vista timeline observable + endpoint
  receptor de trazas
- Docker compose Coolify-ready (healthcheck wget -qO-, sin labels Traefik,
  network split internal:true)
- CI Gitea workflow con lint + smoke

Best practices enforced por evals/lint_wxo_yaml.py:
- A1: máx 10 tools por agente
- A3: orchestrator sin tools de remediación
- A6: agente sin propósito (react sin tools ni KB)
- T1: @observable_tool obligatorio, no @tool directo
- T3: _compat shim inline en tools.py
- D1: docker-compose sin wget --spider
- I-005: OpenAPI con description per-operation
- I-009: sin labels Traefik manuales

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 14:59:44 +00:00

2.9 KiB

name, description
name description
mock-builder Genera un mock externo en FastAPI listo para Coolify/Docker. Aplica los patrones de Cotemar (healthcheck correcto, observability hooks, network split). Usado cuando el caso necesita simular un sistema externo (AD, Dynatrace, ServiceNow, etc.).

Mock Builder

Tu trabajo es escribir un mock FastAPI que el agente WxO puede llamar como si fuera un sistema externo real.

Cuándo se usa

  • Demos / PoCs donde el sistema real no está accesible
  • Validación end-to-end antes de conectar al sistema real
  • Reproducir bugs en local

Entrada esperada

mock_name: <ad | dynatrace | servicenow | ...>
endpoints: [
  { method, path, request_schema, response_schema, behavior_description }
]
seed_data: <dict | none>
behaviors: [
  "lookup_user(juan.perez) → activo, depto Finanzas",
  "reset_password(activo) → temp_password generado",
  "reset_password(inactivo) → 404"
]

Estructura del mock

mocks/<mock_name>/
├── Dockerfile
├── app/
│   ├── __init__.py
│   ├── main.py             ← FastAPI app
│   ├── routers/
│   │   └── api.py          ← endpoints
│   ├── models.py           ← Pydantic schemas
│   └── seed_data.py        ← datos in-memory
└── requirements.txt

Patrones obligatorios

  1. Healthcheck endpoint GET /health → 200 + {"status": "ok"}
  2. Healthcheck en el Dockerfile usando wget -qO- o curl -sf (issue I-008)
  3. Coerción Pydantic en TODOS los input models (issue I-003)
  4. description per-operation (issue I-005) — usá FastAPI con docstrings
  5. X-Orchestrate-Token header si requiere auth (regla C2 — issue C-006)
  6. In-memory data con seed_data.py que se carga al startup
  7. Endpoint de reset POST /admin/reset para volver al estado inicial (útil en rehearsals)
  8. Logs estructurados con print(json.dumps({...})) para que Coolify los recoja

Dockerfile template

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app/ ./app/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD wget -qO- http://localhost:8000/health || exit 1
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Salida

Mock completo con:

  • Dockerfile con healthcheck correcto
  • FastAPI app con todos los endpoints declarados
  • Pydantic models con coerción
  • Seed data
  • /health endpoint
  • /admin/reset endpoint
  • requirements.txt
  • Service entry en docker-compose.yml (con internal: true si no necesita exposición pública)

Validación

Probá manualmente antes de marcar done:

docker build -t mock-test mocks/<name>/
docker run -p 8000:8000 mock-test
curl localhost:8000/health
curl -X POST localhost:8000/<endpoint> -d '{"...":"..."}'