Files
rikrdo 70ff54cfa3 refactor: reinforce harness to prevent contract violations
- verify.sh: validate prohibited dirs, gate nomenclature, feature schema, runtime consistency
- orquestra-status: block direct writes to backlog/features.json
- install.sh: add build artifacts to .gitignore template
- AGENTS.md: document prohibited dirs, gate nomenclature, feature schema
- Reset runtime-status to idle state
2026-08-17 18:59:39 +02:00
..

Adaptador Pi

Orquestra se ejecuta desde Pi como un solo parent session secuencial. No instala subagentes.

Requisitos obligatorios

  • pi debe existir en PATH antes de instalar Orquestra.
  • gentle-engram debe estar instalado: Orquestra usa Engram como memoria durable externa; no escribe memoria propia.
  • El proyecto instalado debe abrirse desde su raíz.
  • Arrancar con ./scripts/pi_orquestra.sh, que ejecuta pi --no-extensions, carga Engram explícitamente y carga solo extensiones Orquestra.
  • Extensiones project-local declaradas: .pi/extensions/orquestra-status/ y .pi/extensions/orquestra-web-fetch.ts.
  • El código de producto vive en project/; archivos de código en la raíz son inválidos.

Instalación esperada

Cuando Orquestra se instala en un repo de proyecto, el instalador debe copiar:

  • platforms/pi/extensions/orquestra-status/ -> .pi/extensions/orquestra-status/
  • platforms/pi/extensions/orquestra-web-fetch.ts -> .pi/extensions/orquestra-web-fetch.ts

No debe crear .pi/subagents/ ni .pi/subagents.json.

Técnica de memoria

  • Engram es la única memoria persistente del harness.
  • verify.sh falla si ~/.pi/agent/npm/node_modules/gentle-engram/index.ts no existe.
  • pi_orquestra.sh carga Engram con -e aunque Pi arranque con --no-extensions; así se evita cargar extensiones globales no declaradas sin perder memoria.
  • Cada rol trabaja desde los input declarados en harness/workflow.stages.yml; el chat completo no es un handoff válido.
  • Para aislamiento real desde la sesión Pi, ejecutar cada stage con /orquestra-stage <stage> [feature_id]; internamente usa run_stage.py, pi --no-session --no-context-files y carga solo Engram + extensiones Orquestra.
  • Detalle completo del handoff: docs/context-handoff.md.

Flujo secuencial

  1. Ejecutar ./scripts/verify.sh.
  2. Abrir Pi limpio desde la raíz con ./scripts/pi_orquestra.sh.
  3. Confirmar el widget con /orquestra-status.
  4. Ejecutar cada stage como proceso fresco desde Pi: /orquestra-stage <stage> [feature_id].
  5. run_stage.py genera un prompt mínimo con las rutas input/output del stage y no hereda la sesión anterior.
  6. agent_status.py rechaza saltos de stage sin artefactos previos obligatorios.
  7. Durante build, escribir producto en project/ y tests en tests/; requiere feature_id, stage=build, agent=implementer y state=running en work/runtime-status.json.
  8. Al terminar cada stage, escribir el artefacto esperado en work/artifacts/<feature_id>/.
  9. Ejecutar document/documenter.md solo si cambiaron docs/API/contratos/comportamiento user-facing; no es gate obligatorio de cierre.
  10. Recién después empieza el siguiente rol/stage.

Modelos por rol

Si querés modelos distintos por etapa, se eligen secuencialmente antes de cada stage según harness/model-routing.yml. No hay ejecución paralela.

Respuesta estándar por etapa

  • done -> <ruta>
  • blocked -> <ruta>