@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.
Files changed (77) hide show
  1. package/dist/adapters/git-cli.d.ts +1 -0
  2. package/dist/adapters/git-cli.d.ts.map +1 -1
  3. package/dist/adapters/git-cli.js +21 -0
  4. package/dist/adapters/git-cli.js.map +1 -1
  5. package/dist/application/humanize-es.d.ts +18 -0
  6. package/dist/application/humanize-es.d.ts.map +1 -0
  7. package/dist/application/humanize-es.js +71 -0
  8. package/dist/application/humanize-es.js.map +1 -0
  9. package/dist/application/merge-state-service.d.ts +37 -0
  10. package/dist/application/merge-state-service.d.ts.map +1 -0
  11. package/dist/application/merge-state-service.js +89 -0
  12. package/dist/application/merge-state-service.js.map +1 -0
  13. package/dist/application/session-close-service.d.ts.map +1 -1
  14. package/dist/application/session-close-service.js +4 -1
  15. package/dist/application/session-close-service.js.map +1 -1
  16. package/dist/application/status-service.d.ts +74 -0
  17. package/dist/application/status-service.d.ts.map +1 -0
  18. package/dist/application/status-service.js +336 -0
  19. package/dist/application/status-service.js.map +1 -0
  20. package/dist/application/templates/session.d.ts +4 -2
  21. package/dist/application/templates/session.d.ts.map +1 -1
  22. package/dist/application/templates/session.js +15 -11
  23. package/dist/application/templates/session.js.map +1 -1
  24. package/dist/cli/commands/merge-state.d.ts +3 -0
  25. package/dist/cli/commands/merge-state.d.ts.map +1 -0
  26. package/dist/cli/commands/merge-state.js +28 -0
  27. package/dist/cli/commands/merge-state.js.map +1 -0
  28. package/dist/cli/commands/status.d.ts +3 -0
  29. package/dist/cli/commands/status.d.ts.map +1 -0
  30. package/dist/cli/commands/status.js +10 -0
  31. package/dist/cli/commands/status.js.map +1 -0
  32. package/dist/cli/help-groups.d.ts.map +1 -1
  33. package/dist/cli/help-groups.js +2 -1
  34. package/dist/cli/help-groups.js.map +1 -1
  35. package/dist/cli/main.js +4 -0
  36. package/dist/cli/main.js.map +1 -1
  37. package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
  38. package/dist/cli/tui/data/workflow-content.js +2 -1
  39. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  40. package/dist/ports/git.d.ts +5 -0
  41. package/dist/ports/git.d.ts.map +1 -1
  42. package/package.json +1 -1
  43. package/skills/w/README.md +6 -3
  44. package/skills/w/SKILL.md +25 -9
  45. package/skills/w/artifacts/README.md +10 -9
  46. package/skills/w/artifacts/artifacts-core/BACKLOG.md +5 -8
  47. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +14 -13
  48. package/skills/w/artifacts/artifacts-core/SESSION.md +10 -11
  49. package/skills/w/artifacts/artifacts-core/TASKS.md +5 -5
  50. package/skills/w/artifacts/{artifacts-dev → artifacts-exec}/DECISION.md +3 -3
  51. package/skills/w/artifacts/{artifacts-dev → artifacts-exec}/TECHNICAL-NOTE.md +15 -15
  52. package/skills/w/artifacts/artifacts-research/ANALYSIS-FILE.md +14 -27
  53. package/skills/w/artifacts/artifacts-research/CONCLUSIONS.md +10 -13
  54. package/skills/w/commands/README.md +16 -10
  55. package/skills/w/commands/fix-git.md +33 -0
  56. package/skills/w/commands/plan-exec.md +4 -4
  57. package/skills/w/commands/plan-new.md +9 -7
  58. package/skills/w/commands/quick.md +1 -1
  59. package/skills/w/commands/spec-new.md +19 -15
  60. package/skills/w/commands/spec-refine.md +7 -5
  61. package/skills/w/commands/status.md +50 -0
  62. package/skills/w/exports/README.md +2 -2
  63. package/skills/w/exports/export-diagrams/SKILL.md +1 -1
  64. package/skills/w/exports/export-manuals/SKILL.md +2 -2
  65. package/skills/w/exports/export-reports/SKILL.md +1 -1
  66. package/skills/w/exports/export-scripts/SKILL.md +1 -1
  67. package/skills/w/harness/SKILL.md +85 -0
  68. package/skills/w/loops/README.md +22 -21
  69. package/skills/w/loops/plan-exec-loop/SKILL.md +60 -58
  70. package/skills/w/loops/plan-new-loop/SKILL.md +47 -41
  71. package/skills/w/loops/quick-loop/SKILL.md +23 -20
  72. package/skills/w/loops/spec-refine-loop/SKILL.md +116 -82
  73. package/skills/w/roles/README.md +2 -2
  74. package/skills/w/roles/git/SKILL.md +28 -7
  75. package/skills/w/roles/research/SKILL.md +22 -82
  76. package/skills/w/roles/testing/SKILL.md +2 -2
  77. package/skills/w/roles/ui-spec/SKILL.md +58 -48
