@tacuchi/agent-workflow-cli 12.4.0 → 12.6.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/git-cli.d.ts +1 -0
- package/dist/adapters/git-cli.d.ts.map +1 -1
- package/dist/adapters/git-cli.js +21 -0
- package/dist/adapters/git-cli.js.map +1 -1
- 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/merge-state-service.d.ts +37 -0
- package/dist/application/merge-state-service.d.ts.map +1 -0
- package/dist/application/merge-state-service.js +89 -0
- package/dist/application/merge-state-service.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/merge-state.d.ts +3 -0
- package/dist/cli/commands/merge-state.d.ts.map +1 -0
- package/dist/cli/commands/merge-state.js +28 -0
- package/dist/cli/commands/merge-state.js.map +1 -0
- 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.d.ts.map +1 -1
- package/dist/cli/help-groups.js +2 -1
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/main.js +4 -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/dist/ports/git.d.ts +5 -0
- package/dist/ports/git.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/w/README.md +6 -3
- package/skills/w/SKILL.md +25 -9
- package/skills/w/artifacts/README.md +10 -9
- 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 +5 -5
- package/skills/w/artifacts/{artifacts-dev → artifacts-exec}/DECISION.md +3 -3
- package/skills/w/artifacts/{artifacts-dev → artifacts-exec}/TECHNICAL-NOTE.md +15 -15
- 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 +16 -10
- package/skills/w/commands/fix-git.md +33 -0
- package/skills/w/commands/plan-exec.md +4 -4
- package/skills/w/commands/plan-new.md +9 -7
- package/skills/w/commands/quick.md +1 -1
- package/skills/w/commands/spec-new.md +19 -15
- package/skills/w/commands/spec-refine.md +7 -5
- package/skills/w/commands/status.md +50 -0
- package/skills/w/exports/README.md +2 -2
- package/skills/w/exports/export-diagrams/SKILL.md +1 -1
- package/skills/w/exports/export-manuals/SKILL.md +2 -2
- package/skills/w/exports/export-reports/SKILL.md +1 -1
- package/skills/w/exports/export-scripts/SKILL.md +1 -1
- package/skills/w/harness/SKILL.md +85 -0
- package/skills/w/loops/README.md +22 -21
- package/skills/w/loops/plan-exec-loop/SKILL.md +60 -58
- package/skills/w/loops/plan-new-loop/SKILL.md +47 -41
- package/skills/w/loops/quick-loop/SKILL.md +23 -20
- package/skills/w/loops/spec-refine-loop/SKILL.md +116 -82
- package/skills/w/roles/README.md +2 -2
- package/skills/w/roles/git/SKILL.md +28 -7
- package/skills/w/roles/research/SKILL.md +22 -82
- package/skills/w/roles/testing/SKILL.md +2 -2
- package/skills/w/roles/ui-spec/SKILL.md +58 -48
|
@@ -1,43 +1,43 @@
|
|
|
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,
|
|
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, structured-choice con ≤3 preguntas de contenido + 1 control 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, structured-choice + control `flow`, compact/resume, artefactos como log vivo) vive en el chasis.
|
|
24
24
|
|
|
25
25
|
## Flow
|
|
26
|
-
|
|
26
|
+
PLAN
|
|
27
27
|
|
|
28
28
|
## Layer
|
|
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 del argumento del comando).
|
|
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
|
|
52
|
-
- **
|
|
53
|
-
- **
|
|
54
|
-
- **Compact/resume**;
|
|
51
|
+
- Motor **gap-driven** (aplica *dentro de una tarea* ante una decisión/duda no obvia: research inline ó structured-choice).
|
|
52
|
+
- **Structured-choice**: ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`).
|
|
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
|
|
|
@@ -94,23 +95,25 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
|
|
|
94
95
|
- Validación que **corre y falla** → vuelve a la tarea (gap); no avanza.
|
|
95
96
|
- **Validación dependiente de una migración no aplicada**: como la IA no ejecuta el DML, **no puede correr read-only** → se **difiere** (handoff a DBA), **no bloquea el avance**. Se registra en `Open questions` del plan + `BACKLOG`, marcando "verificación pendiente tras aplicar SQL". (Reusa el patrón degradar/diferir + límite `MAX` del chasis → evita el bucle "vuelve a la tarea".)
|
|
96
97
|
|
|
98
|
+
> La **validación final** es el **convergence gate** de PLAN-exec (análogo al *analyze gate* de SPEC y al *coherence gate* de `plan-new`): el plan no se marca *done* hasta que pasa o queda explícitamente diferida (handoff de SQL).
|
|
99
|
+
|
|
97
100
|
## Delta 5 — Completitud / cierre
|
|
98
101
|
|
|
99
102
|
- 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
|
-
- Todas las fases done →
|
|
101
|
-
- **Sin export automático**: los artefactos (`SCRIPTS.sql`, `DECISION`, …) quedan en
|
|
103
|
+
- Todas las fases done → *structured-choice* final (contenido: `Marcar plan done` / `Preguntar algo más`; flow: `Compactar`/`Cerrar`).
|
|
104
|
+
- **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
105
|
|
|
103
106
|
## Sequence
|
|
104
107
|
|
|
105
108
|
```
|
|
106
|
-
plan-exec-loop(PPP-plan
|
|
107
|
-
|
|
108
|
-
plan = read(PPP-plan
|
|
109
|
+
plan-exec-loop(PPP-plan-<slug>.md):
|
|
110
|
+
session = create_or_resume("plan-exec") # UNA sola session por run; CLI antepone NNN global; CHECKPOINT, resume
|
|
111
|
+
plan = read(PPP-plan-<slug>.md)
|
|
109
112
|
para cada Phase en plan (en orden, respeta deps):
|
|
110
|
-
si Phase done: skip
|
|
111
|
-
|
|
113
|
+
si Phase done (todas sus Tasks - [x] en el plan): skip # resume vía checkbox del plan-doc
|
|
114
|
+
seed CHECKPOINT.Next = Phase N (Pending = sus Tasks) # ANTES de iniciar la fase: sembrar intención (artifact-first)
|
|
112
115
|
para cada Task de la Phase:
|
|
113
|
-
si Task - [x] en el plan: skip # resume intra-fase
|
|
116
|
+
si Task - [x] en el plan: skip # resume intra-fase por checkbox
|
|
114
117
|
verificar rama esperada por fuente (branch-check)
|
|
115
118
|
si no coincide → pausar + resolver con humano
|
|
116
119
|
ejecutar Task:
|
|
@@ -118,29 +121,28 @@ plan-exec-loop(PPP-plan.md):
|
|
|
118
121
|
si crea herramienta/utilidad reusable → docs/tools (salida directa)
|
|
119
122
|
si consulta BD read-only → SCRIPTS.sql + ejecutar read-only
|
|
120
123
|
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
|
|
124
|
+
si decisión no obvia → DECISION (etiquetado por fase/tarea, en el ÚNICO DECISION)
|
|
125
|
+
si duda/gap → research inline ó structured-choice # chasis
|
|
126
|
+
marcar Task - [x] + estado EN EL PLAN # DESPUÉS de completar la Task (el plan-doc es la fuente de verdad por tarea)
|
|
124
127
|
validación de la fase:
|
|
125
128
|
la que corre y falla → volver a la tarea
|
|
126
129
|
la dependiente de migración no aplicada → diferir (Open questions + BACKLOG)
|
|
130
|
+
update CHECKPOINT (Completed += Phase N, Next = Phase N+1) # DESPUÉS: Pending→Completed + Next = fase siguiente (ver ciclo artifact-first)
|
|
127
131
|
proponer commit(s) por fuente (aprobar antes) # nunca push/amend/--no-verify
|
|
128
132
|
si rechazado → cambios quedan; registrar "fase sin commitear"
|
|
129
133
|
precondición siguiente fase: working tree limpio o reconocido
|
|
130
|
-
es.close_and_report()
|
|
131
134
|
validación final (lo que se pueda; lo dependiente de SQL queda como handoff)
|
|
132
|
-
|
|
135
|
+
structured_choice(contenido: [Marcar plan done, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
133
136
|
marcar plan done (o "done — SQL pendiente de aplicar")
|
|
134
|
-
# NO export: los artefactos quedan en
|
|
135
|
-
finalize: CHECKPOINT + BACKLOG + cerrar
|
|
137
|
+
# NO export: los artefactos quedan en la session; un export-* los promueve aparte
|
|
138
|
+
finalize: CHECKPOINT (+ BACKLOG si difiere) + cerrar session + reportar
|
|
136
139
|
```
|
|
137
140
|
|
|
138
141
|
```mermaid
|
|
139
142
|
flowchart TD
|
|
140
|
-
S["create_or_resume
|
|
143
|
+
S["create_or_resume plan-exec session (única)<br/>read PPP-plan-<slug>.md"] --> P{"¿más Phases<br/>(no done)?"}
|
|
141
144
|
P -->|no| V2["validación final<br/>(dep. de SQL → handoff)"]
|
|
142
|
-
P -->|sí|
|
|
143
|
-
ES --> T{"¿Task pendiente<br/>(no - [x])?"}
|
|
145
|
+
P -->|sí| T{"¿Task pendiente<br/>(no - [x])?"}
|
|
144
146
|
T -->|sí| G["branch-check por fuente"]
|
|
145
147
|
G -->|rama ok| DO["editar código · read-only→SCRIPTS.sql<br/>migración DDL/DML→SCRIPTS.sql (no ejecuta) · DECISION"]
|
|
146
148
|
G -->|rama ≠| PA["pausar + resolver con humano"]
|
|
@@ -148,16 +150,16 @@ flowchart TD
|
|
|
148
150
|
DO --> MK["marcar Task - [x] en el PLAN"]
|
|
149
151
|
MK --> T
|
|
150
152
|
T -->|no| VP["validación de fase<br/>(falla→tarea · dep. SQL→diferir)"]
|
|
151
|
-
VP -->
|
|
152
|
-
|
|
153
|
+
VP --> CK["update CHECKPOINT (Completed/Next)"]
|
|
154
|
+
CK --> CM["proponer commits por fuente"]
|
|
155
|
+
CM -->|aprobado| P
|
|
153
156
|
CM -->|rechazado| RJ["cambios quedan · registrar 'sin commitear'"]
|
|
154
|
-
RJ -->
|
|
155
|
-
|
|
156
|
-
V2 --> FIN["AskUserQuestion[Marcar plan done · Preguntar más]<br/>plan done (sin auto-export)"]
|
|
157
|
+
RJ --> P
|
|
158
|
+
V2 --> FIN["structured-choice[Marcar plan done · Preguntar más]<br/>plan done (sin auto-export)"]
|
|
157
159
|
```
|
|
158
160
|
|
|
159
161
|
## Convergence / exit
|
|
160
162
|
|
|
161
163
|
- Plan completo + validación OK (o diferida con handoff) → `Marcar plan done`.
|
|
162
|
-
- `Cerrar` (
|
|
164
|
+
- `Cerrar` (control `flow`, en cualquier momento) → `finalize` persiste `CHECKPOINT` (y `BACKLOG` solo si quedó algo sin ejecutar / sin commitear / sin aplicar), cierra la session, reporta.
|
|
163
165
|
- La promoción de artefactos a `docs/` (vía `export-*`) es **siempre** un paso posterior y explícito, fuera de este loop.
|
|
@@ -1,77 +1,83 @@
|
|
|
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, structured-choice con ≤3 preguntas de contenido + 1 control 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, structured-choice + control `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
|
+
PLAN
|
|
24
26
|
|
|
25
27
|
## Layer
|
|
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 del argumento del comando). **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
|
-
- **
|
|
43
|
-
- **
|
|
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
|
|
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.
|
|
47
|
+
- **Structured-choice**: ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`).
|
|
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
|
-
## Summary el cómo, en 1–2 frases
|
|
59
|
-
## Solution explicación técnica/funcional de cómo se implementará
|
|
60
|
-
## Impacted FE · BE · BD (esquemas/tablas/funciones) · APIs ·
|
|
61
|
-
## Dependencies docs / fuentes / bases / sesiones
|
|
62
|
-
## Current state (AS-IS) wiring actual (interfaces y métodos), resumido
|
|
63
|
-
## Target state (TO-BE) wiring objetivo
|
|
64
|
-
## Final behavior cómo se comporta el flujo al final (alineado con criterios del spec)
|
|
65
|
-
## Phases fases agrupadoras (complejidad XS–S)
|
|
66
|
-
## Tasks tareas por fase (≤XS), con deps y estado vivo (- [ ])
|
|
67
|
-
## Validations validaciones / restricciones / lógica de negocio
|
|
68
|
-
## Risks / impact riesgos e impactos técnicos
|
|
69
|
-
## Assumptions supuestos
|
|
70
|
-
## Estimated time sizing XS–XL (desarrollo + pruebas internas)
|
|
71
|
-
## Open questions pendientes
|
|
62
|
+
## Summary el cómo, en 1–2 frases (core)
|
|
63
|
+
## Solution explicación técnica/funcional de cómo se implementará (core)
|
|
64
|
+
## Impacted FE · BE · BD (esquemas/tablas/funciones) · APIs · integr. (core)
|
|
65
|
+
## Dependencies docs / fuentes / bases / sesiones (opt.)
|
|
66
|
+
## Current state (AS-IS) wiring actual (interfaces y métodos), resumido (opt.)
|
|
67
|
+
## Target state (TO-BE) wiring objetivo (opt.)
|
|
68
|
+
## Final behavior cómo se comporta el flujo al final (alineado con criterios del spec) (core)
|
|
69
|
+
## Phases fases agrupadoras (complejidad XS–S) (core)
|
|
70
|
+
## Tasks tareas por fase (≤XS), con deps y estado vivo (- [ ]) (core)
|
|
71
|
+
## Validations validaciones / restricciones / lógica de negocio (core)
|
|
72
|
+
## Risks / impact riesgos e impactos técnicos (opt.)
|
|
73
|
+
## Assumptions supuestos (opt.)
|
|
74
|
+
## Estimated time sizing XS–XL (desarrollo + pruebas internas) (opt.)
|
|
75
|
+
## Open questions pendientes (core)
|
|
72
76
|
```
|
|
73
77
|
|
|
74
|
-
> **
|
|
78
|
+
> **Escala con complejidad:** las `(core)` van **siempre**; las `(opt.)` solo si el plan lo amerita — un plan chico puede omitir `Dependencies`, AS-IS/TO-BE, `Risks`, `Assumptions`, `Estimated time`. Conciso > exhaustivo.
|
|
79
|
+
|
|
80
|
+
> **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
81
|
|
|
76
82
|
## Delta 2 — Gap taxonomy (de "plan")
|
|
77
83
|
|
|
@@ -86,12 +92,12 @@ Reemplaza la gap taxonomy de spec por una orientada a planificación:
|
|
|
86
92
|
| Tarea no atómica | complejidad > XS | la IA re-parte |
|
|
87
93
|
| Deps faltantes | orden no claro | research / humano |
|
|
88
94
|
| Criterios del spec sin cubrir | tareas no trazan a acceptance criteria | la IA deriva + humano confirma |
|
|
89
|
-
| Riesgos sin atender |
|
|
95
|
+
| Riesgos sin atender | riesgos técnicos sin mitigar/declarar | humano |
|
|
90
96
|
|
|
91
97
|
## Delta 3 — What research investigates here
|
|
92
98
|
|
|
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
|
|
99
|
+
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 pregunta de contenido si >1 sin default).
|
|
94
100
|
|
|
95
101
|
## Convergence / exit
|
|
96
102
|
|
|
97
|
-
Sin gaps materiales → `
|
|
103
|
+
Sin gaps materiales → **coherence gate** (read-only; 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.
|
|
@@ -4,16 +4,16 @@ description: >-
|
|
|
4
4
|
El atajo liviano de agent-workflow: resuelve una tarea acotada (un fix, un
|
|
5
5
|
ajuste pequeño) directamente desde el prompt del usuario, editando código con
|
|
6
6
|
ceremonia mínima. Heir del chasis spec-refine-loop (motor gap-driven mínimo,
|
|
7
|
-
research
|
|
8
|
-
contenido + 1
|
|
9
|
-
|
|
10
|
-
antes de editar + commit propuesto, nunca
|
|
11
|
-
nunca ejecuta DML, migraciones a SCRIPTS.sql;
|
|
12
|
-
fases ni plan-doc (el prompt ES la tarea),
|
|
13
|
-
(<slug>-quick), un solo commit; y escalación con
|
|
14
|
-
(propone subir a SPEC/PLAN dejando el código a
|
|
15
|
-
docs/. Lo arranca /w:quick y es reanudable.
|
|
16
|
-
directos que no ameritan spec ni plan formal.
|
|
7
|
+
research INLINE con regla BD read-only, structured-choice con ≤3 preguntas de
|
|
8
|
+
contenido + 1 control flow Compactar/Cerrar siempre, compact/resume con artefactos
|
|
9
|
+
como log vivo: CHECKPOINT siempre, BACKLOG solo si difiere) y de plan-exec-loop
|
|
10
|
+
(git seguro: rama esperada antes de editar + commit propuesto, nunca
|
|
11
|
+
push/--amend/--no-verify; la IA nunca ejecuta DML, migraciones a SCRIPTS.sql;
|
|
12
|
+
sin auto-export). Sus deltas: sin fases ni plan-doc (el prompt ES la tarea),
|
|
13
|
+
una sola session ligera (<slug>-quick), un solo commit; y escalación con
|
|
14
|
+
handoff si la tarea crece (propone subir a SPEC/PLAN dejando el código a
|
|
15
|
+
medias como contexto). NO toca docs/. Lo arranca /w:quick y es reanudable.
|
|
16
|
+
Invocar para cambios pequeños y directos que no ameritan spec ni plan formal.
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
# quick-loop
|
|
@@ -39,21 +39,21 @@ QUICK
|
|
|
39
39
|
|
|
40
40
|
## Internal session
|
|
41
41
|
|
|
42
|
-
- **SIEMPRE** crea una session ligera con descriptor `<slug>-quick` → `NNN-<slug>-quick` (Type = `quick`, ≈ `exec`): `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (+ `BACKLOG`
|
|
42
|
+
- **SIEMPRE** crea una session ligera con descriptor `<slug>-quick` → `NNN-<slug>-quick` (Type = `quick`, ≈ `exec`): `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (+ `BACKLOG` solo si difiere). Una sola session. La investigación es **inline** dentro de ella (`ANALYSIS-FILE`/`CONCLUSIONS` + `SCRIPTS.sql` read-only en su carpeta). El caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial (ver chasis).
|
|
43
43
|
|
|
44
44
|
## Inherits
|
|
45
45
|
|
|
46
|
-
- del **chasis** [`spec-refine-loop`](../spec-refine-loop/SKILL.md): gap-driven (mínimo),
|
|
46
|
+
- del **chasis** [`spec-refine-loop`](../spec-refine-loop/SKILL.md): gap-driven (mínimo), *structured-choice* ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) (capacidad del arnés — ver [`../../harness/SKILL.md`](../../harness/SKILL.md); en Claude Code es `AskUserQuestion`), `research` **inline** + regla BD read-only (pregunta MCP si >1 sin default → `SCRIPTS.sql` → ejecuta read-only), compact/resume, **artefactos como log vivo (ciclo artifact-first)** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
|
|
47
47
|
- de [`plan-exec-loop`](../plan-exec-loop/SKILL.md): **git** (rama segura antes de editar + commit propuesto; nunca `push`/`--amend`/`--no-verify`), **BD** (la IA nunca ejecuta DML; migraciones → `SCRIPTS.sql` de la session), **sin auto-export** (no toca otras carpetas `docs/`).
|
|
48
48
|
|
|
49
49
|
## Composes
|
|
50
50
|
|
|
51
|
-
`git` · `coding-standards` · `testing` (validación puntual) · `sql` (regla BD) · `writing` · `research
|
|
51
|
+
`git` · `coding-standards` · `testing` (validación puntual) · `sql` (regla BD) · `writing` · `research` (inline). Resueltas por `.workflow/skills.toml`.
|
|
52
52
|
|
|
53
53
|
## Delta QUICK — minimal ceremony
|
|
54
54
|
|
|
55
55
|
- **Sin fases, sin plan-doc**: el prompt **es** la tarea (una sola unidad). No hay roadmap.
|
|
56
|
-
- **Una sola session
|
|
56
|
+
- **Una sola session**. **Un solo commit** propuesto al final.
|
|
57
57
|
- **Escalación + handoff**: si la tarea crece (muchos archivos / ≥2 fuentes / necesita arquitectura) → propone subir a **SPEC/PLAN**. Si el usuario acepta:
|
|
58
58
|
- el **código ya editado queda** en el working tree (no se revierte) **y se registra** en `CHECKPOINT` + `BACKLOG` ("cambios sin commitear en `<fuente>` — código a medias; decidir commit/descartar al retomar") — reusando **ambas** mitades del patrón "commit rechazado" de plan-exec (no revertir **y** registrar lo sin commitear). Crítico en la rama **SPEC**, que no retoma el working tree;
|
|
59
59
|
- la session quick va a `finalize`, persistiendo `CHECKPOINT` + `BACKLOG` con un **puntero** al spec/plan sembrado (Followups: "escalado a `docs/specs/NNN` o `docs/plans/PPP` — retomar ahí");
|
|
@@ -65,25 +65,26 @@ QUICK
|
|
|
65
65
|
```
|
|
66
66
|
quick-loop(prompt):
|
|
67
67
|
s = create_or_resume("<slug>-quick") # CLI antepone NNN global; siempre session ligera
|
|
68
|
+
seed CHECKPOINT.Pending/Next = la tarea (s) # ANTES: sembrar intención (artifact-first); SESSION.Objective = el prompt
|
|
68
69
|
trabajar la tarea (loop mínimo):
|
|
69
70
|
verificar rama esperada por fuente (branch-check); si no → pausar + resolver
|
|
70
71
|
editar código (cambio mínimo)
|
|
71
72
|
si consulta BD read-only → SCRIPTS.sql + ejecutar read-only
|
|
72
73
|
si cambio BD (DDL/DML) → SCRIPTS.sql (artefacto session, NO ejecutar)
|
|
73
74
|
si decisión no obvia → DECISION
|
|
74
|
-
si duda/gap → research
|
|
75
|
+
si duda/gap → research inline ó structured-choice # chasis
|
|
75
76
|
si la tarea CRECE → proponer escalar a SPEC/PLAN
|
|
76
77
|
si acepta → handoff (código queda; BACKLOG→spec/plan sembrado) → goto finalize
|
|
77
78
|
validación puntual (test si aplica)
|
|
78
79
|
proponer commit (aprobar antes) # nunca push/amend/--no-verify
|
|
79
|
-
|
|
80
|
-
finalize: CHECKPOINT + BACKLOG (si queda algo) + cerrar session + reportar
|
|
80
|
+
structured_choice(contenido: [Cerrar tarea, Preguntar algo más], flow: [Compactar, Cerrar])
|
|
81
|
+
finalize: CHECKPOINT (DESPUÉS: Pending→Completed) + BACKLOG (solo si queda algo diferido) + cerrar session + reportar
|
|
81
82
|
```
|
|
82
83
|
|
|
83
84
|
```mermaid
|
|
84
85
|
flowchart TD
|
|
85
86
|
S["create_or_resume session NNN-<slug>-quick"] --> G["branch-check por fuente"]
|
|
86
|
-
G -->|ok| DO["editar código · BD→SCRIPTS.sql · DECISION<br/>(duda→research/
|
|
87
|
+
G -->|ok| DO["editar código · BD→SCRIPTS.sql · DECISION<br/>(duda→research inline/structured-choice)"]
|
|
87
88
|
G -->|rama ≠| PA["pausar + resolver"]
|
|
88
89
|
PA --> G
|
|
89
90
|
DO --> GROW{"¿la tarea creció?"}
|
|
@@ -91,12 +92,14 @@ flowchart TD
|
|
|
91
92
|
ESC --> FIN
|
|
92
93
|
GROW -->|no| V["validación puntual"]
|
|
93
94
|
V --> CM["proponer commit (aprobar)"]
|
|
94
|
-
CM --> Q["
|
|
95
|
+
CM --> Q["structured-choice[Cerrar · Preguntar más]<br/>flow[Compactar · Cerrar]"]
|
|
95
96
|
Q --> FIN["finalize: CHECKPOINT + BACKLOG + cerrar"]
|
|
96
97
|
```
|
|
97
98
|
|
|
98
99
|
## Convergence / exit
|
|
99
100
|
|
|
100
101
|
- Tarea hecha + commit (o aprobado saltarlo) → `Cerrar`.
|
|
101
|
-
- `Cerrar`/`Compactar` (
|
|
102
|
+
- `Cerrar`/`Compactar` (control `flow`) → persiste `CHECKPOINT` + `BACKLOG` (reanudable).
|
|
102
103
|
- **Sin export**: nada va a `docs/`. Si algo amerita preservarse → se promueve aparte vía `export-*`, o se escala a SPEC/PLAN.
|
|
104
|
+
|
|
105
|
+
> La **validación puntual** es el *convergence gate* de QUICK: la **excepción deliberada lightweight** del chasis (sin checklist formal) — se reduce a "¿el cambio hace lo que pedía el prompt? (test si aplica)". Mínima ceremonia por diseño.
|