@tacuchi/agent-workflow-cli 14.1.1 → 14.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/adapters/node-process.d.ts +12 -1
  2. package/dist/adapters/node-process.d.ts.map +1 -1
  3. package/dist/adapters/node-process.js +159 -7
  4. package/dist/adapters/node-process.js.map +1 -1
  5. package/dist/application/process-registry-service.d.ts +2 -0
  6. package/dist/application/process-registry-service.d.ts.map +1 -1
  7. package/dist/application/process-registry-service.js.map +1 -1
  8. package/dist/application/source-launch-service.d.ts +4 -1
  9. package/dist/application/source-launch-service.d.ts.map +1 -1
  10. package/dist/application/source-launch-service.js +12 -6
  11. package/dist/application/source-launch-service.js.map +1 -1
  12. package/dist/application/terminal-launch.d.ts +72 -0
  13. package/dist/application/terminal-launch.d.ts.map +1 -0
  14. package/dist/application/terminal-launch.js +114 -0
  15. package/dist/application/terminal-launch.js.map +1 -0
  16. package/dist/cli/tui/components/process-list.d.ts +3 -2
  17. package/dist/cli/tui/components/process-list.d.ts.map +1 -1
  18. package/dist/cli/tui/components/process-list.js +10 -4
  19. package/dist/cli/tui/components/process-list.js.map +1 -1
  20. package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
  21. package/dist/cli/tui/data/workflow-content.js +4 -3
  22. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  23. package/dist/cli/tui/tabs/project-tab.js +12 -4
  24. package/dist/cli/tui/tabs/project-tab.js.map +1 -1
  25. package/dist/ports/process.d.ts +25 -0
  26. package/dist/ports/process.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/skills/w/README.md +5 -5
  29. package/skills/w/SKILL.md +9 -8
  30. package/skills/w/commands/README.md +12 -6
  31. package/skills/w/commands/plan-refine.md +53 -0
  32. package/skills/w/loops/README.md +14 -9
  33. package/skills/w/loops/plan-exec-loop/SKILL.md +1 -1
  34. package/skills/w/loops/plan-new-loop/SKILL.md +2 -0
  35. package/skills/w/loops/plan-refine-loop/SKILL.md +94 -0
  36. package/skills/w/loops/spec-refine-loop/SKILL.md +1 -0
@@ -10,7 +10,7 @@
10
10
 
11
11
  Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un entregable. **No es invocable por nombre** con el tool `Skill` (no se registra como skill suelta): es el cuerpo de su comando `/w:…`, que lo **carga leyendo `<loop>/SKILL.md`** y lo ejecuta inline. La IA lo corre de punta a punta: detecta huecos, los resuelve (preguntando al humano o investigando), integra y repite hasta converger.
12
12
 
13
- Propiedades comunes a **los 4 loops**:
13
+ Propiedades comunes a **los 5 loops**:
14
14
 
15
15
  1. **Objetivo persistente + verification-first** — el loop persigue su `SESSION.Objective` y solo finaliza cuando sus `SESSION.Success criteria` están **en verde** (o el humano aborta vía `flow` `Cerrar`). Esos criterios —la condición de término— se **siembran al inicio** (*verification-first*, TDD generalizado: tests ejecutables para código, rúbrica falsable para análisis/diseño), no se improvisan al final. Modelado en el `/goal` de Claude Code pero como **doctrina agnóstica** (sin depender de ningún host) y con registro durable. El "no parar hasta converger" es del loop, no del arnés. **Entre turnos**, el mismo `CHECKPOINT`+resume hace que un prompt **sin comando** **continúe/reabra la sesión más reciente** en vez de arrancar trabajo suelto — la cara *inter-turno* del objetivo persistente (ver [`../SKILL.md`](../SKILL.md) § *Contexto operativo*).
16
16
  2. **Gap-driven convergente** — el *cómo* del objetivo persistente: cada ciclo `detect_gaps` → resolver (humano o research) → integrar → repetir hasta que no queden gaps materiales. Los gaps "agotados" (límite `MAX` de intentos) no se re-disparan → garantiza convergencia.