@@ -0,0 +1,33 @@
1
+ ---
2
+ description: Resuelve conflictos de un merge en curso para una fuente dada o detectada. Identifica origen (theirs) y destino (ours), analiza la intención de ambos lados y resuelve; pregunta (structured-choice) ante ambigüedad o incoherencia. Git-safe — propone el commit de merge, nunca push/--amend/--no-verify. Transversal (no es flow), sin loop ni session, no toca docs/. Funciona en cualquier repo git, sin workspace inicializado.
3
+ argument-hint: "[<source path | alias>]"
4
+ allowed-tools:
5
+ [
6
+ "Bash",
7
+ "Read",
8
+ "Edit",
9
+ ]
10
+ ---
11
+
12
+ # fix-git — resolvedor de conflictos de merge (transversal)
13
+
14
+ Single-pass, **sin loop ni session**, **no escribe en `docs/`**. Comando **transversal** (no pertenece a SPEC / PLAN / QUICK). **Agnóstico al workspace**: opera sobre cualquier repo git — el `<source>` dado (path o alias), o el cwd — sin requerir `.workflow/`.
15
+
16
+ ## Ejecutar
17
+
18
+ 1. **Detectar + identificar** — corré `aw merge-state [<source>]` (read-only; `--source <alias>` o `--all` si hay workspace; un path directo si no). Del JSON, por repo: `is_merging`, `current_branch` (**destino / ours**), `merge_origin` (**origen / theirs**), `conflicted_files`.
19
+ - Si **no hay merge en curso** (`is_merging:false`) y el usuario indicó un **target** (p.ej. "merge `<branch>`"): es pedido explícito → `git -C <path> merge <branch>` y seguí. Sin target → informá que no hay merge que resolver y terminá.
20
+ 2. **Resolver** — **leé y seguí** la sección ***Resolución de conflictos de merge*** del rol `git` (`../roles/git/SKILL.md`): analizá la intención de cada conflicto (3 versiones `git show :1:/:2:/:3:<file>`, `git log --merge`), resolvé (ours / theirs / combinar / reescribir) y `git add` lo resuelto. Ante **ambigüedad o incoherencia**, preguntá vía *structured-choice* (no inventes la resolución).
21
+ 3. **Cerrar** — **proponé** el commit de merge (propose-then-execute, formato canónico, git-safe). Escape: `git merge --abort` tras confirmación del usuario.
22
+
23
+ > No intentes `Skill: git` — el rol se **lee y se sigue** (es la capacidad que este comando compone). El comando **es** la entrada; la doctrina de conflictos vive en el rol `git`.
24
+
25
+ ## Plan mode
26
+
27
+ Corré `aw merge-state` (read-only), reportá **origen ↔ destino** y los conflictos por archivo, y describí la **estrategia de resolución** que aplicarías — **sin** editar archivos ni commitear.
28
+
29
+ ## Resources
30
+
31
+ - Capability: `../roles/git/SKILL.md` (sección *Resolución de conflictos de merge*)
32
+ - CLI: `aw merge-state` (inspector read-only del estado de merge)
33
+ - Design reference: `docs/referencias/workflow-commands/fix-git.md`
@@ -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.md>
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.md`) es un documento vivo que el loop mantiene actualizado (estado de fases y tareas).
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.md` (living doc: estado de fases/tareas).
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 refinado. Convierte el "qué" (spec) en el "cómo" (plan). Input ideal: docs/specs/NNN-spec-refined.md.
3
- argument-hint: <docs/specs/NNN-spec-refined.md | docs/specs/NNN-spec.md | prompt>
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",
@@ -12,16 +12,18 @@ allowed-tools:
12
12
 
13
13
  # plan-new — trampolín al loop de planificación
14
14
 
15
- Puente SPEC → PLANIFICATION. Convierte el "qué" (spec refinado) en el "cómo" (plan). Delega a `plan-new-loop` (Layer 2).
15
+ Puente SPEC → PLAN. Convierte el "qué" (spec refinado) en el "cómo" (plan). Delega a `plan-new-loop` (Layer 2).
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. **`docs/specs/NNN-spec-refined.md`** → ideal. Procede directamente a `plan-new-loop`.
22
- 2. **`docs/specs/NNN-spec.md`** (borrador sin refinar) → propone correr `/w:spec-refine` primero; planificar sobre un spec sólido produce mejores planes.
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 toma su propio número `PPP` en `docs/plans/`. **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.
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
 
