Piloto 0120 convergio en 2 iter (2m28s). PR creado en dataforge/chart_demo/pulls/1 (no en dataforge/fn_registry — sub-repo). Anadido a autonomous_loop.md: - Seccion "Sub-repos vs worktree padre": orquestador opera en sub-repo cuando issue toca apps/, projects/*/apps/, cpp/apps/ o analysis/. - Seccion "Gitea API vs gh": gh auth es smoke, real es curl + pass token. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.9 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0120 | fn-orquestador: piloto verde end-to-end sobre chart_demo | pendiente | chore |
|
agent | alta |
|
|
2026-05-18 | 2026-05-18 |
|
0120 — Piloto verde de fn-orquestador
Problema
fn-orquestador (issue 0069) tiene spec completa con 11 reglas duras, worktree aislado, paths protegidos y watchdog. Pero task_runs esta vacio: ningun piloto verde documentado. Memoria del "piloto 1" registra contaminacion del main repo (origen de las reglas 9/10/11). Sin un task_run con status=done y PR mergeado, el comando /autonomous-task es promesa, no herramienta. Las olas 0121-0123 dependen de que esto funcione.
Decision
Ejecutar /autonomous-task sobre un target acotado y verificable: anadir bloque e2e_checks minimo al app.md de chart_demo y validar que fn-analizador corre la suite verde. Documentar el task_run entero (iteraciones, proposals, eventos) para auditar comportamiento real del orquestador.
Target
apps/chart_demo/ — app C++ ImGui pequeña, sin e2e_checks declarado, con --self-test ya implementado por el framework fn::run_app.
Bloque e2e_checks esperado
e2e_checks:
- id: build
cmd: "cmake --build cpp/build/windows --target chart_demo -j"
timeout_s: 300
- id: binary_exists
cmd: "test -f cpp/build/windows/apps/chart_demo/chart_demo.exe"
timeout_s: 5
(Inicialmente se planteo --self-test pero fn::run_app no parsea argv; el dry-run del orquestador 2026-05-18 lo detecto como R1 bloqueador. Sustituido por check estructural de binario construido. Implementar --self-test real es scope futuro fuera del piloto.)
Tareas
- Confirmar pre-condiciones del orquestador (migration 006, autonomous_protected_paths.json, gh auth, master limpio).
- Lanzar
/autonomous-task 0120 --dry-runpara audit. - Lanzar
/autonomous-task 0120 --max-iterations 5 --max-minutes 30. - Recoger output:
task_run_id, branchauto/0120-*, log de iteraciones, proposals aplicadas/skipped, URL del PR draft. - Verificar
git -C /home/lucas/fn_registry status --shortigual a baseline (regla 11 sandbox breach). - Post-mortem: si fallo en alguna iteracion, anotar en seccion
## Hallazgosy refinarfn-orquestador/SKILL.mdoautonomous_loop.mdsi corresponde.
Acceptance
sqlite3 apps/deploy_server/operations.db "SELECT id, task_id, status FROM task_runs WHERE task_id LIKE '0120%'"devuelve >=1 fila constatus=converged(schema real:task_id, noissue_id).apps/chart_demo/app.mdcontiene bloquee2e_checks:con al menosbuild+binary_exists.fn-analizadorcorrida sobrechart_demoreportachecks_pass=checks_total(todo verde).- PR draft existe en Gitea con branch
auto/0120-*apuntando amaster. git -C /home/lucas/fn_registry status --shortantes/despues del piloto identico (excluyendo solo este.mdcerrado).- Documento de post-mortem en
## Hallazgoscon: iteraciones totales, tiempo total, proposals creadas, decisiones del orquestador.
DoD
User-facing surface:
- Donde: PR draft visible en Gitea
dataforge/fn_registry/pulls. - Latencia: <30 min total.
- Como vuelve: lectura del
task_runviamcp__registry__fn_doctoro tab Monitor del registry_dashboard. - Onboarding (1 parrafo): "Para lanzar orquestador autonomo sobre un issue trivial, ejecuta
/autonomous-task <NNNN>. Tras converger, abre PR draft. Si falla, leetask_runs.events_jsonpara reconstruir las decisiones."
Hallazgos
Ejecucion: 2026-05-18, task_b3069559f34415c3.
Resultado
- status: converged
- iteraciones: 2/5 (CONSTRUIR + ANALIZAR, sin necesidad de MEJORAR)
- duracion: 2m 28s / 30min
- branch:
auto/0120-chart-demo-e2e(en sub-repodataforge/chart_demo, NO enfn_registry) - PR draft: dataforge/chart_demo#1
- e2e_run:
e2e_61557e2ba1cc67acchecks_pass=2 checks_total=2 (build 6742ms + binary_exists 1ms) - sanity check regla 11: baseline
git status --shortidentico a post-run (sin contaminacion del main repo)
Hallazgos
-
Arquitectura sub-repo: para issues
add_e2e_checkque editanapp.md, el orquestador opera DIRECTAMENTE en el sub-repo Gitea de la app target (dataforge/chart_demo), NO en el worktree del repo padre. Razon:apps/*/esta gitignored enfn_registry(reglaapps_subrepo). El worktree padre se crea por protocolo pero queda sin uso. Implicacion: PR draft sale al sub-repo, no al repo padre — humano revisa+mergea en el sub-repo. -
R3 (Gitea API) confirmado: orquestador usa
curl + pass gitea/dataforge-git-tokenpara crear PR. NO usagh pr create. Documentar enautonomous_loop.mdque la pre-condiciongh auth statuses smoke check; mecanismo real es Gitea API. -
R4 (schema task_runs) confirmado: campos reales
id, task_id, started_at, finished_at, status, iterations, last_phase, last_run_id, branch, worktree_path, pr_url, progress_json. Statusconverged(nodonecomo dice la spec antigua deautonomous_loop.md). Acceptance del issue debe usartask_id LIKE '0120%'ystatus='converged'. -
Convergencia rapida: 2 iter sin MEJORAR. Check
binary_existspaso porquechart_demo.exeya existia encpp/build/windows/(build incremental cmake reutiliza objetos). Para apps sin binario previo, se esperaria 1 iter extra de build real. -
Paths protegidos respetados: ni
.claude/, nidev/issues/, ni.env*tocados durante la run. Regla 8 verde.
Siguientes pasos
- Revisar PR
dataforge/chart_demo/pulls/1(humano). - Mergear PR a
masterdel sub-repo cuando aprobado. - Cerrar este issue:
mv dev/issues/0120-orquestador-piloto-verde.md dev/issues/completed/. - Lanzar
/autonomous-task 0121(desbloqueado).