@tacuchi/agent-workflow-cli 12.7.0 → 12.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/application/self/mcp-config.d.ts +1 -0
  2. package/dist/application/self/mcp-config.d.ts.map +1 -1
  3. package/dist/application/self/mcp-config.js +1 -1
  4. package/dist/application/self/mcp-config.js.map +1 -1
  5. package/dist/application/templates/session.d.ts +10 -6
  6. package/dist/application/templates/session.d.ts.map +1 -1
  7. package/dist/application/templates/session.js +19 -17
  8. package/dist/application/templates/session.js.map +1 -1
  9. package/dist/application/workspace-init-service.d.ts.map +1 -1
  10. package/dist/application/workspace-init-service.js +62 -35
  11. package/dist/application/workspace-init-service.js.map +1 -1
  12. package/dist/cli/commands/workspace-init.js +3 -3
  13. package/dist/cli/commands/workspace-init.js.map +1 -1
  14. package/dist/cli/parsers/fuentes.d.ts.map +1 -1
  15. package/dist/cli/parsers/fuentes.js +48 -35
  16. package/dist/cli/parsers/fuentes.js.map +1 -1
  17. package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
  18. package/dist/cli/tui/data/workflow-content.js +8 -7
  19. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  20. package/dist/cli/tui/tabs/mcp-tab-helpers.d.ts +21 -0
  21. package/dist/cli/tui/tabs/mcp-tab-helpers.d.ts.map +1 -0
  22. package/dist/cli/tui/tabs/mcp-tab-helpers.js +43 -0
  23. package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -0
  24. package/dist/cli/tui/tabs/mcp-tab.d.ts.map +1 -1
  25. package/dist/cli/tui/tabs/mcp-tab.js +152 -33
  26. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  27. package/dist/cli/tui/tabs/workflow-tab.d.ts.map +1 -1
  28. package/dist/cli/tui/tabs/workflow-tab.js +1 -1
  29. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  30. package/package.json +1 -1
  31. package/skills/w/SKILL.md +14 -8
  32. package/skills/w/artifacts/README.md +1 -1
  33. package/skills/w/artifacts/artifacts-core/SESSION.md +7 -3
  34. package/skills/w/commands/README.md +2 -0
  35. package/skills/w/loops/README.md +6 -5
  36. package/skills/w/loops/plan-exec-loop/SKILL.md +2 -2
  37. package/skills/w/loops/plan-new-loop/SKILL.md +2 -2
  38. package/skills/w/loops/quick-loop/SKILL.md +21 -18
  39. package/skills/w/loops/spec-refine-loop/SKILL.md +36 -2
package/skills/w/SKILL.md CHANGED
@@ -73,24 +73,30 @@ Cadena típica: prompt → `spec-new` genera `docs/specs/NNN-spec-<slug>.md` →
73
73
  - `/w:plan-new` — arranca `plan-new-loop` para derivar un plan ejecutable del spec refinado.
74
74
  - `/w:plan-exec` — arranca `plan-exec-loop` para ejecutar y mantener el plan.
75
75
  - `/w:quick` — arranca `quick-loop` (atajo, sin `docs/`).
76
- - `/w:status` — dashboard read-only del workspace (Hecho/Falta/Descartó, con fechas en español). Transversal: no es un flow, no escribe nada; se apoya en `aw status`.
77
- - `/w:fix-git` — resuelve conflictos de un merge en curso en cualquier repo (identifica origen↔destino, analiza intención, *structured-choice* ante ambigüedad). Transversal: no es flow, no crea session, no toca `docs/`; git-safe; se apoya en `aw merge-state`.
78
76
  - `/w:export-scripts` · `/w:export-manuals` · `/w:export-diagrams` · `/w:export-reports` — promueven artefactos a `docs/`.
79
77
 