@@ -12,7 +12,7 @@ allowed-tools:
12
12
 
13
13
  # quick — trampolín al loop liviano
14
14
 
15
- Para tareas acotadas y directas que no justifican pasar por SPEC ni PLANIFICATION. Siempre crea una sesión ligera (trazabilidad + resume). Delega a `quick-loop` (Layer 2).
15
+ Para tareas acotadas y directas que no justifican pasar por SPEC ni PLAN. Siempre crea una sesión ligera (trazabilidad + resume). Delega a `quick-loop` (Layer 2).
16
16
 
17
17
  ## Ejecutar el loop
18
18
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Genera un borrador de especificación (docs/specs/NNN-spec.md) a partir de un prompt, en una sola pasada. Paso 1 del flujo SPEC; no arranca loop.
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,23 +11,24 @@ allowed-tools:
11
11
 
12
12
  # spec-new — borrador de especificación (single-pass)
13
13
 
14
- Genera `docs/specs/NNN-spec.md` en una sola pasada a partir del prompt en `$ARGUMENTS`. No arranca loop.
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
  >
18
18
  > Este comando **solo parafrasea** el input del usuario en el esquema de borrador. Es **una única pasada secuencial**: leer `$ARGUMENTS` → llenar las secciones → escribir el archivo. Nada más. Debe tardar **segundos, no minutos**.
19
19
  >
20
- > **PROHIBIDO**, sin excepción: lanzar workflows, subagentes (`Task`/`Agent`), sesiones de research, búsquedas web, o investigación profunda de código. No uses las tools `Workflow`, `Task` ni `Agent` aquí.
20
+ > **PROHIBIDO**, sin excepción: lanzar sub-agentes/workflows (`Task`/`Agent`/`Workflow`), sesiones de research, búsquedas web, o investigación profunda de código **incluso si el arnés está en un modo de máximo esfuerzo/profundidad** (ej. ultracode/max-effort en Claude Code).
21
21
  >
22
- > Esto **anula** cualquier modo o instrucción de sesión que diga "corre un workflow para toda tarea sustancial" (ultracode, max-effort, etc.). Esos modos **no aplican** a `spec-new`: el comando los pisa. Si una sección queda incierta, **no la investigues** — declarala en `## Open questions` o `## Assumptions` y seguí.
22
+ > Esto **anula** cualquier modo o instrucción de sesión que diga "corre un workflow para toda tarea sustancial". Esos modos **no aplican** a `spec-new`: el comando los pisa. Si una sección queda incierta, **no la investigues** — declarala en `## Open questions` o `## Assumptions` y seguí.
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. Crear `docs/specs/NNN-spec.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.
28
- 3. Mostrar el archivo generado y el próximo paso sugerido (`/w:spec-refine docs/specs/NNN-spec.md`).
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.md`)
31
+ ## Esquema del borrador (`NNN-spec-<slug>.md`)
31
32
 
32
33
  ```markdown
33
34
  # Spec NNN — <slug>
@@ -46,22 +47,25 @@ Sistemas / componentes / fuentes involucradas. Restricciones conocidas.
46
47
  - Out: qué NO entra
47
48
 
48
49
  ## Acceptance criteria
49
- - [ ] criterio verificable 1
50
+ - [ ] criterio verificable 1 (estilo EARS / Given-When-Then recomendado)
50
51
  - [ ] criterio verificable 2
51
52
 
52
- ## Open questions
53
- Dudas pendientes. ← el spec-refine-loop las va cerrando.
54
-
55
53
  ## Assumptions (opt.)
56
54
  Supuestos asumidos.
55
+
56
+ ## Open questions
57
+ Dudas pendientes. ← el spec-refine-loop las va cerrando.
57
58
  ```
58
59
 
60
+ > **`Open questions` va último** — el spec refinado **inserta antes de `Open questions`** `## UI spec` (si hay UI) + `## Refinement decisions` + `## Q&A traceability` (esquema refinado en el [`spec-refine-loop`](../loops/spec-refine-loop/SKILL.md)). Mismo esqueleto: el borrador y el refinado comparten orden.
61
+
59
62
  **Notas de llenado:**
60
63
  - Sin campo `Type` — `plan-new` infiere el cómo.
61
64
  - `Scope` siempre lleva `Out` (qué queda fuera).