@@ -22,7 +22,7 @@ Propiedades comunes a **los 4 loops**:
22
22
 
23
23
  ## flow control — options
24
24
 
25
- El control `flow` es **fijo**: `Compactar` / `Cerrar`, presente en los 4 loops. Responder la pregunta de contenido **sin tocar `flow`** = seguir iterando ("continuar" es el comportamiento por defecto del loop, no una opción del canal de control).
25
+ El control `flow` es **fijo**: `Compactar` / `Cerrar`, presente en los 5 loops. Responder la pregunta de contenido **sin tocar `flow`** = seguir iterando ("continuar" es el comportamiento por defecto del loop, no una opción del canal de control).
26
26
 
27
27
  | Option | What it does |
28
28
  |---|---|
@@ -35,10 +35,11 @@ El control `flow` es **fijo**: `Compactar` / `Cerrar`, presente en los 4 loops.
35
35
  |---|---|---|---|---|
36
36
  | [`spec-refine-loop`](spec-refine-loop/SKILL.md) | SPEC | `/w:spec-refine` | `docs/specs/NNN-spec*.md` (el spec mismo) | `docs/specs/NNN-spec-<slug>.md` (in place) |
37
37
  | [`plan-new-loop`](plan-new-loop/SKILL.md) | PLAN | `/w:plan-new` | `docs/specs/NNN-spec-*.md` | `docs/plans/PPP-plan-<slug>.md` |
38
+ | [`plan-refine-loop`](plan-refine-loop/SKILL.md) | PLAN | `/w:plan-refine` *(aux, opcional)* | `docs/plans/PPP-plan-*.md` (el plan mismo) | `docs/plans/PPP-plan-<slug>.md` (in place) |
38
39
  | [`plan-exec-loop`](plan-exec-loop/SKILL.md) | PLAN | `/w:plan-exec` | `docs/plans/PPP-plan-*.md` | `docs/plans/PPP-plan-<slug>.md` (update); resto vía `export-*` |
39
40
  | [`quick-loop`](quick-loop/SKILL.md) | QUICK | `/w:quick` | — (prompt) | edita código + session ligera; **no** `docs/` |
40
41
 
41
- > `/w:spec-new` no tiene loop (es single-pass). Por eso hay **5 comandos / 4 loops**.
42
+ > `/w:spec-new` no tiene loop (es single-pass). Por eso hay **6 comandos / 5 loops**.
42
43
 
43
44
  ### `docs/` boundary (regla dura)
44
45
 
@@ -58,6 +59,7 @@ Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, dia
58
59
  |---|---|---|