78
+ ### Transversal skills (no flow) — `/w:status` · `/w:fix-git`
79
+
80
+ Skills **invocables independientes de flujo**: se disparan con `/w:` igual que un comando, pero **no** pertenecen a SPEC/PLAN/QUICK, **no** manejan `docs/`, y **no** entran en el conteo **5 comandos de flow / 4 loops**. (En el diseño son su propia categoría —`workflow-skills/`, aparte de los comandos de flow—; en el bundle se empaquetan bajo `commands/` para que `/w:` las invoque.)
81
+
82
+ - `/w:status` — dashboard read-only del workspace (Hecho/Falta/Descartó, con fechas en español). No escribe nada; se apoya en `aw status`.
83
+ - `/w:fix-git` — resuelve conflictos de un merge en curso en cualquier repo (identifica origen↔destino, analiza intención, *structured-choice* ante ambigüedad). No crea session, no toca `docs/`; git-safe; se apoya en `aw merge-state`.
84
+
80
85
  ### The loops (Layer 2)
81
86
 
82
87
  Un loop es una skill que enseña a la IA **cómo iterar** hasta un entregable. Propiedades comunes (el chasis, en `spec-refine-loop`, lo heredan los demás):
83
88
 
84
- 1. **Gap-driven convergente** — cada ciclo: detecta huecos resuelve (pregunta al humano o investiga) integra repite hasta converger.
85
- 2. **Una sola session por run + research inline** — el loop crea **una** session (la dueña del run) y maneja sus artefactos en `.workflow/sessions/`. La **investigación es inline**: una actividad dentro de esa misma session (escribe `ANALYSIS-FILE`/`CONCLUSIONS` + `SCRIPTS.sql` read-only si consulta BD), no una session aparte. El usuario nunca crea sessions. Los artefactos son el **registro vivo** del run, **ciclo artifact-first** (sembrar `Pending`/`Next` antes de ejecutar, llevar a `Completed` después); la base guía es el spec/plan.
86
- 3. **Structured-choice con dos tipos de pregunta** — *structured-choice* (capacidad del arnés ver `harness/SKILL.md`). En **Claude Code** es `AskUserQuestion` (máx 4 preguntas/llamada **≤3 preguntas de contenido + 1 control `flow`**); en un arnés sin elección estructurada, degrada a **markdown numerado**.
89
+ 1. **Objetivo persistente + verification-first** — el loop persigue su `SESSION.Objective` y solo finaliza cuando sus `SESSION.Success criteria` (sembrados al inicio, *verification-first* / TDD generalizado: tests para código, rúbrica falsable para análisis/diseño) están **en verde**. Modelado en el `/goal` de Claude Code pero **agnóstico** (no depende de ningún host) y con registro durable.
90
+ 2. **Gap-driven convergente** — el *cómo*: cada ciclo detecta huecos resuelve (pregunta al humano o investiga) integra repite hasta converger.
91
+ 3. **Una sola session por run + research inline** — el loop crea **una** session (la dueña del run) y maneja sus artefactos en `.workflow/sessions/`. La **investigación es inline**: una actividad dentro de esa misma session (escribe `ANALYSIS-FILE`/`CONCLUSIONS` + `SCRIPTS.sql` read-only si consulta BD), no una session aparte. El usuario nunca crea sessions. Los artefactos son el **registro vivo** del run, **ciclo artifact-first** (sembrar `Pending`/`Next` antes de ejecutar, llevar a `Completed` después); la base guía es el spec/plan.
92
+ 4. **Structured-choice con dos tipos de pregunta** — *structured-choice* (capacidad del arnés — ver `harness/SKILL.md`). En **Claude Code** es `AskUserQuestion` (máx 4 preguntas/llamada → **≤3 preguntas de contenido + 1 control `flow`**); en un arnés sin elección estructurada, degrada a **markdown numerado**.
87
93
  - **pregunta(s) de contenido** — la pregunta real del momento.
88
94
  - **control `flow`** — control de ciclo de vida, **siempre presente**: `Compactar` / `Cerrar`. Responder la pregunta de contenido sin tocar `flow` = seguir iterando.
89
- 4. **Escribe solo en su carpeta `docs/`** — y nunca exporta el resto (eso es de `export-*`).
95
+ 5. **Escribe solo en su carpeta `docs/`** — y nunca exporta el resto (eso es de `export-*`).
90
96
 
91
97
  `flow → Compactar` = checkpoint + la **compactación** del arnés (en Claude Code: `/compact`; ver `harness/SKILL.md`) y reanuda. `flow → Cerrar` = persiste `CHECKPOINT` (siempre) + `BACKLOG` (solo si difiere), cierra la session, termina.
92
98
 