62
- - Los criterios de aceptación deben ser verificables (testeables).
63
- - 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.md`.
65
+ - **Acceptance criteria = criterios testables estáticos** (el "qué"): `plan-exec` los valida pero el avance se trackea en el PLAN (sus Tasks), no marcando estos `- [ ]` en el spec; el spec no muta por ejecución, solo por re-refine.
66
+ - Si hay **UI** involucrada, mencionarlo en `Requirement`/`Context`; el `## UI spec` se autora en `spec-refine` (vía capacidad `ui-design`). "UI sin especificar" es un gap de primera clase del refinamiento.
67
+ - Los **gaps** que detecta el loop = secciones débiles del esquema (Requirement vago, Scope sin `Out`, criterios no testables, Open questions abiertas, supuestos no declarados, contradicciones) **+ UI sin especificar** si el requerimiento involucra UI.
68
+ - Alternativa equivalente: el usuario crea el borrador a mano. Ambos caminos producen el mismo `docs/specs/NNN-spec-<slug>.md`.
65
69
 
66
70
  ## Plan mode
67
71
 
@@ -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.md (borrador). Output: docs/specs/NNN-spec-refined.md.
3
- argument-hint: <docs/specs/NNN-spec.md>
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 ni refined) → arranca desde cero leyendo `NNN-spec.md`.
33
- 4. **Ya completado** (existe `NNN-spec-refined.md`, sin CHECKPOINT abierto) → re-refinamiento incremental: lee el **refined** como input (NO el borrador stale); al `Guardar`, sobrescribe con confirmación.
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`
@@ -29,14 +29,14 @@
29
29
  | [`export-diagrams`](export-diagrams/SKILL.md) | `diagrams` | source code of the sources + plan-doc (`AS-IS` / `TO-BE`, `Impacted`) | `docs/diagrams/` (C4 / mermaid) |
30
30
  | [`export-reports`](export-reports/SKILL.md) | `writing` | corpus of sessions (spec, `CONCLUSIONS`, `DECISION`) + plan-doc state + `docs/` | `docs/reports/` (executive / functional report) |
31
31
 
32
- > **Composition over ownership:** an export does **not** own its authoring logic — it **composes a capability role** from [`../../`workflow-skills](../../) (resolved through `.workflow/skills.toml`): `export-scripts` composes `sql`; `export-manuals` and `export-reports` compose `writing`; `export-diagrams` composes `diagrams`. Swapping the implementation is a one-line config change; it never touches the export.
32
+ > **Composition over ownership:** an export does **not** own its authoring logic — it **composes a capability role** from [`../roles/`](../roles/) (resolved through `.workflow/skills.toml`): `export-scripts` composes `sql`; `export-manuals` and `export-reports` compose `writing`; `export-diagrams` composes `diagrams`. Swapping the implementation is a one-line config change; it never touches the export.
33
33
 
34
34
  ## Common properties
35
35
 
36
36
  1. **Layer 1, explicit** — the **user** invokes them (`/w:export-<cat>`). **Never** automatic (no loop fires them).
37
37
  2. **Single-pass, read-only over sessions** — they read artifacts/sessions and `docs/`, **synthesize**, and write **only** their own `docs/<category>/` folder. They do **not** mutate sessions and do **not** open/close loops.
38
38
  3. **Cross-session** — they consolidate **N** sessions + the `docs/` corpus (dedup, roadmap, continuous numbering).
39
- 4. **No loop, no internal sessions** — options come from **args** (no lifecycle `AskUserQuestion`).
39
+ 4. **No loop, no internal sessions** — options come from **args** (no *structured-choice* de ciclo de vida — capacidad del arnés; ver [`../harness/SKILL.md`](../harness/SKILL.md)).
40
40
  5. **Git-safe** — they **never** commit, merge, push, `--amend`, or `--no-verify`. The output is a written document the user reviews and commits when ready.
41
41
  6. **DB scripts-only** — `export-scripts` ships migration SCRIPTS as a bundle; it **never executes** DDL/DML (a human/DBA applies them).
42
42
 
@@ -60,7 +60,7 @@ En plan mode **describe**, no escribe: el motor resuelto, los niveles/secciones
60
60
 
61
61
  **MCP read-only** (opcional, solo si se pide modelo de datos y está configurado): `\d <tabla>`, `SELECT count(*)`, relaciones FK para el `erDiagram`. Con cost guard.
62
62
 
63
- **Args** (sin lifecycle `AskUserQuestion`):
63
+ **Args** (sin *structured-choice* de ciclo de vida — capacidad del arnés; ver [`../../harness/SKILL.md`](../../harness/SKILL.md)):
64
64
 
65
65
  ```
66
66
  /w:export-diagrams [--sessions NNN[,NNN]] [--since sessionNNN] [--source <alias>]
