docs(orquestador): documentar push automatico FLEET-STATE + fn summarize_fleet_transitions

This commit is contained in:
Egutierrez
2026-06-21 12:28:20 +02:00
parent 118d5d36d3
commit b6f4b4eb03
+21
View File
@@ -274,6 +274,26 @@ Ningún secundario arranca sin **DoD-contrato**: el criterio de aceptación FIJO
El contrato sigue `dod_quality.md` (golden + edge + error con evidencia ejecutable), no un checkbox vago. Sin él, el agente es `MAL_LANZADO`.
### Push automático: el bloque `FLEET-STATE`
No hace falta acordarse de drenar para enterarse de un cambio. El hook `UserPromptSubmit`
`hook_fleet_state_inject.sh` (registrado en `.claude/settings.local.json`) inyecta en CADA turno del
orquestador —solo cuando la sesión es `role=orchestrator`— un bloque resumen de las transiciones
pendientes del watcher:
```
FLEET-STATE: terminados=[<sid>:<goal>…] reclaman=[…] estancados=[…] (drain con ./fn run drain_fleet_events para consumir)
```
Si no hay cambios emite `FLEET-STATE: sin cambios`; si el watcher está caído o el `events.jsonl` no
existe, degrada limpio sin romper el turno. El bloque es solo un **aviso** (hace peek, no avanza el
cursor): para consumir las transiciones y aplicar la política por clasificación sigues drenando
(abajo). El resumen lo produce `summarize_fleet_transitions_py_infra` sobre el feed del watcher.
Gotcha conocido: hoy el bloque lista transiciones de TODA la flota, incluidas las de otros
orquestadores y sus ejecutores. Si hay más de un orquestador activo, filtra por tu propia familia de
agentes (los que tú lanzaste) — igual que en "No te vigiles a ti mismo" más abajo.
### Drenar la cola
```bash
@@ -401,6 +421,7 @@ El orquestador no hace polling caro: drena la cola **cuando actúa** (cuando la
| `reboot_all_claudes_bash_infra` | Reiniciar/parar la flota retomando sesiones; `--exclude-current` para no tocarte |
| `set_dod_contract_py_infra` | Escribir el DoD-contrato fijo (`dod_contract`/`dod_status`) en el `goal.json` de un secundario al lanzarlo |
| `drain_fleet_events_py_infra` | Consumir la cola de transiciones del watcher (`~/.claude/fleet/events.jsonl`), agrupada por clasificación + urgentes |
| `summarize_fleet_transitions_py_infra` | Resumir las transiciones del feed en una línea (`terminados/reclaman/estancados`); alimenta el bloque `FLEET-STATE` que el hook `UserPromptSubmit` inyecta cada turno |
| `classify_fleet_termination_go_infra` | Clasificar el estado de terminación de un agente (RECLAMA/MAL_LANZADO/DICE_TERMINADO/ESTANCADO/TRABAJANDO) — lo usa el watcher |
| `list_claude_fleet_go_infra` | Fleet tipado con goal/phase/`role` + `tmux_window` (alimenta `/fleet` y el watcher). **Invócala por el binario `apps/fleetview/fleetview list --json`**, NUNCA por `./fn run` (la despacha como `go test`). El JSON del CLI aún no expone `role`/`dod_contract`/`dod_status`; léelos de `~/.claude/goals/<session_id>.json` |
| `spawn_fleet_agent_bash_infra` | Lanzar un ejecutor (o el orquestador) como window de la flota tmux — preferido sobre kitty cuando hay perfil fleet |