93
- Cada loop tiene un **convergence gate** read-only antes de ofrecer `Guardar`/`done`: chequea invariantes propios del entregable y lo que falle vuelve como gap (en `spec-refine-loop` es el *analyze gate*; en `plan-new-loop`, la coherencia del plan; en `plan-exec-loop`, la validación final; en `quick-loop`, una validación puntual lightweight). El detalle vive en cada loop.
99
+ Cada loop tiene un **convergence gate** read-only antes de ofrecer `Guardar`/`done`, que es operacionalmente **"todos los `SESSION.Success criteria` en verde"** (*verification-first*): chequea invariantes propios del entregable y lo que falle vuelve como gap (en `spec-refine-loop` es el *analyze gate*; en `plan-new-loop`, la coherencia del plan; en `plan-exec-loop`, la validación final; en `quick-loop`, una validación puntual proporcional). El detalle vive en cada loop.
94
100
 
95
101
  `spec-new` no tiene loop (single-pass): **5 comandos / 4 loops**.
96
102
 
@@ -158,7 +164,7 @@ Las únicas `must` para el ciclo de un loop son **structured-choice** y **compac
158
164
  3. **El spec y el plan son documentos** (`docs/`), no artefactos de sesión.
159
165
  4. **BD solo-scripts** — la IA nunca ejecuta DML/DDL; las migraciones quedan en `SCRIPTS.sql` y las aplica el usuario. Solo lecturas read-only vía MCP.
160
166
  5. **Git seguro** — rama esperada verificada antes de editar; commits propuestos por fuente; nunca `push`/`--amend`/`--no-verify`.
161
- 6. **Chasis de loops** — gap-driven convergente · una sola session por run (research inline) · **structured-choice** con ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre · compactación/resume · convergence gate read-only antes de cerrar · artefactos como log vivo **artifact-first** (sembrar `Pending`/`Next` antes, `Completed` después; `CHECKPOINT` siempre; `BACKLOG` solo si difiere).
167
+ 6. **Chasis de loops** — **objetivo persistente + verification-first** (persigue `SESSION.Objective` hasta que sus `SESSION.Success criteria` —sembrados al inicio, TDD generalizado— están en verde) · gap-driven convergente · una sola session por run (research inline) · **structured-choice** con ≤3 preguntas de contenido + 1 control `flow` (`Compactar`/`Cerrar`) siempre · compactación/resume · artefactos como log vivo **artifact-first** (sembrar `Pending`/`Next` antes, `Completed` después; `CHECKPOINT` siempre; `BACKLOG` solo si difiere).
162
168
 
163
169
  ## Output
164
170
 
@@ -39,7 +39,7 @@ Sessions are created by the loops as needed — **one session per run**. The ses
39
39
 
40
40
  ## Common artifacts (any session)
41
41
 