59
60
  | `spec-refine-loop` | dudas-de-humano · elección de MCP · convergencia (`Guardar especificación refinada` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
60
61
  | `plan-new-loop` | dudas · elección de MCP · convergencia (`Guardar plan` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
62
+ | `plan-refine-loop` | dudas · elección de MCP · convergencia (`Guardar plan refinado` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
61
63
  | `plan-exec-loop` | decisiones/dudas no obvias · elección de MCP · cierre (`Marcar plan done` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
62
64
  | `quick-loop` | dudas no obvias · escalar a SPEC/PLAN · cierre (`Cerrar tarea` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
63
65
 
@@ -76,7 +78,7 @@ Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, dia
76
78
 
77
79
  El **chasis** (`spec-refine-loop`) además detalla `## Composes` (capacidades que compone), `## Deliverable schema`, `## Gap taxonomy`, `## Ask-vs-research rule`, `## Research: autonomy, scope & failure`, `## Structured-choice`, `## Compact / resume`, `## Integration`.
78
80
 
79
- Los **heirs** (`plan-new-loop`, `plan-exec-loop`, `quick-loop`) usan `## Inherits` (lo que reusan del chasis, sin repetirlo) + `## Delta N` (sus diferencias).
81
+ Los **heirs** (`plan-new-loop`, `plan-refine-loop`, `plan-exec-loop`, `quick-loop`) usan `## Inherits` (lo que reusan del chasis, sin repetirlo) + `## Delta N` (sus diferencias).
80
82
 
81
83
  ## Chassis / heirs
82
84
 
@@ -85,11 +87,13 @@ spec-refine-loop ── CHASIS (patrón de referencia: objetivo persistente + v
85
87
  │ structured-choice + control flow, research autónomo INLINE + regla BD,
86
88
  │ compact/resume, artefactos como log vivo: CHECKPOINT siempre,
87
89
  │ BACKLOG solo si difiere)
88
- ├── plan-new-loop (heir) → deltas: plan rico, gap taxonomy de plan
89
- ├── plan-exec-loop (heir) → deltas: ejecución real (código/BD/git),
90
- una sola session por run, sin auto-export
91
- └── quick-loop (heir) → deltas: ceremonia mínima, 1 session,
92
- hereda git/BD/no-export de plan-exec
90
+ ├── plan-new-loop (heir) → deltas: plan rico, gap taxonomy de plan
91
+ ├── plan-refine-loop (heir) → deltas: refina el plan in place (aux, opcional);
92
+ reusa gap taxonomy + coherence gate de plan-new
93
+ ├── plan-exec-loop (heir) → deltas: ejecución real (código/BD/git),
94
+ │ una sola session por run, sin auto-export
95
+ └── quick-loop (heir) → deltas: ceremonia mínima, 1 session,
96
+ hereda git/BD/no-export de plan-exec
93
97
  ```
94
98
 
95
99
  El chasis **no es una capacidad bindeable**: *es* `spec-refine-loop` y los demás loops lo heredan. Lo enchufable son las **capacidades** que un loop compone (ej. `ui-design`, `sql`, `git`), resueltas por `.workflow/skills.toml`.
@@ -114,5 +118,6 @@ Los loops componen **capacidades por su rol**, no skills concretas; la skill que
114
118
 
115
119
  - [`spec-refine-loop/SKILL.md`](spec-refine-loop/SKILL.md) — el chasis
116
120
  - [`plan-new-loop/SKILL.md`](plan-new-loop/SKILL.md)
121
+ - [`plan-refine-loop/SKILL.md`](plan-refine-loop/SKILL.md) — aux, opcional (refina el plan in place)
117
122
  - [`plan-exec-loop/SKILL.md`](plan-exec-loop/SKILL.md)
118
123
  - [`quick-loop/SKILL.md`](quick-loop/SKILL.md)
@@ -30,7 +30,7 @@ PLAN
30
30
  `/w:plan-exec` — **reanudable** (mismo mecanismo del chasis; aquí el resume keya off el checkbox del plan-doc + CHECKPOINT, ver Delta 1).
31
31
 
32
32
  ## Reads
33
- `docs/plans/PPP-plan-<slug>.md` (localizar vía glob `docs/plans/PPP-plan-*.md` o la ruta exacta del argumento del comando).
33
+ `docs/plans/PPP-plan-<slug>.md` (localizar vía glob `docs/plans/PPP-plan-*.md` o la ruta exacta del argumento del comando). Corre **cualquier** plan, haya pasado o no por [`plan-refine-loop`](../plan-refine-loop/SKILL.md) — plan-refine es auxiliar y no obligatorio; no hay gate que lo exija.
34
34
 
35
35
  ## Writes
36
36
  - `docs/plans/PPP-plan-<slug>.md` (**read/update**, living doc: estado de fases/tareas, `Open questions`).
@@ -101,3 +101,5 @@ El research **inline** del chasis se especializa: mapear **código/impacto** —
101
101
  ## Convergence / exit
102
102
 
103
103
  Sin gaps materiales → **coherence gate** (read-only) = **`Success criteria` en verde** (*verification-first*; es el "convergence gate" del chasis para PLAN-new): cada `acceptance criterion` del spec **traza** a una fase/tarea, `Final behavior` los cubre, fases XS–S / tareas XS, `deps` sin ciclos, `Impacted` consistente con `Solution`. Lo que falle **vuelve como gap** — la trazabilidad criterio→tarea es una **invariante chequeada**, no una sección aparte. Si pasa → *structured-choice* (contenido: `Guardar plan` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`) → al `Guardar`, escribe `docs/plans/PPP-plan-<slug>.md` (con confirmación si existe) → `finalize` (persiste `CHECKPOINT`, y `BACKLOG` solo si difiere; cierra la session, reporta). `Cerrar` en cualquier momento → `finalize` igual.
104
+
105
+ > **Después de generar:** el plan puede ir directo a `plan-exec`, o —si surgen cambios antes de ejecutar (nuevos requerimientos, ajustes de alcance)— pasar por [`plan-refine-loop`](../plan-refine-loop/SKILL.md) (`/w:plan-refine`, auxiliar y **no obligatorio**), que lo refina in place.
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: plan-refine-loop
3
+ description: >-
4
+ Refina un plan existente (docs/plans/PPP-plan-<slug>.md) editándolo IN PLACE,
5
+ como paso auxiliar y NO obligatorio del flujo PLAN antes de plan-exec. Heir del
6
+ chasis spec-refine-loop: reusa íntegro su motor gap-driven convergente, su única
7
+ session por run, research INLINE, structured-choice con ≤3 preguntas de contenido
8
+ + 1 control flow (Compactar/Cerrar) siempre, research autónomo con regla BD
9
+ read-only, y artefactos como log vivo (CHECKPOINT siempre, BACKLOG solo si
10
+ difiere). Es a plan-new lo que spec-refine es a spec-new: edita el plan-doc in
11
+ place (no genera uno nuevo). Reusa la gap taxonomy y el coherence gate de
12
+ plan-new-loop; agrega Refinement decisions/Q&A traceability al plan (traza, sin
13
+ contrato de gating: plan-exec corre cualquier plan). Lo arranca /w:plan-refine y
14
+ es reanudable + re-corrible a demanda. Invocar cuando un plan ya generado deba
15
+ ajustarse antes de ejecutarlo.
16
+ ---
17
+
18
+ # plan-refine-loop
19
+
20
+ > **Heir** del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md). Aquí **solo** los deltas. El motor (gap-driven, sesión única, structured-choice + control `flow`, research inline + regla BD, compact/resume, artefactos como log vivo, objetivo persistente + verification-first) vive en el chasis — no se repite.
21
+
22
+ > **Relación con los otros loops de PLAN:** `plan-new-loop` **genera** el plan desde el spec; `plan-refine-loop` **lo refina in place** (opcional); `plan-exec-loop` **lo ejecuta**. plan-refine es a plan-new lo que spec-refine es a spec-new.
23
+
24
+ ## Flow
25
+ PLAN
26
+
27
+ ## Layer
28
+ 2 — la IA lo corre entero.
29
+
30
+ ## Auxiliar / NO obligatorio
31
+ `plan-exec` corre **cualquier** plan, refinado o no — **no** hay gate que exija plan-refine. Este loop existe para incorporar cambios (nuevos requerimientos, ajustes de alcance, deps/riesgos detectados al releer) **antes** de ejecutar, sin re-generar el plan desde cero.
32
+
33
+ ## Started by
34
+ `/w:plan-refine` — **reanudable** (mismo mecanismo del chasis, keyado off CHECKPOINT) y **re-corrible a demanda** (ver *Compact / resume*).
35
+
36
+ ## Reads
37
+ `docs/plans/PPP-plan-*.md` (glob — localiza el plan por número; o la ruta exacta del argumento del comando). **Siempre el plan mismo**: este loop lo edita in place, no hay un archivo "refined" aparte.
38
+
39
+ ## Writes
40
+ Actualiza `docs/plans/PPP-plan-<slug>.md` **in place** (cuando el usuario elige `Guardar plan refinado`): completa/ajusta secciones y **agrega** `## Refinement decisions` + `## Q&A traceability`. Como sobrescribe un doc existente, **con confirmación** del usuario. Solo escribe `docs/plans` — nunca otras carpetas `docs/` ni auto-export.
41
+
42
+ ## Inherits
43
+
44
+ Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
45
+
46
+ - **Objetivo persistente + verification-first**: persigue su `SESSION.Objective` hasta que sus `SESSION.Success criteria` están **en verde** (sembrados al inicio; acá la rúbrica = **coherencia del plan**, ver *Convergence*). Motor **gap-driven convergente** + **ciclo artifact-first** (sembrar `CHECKPOINT.Pending/Next` ANTES → `detect_gaps` → resolver → integrar → `Pending→Completed` DESPUÉS; gaps agotados con límite `MAX` no se re-disparan).
47
+ - **Una sola session por run**: descriptor `<slug>-plan-refine` → `NNN-<slug>-plan-refine` (Type = `refine`): `SESSION` + `CHECKPOINT` (+ `BACKLOG` solo si difiere). La **investigación es inline** dentro de esta session (produce `ANALYSIS-FILE`/`CONCLUSIONS` + `SCRIPTS.sql` read-only en su propia carpeta), no una session aparte. El CLI antepone el `NNN` global; el caller pasa solo el descriptor.
48
+ - **Structured-choice**: ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre (ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`). Cada pregunta de contenido lleva **respuesta recomendada**.
49
+ - **Ask-vs-research rule** + **research autónomo inline** + **regla BD** (pregunta MCP si >1 sin default → queries a `SCRIPTS.sql` → ejecuta read-only, `sql-mutation-guard`) + manejo de research **inconclusa** (degrada a humano / difiere a `Open questions` + límite `MAX`).
50
+ - **Compact / resume** y **artefactos como log vivo (ciclo artifact-first)** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere). **Integridad del gate** (anti-gaming + verificación independiente): *only command output counts*.
51
+
52
+ ## Delta 1 — Deliverable: el PLAN, editado in place
53
+
54
+ El plan usa el **mismo esqueleto** que produce [`plan-new-loop`](../plan-new-loop/SKILL.md) (§ *Delta 1 — PLAN RICO*: `Summary`/`Solution`/`Impacted`/`Phases`/`Tasks`/`Validations`/`Final behavior`/… con secciones `(core)` siempre y `(opt.)` según complejidad). plan-refine **no** cambia el esquema: **completa/ajusta** las secciones existentes **in place** y **agrega** dos de traza:
55
+
56
+ ```markdown
57
+ ## Refinement decisions ← NEW (se AGREGA)
58
+ Qué se ajustó al refinar y por qué (nuevos requerimientos, cambios de scope,
59
+ deps/riesgos). Incluye lo resuelto vía research inline (ref a las CONCLUSIONS
60
+ de la session).
61
+
62
+ ## Q&A traceability ← NEW (se AGREGA)
63
+ Cada duda preguntada al humano + la respuesta elegida.
64
+ ```
65
+
66
+ > **Sin contrato de gating** (a diferencia de spec↔plan): la presencia de `## Refinement decisions`/`## Q&A traceability` en el plan es solo **traza de auditoría** — `plan-exec` **no** la exige ni la chequea (corre cualquier plan). Sirve para (a) distinguir un plan re-refinado de uno recién generado en el resume, y (b) dejar registro de qué cambió y por qué.
67
+
68
+ > El plan **no muta por ejecución** (eso lo trackea plan-exec en las Tasks del plan-doc) — solo por un (re-)refine.
69
+
70
+ ## Delta 2 — Gap taxonomy (de "plan")
71
+
72
+ Reusa **íntegra** la gap taxonomy de [`plan-new-loop`](../plan-new-loop/SKILL.md) (§ *Delta 2*): Approach/Solution vago, componentes sin identificar, wiring AS-IS desconocido, fase muy grande, tarea no atómica, deps faltantes, criterios del spec sin cubrir, riesgos sin atender. **Diferencia de foco:** plan-new **construye** el plan desde cero; plan-refine **detecta qué cambió** respecto del plan ya escrito (o respecto del spec, si el spec se re-refinó) y cierra **esos** gaps — típicamente menos y más localizados. Un gap extra propio del re-refine:
73
+
74
+ | Gap | Signal | Resolved by |
75
+ |---|---|---|
76
+ | Deriva plan↔spec | el spec se re-refinó y el plan quedó desalineado | **research** (re-lee el spec) / **humano** |
77
+
78
+ ## Delta 3 — What research investigates here
79
+
80
+ Igual que plan-new (mapea código/impacto: componentes FE/BE/BD, wiring AS-IS, deps), pero **acotado al delta**: re-verifica solo lo que el cambio toca (no re-mapea todo el plan). Regla BD del chasis igual (read-only a `SCRIPTS.sql`, MCP vía pregunta si >1 sin default).
81
+
82
+ ## Compact / resume
83
+
84
+ El resume **keya off el `CHECKPOINT`** de la refine session, no de un archivo "refined". Tres casos al ejecutar `/w:plan-refine` sobre un plan:
85
+
86
+ 1. **En curso** (existe `CHECKPOINT.md` en la refine session) → reanuda desde el avance (gaps resueltos, Q&A, `attempts`, research inline en curso).
87
+ 2. **Sin avance** (no hay CHECKPOINT y el plan **no** tiene `Refinement decisions`/`Q&A traceability`) → arranca desde cero leyendo el plan (`PPP-plan-*.md`).
88
+ 3. **Ya refinado / re-refine on demand** (no hay CHECKPOINT abierto pero el plan **ya tiene** `Refinement decisions`/`Q&A traceability`) → **operación de primera clase**: mientras el flujo siga en PLAN, re-correr `/w:plan-refine` sobre el mismo plan **cuantas veces haga falta** está soportado. `create_or_resume` detecta la refine session existente —típicamente **cerrada** tras converger— por descriptor + `## Origin` y la **reabre** (ver chasis § *Internal sessions*: detección con `aw sessions --state all` / `aw resume-summary --include-recent-closed`, reapertura con `aw session-resume --code <NNN> --reopen`); re-refinamiento incremental leyendo el **plan mismo**; al `Guardar`, edita in place con confirmación.
89
+
90
+ > **Continuidad inter-turno** (chasis, fila 2): un **comando de flujo** abre "nueva línea de trabajo" (sesión nueva) — **salvo re-correr el mismo flujo sobre la misma entrada** (mismo plan), que hace `create_or_resume` (reanuda/reabre en vez de duplicar).
91
+
92
+ ## Convergence / exit
93
+
94
+ Sin gaps materiales → **coherence gate** (read-only) = **`Success criteria` en verde** (*verification-first*; el "convergence gate" del chasis para PLAN, mismo que plan-new): cada `acceptance criterion` del spec **traza** a una fase/tarea, `Final behavior` los cubre, fases XS–S / tareas XS, `deps` sin ciclos, `Impacted` consistente con `Solution`, y —propio del re-refine— **el plan quedó realineado** con lo que cambió. Lo que falle **vuelve como gap**. Si pasa → *structured-choice* (contenido: `Guardar plan refinado` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`) → al `Guardar`, edita `docs/plans/PPP-plan-<slug>.md` in place (con confirmación) + inserta `Refinement decisions`/`Q&A traceability` → `finalize` (persiste `CHECKPOINT`; `BACKLOG` solo si difiere; cierra la session, reporta). `Cerrar` en cualquier momento → `finalize` igual.
@@ -307,5 +307,6 @@ El resume **keya off el `CHECKPOINT`** de la refine session, no de la existencia
307
307
  ## Heredan este chasis
308
308
 
309
309
  - `plan-new-loop` — mismo motor; deltas: plan rico + gap taxonomy de plan.
310
+ - `plan-refine-loop` — mismo motor; deltas: refina el **plan** in place (auxiliar, no obligatorio), reusando la gap taxonomy + coherence gate de `plan-new-loop`. Es a `plan-new` lo que este chasis (`spec-refine`) es a `spec-new`.
310
311
  - `plan-exec-loop` — mismo motor; deltas: ejecución real (código/BD/git), **una sola session por run** (progreso por fase en el plan-doc), sin auto-export.
311
312
  - `quick-loop` — mismo motor (mínimo); hereda además git/BD/no-export de `plan-exec-loop`.