@@ -60,7 +60,7 @@ En plan mode **describe**, no escribe: el modo resuelto, los temas detectados (c
60
60
  - `docs/manuals/INDEX.md` — re-generable (sobrescribible) en modo `complement`.
61
61
  - Código de las fuentes declaradas — lectura para describir el comportamiento.
62
62
 
63
- **Args** (sin lifecycle `AskUserQuestion`):
63
+ **Args** (sin *structured-choice* de ciclo de vida — capacidad del arnés; ver [`../../harness/SKILL.md`](../../harness/SKILL.md)):
64
64
 
65
65
  ```
66
66
  /w:export-manuals [--sessions NNN[,NNN]] [--since sessionNNN] [--source <alias>]
@@ -123,5 +123,5 @@ Si `--dry-run`: imprimir el reporte; no escribir. Si no: `complement` → `Write
123
123
 
124
124
  - Design: `docs/referencias/workflow-exports/export-manuals.md` · familia: [`../README.md`](../README.md).
125
125
  - Capacidad compuesta: `writing` (built-in default; ver `docs/referencias/workflow-skills/`).
126
- - Artefactos fuente: `DECISION` + plan-doc (ver `docs/referencias/workflow-artifacts/artifacts-dev/` y `docs/specs`/`docs/plans`).
126
+ - Artefactos fuente: `DECISION` + plan-doc (ver `docs/referencias/workflow-artifacts/artifacts-exec/` y `docs/specs`/`docs/plans`).
127
127
  - Siblings: [`../export-scripts/SKILL.md`](../export-scripts/SKILL.md) · [`../export-diagrams/SKILL.md`](../export-diagrams/SKILL.md) · [`../export-reports/SKILL.md`](../export-reports/SKILL.md).
@@ -57,7 +57,7 @@ En plan mode **describe**, no escribe: la audiencia/longitud resuelta, las sesio
57
57
 
58
58
  - `docs/specs`, `docs/plans`, `docs/reports/*` — contexto + no colisionar.
59
59
 
60
- **Args** (sin lifecycle `AskUserQuestion`):
60
+ **Args** (sin *structured-choice* de ciclo de vida — capacidad del arnés; ver [`../../harness/SKILL.md`](../../harness/SKILL.md)):
61
61
 
62
62
  ```
63
63
  /w:export-reports [--sessions NNN[,NNN]] [--since sessionNNN] [--source <alias>]
@@ -58,7 +58,7 @@ En plan mode **describe**, no escribe: el `NNN` resuelto, las fuentes detectadas
58
58
 
59
59
  - `docs/scripts/*.sql` standalone (solo top-level), **excluyendo** cualquier `docs/scripts/NNN-export-scripts-*/` (outputs previos de este export).
60
60
 
61
- **Args** (sin lifecycle `AskUserQuestion`):
61
+ **Args** (sin *structured-choice* de ciclo de vida — capacidad del arnés; ver [`../../harness/SKILL.md`](../../harness/SKILL.md)):
62
62
 
63
63
  ```
64
64
  /w:export-scripts [--sessions NNN[,NNN]] [--since sessionNNN] [--source <alias>]
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: harness
3
+ description: >-
4
+ Harness-agnostic capability layer for agent-workflow. Read-and-follow doc (no es
5
+ invocable por nombre): define el contrato que mantiene a la herramienta agnóstica al
6
+ arnés (Claude Code, Codex, opencode, Gemini CLI, genérico) sin renunciar a las
7
+ capacidades ricas de cada uno. Cataloga las capacidades de las que depende el
8
+ workflow, las liga al mecanismo concreto de cada arnés (binding matrix), y fija los
9
+ dos principios (capacidad-no-tool · progressive-enhancement). Referenciado desde
10
+ SKILL.md (overview) y los loops cuando nombran structured-choice / compaction.
11
+ ---
12
+
13
+ # harness — capa de capacidades agnóstica al arnés (cross-cutting)
14
+
15
+ Doc de **lectura y seguimiento** (no se invoca por nombre). Aquí vive el contrato que mantiene a agent-workflow **agnóstico al arnés** (Claude Code, Codex, opencode, Gemini CLI, …) sin renunciar a las capacidades ricas de cada uno. Referenciado desde `../SKILL.md` (overview) y desde los loops cuando nombran una capacidad (`structured-choice`, `compaction`, …).
16
+
17
+ ## El problema
18
+
19
+ La doctrina (comandos + loops + artefactos) describe **qué** hace la IA, no **con qué tool** de un arnés concreto. El vocabulario natural arrastra mecanismos específicos de Claude Code —`AskUserQuestion`, `/compact`, `$ARGUMENTS`, `Task`/`Agent`— como si fueran universales. Este documento los abstrae: la doctrina referencia **capacidades**; aquí se mapea cada capacidad al **mecanismo concreto** de cada arnés.
20
+
21
+ ## Dos principios
22
+
23
+ 1. **Capacidad, no tool.** Los loops/comandos nombran una **capacidad** abstracta (ej. *structured-choice*, *compaction*). Una sola tabla —esta— la liga al mecanismo de cada arnés. Cambiar de arnés = cambiar de columna, no de doctrina.
24
+ 2. **Progressive enhancement.** Usá el mecanismo **más rico** que ofrezca el arnés; **degradá** a un fallback universal cuando no exista. Así se cumple a la vez "agnóstica al arnés" **y** "aprovechar las capacidades de cada uno".
25
+
26
+ > **Simetría con la cascada de skills (`.workflow/skills.toml`):** esa categoría liga **roles → skills** por config; esta liga **capacidades → mecanismos del arnés** por detección. Mismo patrón (binding + default), distinto eje: una es *qué saber compone el loop*, la otra es *con qué primitivas del host se ejecuta*.
27
+
28
+ ## Capability catalog
29
+
30
+ Las capacidades de las que depende el harness, con su fallback universal (lo que se usa si el arnés no ofrece algo mejor):
31
+
32
+ | Capability | Qué necesita el workflow | Fallback universal (mínimo común) |
33
+ |---|---|---|
34
+ | **command-invocation** | el usuario dispara un flujo por nombre (`spec-new`, `plan-exec`, …) | el usuario escribe "corré el procedimiento `<cmd>`" y la IA lee su doc |
35
+ | **procedure-loading** | cargar la doctrina de un loop/comando | la IA **lee el `.md`** del loop y lo sigue (read-and-follow) |
36
+ | **structured-choice** | preguntar al humano ≤3 preguntas de contenido **+ siempre** un control `flow` (`Compactar`/`Cerrar`) por un canal lateral | pregunta en **markdown numerado** en el chat; el control `flow` se ofrece como una opción más |
37
+ | **compaction** | encoger el contexto sin perder el hilo | escribir `CHECKPOINT` y pedir al usuario reiniciar el contexto y reanudar (resume keya off `CHECKPOINT`) |
38
+ | **subagent-dispatch** | *(opcional)* paralelizar breadth de research | research **inline secuencial** en la misma session (es el default igual) |
39
+ | **persistent-context** | bloque `WORKSPACE` + convenciones siempre presentes | archivo de contexto del repo (**`AGENTS.md`** estándar; `CLAUDE.md` en Claude Code) |
40
+ | **external-data** | lecturas read-only de BD u otras fuentes para research/validación | **MCP** (ampliamente soportado); si no hay, el gap se degrada a pregunta-al-humano |
41
+ | **dry-run / preview** | previsualizar lo que haría un comando sin escribir | el comando **describe** el cambio en vez de aplicarlo (ej. `spec-new` lista el borrador sin crear el archivo) |
42
+
43
+ > **Las capacidades `must` para el ciclo de un loop son solo dos**: `structured-choice` y `compaction`. Ambas degradan a un fallback puramente textual → **cualquier** arnés con chat + sistema de archivos corre el modelo completo. El resto (subagents, MCP, slash commands, skills nativas) es *enhancement*.
44
+
45
+ ## Harness binding matrix
46
+
47
+ Mecanismo concreto por arnés (jun-2026; `~` parcial · `?` sin confirmar).
48
+
49
+ | Capability | Claude Code | Codex CLI | opencode | Gemini CLI | Genérico |
50
+ |---|---|---|---|---|---|
51
+ | command-invocation | `.claude/commands/` (slash) | skills (prompts custom **deprecados**) | `.opencode/commands/` | `.gemini/commands/*.toml` | texto |
52
+ | procedure-loading | skills `SKILL.md` | skills `SKILL.md` | skills `SKILL.md` | skills (extensiones) | read-and-follow `.md` |
53
+ | structured-choice | `AskUserQuestion` (**solo main-agent**) | — | — | — | markdown numerado |
54
+ | compaction | `/compact` | `?` | `?` | `?` | CHECKPOINT + resume |
55
+ | subagent-dispatch | `Task` (paralelo) | agents (depth=1) | Explore/Scout | agents | inline |
56
+ | persistent-context | `CLAUDE.md` (**no** lee AGENTS.md → symlink) | `AGENTS.md` | `AGENTS.md` | `AGENTS.md`/`GEMINI.md` | `AGENTS.md` |
57
+ | external-data | MCP | MCP | MCP | MCP | — |
58
+ | dry-run / plan | plan mode (enforced) | `/plan` (prompt, **no** enforced) | Plan agent | plan mode | describir sin escribir |
59
+
60
+ > **Notas (investigación de campo jun-2026):** las **skills `SKILL.md`** son la unidad portable **universal** (las cinco las soportan; Codex deprecó los prompts custom) → la doctrina se empaqueta como skill. La **elección estructurada** (`AskUserQuestion`) es **solo de Claude Code y solo del main-agent** → en el resto, `structured-choice` degrada a markdown numerado. El **plan mode** está *enforced* solo en Claude Code/opencode (prompt-level en Codex) → **no se confía para safety**; el git-safe (invariante #5) es propio. **MCP** es universal. El **piso garantizado** (última columna) corre el modelo completo.
61
+
62
+ ## Leverage installed skills
63
+
64
+ "Aprovechar las skills que el arnés tenga instaladas" se resuelve por el **mismo binding** de `.workflow/skills.toml`: un rol puede apuntar a una skill **instalada en el host** (de tercero, vía skills.sh) en vez del built-in. Regla:
65
+
66
+ - Si el host tiene una skill **mejor** para un rol (ej. un generador de diagramas superior para `diagrams`, un linter de estándares para `coding-standards`), se la **bindea** en `.workflow/skills.toml` y el loop la compone sin cambios.
67
+ - El built-in default es el **piso**, no el techo: garantiza que el rol funcione en cualquier host; el binding lo **enriquece** donde el host puede más.
68
+
69
+ ## Convención para el resto del corpus
70
+
71
+ - Los loops/comandos referencian la **capacidad** por nombre (ej. "*structured-choice* (ver `harness/SKILL.md`)"), **no** el tool concreto.
72
+ - El nombre histórico `AskUserQuestion` se conserva **solo** como el binding Claude-Code de `structured-choice` (esta tabla), no como vocabulario de la doctrina.
73
+ - El control de ciclo de vida `flow` (`Compactar`/`Cerrar`) es parte de la capacidad `structured-choice`, no de un tool: en arneses sin elección estructurada se ofrece como una opción textual más.
74
+
75
+ ## Distribution (install-time)
76
+
77
+ Patrón probado (Spec Kit, 30+ agentes): **una fuente canónica** + generar/symlinkear a los dirs por-arnés en la instalación (`.claude/`, `.codex/`, `.gemini/`, …). agent-workflow ya lo hace vía `aw self install-skill`. Convención recomendada: **`AGENTS.md` canónico + `CLAUDE.md` symlink** (Claude Code no lee `AGENTS.md` nativo; el resto sí).
78
+
79
+ ## Command packaging (harness-specific)
80
+
81
+ El **contrato** de cada comando (Flow, Trigger, Input, Mode, …) es agnóstico. El **archivo** que el arnés ejecuta envuelve ese contrato en su formato nativo: Claude Code = slash-command con frontmatter (`description`, `argument-hint`, `allowed-tools`) + cuerpo que invoca la skill o el `aw` CLI; Codex = skill (los prompts custom en `~/.codex/prompts/` están deprecados); otros, su equivalente. El contrato no cambia; el envoltorio sí (otra columna). El comportamiento en *dry-run / plan mode* (previsualizar sin escribir) se documenta en el cuerpo del comando cuando aplica.
82
+
83
+ ## Status
84
+
85
+ Modelo de capacidades + matriz de binding **definidos** y **validados** con investigación de campo (jun-2026). El piso universal (`AGENTS.md` + texto + archivos + skills) corre el modelo completo hoy.
@@ -13,28 +13,28 @@ 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. **Puede crear sessions internas** si refinar/planificar/ejecutar requiere trabajo profundo (ej. investigar el código), el loop crea una session en `.workflow/sessions/` que maneja **sus** artefactos, la cierra y reporta de vuelta. **El usuario nunca crea esas sessions.**
17
- 3. **AskUserQuestion con dos tipos de tab** (límite host: 4 preguntas/llamada):
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
- - **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.
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):
18
+ - **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
+ - **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
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
21
 
22
- ## flow tab — options
22
+ ## flow control — options
23
23
 
24
- El tab `flow` es **fijo**: `Compactar` / `Cerrar`, presente en los 4 loops. Responder el tab de contenido **sin tocar `flow`** = seguir iterando ("continuar" es el comportamiento por defecto del loop, no una opción del canal de control).
24
+ El control `flow` es **fijo**: `Compactar` / `Cerrar`, presente en los 4 loops. Responder la pregunta de contenido **sin tocar `flow`** = seguir iterando ("continuar" es el comportamiento por defecto del loop, no una opción del canal de control).
25
25
 
26
26
  | Option | What it does |
27
27
  |---|---|
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` + `BACKLOG`), cierra sessions internas y termina el loop. |
28
+ | `Compactar` | Escribe `CHECKPOINT` (session dueña del run) + dispara la **compactación** del arnés (en Claude Code: `/compact`; ver [`../harness/SKILL.md`](../harness/SKILL.md)) y reanuda sin perder el hilo. |
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.md` (o `…-spec-refined.md` si ya existe) | `docs/specs/NNN-spec-refined.md` |
36
- | [`plan-new-loop`](plan-new-loop/SKILL.md) | PLANIFICATION | `/w:plan-new` | `docs/specs/NNN-spec-refined.md` | `docs/plans/PPP-plan.md` |
37
- | [`plan-exec-loop`](plan-exec-loop/SKILL.md) | PLANIFICATION | `/w:plan-exec` | `docs/plans/PPP-plan.md` | `docs/plans/PPP-plan.md` (update) + `docs/tools`; resto vía `export-*` |
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) | PLAN | `/w:plan-new` | `docs/specs/NNN-spec-*.md` | `docs/plans/PPP-plan-<slug>.md` |
37
+ | [`plan-exec-loop`](plan-exec-loop/SKILL.md) | PLAN | `/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**.
@@ -46,14 +46,14 @@ Los loops **nunca** graduan/exportan artefactos a `docs/` automáticamente. Cada
46
46
  | Flow | Carpetas `docs/` que escribe |
47
47
  |---|---|
48
48
  | SPEC | `docs/specs` |
49
- | PLANIFICATION | `docs/plans` (living) + `docs/tools` (herramientas creadas — salida directa) |
49
+ | PLAN | `docs/plans` (living) + `docs/tools` (herramientas creadas — salida directa) |
50
50
  | QUICK | ninguna |
51
51
 
52
52
  Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, diagramas → `docs/diagrams`, informes → `docs/reports`) queda como **artefacto de session** hasta que un `export-*` lo promueva, como paso aparte y explícito.
53
53
 
54
- ## Loops × flow tab
54
+ ## Loops × flow control
55
55
 
56
- | Loop | tab(s) de contenido típicos | tab `flow` |
56
+ | Loop | pregunta(s) de contenido típicas | control `flow` |
57
57
  |---|---|---|
58
58
  | `spec-refine-loop` | dudas-de-humano · elección de MCP · convergencia (`Guardar especificación refinada` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
59
59
  | `plan-new-loop` | dudas · elección de MCP · convergencia (`Guardar plan` / `Preguntar algo más`) | `Compactar` / `Cerrar` |
@@ -64,7 +64,7 @@ Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, dia
64
64
 
65
65
  | Field | Description |
66
66
  |---|---|
67
- | `## Flow` | A qué flujo pertenece (SPEC · PLANIFICATION · QUICK) |
67
+ | `## Flow` | A qué flujo pertenece (SPEC · PLAN · QUICK) |
68
68
  | `## Layer` | Siempre 2 (la IA lo corre entero) |