42
- `SESSION` (descriptor: Objective / Origin / Type; + research-only Success criteria) · `CHECKPOINT` (resume) · `SCRIPTS.sql` (read-only queries **executable** + DDL/DML migrations **deliverable**, not executed) · `TASKS` · `BACKLOG` (only when there's something to defer).
42
+ `SESSION` (descriptor: Objective / Origin / Type / **Success criteria** = verification-first done-condition, formerly research-only) · `CHECKPOINT` (resume) · `SCRIPTS.sql` (read-only queries **executable** + DDL/DML migrations **deliverable**, not executed) · `TASKS` · `BACKLOG` (only when there's something to defer).
43
43
 
44
44
  ---
45
45
 
@@ -21,6 +21,10 @@ Session type, **set by the parent loop** (not the user). Authoritative catalog:
21
21
  > `research` is **not** a session type the loops create. Research is an **inline** activity: ANALYSIS-FILE / CONCLUSIONS are written into whatever session is active (`refine`/`exec`/`quick`) when it does investigation.
22
22
 
23
23
  ## Success criteria
24
- Present **only for research** activity (investigate/conclude). It is a checklist `[ ]` that, when met, marks the research as concluded.
25
- If NOT met (e.g. research without evidence, DB unavailable): the research closes as `inconcluso` and reports the reason; the parent loop degrades the gap (asks the human or defers to `Open questions`).
26
- For `exec` / `quick` / `refine` sessions the closing criteria live in the **plan/spec**, not here omit this section.
24
+ The run's **done-condition**, seeded when the session is created (**verification-first** generalized TDD; see [`../../loops/spec-refine-loop/SKILL.md`](../../loops/spec-refine-loop/SKILL.md) § Verification-first): a checklist `[ ]` of **falsifiable** items (that *can* fail) defining "done". The loop **persists until they are all green** (it is the *persistent-objective* condition); `CHECKPOINT.Pending/Completed` tracks the **red→green** progress. Two forms:
25
+
26
+ - **Executable** (code/script/fix): **runnable** tests/checks (unit, build, lint, bug repro) literal TDD. May **reference** the repo's tests rather than copy them.
27
+ - **Rubric** (analysis/design and other non-executable deliverables): items checked by **inspection** (e.g. "identifies every affected site with `file:line`"; "each decision: rationale + ≥1 alternative"). For **subjective** deliverables the AI **proposes** the rubric and the **human ratifies** it before pursuing it.
28
+
29
+ > **Spec/plan** may **reference** the document's acceptance criteria instead of duplicating them. **Research** is the original particular case: its checklist marks the research concluded.
30
+ > **If an item cannot be met** (no evidence, DB unavailable, irresolvable): it closes as `inconcluso` with a reason and the loop **degrades** (asks the human or defers to `Open questions`/`BACKLOG`) — never spinning in place.
@@ -53,6 +53,8 @@
53
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
54
  >
55
55
  > **Transversal (no flow):** [`/w:fix-git`](fix-git.md) resolves an **in-progress merge conflict** for any repo — identify origin↔destination, analyze both sides' intent, resolve (structured-choice on ambiguity), propose the merge commit (git-safe). Leans on `aw merge-state`; writes no `docs/`; works without a workspace. Neither transversal is counted in **5 flow / 4 loops**.
56
+ >
57
+ > `/w:status` and `/w:fix-git` are **transversal skills** — in the design model they form their own category (`workflow-skills/`, distinct from flow commands); here they are packaged under `commands/` so `/w:` can invoke them (Claude Code only invokes `commands/*.md`). See [`../harness/SKILL.md`](../harness/SKILL.md) § *Command packaging*.
56
58
 
57
59
  ## Pipeline
58
60
 
@@ -12,12 +12,13 @@ Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un
12
12
 
13
13
  Propiedades comunes a **los 4 loops**:
14
14
 
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. **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
- 3. **Structured-choice con dos planos** (capacidad del arnés ver [`../harness/SKILL.md`](../harness/SKILL.md); en **Claude Code** es `AskUserQuestion`, máx 4 preguntas/llamada **≤3 + 1 control `flow`**; sin elección estructurada degrada a markdown numerado):
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.
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.
17
+ 3. **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.
18
+ 4. **Structured-choice con dos planos** (capacidad del arnés — ver [`../harness/SKILL.md`](../harness/SKILL.md); en **Claude Code** es `AskUserQuestion`, máx 4 preguntas/llamada → **≤3 + 1 control `flow`**; sin elección estructurada degrada a markdown numerado):
18
19
  - **pregunta(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
20
  - **control `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.
20
- 4. **Escribe solo en su propia carpeta `docs/`** — y **nunca** gradúa/exporta otros artefactos a `docs/`. Esa promoción la hacen las skills `export-*`, aparte y explícita.
21
+ 5. **Escribe solo en su propia carpeta `docs/`** — y **nunca** gradúa/exporta otros artefactos a `docs/`. Esa promoción la hacen las skills `export-*`, aparte y explícita.
21
22
 
22
23
  ## flow control — options
23
24
 
@@ -80,7 +81,7 @@ Los **heirs** (`plan-new-loop`, `plan-exec-loop`, `quick-loop`) usan `## Inherit
80
81
  ## Chassis / heirs
81
82
 
82
83
  ```
83
- spec-refine-loop ── CHASIS (patrón de referencia: motor gap-driven, sesión única,
84
+ spec-refine-loop ── CHASIS (patrón de referencia: objetivo persistente + verification-first, gap-driven, sesión única,
84
85
  │ structured-choice + control flow, research autónomo INLINE + regla BD,
85
86
  │ compact/resume, artefactos como log vivo: CHECKPOINT siempre,
86
87
  │ BACKLOG solo si difiere)
@@ -48,7 +48,7 @@ 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 inline ó structured-choice).
51
+ - **Objetivo persistente + verification-first** del chasis: persigue su `SESSION.Objective` hasta que sus `SESSION.Success criteria` están **en verde** (sembrados al inicio; acá = los tests/validaciones del plan pasan — TDD literal cuando hay código, rúbrica para migraciones BD no ejecutables). El motor es **gap-driven** (aplica *dentro de una tarea* ante una decisión/duda no obvia: research inline ó structured-choice).
52
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
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
54
  - **Compact/resume**; **artefactos como log vivo** (`CHECKPOINT` siempre; `BACKLOG` solo si difiere).
@@ -95,7 +95,7 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
95
95
  - Validación que **corre y falla** → vuelve a la tarea (gap); no avanza.
96
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".)
97
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).
98
+ > La **validación final** es el **convergence gate** de PLAN-exec = **`Success criteria` en verde** (*verification-first*; 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). Para código son **tests ejecutables** (TDD); para migraciones BD no ejecutables, **rúbrica** (SCRIPTS.sql válido + revisado).
99
99
 
100
100
  ## Delta 5 — Completitud / cierre
101
101
 
@@ -42,7 +42,7 @@ PLAN
42
42
 
43
43
  Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
44
44
 
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).
45
+ - **Objetivo persistente + verification-first** del chasis: persigue su `SESSION.Objective` hasta que sus `SESSION.Success criteria` están **en verde** (sembrados al inicio; acá la rúbrica = **coherencia del plan**: cada Task traza a un acceptance criterion del spec). El motor es **gap-driven convergente** + **ciclo artifact-first** (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
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
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
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`).
@@ -100,4 +100,4 @@ El research **inline** del chasis se especializa: mapear **código/impacto** —
100
100
 
101
101
  ## Convergence / exit
102
102
 
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.
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.
@@ -33,9 +33,9 @@ QUICK
33
33
  — (el prompt del usuario; no hay documento de entrada).
34
34
 
35
35
  ## Writes
36
- - Edita código en las fuentes (cambio mínimo).
36
+ - **Deliverable según la tarea:** edita código en las fuentes (cambio mínimo) **o** produce un **análisis/diseño** acotado (deliverable no-código, vive en los artefactos de la session — no en `docs/`).
37
37
  - Artefactos de la session en `.workflow/sessions/`.
38
- - **NO toca `docs/`** (sin doc, sin auto-export).
38
+ - **NO toca `docs/`** (sin doc, sin auto-export). Un análisis/diseño que amerite preservarse se promueve aparte (`export-*`) o se escala a SPEC/PLAN.
39
39
 
40
40
  ## Internal session
41
41
 
@@ -43,17 +43,18 @@ QUICK
43
43
 
44
44
  ## Inherits
45
45
 
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).
46
+ - del **chasis** [`spec-refine-loop`](../spec-refine-loop/SKILL.md): **objetivo persistente** (acá el más directo: el prompt *es* el objetivo) + **verification-first** (`SESSION.Success criteria` proporcional), 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` (inline). Resueltas por `.workflow/skills.toml`.
51
+ `git` · `coding-standards` · `testing` (verification-first) · `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**. **Un solo commit** propuesto al final.
56
+ - **Verification-first proporcional** (ceremonia mínima): aun acá se **siembra el check antes**, del tamaño de la tarea. Código: un test (repro del bug → fix) o "build/lint/tests existentes siguen verdes" (chore). **Análisis/diseño**: una **rúbrica falsable corta**, *ratificada por el usuario* antes de perseguirla. Es el `SESSION.Success criteria` del run (ver [chasis § Verification-first](../spec-refine-loop/SKILL.md)).
57
+ - **Una sola session**. **Un solo commit** propuesto al final (solo si hubo cambios de código).
57
58
  - **Escalación + handoff**: si la tarea crece (muchos archivos / ≥2 fuentes / necesita arquitectura) → propone subir a **SPEC/PLAN**. Si el usuario acepta:
58
59
  - 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
60
  - 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,41 +66,43 @@ QUICK
65
66
  ```
66
67
  quick-loop(prompt):
67
68
  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
69
+ seed SESSION.Objective = el prompt
70
+ seed SESSION.Success criteria = check del deliverable # verification-first, ANTES: test(s) si código · rúbrica corta RATIFICADA si análisis/diseño
71
+ seed CHECKPOINT.Pending/Next = la tarea (s) # ANTES: sembrar intención (artifact-first)
69
72
  trabajar la tarea (loop mínimo):
70
- verificar rama esperada por fuente (branch-check); si no → pausar + resolver
71
- editar código (cambio mínimo)
73
+ si edita código → verificar rama esperada por fuente (branch-check); si no → pausar + resolver
74
+ producir el deliverable: editar código (cambio mínimo) Ó autorar el análisis/diseño
72
75
  si consulta BD read-only → SCRIPTS.sql + ejecutar read-only
73
76
  si cambio BD (DDL/DML) → SCRIPTS.sql (artefacto session, NO ejecutar)
74
77
  si decisión no obvia → DECISION
75
78
  si duda/gap → research inline ó structured-choice # chasis
76
79
  si la tarea CRECE → proponer escalar a SPEC/PLAN
77
- si acepta → handoff (código queda; BACKLOG→spec/plan sembrado) → goto finalize
78
- validación puntual (test si aplica)
79
- proponer commit (aprobar antes) # nunca push/amend/--no-verify
80
+ si acepta → handoff (avance queda; BACKLOG→spec/plan sembrado) → goto finalize
81
+ convergence gate: Success criteria en verde # tests verdes si código · rúbrica satisfecha si análisis/diseño
82
+ si hubo cambios de código → proponer commit (aprobar antes) # nunca push/amend/--no-verify
80
83
  structured_choice(contenido: [Cerrar tarea, Preguntar algo más], flow: [Compactar, Cerrar])
81
84
  finalize: CHECKPOINT (DESPUÉS: Pending→Completed) + BACKLOG (solo si queda algo diferido) + cerrar session + reportar
82
85
  ```
83
86
 
84
87
  ```mermaid
85
88
  flowchart TD
86
- S["create_or_resume session NNN-&lt;slug&gt;-quick"] --> G["branch-check por fuente"]
87
- G -->|ok| DO["editar código · BD→SCRIPTS.sql · DECISION<br/>(duda→research inline/structured-choice)"]
89
+ S["create_or_resume NNN-&lt;slug&gt;-quick<br/>seed Objective + Success criteria (verification-first)"] --> G["branch-check (si edita código)"]
90
+ G -->|ok| DO["producir deliverable: código Ó análisis/diseño<br/>BD→SCRIPTS.sql · DECISION · (duda→research/structured-choice)"]
88
91
  G -->|rama ≠| PA["pausar + resolver"]
89
92
  PA --> G
90
93
  DO --> GROW{"¿la tarea creció?"}
91
- GROW -->|sí| ESC["escalar a SPEC/PLAN<br/>código queda · BACKLOG→spec/plan sembrado"]
94
+ GROW -->|sí| ESC["escalar a SPEC/PLAN<br/>avance queda · BACKLOG→spec/plan sembrado"]
92
95
  ESC --> FIN
93
- GROW -->|no| V["validación puntual"]
94
- V --> CM["proponer commit (aprobar)"]
96
+ GROW -->|no| V["convergence gate:<br/>Success criteria en verde"]
97
+ V --> CM["si hubo código → proponer commit (aprobar)"]
95
98
  CM --> Q["structured-choice[Cerrar · Preguntar más]<br/>flow[Compactar · Cerrar]"]
96
99
  Q --> FIN["finalize: CHECKPOINT + BACKLOG + cerrar"]
97
100
  ```
98
101
 
99
102
  ## Convergence / exit
100
103
 
101
- - Tarea hecha + commit (o aprobado saltarlo) → `Cerrar`.
104
+ - **Success criteria en verde** (proporcional) + commit propuesto si hubo código (o aprobado saltarlo) → `Cerrar`.
102
105
  - `Cerrar`/`Compactar` (control `flow`) → persiste `CHECKPOINT` + `BACKLOG` (reanudable).
103
106
  - **Sin export**: nada va a `docs/`. Si algo amerita preservarse → se promueve aparte vía `export-*`, o se escala a SPEC/PLAN.
104
107
 
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.
108
+ > El *convergence gate* de QUICK es **verification-first proporcional**: un `Success criteria` **corto** sembrado al inicio (no la *ausencia* de checklist, sino su versión mínima) — para código, "el cambio hace lo que pedía el prompt + tests/build verdes"; para análisis/diseño, una rúbrica corta ratificada. Mínima ceremonia por diseño, pero **siempre con el check declarado antes**.
@@ -37,6 +37,39 @@ Actualiza `docs/specs/NNN-spec-<slug>.md` **in place** (cuando el usuario elige
37
37
 
38
38
  > **Invariante de boundary:** este loop escribe **solo** en `docs/specs`. Nunca gradúa/exporta otros artefactos a `docs/` — eso es trabajo de `export-*`, aparte.
39
39
 
40
+ ## Objetivo persistente (chasis — heredado por todos los loops)
41
+
42
+ Un loop **es un objetivo persistente**: existe para cumplir el `SESSION.Objective` declarado al arrancar, y **no se considera terminado hasta que el convergence gate confirma que el objetivo se cumplió**. La iteración gap-driven es el *método*; los artefactos son el *registro*; el objetivo persistente es el *frame* que los gobierna.
43
+
44
+ Está **modelado en cómo se comporta el `/goal` de Claude Code** (declarás un objetivo, el agente no para hasta cumplirlo, auto-completa al cumplirse, con corte explícito para abortar antes) pero como **doctrina agnóstica, no una dependencia del host**: el "no parar hasta converger" lo sostiene el propio loop (su `repeat:` + el convergence gate), no un Stop hook del arnés — ningún host necesita `/goal`. Y, a diferencia del `/goal` pelado, **deja registro durable** (artifact-first) que sobrevive compactación y resume.
45
+
46
+ | Comportamiento de `/goal` (ejemplo) | Análogo agnóstico en el loop |
47
+ |---|---|
48
+ | declarar el objetivo | `SESSION.Objective` |
49
+ | no parar hasta cumplirlo | `repeat:` gap-driven hasta `gaps == ∅` |
50
+ | objetivo cumplido → auto-clear | **convergence gate** pasa → `finalize` |
51
+ | `/goal clear` (abortar antes) | control `flow` `Cerrar` |
52
+ | la directiva sobrevive el contexto | `CHECKPOINT` + resume |
53
+
54
+ > Los heirs heredan el frame: `plan-new`/`plan-exec` persiguen el plan hasta su gate; `quick-loop` es la encarnación más directa (el prompt *es* el objetivo) — el "símil a `/goal`" del modelo.
55
+
56
+ ## Verification-first (chasis — heredado por todos los loops)
57
+
58
+ El objetivo persistente necesita una **condición de término checkable** — si no, el loop no sabe cuándo cumplió (o persigue un blanco que inventó). Esa condición se **siembra ANTES de ejecutar**, no se improvisa al final: es **TDD generalizado**. Junto con artifact-first (sección siguiente) son los **dos sembrados** de cada gap/fase: *cómo sabré que funcionó* + *qué voy a hacer*.
59
+
60
+ **Dónde vive:** en `SESSION.Success criteria` (ver [`../../artifacts/artifacts-core/SESSION.md`](../../artifacts/artifacts-core/SESSION.md)) — checklist `[ ]` de criterios **falsables** (que *pueden* fallar). `CHECKPOINT.Pending/Completed` trackea el avance **red→green**. Dos formas según el deliverable:
61
+
62
+ | Deliverable | Criterio = | Ciclo |
63
+ |---|---|---|
64
+ | código / script / fix / feature | **tests ejecutables** (unit, build, lint, repro del bug) | TDD literal: red → green → refactor |
65
+ | migración BD (no ejecutable; invariante 4) | **rúbrica**: `SCRIPTS.sql` válido + revisado (no se ejecuta) | rúbrica |
66
+ | spec / plan | **rúbrica** = los acceptance criteria del documento (referenciados, no duplicados) | rúbrica |
67
+ | análisis / diseño | **rúbrica falsable por inspección** (ej. "todos los afectados con `file:line`"; "cada decisión: rationale + ≥1 alternativa") | rúbrica |
68
+
69
+ **Forma y peso escalan** (preserva la *ceremonia mínima* de quick): un chore es "tests/build existentes siguen verdes" (una línea); un feature, acceptance tests reales. No es "siempre escribir tests nuevos" — es "**siempre declarar el check antes**". Para deliverables **subjetivos** (análisis/diseño) la IA **propone** la rúbrica y el **humano la ratifica** (structured-choice) antes de perseguirla. **Criterio irresoluble** (sin evidencia, BD no disponible) → cierra `inconcluso` + el loop **degrada** (humano, o difiere a `Open questions`/`BACKLOG`); nunca itera en falso.
70
+
71
+ > El **convergence gate** (sección *Convergence / exit*) es, operacionalmente, **"todos los `Success criteria` en verde"**. Los gates por-heir (analyze gate, coherencia del plan, validación final, validación puntual proporcional) son **instancias** de esto, con los criterios sembrados al inicio.
72
+
40
73
  ## Artifacts as a live log — ciclo artifact-first (chasis — heredado por todos los loops)
41
74
 
42
75
  El loop trabaja **artifact-first**: el artefacto se **siembra antes** de ejecutar y se **actualiza después**, no solo al cerrar. Cada gap/fase/tarea corre el ciclo de **3 tiempos**:
@@ -168,6 +201,7 @@ La investigación es **inline**: una actividad **dentro de la session actual del
168
201
  spec-refine-loop(spec):
169
202
  input = glob(NNN-spec*.md) | argumento (ruta) # siempre el spec mismo (in place)
170
203
  refine_session = create_or_resume("spec-refine") # CLI antepone NNN global; resume localiza por descriptor/origin
204
+ seed SESSION.Success criteria = acceptance criteria + checklist del analyze gate # verification-first: ANTES de iterar
171
205
  work = read(input) (+ aplicar avance del checkpoint si reanuda)
172
206
  attempts = {} # anti-relanzamiento por gap
173
207
  repeat:
@@ -193,7 +227,7 @@ spec-refine-loop(spec):
193
227
  Compactar → write CHECKPOINT (refine_session) ; compactar(arnés) ; continue
194
228
  Cerrar → goto finalize
195
229
  work = integrate(work, ans) # → Q&A traceability / Open questions
196
- # sin gaps materiales → analyze gate (read-only) antes de ofrecer Guardar:
230
+ # sin gaps materiales → analyze gate = Success criteria en verde (read-only) antes de ofrecer Guardar:
197
231
  issues = analyze(work) # criterios trazan al Requirement · sin contradicciones · Scope coherente · Open questions cerradas/diferidas
198
232
  si issues: gaps += issues ; continue # los hallazgos vuelven al loop como gaps
199
233
  ans = structured_choice(contenido: [Guardar refinada, Preguntar algo más],
@@ -244,7 +278,7 @@ El resume **keya off el `CHECKPOINT`** de la refine session, no de la existencia
244
278
 
245
279
  ## Convergence / exit
246
280
 
247
- - **Sin gaps materiales** → **analyze gate** (read-only): cada acceptance criterion traza al `Requirement`, sin contradicciones internas, `Scope` In/Out coherente, `Open questions` cerradas o explícitamente diferidas. Lo que falle **vuelve como gap**; si pasa → ofrece `Guardar especificación refinada`. *(Es el "convergence gate" del chasis; heirs: plan-new = coherencia del plan, plan-exec = validación final, quick = validación puntual — excepción lightweight.)*
281
+ - **Sin gaps materiales** → **analyze gate** (read-only) = **`Success criteria` en verde** (*verification-first*): cada acceptance criterion traza al `Requirement`, sin contradicciones internas, `Scope` In/Out coherente, `Open questions` cerradas o explícitamente diferidas. Lo que falle **vuelve como gap**; si pasa → ofrece `Guardar especificación refinada`. *(Es el "convergence gate" del chasis; los heirs son instancias: plan-new = coherencia del plan, plan-exec = validación final, quick = validación puntual proporcional.)*
248
282
  - `Guardar` → `edit_in_place_with_confirm(spec)` y `finalize`.
249
283
  - `Cerrar` (control `flow`, en cualquier momento) → `finalize`. **`finalize` persiste siempre el `CHECKPOINT.md`** (reanudable) y, **solo si hay algo diferido/followup**, escribe `BACKLOG.md` (motivo de cierre + `Open questions` diferidas); cierra la session y reporta. Así sobrevive el avance aunque no se haya `Compactar` antes.
250
284