@tacuchi/agent-workflow-cli 12.4.0 → 12.5.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/application/humanize-es.d.ts +18 -0
- package/dist/application/humanize-es.d.ts.map +1 -0
- package/dist/application/humanize-es.js +71 -0
- package/dist/application/humanize-es.js.map +1 -0
- package/dist/application/session-close-service.d.ts.map +1 -1
- package/dist/application/session-close-service.js +4 -1
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/status-service.d.ts +74 -0
- package/dist/application/status-service.d.ts.map +1 -0
- package/dist/application/status-service.js +336 -0
- package/dist/application/status-service.js.map +1 -0
- package/dist/application/templates/session.d.ts +4 -2
- package/dist/application/templates/session.d.ts.map +1 -1
- package/dist/application/templates/session.js +15 -11
- package/dist/application/templates/session.js.map +1 -1
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +10 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/help-groups.js +1 -1
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/main.js +2 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +2 -1
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/README.md +2 -2
- package/skills/w/SKILL.md +6 -5
- package/skills/w/artifacts/README.md +8 -7
- package/skills/w/artifacts/artifacts-core/BACKLOG.md +5 -8
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +14 -13
- package/skills/w/artifacts/artifacts-core/SESSION.md +10 -11
- package/skills/w/artifacts/artifacts-core/TASKS.md +4 -4
- package/skills/w/artifacts/artifacts-dev/DECISION.md +3 -3
- package/skills/w/artifacts/artifacts-dev/TECHNICAL-NOTE.md +14 -14
- package/skills/w/artifacts/artifacts-research/ANALYSIS-FILE.md +14 -27
- package/skills/w/artifacts/artifacts-research/CONCLUSIONS.md +10 -13
- package/skills/w/commands/README.md +9 -6
- package/skills/w/commands/plan-exec.md +4 -4
- package/skills/w/commands/plan-new.md +8 -6
- package/skills/w/commands/spec-new.md +8 -7
- package/skills/w/commands/spec-refine.md +7 -5
- package/skills/w/commands/status.md +50 -0
- package/skills/w/loops/README.md +11 -10
- package/skills/w/loops/plan-exec-loop/SKILL.md +53 -53
- package/skills/w/loops/plan-new-loop/SKILL.md +28 -24
- package/skills/w/loops/quick-loop/SKILL.md +18 -17
- package/skills/w/loops/spec-refine-loop/SKILL.md +79 -63
- package/skills/w/roles/README.md +1 -1
- package/skills/w/roles/research/SKILL.md +21 -81
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> This is the **bundle README** for the `/w:` slash-command namespace. Every command listed here is something the **user** invokes directly.
|
|
4
4
|
> Related layers: [`../loops/`](../loops/) (Layer 2, AI-driven) · artifacts live in `.workflow/sessions/` (Layer 3) · permanent deliverables in `docs/`.
|
|
5
5
|
>
|
|
6
|
-
> **Namespace:** all commands are under `w:` (`w` = *workflow*): `/w:spec-new`, `/w:spec-refine`, `/w:plan-new`, `/w:plan-exec`, `/w:quick`, `/w:workspace-init`, `/w:export-*`.
|
|
6
|
+
> **Namespace:** all commands are under `w:` (`w` = *workflow*): `/w:spec-new`, `/w:spec-refine`, `/w:plan-new`, `/w:plan-exec`, `/w:quick`, `/w:workspace-init`, `/w:status` (transversal), `/w:export-*`.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -50,20 +50,22 @@
|
|
|
50
50
|
|
|
51
51
|
> **Intentional asymmetry:** in SPEC, `spec-new` generates the draft in a **single pass** (no loop) and the loop is in `spec-refine`. In PLANIFICATION, **both** commands start loops. Total: **5 flow commands / 4 loops**.
|
|
52
52
|
|
|
53
|
+
> **Transversal (no flow):** [`/w:status`](status.md) is a read-only dashboard of the whole workspace — what's done / pending / discarded, with friendly Spanish dates. It leans on `aw status`, writes nothing, and belongs to no flow.
|
|
54
|
+
|
|
53
55
|
## Pipeline
|
|
54
56
|
|
|
55
57
|
```mermaid
|
|
56
58
|
flowchart LR
|
|
57
59
|
prompt(["user prompt"]) --> sn["/w:spec-new"]
|
|
58
|
-
sn -->|generates| spec["docs/specs/NNN-spec
|
|
60
|
+
sn -->|generates| spec["docs/specs/NNN-spec-<slug>.md"]
|
|
59
61
|
spec -.->|optional manual edit| spec
|
|
60
62
|
spec --> sr["/w:spec-refine"]
|
|
61
63
|
sr -->|starts| srl(["spec-refine-loop"])
|
|
62
|
-
srl -->|
|
|
64
|
+
srl -->|refines IN PLACE| spec
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
spec --> pn["/w:plan-new"]
|
|
65
67
|
pn -->|starts| pnl(["plan-new-loop"])
|
|
66
|
-
pnl -->|generates| plan["docs/plans/PPP-plan
|
|
68
|
+
pnl -->|generates| plan["docs/plans/PPP-plan-<slug>.md"]
|
|
67
69
|
|
|
68
70
|
plan --> pe["/w:plan-exec"]
|
|
69
71
|
pe -->|starts| pel(["plan-exec-loop"])
|
|
@@ -98,7 +100,7 @@ Each `<command>.md` in this bundle uses this frontmatter + body structure:
|
|
|
98
100
|
3. **Spec and plan are documents** (`docs/`), not artifacts.
|
|
99
101
|
4. **DB scripts-only**: AI **never executes DML/DDL**; migrations live in `SCRIPTS.sql` (type B) and are delivered via `export-scripts`. Only read-only queries via MCP.
|
|
100
102
|
5. **Git-safe**: verify branch before editing; **propose** commits by source; never `push`/`--amend`/`--no-verify`.
|
|
101
|
-
6. **All loops**: gap-driven convergent · `AskUserQuestion` with ≤3 content tabs + 1 `flow` tab (`Compactar`/`Cerrar`) always · compact/resume · `
|
|
103
|
+
6. **All loops**: gap-driven convergent · one session per run (research inline) · `AskUserQuestion` with ≤3 content tabs + 1 `flow` tab (`Compactar`/`Cerrar`) always · compact/resume · artifacts as a live log (`CHECKPOINT` always; `BACKLOG` only when deferring).
|
|
102
104
|
|
|
103
105
|
## Index
|
|
104
106
|
|
|
@@ -110,6 +112,7 @@ Each `<command>.md` in this bundle uses this frontmatter + body structure:
|
|
|
110
112
|
| `plan-new` | [`plan-new.md`](plan-new.md) | starts `plan-new-loop` |
|
|
111
113
|
| `plan-exec` | [`plan-exec.md`](plan-exec.md) | starts `plan-exec-loop` |
|
|
112
114
|
| `quick` | [`quick.md`](quick.md) | starts `quick-loop` |
|
|
115
|
+
| `status` | [`status.md`](status.md) | single-pass, read-only (transversal) |
|
|
113
116
|
| `export-scripts` | [`export-scripts.md`](export-scripts.md) | single-pass, read-only |
|
|
114
117
|
| `export-manuals` | [`export-manuals.md`](export-manuals.md) | single-pass, read-only |
|
|
115
118
|
| `export-diagrams` | [`export-diagrams.md`](export-diagrams.md) | single-pass, read-only |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Inicia o retoma el loop de ejecución (plan-exec-loop) sobre un plan existente. Aquí ocurre el trabajo real: edición de código, scripts SQL propuestos, herramientas creadas. Git-safe.
|
|
3
|
-
argument-hint: <docs/plans/PPP-plan
|
|
3
|
+
argument-hint: <docs/plans/PPP-plan-<slug>.md>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
6
6
|
"Bash",
|
|
@@ -12,7 +12,7 @@ allowed-tools:
|
|
|
12
12
|
|
|
13
13
|
# plan-exec — trampolín al loop de ejecución
|
|
14
14
|
|
|
15
|
-
Arranca o retoma `plan-exec-loop` (Layer 2), que ejecuta el trabajo real fase por fase. El plan (`docs/plans/PPP-plan
|
|
15
|
+
Arranca o retoma `plan-exec-loop` (Layer 2), que ejecuta el trabajo real fase por fase. El plan (`docs/plans/PPP-plan-<slug>.md`) es un documento vivo que el loop mantiene actualizado (estado de fases y tareas).
|
|
16
16
|
|
|
17
17
|
## Ejecutar el loop
|
|
18
18
|
|
|
@@ -25,8 +25,8 @@ Arranca o retoma `plan-exec-loop` (Layer 2), que ejecuta el trabajo real fase po
|
|
|
25
25
|
|
|
26
26
|
## Qué hace el loop (resumen)
|
|
27
27
|
|
|
28
|
-
- Lee y actualiza `docs/plans/PPP-plan
|
|
29
|
-
- Edita código en las fuentes del workspace (una sesión por fase).
|
|
28
|
+
- Lee y actualiza `docs/plans/PPP-plan-<slug>.md` (living doc: estado de fases/tareas).
|
|
29
|
+
- Edita código en las fuentes del workspace (una sola sesión de ejecución para el run; la ejecución sigue siendo fase por fase, solo que no hay sesión por fase).
|
|
30
30
|
- Escribe herramientas/utilidades reutilizables en `docs/tools/`.
|
|
31
31
|
- Propone commits por fuente (git-safe: verifica rama, propone, nunca push/--amend/--no-verify).
|
|
32
32
|
- Genera artefactos de sesión (`DECISION`, `SCRIPTS.sql`) en `.workflow/sessions/`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Inicia o retoma el loop de planificación (plan-new-loop) a partir de un spec
|
|
3
|
-
argument-hint: <docs/specs/NNN-spec
|
|
2
|
+
description: Inicia o retoma el loop de planificación (plan-new-loop) a partir de un spec. Convierte el "qué" (spec) en el "cómo" (plan). Input ideal: docs/specs/NNN-spec-<slug>.md ya refinado.
|
|
3
|
+
argument-hint: <docs/specs/NNN-spec-<slug>.md | prompt>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
6
6
|
"Bash",
|
|
@@ -16,12 +16,14 @@ Puente SPEC → PLANIFICATION. Convierte el "qué" (spec refinado) en el "cómo"
|
|
|
16
16
|
|
|
17
17
|
## Resolución de input
|
|
18
18
|
|
|
19
|
-
El skill evalúa `$ARGUMENTS
|
|
19
|
+
El skill evalúa `$ARGUMENTS` (los specs viven in place — `docs/specs/NNN-spec-<slug>.md`; localizar vía glob `docs/specs/NNN-spec-*.md` o la ruta exacta):
|
|
20
20
|
|
|
21
|
-
1.
|
|
22
|
-
2.
|
|
21
|
+
1. **Spec refinado** (`docs/specs/NNN-spec-<slug>.md` que **ya tiene** `## Refinement decisions` / `## Q&A traceability`) → ideal. Procede directamente a `plan-new-loop`.
|
|
22
|
+
2. **Spec borrador** (mismo archivo, pero **sin** esas dos secciones) → **soft-suggest** correr `/w:spec-refine` primero; planificar sobre un spec sólido produce mejores planes (el usuario puede proceder igual).
|
|
23
23
|
3. **prompt** (sin spec referenciado) → propone usar el flujo SPEC; **por default lanza `/w:spec-new`** con ese prompt para crear el borrador, y desde ahí continúa el flujo natural.
|
|
24
24
|
|
|
25
|
+
> **Refinado vs borrador** se distingue por la **presencia** de `## Refinement decisions` / `## Q&A traceability` en el spec, no por el nombre del archivo (ya no hay `-refined`).
|
|
26
|
+
|
|
25
27
|
## Ejecutar el loop
|
|
26
28
|
|
|
27
29
|
`plan-new-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
|
|
@@ -33,7 +35,7 @@ El skill evalúa `$ARGUMENTS`:
|
|
|
33
35
|
|
|
34
36
|
## Notas de numeración
|
|
35
37
|
|
|
36
|
-
El plan
|
|
38
|
+
El plan se nombra `docs/plans/PPP-plan-<slug>.md`. El CLI solo devuelve el número `PPP`; el loop arma el nombre completo (slug = kebab-case corto del Requirement: `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars). **No hereda el `NNN` del spec**. El vínculo al spec se establece por referencia (`## Origin` / "Derivado de") en el plan, no por número.
|
|
37
39
|
|
|
38
40
|
## Plan mode
|
|
39
41
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Genera un borrador de especificación (docs/specs/NNN-spec
|
|
2
|
+
description: Genera un borrador de especificación (docs/specs/NNN-spec-<slug>.md) a partir de un prompt, en una sola pasada. Paso 1 del flujo SPEC; no arranca loop.
|
|
3
3
|
argument-hint: <prompt con el requerimiento o idea>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
@@ -11,7 +11,7 @@ allowed-tools:
|
|
|
11
11
|
|
|
12
12
|
# spec-new — borrador de especificación (single-pass)
|
|
13
13
|
|
|
14
|
-
Genera `docs/specs/NNN-spec
|
|
14
|
+
Genera `docs/specs/NNN-spec-<slug>.md` en una sola pasada a partir del prompt en `$ARGUMENTS`. No arranca loop.
|
|
15
15
|
|
|
16
16
|
> ## ⛔ Single-pass — SIN investigación (regla dura)
|
|
17
17
|
>
|
|
@@ -23,11 +23,12 @@ Genera `docs/specs/NNN-spec.md` en una sola pasada a partir del prompt en `$ARGU
|
|
|
23
23
|
>
|
|
24
24
|
> La investigación a profundidad (cerrar gaps, mapear código, consultar BD, research autónomo) es trabajo de **`spec-refine`**, no de aquí.
|
|
25
25
|
|
|
26
|
-
1. Ejecutar `aw next-number docs/specs` para obtener `NNN` (única tool de shell necesaria).
|
|
27
|
-
2.
|
|
28
|
-
3.
|
|
26
|
+
1. Ejecutar `aw next-number docs/specs` para obtener `NNN` (única tool de shell necesaria). El CLI solo devuelve el número; el slug lo arma este comando.
|
|
27
|
+
2. Derivar el `<slug>`: kebab-case corto del Requirement — solo `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars.
|
|
28
|
+
3. Crear `docs/specs/NNN-spec-<slug>.md` parafraseando `$ARGUMENTS` en el esquema de borrador (ver abajo). Lectura del repo: opcional y mínima (p. ej. un archivo que el usuario citó) — nunca un barrido ni research.
|
|
29
|
+
4. Mostrar el archivo generado y el próximo paso sugerido (`/w:spec-refine docs/specs/NNN-spec-<slug>.md`).
|
|
29
30
|
|
|
30
|
-
## Esquema del borrador (`NNN-spec
|
|
31
|
+
## Esquema del borrador (`NNN-spec-<slug>.md`)
|
|
31
32
|
|
|
32
33
|
```markdown
|
|
33
34
|
# Spec NNN — <slug>
|
|
@@ -61,7 +62,7 @@ Supuestos asumidos.
|
|
|
61
62
|
- `Scope` siempre lleva `Out` (qué queda fuera).
|
|
62
63
|
- Los criterios de aceptación deben ser verificables (testeables).
|
|
63
64
|
- Si hay UI involucrada, mencionarlo en `Requirement`/`Context`; el spec UI se autora en `spec-refine` (via capacidad `ui-design`).
|
|
64
|
-
- Alternativa equivalente: el usuario crea el borrador a mano. Ambos caminos producen el mismo `docs/specs/NNN-spec
|
|
65
|
+
- Alternativa equivalente: el usuario crea el borrador a mano. Ambos caminos producen el mismo `docs/specs/NNN-spec-<slug>.md`.
|
|
65
66
|
|
|
66
67
|
## Plan mode
|
|
67
68
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Inicia o retoma el loop de refinamiento de una especificación (spec-refine-loop). Input: docs/specs/NNN-spec
|
|
3
|
-
argument-hint: <docs/specs/NNN-spec
|
|
2
|
+
description: Inicia o retoma el loop de refinamiento de una especificación (spec-refine-loop). Input: docs/specs/NNN-spec-<slug>.md (borrador). Actualiza docs/specs/NNN-spec-<slug>.md in place.
|
|
3
|
+
argument-hint: <docs/specs/NNN-spec-<slug>.md>
|
|
4
4
|
allowed-tools:
|
|
5
5
|
[
|
|
6
6
|
"Bash",
|
|
@@ -25,12 +25,14 @@ Este comando no refina el spec él mismo: delega al loop `spec-refine-loop` (Lay
|
|
|
25
25
|
|
|
26
26
|
## Resolución de estado (resumable)
|
|
27
27
|
|
|
28
|
-
El skill detecta el estado previo antes de arrancar:
|
|
28
|
+
El skill detecta el estado previo antes de arrancar, **keyando off el `CHECKPOINT`** (no la existencia de un archivo "refined"):
|
|
29
29
|
|
|
30
30
|
1. Busca la sesión de refinamiento del spec en `.workflow/sessions/` y su `CHECKPOINT.md`.
|
|
31
31
|
2. **En curso** (existe CHECKPOINT) → continúa desde el avance previo (gaps resueltos, Q&A).
|
|
32
|
-
3. **Sin avance** (sin CHECKPOINT
|
|
33
|
-
4. **Ya
|
|
32
|
+
3. **Sin avance** (sin CHECKPOINT y el spec **no** tiene `## Refinement decisions`/`## Q&A traceability`) → arranca desde cero leyendo el spec (`NNN-spec*.md`).
|
|
33
|
+
4. **Ya refinado** (sin CHECKPOINT abierto pero el spec **ya tiene** `## Refinement decisions`/`## Q&A traceability`) → re-refinamiento incremental leyendo el **spec mismo**; al `Guardar`, edita in place con confirmación.
|
|
34
|
+
|
|
35
|
+
> **Compat (legacy):** el glob `NNN-spec*.md` también captura specs viejos `NNN-spec.md` / `NNN-spec-refined.md`. Re-correr spec-refine los edita in place de ahí en adelante.
|
|
34
36
|
|
|
35
37
|
## Plan mode
|
|
36
38
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Dashboard read-only del workspace — qué se hizo / qué falta / qué se descartó, con fechas en español (hace 2 días, ayer en la mañana). Se apoya en `aw status`. Comando transversal (no es un flow); no escribe nada.
|
|
3
|
+
argument-hint: (sin argumentos)
|
|
4
|
+
allowed-tools:
|
|
5
|
+
[
|
|
6
|
+
"Bash",
|
|
7
|
+
"Read",
|
|
8
|
+
]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# status — estado del workspace (read-only)
|
|
12
|
+
|
|
13
|
+
Muestra, simple y directo, el estado del workspace agrupado en **Hecho / Falta / Descartó**. Single-pass, read-only: no abre loop, no crea sesiones, no escribe en `docs/` ni en `.workflow/`. Comando **transversal** (no pertenece a ningún flow).
|
|
14
|
+
|
|
15
|
+
## Ejecutar
|
|
16
|
+
|
|
17
|
+
1. Corré `aw status` (devuelve JSON; se apoya en `status-service`).
|
|
18
|
+
2. Renderizá un resumen legible a partir del JSON — **no** muestres el JSON crudo. Usá el campo `relative` tal cual (ya viene humanizado en español). Encabezá con `workspace.name`.
|
|
19
|
+
3. Agrupá en tres bloques:
|
|
20
|
+
- **▸ HECHO** — specs con `refined: true`; plans con su progreso (`tasks_done`/`tasks_total`, `progress_pct`); sesiones `closed`.
|
|
21
|
+
- **▸ FALTA** — sesiones `active`; plans con tareas pendientes (`tasks_total − tasks_done`); specs con `open_questions > 0`.
|
|
22
|
+
- **▸ DESCARTÓ** — cada item de `discarded[]` (`kind: deferred` = diferido en BACKLOG; `kind: excluded` = excluido en CHECKPOINT), con su `text`.
|
|
23
|
+
4. Cada línea termina con su fecha relativa tras ` · ` (ej. `· ayer en la mañana`). Si una sección queda vacía, mostrá `— (nada)`. No inventes datos que no estén en el JSON.
|
|
24
|
+
5. Si `workspace.initialized` es `false` y todo está vacío → decí "No es un workspace de agent-workflow (no hay `.workflow/`)" y sugerí `/w:workspace-init`.
|
|
25
|
+
|
|
26
|
+
Formato sugerido (texto plano):
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Workspace: <name>
|
|
30
|
+
|
|
31
|
+
▸ HECHO
|
|
32
|
+
• plan <slug> — <done>/<total> tareas (<pct>%) · <relative>
|
|
33
|
+
• spec <slug> — refinado · <relative>
|
|
34
|
+
• <folder> (<type>) — cerrada · <relative>
|
|
35
|
+
|
|
36
|
+
▸ FALTA
|
|
37
|
+
• <folder> (<type>) — activa · <relative>
|
|
38
|
+
• plan <slug> — <pendientes> tareas pendientes
|
|
39
|
+
• spec <slug> — <n> preguntas abiertas
|
|
40
|
+
|
|
41
|
+
▸ DESCARTÓ
|
|
42
|
+
• <text> (<kind>) · <relative>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Plan mode
|
|
46
|
+
Igual que en ejecución: corré `aw status` (read-only) y mostrá el resumen. No hay cambios que aplicar.
|
|
47
|
+
|
|
48
|
+
## Resources
|
|
49
|
+
- CLI: `aw status` (servicio `status-service`; fechas vía `humanize-es`)
|
|
50
|
+
- Design reference: `docs/referencias/workflow-commands/status.md`
|
package/skills/w/loops/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un
|
|
|
13
13
|
Propiedades comunes a **los 4 loops**:
|
|
14
14
|
|
|
15
15
|
1. **Gap-driven convergente** — 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.
|
|
16
|
-
2. **
|
|
16
|
+
2. **Una sola session por run + research inline** — el loop crea **una** session en `.workflow/sessions/` (la dueña del run) y maneja **sus** artefactos. La **investigación es inline**: una actividad dentro de esa misma session que escribe `ANALYSIS-FILE`/`CONCLUSIONS` (+ `SCRIPTS.sql` read-only si consulta BD) en su propia carpeta — ya no es una session aparte. **El usuario nunca crea sessions.** Los artefactos son el **registro vivo** del run — **ciclo artifact-first**: sembrar `CHECKPOINT.Pending/Next` (la intención) antes de ejecutar, llevar a `Completed`/DECISION después; CHECKPOINT actualizado en cada límite de gap/fase, BACKLOG solo si difiere. El spec/plan es la base guía.
|
|
17
17
|
3. **AskUserQuestion con dos tipos de tab** (límite host: 4 preguntas/llamada):
|
|
18
18
|
- **tab(s) de contenido** (≤3) — la(s) pregunta(s) real(es) del momento (resolver una duda, elegir MCP, o en convergencia: `Guardar` / `Preguntar algo más`).
|
|
19
19
|
- **tab `flow`** (1, SIEMPRE presente) — control de ciclo de vida por un canal lateral. Así el contenido lo maneja la IA y el ciclo de vida lo dirige el humano.
|
|
@@ -26,15 +26,15 @@ El tab `flow` es **fijo**: `Compactar` / `Cerrar`, presente en los 4 loops. Resp
|
|
|
26
26
|
| Option | What it does |
|
|
27
27
|
|---|---|
|
|
28
28
|
| `Compactar` | Escribe `CHECKPOINT` (session dueña del run) + dispara `/compact` del host y reanuda sin perder el hilo. |
|
|
29
|
-
| `Cerrar` | `finalize`: persiste lo pendiente (`CHECKPOINT`
|
|
29
|
+
| `Cerrar` | `finalize`: persiste lo pendiente (`CHECKPOINT` siempre; `BACKLOG` solo si hay algo diferido), cierra la session y termina el loop. |
|
|
30
30
|
|
|
31
31
|
## Loops and their flow
|
|
32
32
|
|
|
33
33
|
| Loop (`name:`) | Flow | Started by | Reads | Writes |
|
|
34
34
|
|---|---|---|---|---|
|
|
35
|
-
| [`spec-refine-loop`](spec-refine-loop/SKILL.md) | SPEC | `/w:spec-refine` | `docs/specs/NNN-spec
|
|
36
|
-
| [`plan-new-loop`](plan-new-loop/SKILL.md) | PLANIFICATION | `/w:plan-new` | `docs/specs/NNN-spec
|
|
37
|
-
| [`plan-exec-loop`](plan-exec-loop/SKILL.md) | PLANIFICATION | `/w:plan-exec` | `docs/plans/PPP-plan
|
|
35
|
+
| [`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) |
|
|
36
|
+
| [`plan-new-loop`](plan-new-loop/SKILL.md) | PLANIFICATION | `/w:plan-new` | `docs/specs/NNN-spec-*.md` | `docs/plans/PPP-plan-<slug>.md` |
|
|
37
|
+
| [`plan-exec-loop`](plan-exec-loop/SKILL.md) | PLANIFICATION | `/w:plan-exec` | `docs/plans/PPP-plan-*.md` | `docs/plans/PPP-plan-<slug>.md` (update) + `docs/tools`; resto vía `export-*` |
|
|
38
38
|
| [`quick-loop`](quick-loop/SKILL.md) | QUICK | `/w:quick` | — (prompt) | edita código + session ligera; **no** `docs/` |
|
|
39
39
|
|
|
40
40
|
> `/w:spec-new` no tiene loop (es single-pass). Por eso hay **5 comandos / 4 loops**.
|
|
@@ -80,12 +80,13 @@ Los **heirs** (`plan-new-loop`, `plan-exec-loop`, `quick-loop`) usan `## Inherit
|
|
|
80
80
|
## Chassis / heirs
|
|
81
81
|
|
|
82
82
|
```
|
|
83
|
-
spec-refine-loop ── CHASIS (patrón de referencia: motor gap-driven,
|
|
84
|
-
│ AskUserQuestion + tab flow, research autónomo + regla BD,
|
|
85
|
-
│ compact/resume,
|
|
83
|
+
spec-refine-loop ── CHASIS (patrón de referencia: motor gap-driven, sesión única,
|
|
84
|
+
│ AskUserQuestion + tab flow, research autónomo INLINE + regla BD,
|
|
85
|
+
│ compact/resume, artefactos como log vivo: CHECKPOINT siempre,
|
|
86
|
+
│ BACKLOG solo si difiere)
|
|
86
87
|
├── plan-new-loop (heir) → deltas: plan rico, gap taxonomy de plan
|
|
87
88
|
├── plan-exec-loop (heir) → deltas: ejecución real (código/BD/git),
|
|
88
|
-
│ session por
|
|
89
|
+
│ una sola session por run, sin auto-export
|
|
89
90
|
└── quick-loop (heir) → deltas: ceremonia mínima, 1 session,
|
|
90
91
|
hereda git/BD/no-export de plan-exec
|
|
91
92
|
```
|
|
@@ -103,7 +104,7 @@ Los loops componen **capacidades por su rol**, no skills concretas; la skill que
|
|
|
103
104
|
| `git` | `git` | `plan-exec-loop` · `quick-loop` |
|
|
104
105
|
| `coding-standards` | `coding-standards` | `plan-exec-loop` · `quick-loop` |
|
|
105
106
|
| `writing` | `writing` | todos los loops |
|
|
106
|
-
| `research` | `research` | todos los loops (research
|
|
107
|
+
| `research` | `research` | todos los loops (research inline) |
|
|
107
108
|
| `testing` | `testing` | `plan-exec-loop` · `quick-loop` |
|
|
108
109
|
| `tools` | `tools` | `plan-exec-loop` |
|
|
109
110
|
| `overview` | `workflow` | cualquiera (orientación) |
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-exec-loop
|
|
3
3
|
description: >-
|
|
4
|
-
Ejecuta un plan de implementación (docs/plans/PPP-plan
|
|
5
|
-
lee y actualiza fase a fase mientras edita el código real, gestiona BD
|
|
6
|
-
Heir del chasis spec-refine-loop: reusa su motor gap-driven (aplicado
|
|
7
|
-
de una tarea ante decisiones/dudas no obvias), research
|
|
8
|
-
read-only, AskUserQuestion con ≤3 tabs de contenido + 1 tab flow
|
|
9
|
-
(Compactar/Cerrar) siempre, y
|
|
10
|
-
|
|
11
|
-
seguro (verifica rama esperada antes
|
|
12
|
-
nunca push/--amend/--no-verify); la IA
|
|
13
|
-
redactan en SCRIPTS.sql, solo read-only
|
|
14
|
-
final (lo dependiente de migración no
|
|
15
|
-
y SIN auto-export (escribe solo
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
un plan ya generado.
|
|
4
|
+
Ejecuta un plan de implementación (docs/plans/PPP-plan-<slug>.md) como living
|
|
5
|
+
doc: lo lee y actualiza fase a fase mientras edita el código real, gestiona BD
|
|
6
|
+
y git. Heir del chasis spec-refine-loop: reusa su motor gap-driven (aplicado
|
|
7
|
+
dentro de una tarea ante decisiones/dudas no obvias), research inline con
|
|
8
|
+
regla BD read-only, AskUserQuestion con ≤3 tabs de contenido + 1 tab flow
|
|
9
|
+
(Compactar/Cerrar) siempre, y artefactos como log vivo (CHECKPOINT siempre,
|
|
10
|
+
BACKLOG solo si difiere). Sus deltas: una sola session por run (resume vía
|
|
11
|
+
checkbox del plan-doc + CHECKPOINT); git seguro (verifica rama esperada antes
|
|
12
|
+
de editar, propone commits por fuente, nunca push/--amend/--no-verify); la IA
|
|
13
|
+
NUNCA ejecuta DML/DDL (migraciones se redactan en SCRIPTS.sql, solo read-only
|
|
14
|
+
se ejecuta); validación por fase y final (lo dependiente de migración no
|
|
15
|
+
aplicada se difiere como handoff a DBA); y SIN auto-export (escribe solo
|
|
16
|
+
docs/plans + docs/tools; el resto queda como artefacto de session para
|
|
17
|
+
export-*). Compone git, coding-standards, testing, tools y sql. Lo arranca
|
|
18
|
+
/w:plan-exec y es reanudable. Invocar para implementar un plan ya generado.
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
# plan-exec-loop
|
|
22
22
|
|
|
23
|
-
> **Heir** del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md). Aquí los **deltas de ejecución** — el trabajo real: código, BD, git. El motor (gap-driven, research
|
|
23
|
+
> **Heir** del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md). Aquí los **deltas de ejecución** — el trabajo real: código, BD, git. El motor (gap-driven, research inline, AskUserQuestion + tab `flow`, compact/resume, artefactos como log vivo) vive en el chasis.
|
|
24
24
|
|
|
25
25
|
## Flow
|
|
26
26
|
PLANIFICATION
|
|
@@ -29,15 +29,15 @@ PLANIFICATION
|
|
|
29
29
|
2 — la IA lo corre entero.
|
|
30
30
|
|
|
31
31
|
## Started by
|
|
32
|
-
`/w:plan-exec` — **reanudable** (mismo mecanismo
|
|
32
|
+
`/w:plan-exec` — **reanudable** (mismo mecanismo del chasis; aquí el resume keya off el checkbox del plan-doc + CHECKPOINT, ver Delta 1).
|
|
33
33
|
|
|
34
34
|
## Reads
|
|
35
|
-
`docs/plans/PPP-plan
|
|
35
|
+
`docs/plans/PPP-plan-<slug>.md` (localizar vía glob `docs/plans/PPP-plan-*.md` o la ruta exacta de `$ARGUMENTS`).
|
|
36
36
|
|
|
37
37
|
## Writes
|
|
38
|
-
- `docs/plans/PPP-plan
|
|
38
|
+
- `docs/plans/PPP-plan-<slug>.md` (**read/update**, living doc: estado de fases/tareas, `Open questions`).
|
|
39
39
|
- `docs/tools/`: herramientas/utilidades reusables que la IA **crea** durante la ejecución (salida directa, no export).
|
|
40
|
-
- Artefactos de exec session en `.workflow/sessions/` (`SCRIPTS.sql`, `DECISION`, …).
|
|
40
|
+
- Artefactos de la plan-exec session en `.workflow/sessions/` (`SCRIPTS.sql`, `DECISION`, `ANALYSIS-FILE`/`CONCLUSIONS`, …).
|
|
41
41
|
- **NO** escribe en otras carpetas `docs/` ni **gradúa/exporta** otros artefactos automáticamente (ver *Boundary*).
|
|
42
42
|
|
|
43
43
|
## Boundary — sin auto-export (hard rule)
|
|
@@ -48,10 +48,10 @@ Este loop **nunca gradúa/promueve artefactos** a `docs/`. Las únicas carpetas
|
|
|
48
48
|
|
|
49
49
|
Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
50
50
|
|
|
51
|
-
- Motor **gap-driven** (aplica *dentro de una tarea* ante una decisión/duda no obvia: research
|
|
51
|
+
- Motor **gap-driven** (aplica *dentro de una tarea* ante una decisión/duda no obvia: research inline ó AskUserQuestion).
|
|
52
52
|
- **AskUserQuestion**: ≤3 contenido + 1 `flow` (`Compactar`/`Cerrar`) siempre.
|
|
53
|
-
- **
|
|
54
|
-
- **Compact/resume**;
|
|
53
|
+
- **Research INLINE** + **regla BD** read-only (pregunta MCP si >1 sin default → `SCRIPTS.sql` → ejecuta read-only) + research **inconclusa** (degrada/difiere, límite `MAX`).
|
|
54
|
+
- **Compact/resume**; **artefactos como log vivo** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
55
55
|
|
|
56
56
|
## Composes
|
|
57
57
|
|
|
@@ -59,25 +59,26 @@ Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
|
59
59
|
|
|
60
60
|
## Internal sessions (managed)
|
|
61
61
|
|
|
62
|
-
- **
|
|
63
|
-
- **exec session por fase** descriptor `plan-exec-phase-<N>` → `NNN-plan-exec-phase-<N>`: `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (Type = `exec`).
|
|
64
|
-
- **research session** descriptor `plan-exec-research-*` → `NNN-plan-exec-research-*`: on-demand (run-and-close), igual que el chasis.
|
|
62
|
+
- **plan-exec session** descriptor `plan-exec` → `NNN-plan-exec`: **una sola session por run** (Type = `exec`). Dueña del run; posee `SESSION` + `CHECKPOINT` + `DECISION` + `SCRIPTS.sql` (+ `BACKLOG` solo si difiere). La investigación es **inline** dentro de esta session: produce `ANALYSIS-FILE`/`CONCLUSIONS` (+ `SCRIPTS.sql` read-only si consulta BD) en su propia carpeta.
|
|
65
63
|
|
|
66
|
-
> **Numeración**: el caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial sobre `.workflow/sessions/` (ver chasis). No reinicia por tipo
|
|
64
|
+
> **Numeración**: el caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial sobre `.workflow/sessions/` (ver chasis). No reinicia por tipo.
|
|
67
65
|
|
|
68
|
-
|
|
66
|
+
> **Compat (legacy):** workspaces viejos pueden tener sessions `plan-exec-phase-*` (una por fase) y `*-research-*` — son históricas y se dejan tal cual; los runs nuevos usan una sola session.
|
|
69
67
|
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
## Delta 1 — One session per run; per-phase progress in the plan-doc
|
|
69
|
+
|
|
70
|
+
- Recorre las `Phases` del plan en orden (respeta deps) **dentro de la única session del run** (no hay session-por-fase).
|
|
71
|
+
- El **avance por fase vive en el plan-doc** (`- [x]`) y en el `CHECKPOINT` único (Completed/Pending/Next): **artifact-first** — `CHECKPOINT.Next` se fija a la fase inminente **antes** de iniciarla; el checkbox `- [x]` del plan-doc se voltea **después** de completar la tarea.
|
|
72
72
|
- Ejecuta las `Tasks` de la fase; **salta** las ya marcadas `- [x]` en el plan (el plan-doc es la fuente de verdad por tarea). Marca `- [x]` + estado **en el plan** (living doc; no en un `TASKS` aparte).
|
|
73
|
-
-
|
|
73
|
+
- En **cada límite de fase**: actualiza el `CHECKPOINT` (Completed += Phase N, Next = Phase N+1) y propone commits.
|
|
74
|
+
- Registra `DECISION` solo lo **no obvio**, **a medida que se toma** (los `DECISION` por fase se acumulan en el ÚNICO `DECISION`, etiquetados por fase/tarea — ej. `Origin: T2 (F1)`).
|
|
74
75
|
|
|
75
76
|
## Delta 2 — Git policy: **rama segura + commits propuestos**
|
|
76
77
|
|
|
77
78
|
- **Antes de editar** archivos de una fuente: verifica rama actual = rama esperada de esa fuente (estilo `branch-check`). Si no coincide → **pausa y resuelve con el humano**; nunca `stash`/`reset --hard`/`checkout -- .`/`clean` sin confirmación por fuente.
|
|
78
79
|
- **Al cerrar una fase** (o al `Cerrar`): **propone commits por fuente** (propose-then-execute, aprobar antes); nunca `push`/`--amend`/`--no-verify`.
|
|
79
80
|
- **Commit rechazado**: los cambios **quedan en el working tree** (no se revierten). Se permite reproponer / editar mensaje. Se registra en `CHECKPOINT` + `BACKLOG` que la fase quedó **sin commitear** (reanudable).
|
|
80
|
-
- **Precondición entre fases**: `branch-check` valida *identidad* de rama, **no** *limpieza* del working tree. Antes de iniciar la
|
|
81
|
+
- **Precondición entre fases**: `branch-check` valida *identidad* de rama, **no** *limpieza* del working tree. Antes de iniciar la siguiente fase, el working tree de cada fuente debe estar **limpio** (committeado) o explícitamente **reconocido** como "cambios sin commitear de la fase N" — para no co-mezclar dos fases en un mismo commit.
|
|
81
82
|
|
|
82
83
|
## Delta 3 — DB policy: **la IA nunca ejecuta DML**
|
|
83
84
|
|
|
@@ -98,19 +99,19 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
|
|
|
98
99
|
|
|
99
100
|
- Una fase cierra **done** cuando sus tareas están `- [x]` y su validación pasó **o** quedó diferida (handoff de SQL). Estado posible: **"done — SQL pendiente de aplicar"**.
|
|
100
101
|
- Todas las fases done → `AskUserQuestion` final (contenido: `Marcar plan done` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`).
|
|
101
|
-
- **Sin export automático**: los artefactos (`SCRIPTS.sql`, `DECISION`, …) quedan en
|
|
102
|
+
- **Sin export automático**: los artefactos (`SCRIPTS.sql`, `DECISION`, …) quedan en la session. Promoverlos a `docs/` (scripts, manuals, …) es un paso aparte vía `export-*`.
|
|
102
103
|
|
|
103
104
|
## Sequence
|
|
104
105
|
|
|
105
106
|
```
|
|
106
|
-
plan-exec-loop(PPP-plan
|
|
107
|
-
|
|
108
|
-
plan = read(PPP-plan
|
|
107
|
+
plan-exec-loop(PPP-plan-<slug>.md):
|
|
108
|
+
session = create_or_resume("plan-exec") # UNA sola session por run; CLI antepone NNN global; CHECKPOINT, resume
|
|
109
|
+
plan = read(PPP-plan-<slug>.md)
|
|
109
110
|
para cada Phase en plan (en orden, respeta deps):
|
|
110
|
-
si Phase done: skip
|
|
111
|
-
|
|
111
|
+
si Phase done (todas sus Tasks - [x] en el plan): skip # resume vía checkbox del plan-doc
|
|
112
|
+
seed CHECKPOINT.Next = Phase N (Pending = sus Tasks) # ANTES de iniciar la fase: sembrar intención (artifact-first)
|
|
112
113
|
para cada Task de la Phase:
|
|
113
|
-
si Task - [x] en el plan: skip # resume intra-fase
|
|
114
|
+
si Task - [x] en el plan: skip # resume intra-fase por checkbox
|
|
114
115
|
verificar rama esperada por fuente (branch-check)
|
|
115
116
|
si no coincide → pausar + resolver con humano
|
|
116
117
|
ejecutar Task:
|
|
@@ -118,29 +119,28 @@ plan-exec-loop(PPP-plan.md):
|
|
|
118
119
|
si crea herramienta/utilidad reusable → docs/tools (salida directa)
|
|
119
120
|
si consulta BD read-only → SCRIPTS.sql + ejecutar read-only
|
|
120
121
|
si cambio BD (DDL/DML) → redactar en SCRIPTS.sql (artefacto session, NO ejecutar)
|
|
121
|
-
si decisión no obvia → DECISION
|
|
122
|
-
si duda/gap → research
|
|
123
|
-
marcar Task - [x] + estado EN EL PLAN
|
|
122
|
+
si decisión no obvia → DECISION (etiquetado por fase/tarea, en el ÚNICO DECISION)
|
|
123
|
+
si duda/gap → research inline ó AskUserQuestion # chasis
|
|
124
|
+
marcar Task - [x] + estado EN EL PLAN # DESPUÉS de completar la Task (el plan-doc es la fuente de verdad por tarea)
|
|
124
125
|
validación de la fase:
|
|
125
126
|
la que corre y falla → volver a la tarea
|
|
126
127
|
la dependiente de migración no aplicada → diferir (Open questions + BACKLOG)
|
|
128
|
+
update CHECKPOINT (Completed += Phase N, Next = Phase N+1) # DESPUÉS: Pending→Completed + Next = fase siguiente (ver ciclo artifact-first)
|
|
127
129
|
proponer commit(s) por fuente (aprobar antes) # nunca push/amend/--no-verify
|
|
128
130
|
si rechazado → cambios quedan; registrar "fase sin commitear"
|
|
129
131
|
precondición siguiente fase: working tree limpio o reconocido
|
|
130
|
-
es.close_and_report()
|
|
131
132
|
validación final (lo que se pueda; lo dependiente de SQL queda como handoff)
|
|
132
133
|
AskUserQuestion(contenido: [Marcar plan done, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
133
134
|
marcar plan done (o "done — SQL pendiente de aplicar")
|
|
134
|
-
# NO export: los artefactos quedan en
|
|
135
|
-
finalize: CHECKPOINT + BACKLOG + cerrar
|
|
135
|
+
# NO export: los artefactos quedan en la session; un export-* los promueve aparte
|
|
136
|
+
finalize: CHECKPOINT (+ BACKLOG si difiere) + cerrar session + reportar
|
|
136
137
|
```
|
|
137
138
|
|
|
138
139
|
```mermaid
|
|
139
140
|
flowchart TD
|
|
140
|
-
S["create_or_resume
|
|
141
|
+
S["create_or_resume plan-exec session (única)<br/>read PPP-plan-<slug>.md"] --> P{"¿más Phases<br/>(no done)?"}
|
|
141
142
|
P -->|no| V2["validación final<br/>(dep. de SQL → handoff)"]
|
|
142
|
-
P -->|sí|
|
|
143
|
-
ES --> T{"¿Task pendiente<br/>(no - [x])?"}
|
|
143
|
+
P -->|sí| T{"¿Task pendiente<br/>(no - [x])?"}
|
|
144
144
|
T -->|sí| G["branch-check por fuente"]
|
|
145
145
|
G -->|rama ok| DO["editar código · read-only→SCRIPTS.sql<br/>migración DDL/DML→SCRIPTS.sql (no ejecuta) · DECISION"]
|
|
146
146
|
G -->|rama ≠| PA["pausar + resolver con humano"]
|
|
@@ -148,16 +148,16 @@ flowchart TD
|
|
|
148
148
|
DO --> MK["marcar Task - [x] en el PLAN"]
|
|
149
149
|
MK --> T
|
|
150
150
|
T -->|no| VP["validación de fase<br/>(falla→tarea · dep. SQL→diferir)"]
|
|
151
|
-
VP -->
|
|
152
|
-
|
|
151
|
+
VP --> CK["update CHECKPOINT (Completed/Next)"]
|
|
152
|
+
CK --> CM["proponer commits por fuente"]
|
|
153
|
+
CM -->|aprobado| P
|
|
153
154
|
CM -->|rechazado| RJ["cambios quedan · registrar 'sin commitear'"]
|
|
154
|
-
RJ -->
|
|
155
|
-
CL --> P
|
|
155
|
+
RJ --> P
|
|
156
156
|
V2 --> FIN["AskUserQuestion[Marcar plan done · Preguntar más]<br/>plan done (sin auto-export)"]
|
|
157
157
|
```
|
|
158
158
|
|
|
159
159
|
## Convergence / exit
|
|
160
160
|
|
|
161
161
|
- Plan completo + validación OK (o diferida con handoff) → `Marcar plan done`.
|
|
162
|
-
- `Cerrar` (tab flow, en cualquier momento) → `finalize` persiste `CHECKPOINT`
|
|
162
|
+
- `Cerrar` (tab flow, en cualquier momento) → `finalize` persiste `CHECKPOINT` (y `BACKLOG` solo si quedó algo sin ejecutar / sin commitear / sin aplicar), cierra la session, reporta.
|
|
163
163
|
- La promoción de artefactos a `docs/` (vía `export-*`) es **siempre** un paso posterior y explícito, fuera de este loop.
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-new-loop
|
|
3
3
|
description: >-
|
|
4
|
-
Genera un plan de implementación rico (docs/plans/PPP-plan
|
|
5
|
-
spec
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
Genera un plan de implementación rico (docs/plans/PPP-plan-<slug>.md) a partir
|
|
5
|
+
de un spec (docs/specs/NNN-spec-<slug>.md). Heir del chasis spec-refine-loop:
|
|
6
|
+
reusa íntegro su motor gap-driven convergente, su única session por run,
|
|
7
|
+
research INLINE, AskUserQuestion con ≤3 tabs de contenido + 1 tab flow
|
|
8
|
+
(Compactar/Cerrar) siempre presente, research autónomo con regla BD read-only,
|
|
9
|
+
y artefactos como log vivo (CHECKPOINT siempre, BACKLOG solo si difiere). Sus
|
|
10
|
+
deltas: el plan absorbe inline el nivel TECHNICAL-NOTE
|
|
11
11
|
(Solution/Impacted/AS-IS/TO-BE/Validations…) + Phases/Tasks con estado vivo;
|
|
12
12
|
el research aquí mapea código/impacto (componentes FE/BE/BD, wiring AS-IS,
|
|
13
|
-
dependencias); y una gap taxonomy propia de planificación.
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
dependencias); y una gap taxonomy propia de planificación. Distingue spec
|
|
14
|
+
refinado de borrador por la presencia de Refinement decisions/Q&A traceability
|
|
15
|
+
(si faltan → soft-suggest correr spec-refine antes). Lo arranca el comando
|
|
16
|
+
/w:plan-new y es reanudable. Invocar cuando un spec deba convertirse en un plan
|
|
17
|
+
ejecutable antes de implementar.
|
|
16
18
|
---
|
|
17
19
|
|
|
18
20
|
# plan-new-loop
|
|
19
21
|
|
|
20
|
-
> **Heir** del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md). Aquí **solo** los deltas. El motor (gap-driven,
|
|
22
|
+
> **Heir** del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md). Aquí **solo** los deltas. El motor (gap-driven, sesión única, AskUserQuestion + tab `flow`, research inline + regla BD, compact/resume, artefactos como log vivo) vive en el chasis — no se repite.
|
|
21
23
|
|
|
22
24
|
## Flow
|
|
23
25
|
PLANIFICATION
|
|
@@ -26,33 +28,35 @@ PLANIFICATION
|
|
|
26
28
|
2 — la IA lo corre entero.
|
|
27
29
|
|
|
28
30
|
## Started by
|
|
29
|
-
`/w:plan-new` — **reanudable** (mismo mecanismo
|
|
31
|
+
`/w:plan-new` — **reanudable** (mismo mecanismo del chasis, keyado off CHECKPOINT).
|
|
30
32
|
|
|
31
33
|
## Reads
|
|
32
|
-
`docs/specs/NNN-spec-
|
|
34
|
+
`docs/specs/NNN-spec-*.md` (glob — localiza el spec por número; o la ruta exacta de `$ARGUMENTS`). **Refinado vs borrador** se distingue por la **presencia** de `## Refinement decisions` / `## Q&A traceability` en el spec: si faltan → **soft-suggest** correr `/w:spec-refine` primero (planificar sobre un spec sólido produce mejores planes), pero el usuario puede proceder.
|
|
33
35
|
|
|
34
36
|
## Writes
|
|
35
|
-
`docs/plans/PPP-plan
|
|
37
|
+
`docs/plans/PPP-plan-<slug>.md` (`generate`; **sobrescribe con confirmación** si existe). Solo escribe `docs/plans` — nunca otras carpetas `docs/` ni auto-export.
|
|
38
|
+
|
|
39
|
+
> **slug**: kebab-case corto derivado del Requirement del spec — solo `[a-z0-9-]`, ≤ ~5 palabras / ≤ 40 chars. El CLI solo devuelve el número `PPP`; el loop arma el nombre completo. Para localizar planes, glob `docs/plans/PPP-plan-*.md`.
|
|
36
40
|
|
|
37
41
|
## Inherits
|
|
38
42
|
|
|
39
43
|
Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
40
44
|
|
|
41
|
-
- Motor **gap-driven convergente** (`detect_gaps` → resolver → integrar →
|
|
42
|
-
- **
|
|
45
|
+
- Motor **gap-driven convergente** + **ciclo artifact-first** del chasis (sembrar `CHECKPOINT.Pending/Next` ANTES → `detect_gaps` → resolver → integrar → actualizar `Pending→Completed` DESPUÉS; gaps agotados con límite `MAX` no se re-disparan).
|
|
46
|
+
- **Una sola session por run**: descriptor `plan-new` → `NNN-plan-new` (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.
|
|
43
47
|
- **AskUserQuestion**: ≤3 tabs de contenido + 1 tab `flow` (`Compactar`/`Cerrar`) siempre.
|
|
44
|
-
- **Ask-vs-research rule** + **research autónomo** + **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`).
|
|
45
|
-
- **Compact / resume**
|
|
46
|
-
- **Naming + numeración global** del chasis: `<run>` = descriptor `plan-new
|
|
48
|
+
- **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`).
|
|
49
|
+
- **Compact / resume** y **artefactos como log vivo (ciclo artifact-first)** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
50
|
+
- **Naming + numeración global** del chasis: `<run>` = descriptor `plan-new`. El CLI antepone el `NNN` global y secuencial (sin reiniciar por tipo); el caller pasa solo el descriptor.
|
|
47
51
|
|
|
48
|
-
## Delta 1 — Deliverable: PLAN RICO (`PPP-plan
|
|
52
|
+
## Delta 1 — Deliverable: PLAN RICO (`PPP-plan-<slug>.md`)
|
|
49
53
|
|
|
50
54
|
El plan absorbe el nivel `TECHNICAL-NOTE` **inline** (decisión del usuario) + roadmap:
|
|
51
55
|
|
|
52
56
|
```markdown
|
|
53
57
|
# Plan PPP — <slug>
|
|
54
58
|
|
|
55
|
-
> Derivado de docs/specs/NNN-spec
|
|
59
|
+
> Derivado de docs/specs/NNN-spec-<slug>.md · generado por plan-new-loop
|
|
56
60
|
|
|
57
61
|
## Origin spec fuente (o prompt, si se bootstrapeó vía spec-new)
|
|
58
62
|
## Summary el cómo, en 1–2 frases
|
|
@@ -71,7 +75,7 @@ El plan absorbe el nivel `TECHNICAL-NOTE` **inline** (decisión del usuario) + r
|
|
|
71
75
|
## Open questions pendientes
|
|
72
76
|
```
|
|
73
77
|
|
|
74
|
-
> **Implicación de catálogo:** `TECHNICAL-NOTE` deja de ser artefacto de
|
|
78
|
+
> **Implicación de catálogo:** `TECHNICAL-NOTE` deja de ser artefacto de session y se vuelve **secciones del plan-doc**. Reconciliado en [`plan-exec-loop`](../plan-exec-loop/SKILL.md): la única plan-exec session **no** lleva `TECHNICAL-NOTE` ni `TASKS` propios; el detalle técnico y el progreso viven inline en el plan-doc (living).
|
|
75
79
|
|
|
76
80
|
## Delta 2 — Gap taxonomy (de "plan")
|
|
77
81
|
|
|
@@ -90,8 +94,8 @@ Reemplaza la gap taxonomy de spec por una orientada a planificación:
|
|
|
90
94
|
|
|
91
95
|
## Delta 3 — What research investigates here
|
|
92
96
|
|
|
93
|
-
El research del chasis se especializa: mapear **código/impacto** — componentes FE/BE/BD afectados, wiring AS-IS, dependencias. Alimenta las secciones `Solution`, `Impacted`, `Current state (AS-IS)`. La regla BD del chasis aplica igual (queries read-only a `SCRIPTS.sql`, MCP elegido vía tab de contenido si >1 sin default).
|
|
97
|
+
El research **inline** del chasis se especializa: mapear **código/impacto** — componentes FE/BE/BD afectados, wiring AS-IS, dependencias. Alimenta las secciones `Solution`, `Impacted`, `Current state (AS-IS)`. La regla BD del chasis aplica igual (queries read-only a `SCRIPTS.sql`, MCP elegido vía tab de contenido si >1 sin default).
|
|
94
98
|
|
|
95
99
|
## Convergence / exit
|
|
96
100
|
|
|
97
|
-
Sin gaps materiales → `AskUserQuestion` (contenido: `Guardar plan` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`) → al `Guardar`, escribe `docs/plans/PPP-plan
|
|
101
|
+
Sin gaps materiales → `AskUserQuestion` (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.
|