69
69
  | `## Started by` | Comando `/w:…` que lo arranca (reanudable) |
70
70
  | `## Reads` | Documento(s) de entrada |
@@ -73,19 +73,20 @@ Todo lo demás (migraciones → `docs/scripts`, manuales → `docs/manuals`, dia
73
73
  | `## Sequence` | Pseudocódigo + mermaid del loop |
74
74
  | `## Convergence / exit` | Cuándo para |
75
75
 
76
- El **chasis** (`spec-refine-loop`) además detalla `## Composes` (capacidades que compone), `## Deliverable schema`, `## Gap taxonomy`, `## Ask-vs-research rule`, `## Research: autonomy, scope & failure`, `## AskUserQuestion`, `## Compact / resume`, `## Integration`.
76
+ El **chasis** (`spec-refine-loop`) además detalla `## Composes` (capacidades que compone), `## Deliverable schema`, `## Gap taxonomy`, `## Ask-vs-research rule`, `## Research: autonomy, scope & failure`, `## Structured-choice`, `## Compact / resume`, `## Integration`.
77
77
 
78
78
  Los **heirs** (`plan-new-loop`, `plan-exec-loop`, `quick-loop`) usan `## Inherits` (lo que reusan del chasis, sin repetirlo) + `## Delta N` (sus diferencias).
79
79
 
80
80
  ## Chassis / heirs
81
81
 
82
82
  ```
83
- spec-refine-loop ── CHASIS (patrón de referencia: motor gap-driven, sessions,
84
- AskUserQuestion + tab flow, research autónomo + regla BD,
85
- │ compact/resume, Cerrar persiste CHECKPOINT+BACKLOG)
83
+ spec-refine-loop ── CHASIS (patrón de referencia: motor gap-driven, sesión única,
84
+ structured-choice + control 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 fase, sin auto-export
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 on-demand) |
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) |