@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.
- package/dist/adapters/node-process.d.ts +12 -1
- package/dist/adapters/node-process.d.ts.map +1 -1
- package/dist/adapters/node-process.js +159 -7
- package/dist/adapters/node-process.js.map +1 -1
- package/dist/application/process-registry-service.d.ts +2 -0
- package/dist/application/process-registry-service.d.ts.map +1 -1
- package/dist/application/process-registry-service.js.map +1 -1
- package/dist/application/source-launch-service.d.ts +4 -1
- package/dist/application/source-launch-service.d.ts.map +1 -1
- package/dist/application/source-launch-service.js +12 -6
- package/dist/application/source-launch-service.js.map +1 -1
- package/dist/application/terminal-launch.d.ts +72 -0
- package/dist/application/terminal-launch.d.ts.map +1 -0
- package/dist/application/terminal-launch.js +114 -0
- package/dist/application/terminal-launch.js.map +1 -0
- package/dist/cli/tui/components/process-list.d.ts +3 -2
- package/dist/cli/tui/components/process-list.d.ts.map +1 -1
- package/dist/cli/tui/components/process-list.js +10 -4
- package/dist/cli/tui/components/process-list.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +4 -3
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +12 -4
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/ports/process.d.ts +25 -0
- package/dist/ports/process.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/w/README.md +5 -5
- package/skills/w/SKILL.md +9 -8
- package/skills/w/commands/README.md +12 -6
- package/skills/w/commands/plan-refine.md +53 -0
- package/skills/w/loops/README.md +14 -9
- package/skills/w/loops/plan-exec-loop/SKILL.md +1 -1
- package/skills/w/loops/plan-new-loop/SKILL.md +2 -0
- package/skills/w/loops/plan-refine-loop/SKILL.md +94 -0
- package/skills/w/loops/spec-refine-loop/SKILL.md +1 -0
package/skills/w/loops/README.md
CHANGED
|
@@ -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
|
|
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
|
|
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 **
|
|
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
|
|
89
|
-
├── plan-
|
|
90
|
-
│
|
|
91
|
-
|
|
92
|
-
|
|
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`.
|