@tacuchi/agent-workflow-cli 9.2.0 → 10.0.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 (36) hide show
  1. package/dist/application/auto-plan.d.ts +15 -2
  2. package/dist/application/auto-plan.d.ts.map +1 -1
  3. package/dist/application/auto-plan.js +70 -9
  4. package/dist/application/auto-plan.js.map +1 -1
  5. package/dist/application/host-doctor-service.d.ts +21 -0
  6. package/dist/application/host-doctor-service.d.ts.map +1 -0
  7. package/dist/application/host-doctor-service.js +101 -0
  8. package/dist/application/host-doctor-service.js.map +1 -0
  9. package/dist/cli/commands/auto-plan-decide.d.ts.map +1 -1
  10. package/dist/cli/commands/auto-plan-decide.js +56 -3
  11. package/dist/cli/commands/auto-plan-decide.js.map +1 -1
  12. package/dist/cli/commands/host-doctor.d.ts +3 -0
  13. package/dist/cli/commands/host-doctor.d.ts.map +1 -0
  14. package/dist/cli/commands/host-doctor.js +10 -0
  15. package/dist/cli/commands/host-doctor.js.map +1 -0
  16. package/dist/cli/main.js +2 -0
  17. package/dist/cli/main.js.map +1 -1
  18. package/package.json +1 -1
  19. package/skills/agent-workflow/commands/export-scripts.md +36 -19
  20. package/skills/agent-workflow/commands/rules.md +3 -2
  21. package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +5 -3
  22. package/skills/agent-workflow/doctrine/migrate/SKILL.md +6 -6
  23. package/skills/agent-workflow/doctrine/rules/SKILL.md +29 -3
  24. package/skills/agent-workflow/doctrine/session/SKILL.md +40 -0
  25. package/skills/agent-workflow/doctrine/session/references/prompts/M13-closure-cleanup.md +61 -0
  26. package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +5 -2
  27. package/skills/agent-workflow/exports/export-scripts/SKILL.md +97 -76
  28. package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +20 -6
  29. package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +13 -1
  30. package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +252 -42
  31. package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +45 -72
  32. package/skills/agent-workflow/exports/export-scripts/references/validations.md +119 -71
  33. package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +77 -62
  34. package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +4 -2
  35. package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +5 -3
  36. package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +16 -16
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: Consolida N sesiones del workspace + `docs/scripts/` ya graduados en un paquete de paso a producción bajo `docs/scripts/NNN-export-scripts-YYYY-MM-DD/`. Genera manifest.md (informe + checklist + acciones manuales + git state + code-scan), por-sesion/ (bundle SQL organizado), por-tema/ (vista opt-in), rollback-global.sql y ORDER.md. Read-only. Refactor de /agent-workflow:release + /agent-workflow:release-scripts.
3
- argument-hint: (opcional) --since sessionNNN | --source <alias> | --themes slug1,slug2|infer | --keep-parts | --skip-code-scan | --dry-run
2
+ description: Consolida N sesiones del workspace + `docs/scripts/` ya graduados en un paquete de paso a producción bajo `docs/scripts/NNN-export-scripts-YYYY-MM-DD/` (v4.0.0 — session093). Layout plano cross-session al root del bundle: 00-ROLLBACK.sql + 01-DDL-TABLES.sql + 02-DDL-FUNCTIONS.sql + 03-DML.sql + 04-INSERTS.sql + README.md único. Sin por-sesion/, sin companions .rollback.sql, sin per-sesión rollback. `--themes` opt-in genera por-tema/ como capa adicional. Read-only. Reemplaza /agent-workflow:release + /agent-workflow:release-scripts (deprecation Fase 1).
3
+ argument-hint: (opcional) --sessions NNN[,NNN] | --since sessionNNN | --source <alias> | --themes slug1,slug2|infer | --keep-parts | --skip-code-scan | --dry-run
4
4
  allowed-tools:
5
5
  [
6
6
  "Read",
@@ -15,19 +15,34 @@ allowed-tools:
15
15
 
16
16
  Consolida N sesiones cerradas (más opcionalmente activas) en un paquete único de paso a producción. Delega al skill `export-scripts` (`agent-workflow/skills/export-scripts/SKILL.md`).
17
17
 
18
- El skill **nunca** ejecuta commits, merges, push, SQL ni envía correos. Solo produce:
18
+ El skill **nunca** ejecuta commits, merges, push, SQL ni envía correos. Layout v4.0.0 del bundle (cross-session al root):
19
19
 
20
- - `<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/manifest.md` — informe consolidado (sesiones, acciones manuales, BD, hallazgos code-scan, git, checklist).
21
- - `<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/README.md` — índice + mapeo sesión↔tema↔scripts.
22
- - `<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/ORDER.md` secuencia ejecutable.
23
- - `<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/rollback-global.sql` rollback encadenado inverso.
24
- - `<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/por-sesion/` bundle SQL por sesión (organizado 01→04).
25
- - `<docs>/scripts/NNN-export-scripts-YYYY-MM-DD/por-tema/` bundle consolidado por tema (opt-in).
20
+ ```
21
+ <docs>/scripts/NNN-export-scripts-YYYY-MM-DD/
22
+ ├── 00-ROLLBACK.sql # único rollback cross-session (encadenado 04→01)
23
+ ├── 01-DDL-TABLES.sql # CREATE/ALTER TABLE cross-session (skip si vacío)
24
+ ├── 02-DDL-FUNCTIONS.sql # CREATE OR REPLACE FUNCTION cross-session (skip si vacío)
25
+ ├── 03-DML.sql # UPDATE/DELETE/migración cross-session (skip si vacío)
26
+ ├── 04-INSERTS.sql # INSERT/seed cross-session (skip si vacío)
27
+ ├── README.md # único informe + índice + how-to-execute
28
+ ├── _queries/ # opcional: queries de soporte por sesión
29
+ │ └── sessionXXX/...
30
+ └── por-tema/ # opt-in (capa adicional encima del root plano)
31
+ ├── tema-<slug>/
32
+ │ ├── 01-DDL-TABLES.sql
33
+ │ ├── 02-DDL-FUNCTIONS.sql
34
+ │ ├── 03-DML.sql
35
+ │ ├── 04-INSERTS.sql
36
+ │ └── parts/ # si --keep-parts
37
+ └── tema-<otro>/...
38
+ ```
26
39
 
27
40
  Donde `<docs>` es:
28
41
  - `Path.cwd() / docs` por default (project mode o hub workspace base).
29
42
  - `<source.path>/docs` si se pasa `--source <alias>` en hub mode.
30
43
 
44
+ **No se generan** (eliminados desde v4.0.0): `manifest.md` separado, `ORDER.md`, `rollback-global.sql`, `por-sesion/`, `<file>.rollback.sql` companions, `<session>/rollback/`. El histórico v3.x (`docs/scripts/001-002-003-*` ya generados) queda como histórico — no se migra.
45
+
31
46
  Último comando de la familia `/agent-workflow:export-*` definida en `docs/conclusiones/007-export-commands-family.md`. Refactor que consolida `/agent-workflow:release` v2.0.0 + `/agent-workflow:release-scripts` v2.0.0.
32
47
 
33
48
  ## Excepción session-aware
@@ -40,34 +55,35 @@ Este skill (junto con `release`, `release-scripts`, `export-report`, `export-arq
40
55
 
41
56
  ### Argumentos soportados
42
57
 
43
- - `--since sessionNNN` — incluye sólo sesiones posteriores a NNN (inclusive).
58
+ - `--sessions NNN[,NNN]` — filtro discreto por código. Toma precedencia sobre `--since` (warning si ambos).
59
+ - `--since sessionNNN` — incluye sólo sesiones posteriores a NNN (inclusive). Ignorado si `--sessions` presente.
44
60
  - `--source <alias>` — en hub mode, limita a una fuente específica.
45
- - `--themes slug1,slug2` — genera `por-tema/` con los slugs declarados.
61
+ - `--themes slug1,slug2` — genera `por-tema/<slug>/` (capa adicional encima del root plano).
46
62
  - `--themes infer` — inferencia LLM de temas (mismo flujo que release-scripts legacy).
47
63
  - `--keep-parts` — preserva `por-tema/<slug>/parts/<categoria>/*.sql`.
48
64
  - `--skip-code-scan` — omite el escaneo de código fuente.
49
65
  - `--dry-run` — reporte propositivo sin escribir archivos.
50
66
 
51
- Sin args: incluye todas las sesiones cerradas, sin vista `por-tema/`, escanea todo el código.
67
+ Sin args: incluye todas las sesiones cerradas, sin capa `por-tema/`, escanea todo el código.
52
68
 
53
69
  ## Flujo
54
70
 
55
71
  Antes de generar, el skill llama al CLI `agent-workflow`:
56
72
 
57
73
  ```
58
- agent-workflow release-data --include-graduated [--since sessionNNN] [--source <alias>]
74
+ agent-workflow release-data --include-graduated [--sessions NNN[,NNN]] [--since sessionNNN] [--source <alias>]
59
75
  agent-workflow code-scan # con built-in patterns + override
60
76
  agent-workflow next-number docs/scripts # numeración determinística
61
77
  agent-workflow session-artifacts --code <CODE> # lazy read de OBJECTIVE/TASKS/DECISIONS/scripts
62
78
  ```
63
79
 
64
- Luego delega a `sql-script-organizer` (clasificación 01→04 cross-session) y `sql-rollback-generator` (rollback acoplado + global). Si hay temas declarados o `--themes infer`: aplica algoritmo de consolidación por tema (port adaptado de release-scripts legacy).
80
+ Luego consolida cross-session por categoría al root del bundle (`01-DDL-TABLES.sql`, `02-DDL-FUNCTIONS.sql`, `03-DML.sql`, `04-INSERTS.sql`) y delega a `sql-rollback-generator` v2.0.0+ para generar el `00-ROLLBACK.sql` único. Si `--themes` declarado o inferido: agrega capa `por-tema/<slug>/` sin duplicar rollback.
65
81
 
66
82
  Valida V1-V6 (`references/validations.md`) antes de escribir el bundle al filesystem.
67
83
 
68
84
  ## Plan mode
69
85
 
70
- Reglas generales en `skills/session/references/sandbox-readonly-rules.md`. Describir en el plan file: NNN resuelto + sesiones incluidas + scripts por sesión, vista `por-tema/` activación (lectura de `## Temas` o flag), hallazgos esperados del code-scan, acciones manuales detectadas, advertencias bloqueantes (sesiones abiertas, rollback ausente, irreversibles).
86
+ Reglas generales en `skills/session/references/sandbox-readonly-rules.md`. Describir en el plan file: NNN resuelto + sesiones incluidas + sentencias cross-session por categoría, capa `por-tema/` (activación + slugs), hallazgos esperados del code-scan, acciones manuales detectadas, advertencias bloqueantes (sesiones abiertas, rollback ausente, irreversibles).
71
87
 
72
88
  ## Relación con `/agent-workflow:release` y `/agent-workflow:release-scripts`
73
89
 
@@ -80,13 +96,14 @@ Detalle del plan: `skills/export-scripts/references/deprecation-plan.md`.
80
96
 
81
97
  ## Recursos
82
98
 
83
- - `skills/export-scripts/SKILL.md` v1.0.0 — orquestador del comando.
84
- - `skills/export-scripts/references/manifest-template.md` — plantilla canónica del informe consolidado.
85
- - `skills/export-scripts/references/readme-template.md` — plantilla del README del bundle.
99
+ - `skills/export-scripts/SKILL.md` v4.0.0 — orquestador del comando (layout plano cross-session).
100
+ - `skills/export-scripts/references/readme-template.md` — plantilla canónica del README único.
101
+ - `skills/export-scripts/references/manifest-template.md` — **DEPRECATED** desde v4.0.0 (histórico).
86
102
  - `skills/export-scripts/references/lexico-tecnico.md` — léxico vetado V2.
87
- - `skills/export-scripts/references/validations.md` — V1-V6 detalladas.
103
+ - `skills/export-scripts/references/validations.md` — V1-V6 detalladas (anti-redundancia v4.0.0).
88
104
  - `skills/export-scripts/references/code-scan-recommendations.md` — catálogo extendido de patrones.
89
105
  - `skills/export-scripts/references/theme-handling.md` — algoritmo de detección/consolidación por tema.
90
106
  - `skills/export-scripts/references/deprecation-plan.md` — plan de fases 1-2.
107
+ - `skills/sql-rollback-generator/SKILL.md` v2.0.0 — `00-ROLLBACK.sql` único cross-session.
91
108
  - `docs/conclusiones/007-export-commands-family.md` — Propuesta original de la familia `/agent-workflow:export-*`.
92
109
  - `agent-workflow/skills/release/SKILL.md`, `release-scripts/SKILL.md` — legacy en deprecation Fase 1.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Bundle invokable de reglas transversales agent-workflow-* — carga los 7 anchors canónicos (commits, sandbox plan-mode, MCP read-only, redacción, coding-standards, graduación, branch verification) en un solo entry point. No requiere sesión activa.
2
+ description: Bundle invokable de reglas transversales agent-workflow-* — carga los 8 anchors canónicos (commits, sandbox plan-mode, MCP read-only, redacción, coding-standards, graduación, branch verification, closure cleanup) en un solo entry point. No requiere sesión activa.
3
3
  argument-hint: (sin args)
4
4
  allowed-tools:
5
5
  [
@@ -21,7 +21,7 @@ Invoca el skill `rules` (canónico de agent-workflow).
21
21
 
22
22
  ## Qué carga
23
23
 
24
- Los 7 anchors canónicos del runtime agent-workflow-*:
24
+ Los 8 anchors canónicos del runtime agent-workflow-*:
25
25
 
26
26
  1. `agent-workflow:commits-policy` — formato y prohibiciones de commits.
27
27
  2. `agent-workflow:sandbox-readonly` — comportamiento en plan mode.
@@ -30,6 +30,7 @@ Los 7 anchors canónicos del runtime agent-workflow-*:
30
30
  5. `agent-workflow:coding-standards` — estándares por stack + FE-BE R1-R6 + seguridad.
31
31
  6. `agent-workflow:graduacion-routing` — 6 kinds graduables + routing hub vs project.
32
32
  7. `agent-workflow:branch-verification` — gate de rama por fuente + hard gate cross-fuente.
33
+ 8. `agent-workflow:closure-cleanup` — gate de calidad pre-commit en closure (5 categorías: comentarios, complejidad, antipatrones, smells, código muerto).
33
34
 
34
35
  ## Plan mode
35
36
 
@@ -68,9 +68,11 @@ Para minimizar la necesidad de rollback:
68
68
 
69
69
  Los rollbacks de código (git) descritos arriba **no revierten cambios en base de datos**. Para revertir scripts SQL ejecutados en producción, usar el skill `sql-rollback-generator`.
70
70
 
71
- El skill produce:
72
- - **Rollback acoplado** por script: `NNN-script.rollback.sql` al lado del forward.
73
- - **Bundle global**: `rollback/00-rollback-global.sql` que deshace toda la sesión en orden inverso.
71
+ El skill (v2.0.0+) produce:
72
+ - **Un único `00-ROLLBACK.sql`** al root del bundle generado por `/agent-workflow:export-scripts` v4.0.0+. Encadena rollbacks cross-session en orden inverso (última sesión → primera, 04→01 dentro de cada una) dentro de un `BEGIN; ... COMMIT;` único.
73
+ - **Bloque "Fase 5 Cleanup irreversible"** al final del archivo, fuera de la transacción, listando irreversibles para revisión manual.
74
+
75
+ > Comportamiento v1.0.0 (companions `.rollback.sql` por sentencia + per-sesión `rollback/`) eliminado en v2.0.0. Bundles ya generados con v1.0.0 quedan como histórico.
74
76
 
75
77
  Para operaciones irreversibles (TRUNCATE, DROP COLUMN, DROP TABLE sin backup), ver `skills/sql-rollback-generator/references/irreversible-checklist.md`.
76
78
 
@@ -32,7 +32,7 @@ Migrar artefactos del workspace desde rutas y formatos legacy hacia la topologí
32
32
  5. **Actualización/rebuild de HISTORY.md**.
33
33
  6. **Upgrade v3.x → v4.0 (lifecycle universal)**: mapea fases en AW-PROJECT (`requerimiento|plan|implementacion|validacion|cierre` → `planning|execution|validation|closure`) y escribe `CHECKPOINT.md` inicial para sesiones activas.
34
34
  7. **Upgrade hub-mode (v3.0+)**: detecta workspaces con ≥2 fuentes sin marcador `Mode:` declarado y promueve a `Mode: hub`. Idempotente. Delega a `agent-workflow upgrade-hub-mode`.
35
- 8. **Upgrade transversal-rules block (post-session052)**: detecta workspaces sin la sección `## Reglas transversales qtc-*` en CLAUDE.md/AGENTS.md y propone agregarla (7 anchors canónicos + puntero a `Skill(agent-workflow:rules)`). Aplica a hub workspaces principalmente; también a project workspaces qtc-* que usen el lifecycle qtc-*.
35
+ 8. **Upgrade transversal-rules block (post-session052, extendido post-session090)**: detecta workspaces sin la sección `## Reglas transversales qtc-*` en CLAUDE.md/AGENTS.md y propone agregarla (8 anchors canónicos + puntero a `Skill(agent-workflow:rules)`). Aplica a hub workspaces principalmente; también a project workspaces qtc-* que usen el lifecycle qtc-*.
36
36
  9. **Upgrade per-fuente anchors (post-session053)**: detecta repos qtc-* fuente (declarados en AW-PROJECT.Fuentes) que no tienen `AGENTS.md` o `CLAUDE.md` en su raíz y propone crearlos con preludio repo-específico ≤2 líneas + bloque transversal.
37
37
  10. **Upgrade hooks PreToolUse post-v5.18 (agent-workflow como workspace)**: aplica solo si el workspace ES el repo `agent-workflow` (workspace de desarrollo del plugin). Detecta `hooks/hooks.json` y `codex-hooks/hooks.json` sin matchers `mcp__.*__execute_sql` ni `Bash` en `PreToolUse[]` y propone agregarlos.
38
38
 
@@ -130,7 +130,7 @@ Migrar artefactos del workspace desde rutas y formatos legacy hacia la topologí
130
130
 
131
131
  - `CLAUDE.md` y/o `AGENTS.md` del workspace tiene `<!-- WORKFLOW-PROJECT-START -->` pero NO tiene la sección `## Reglas transversales qtc-*` después del `<!-- WORKFLOW-PROJECT-END -->`.
132
132
  - Detector específico (regex): el archivo NO contiene la string `## Reglas transversales qtc-*` después del marker de cierre.
133
- - Si la sección existe pero con menos de 7 anchors canónicos (lista esperada: `agent-workflow:commits-policy`, `agent-workflow:sandbox-readonly`, `agent-workflow:mcp-readonly`, `agent-workflow:redaccion-simple`, `agent-workflow:coding-standards`, `agent-workflow:graduacion-routing`, `agent-workflow:branch-verification`), se considera incompleta y se ofrece actualización.
133
+ - Si la sección existe pero con menos de 8 anchors canónicos (lista esperada: `agent-workflow:commits-policy`, `agent-workflow:sandbox-readonly`, `agent-workflow:mcp-readonly`, `agent-workflow:redaccion-simple`, `agent-workflow:coding-standards`, `agent-workflow:graduacion-routing`, `agent-workflow:branch-verification`, `agent-workflow:closure-cleanup`), se considera incompleta y se ofrece actualización.
134
134
 
135
135
  ### Pre-session053 (repos qtc-* fuente sin anchors)
136
136
 
@@ -161,10 +161,10 @@ agent-workflow upgrade-hub-mode [--dry-run]
161
161
 
162
162
  ### Upgrade transversal-rules block (post-session052, manual guidado por AI)
163
163
 
164
- 1. Detector: leer `CLAUDE.md` y `AGENTS.md` del workspace; verificar ausencia de la sección `## Reglas transversales qtc-*` o presencia incompleta (menos de 7 anchors canónicos).
165
- 2. Si falta o está incompleto, el AI propone al usuario agregar/completar el bloque con la plantilla canónica (7 anchors + puntero a `Skill(agent-workflow:rules)`).
164
+ 1. Detector: leer `CLAUDE.md` y `AGENTS.md` del workspace; verificar ausencia de la sección `## Reglas transversales qtc-*` o presencia incompleta (menos de 8 anchors canónicos).
165
+ 2. Si falta o está incompleto, el AI propone al usuario agregar/completar el bloque con la plantilla canónica (8 anchors + puntero a `Skill(agent-workflow:rules)`).
166
166
  3. Mutación: edit incremental en ambos archivos (`CLAUDE.md` y `AGENTS.md`) insertando el bloque después del `<!-- WORKFLOW-PROJECT-END -->`.
167
- 4. Idempotencia: si la sección ya existe completa (7 anchors), skip silent. Si está incompleta, ofrece reemplazo con confirmación.
167
+ 4. Idempotencia: si la sección ya existe completa (8 anchors), skip silent. Si está incompleta, ofrece reemplazo con confirmación.
168
168
  5. **Sin CLI delegation hoy** (TODO: futuro `agent-workflow upgrade-transversal-rules`).
169
169
 
170
170
  ### Upgrade per-fuente anchors (post-session053, manual guidado por AI)
@@ -276,6 +276,6 @@ NO ejecutar mutaciones. NO invocar `agent-workflow upgrade-hub-mode` sin `--dry-
276
276
  - `../session/references/sandbox-readonly-rules.md` — canon plan mode.
277
277
  - `../session/references/commits-policy.md` — política de commits del closure (aplicable también fuera de sesión vía bloque transversal).
278
278
  - `../session/SKILL.md` §"Graduar artefactos (6 kinds — DEC-003)" — kinds + routing hub-vs-fuente.
279
- - `../rules/SKILL.md` (skill agregadora `agent-workflow:rules`, post-session052) — bundle invokable de las 7 reglas transversales.
279
+ - `../rules/SKILL.md` (skill agregadora `agent-workflow:rules`, post-session052; 8º anchor agregado post-session090) — bundle invokable de las 8 reglas transversales.
280
280
  - CLI runtime `@tacuchi/agent-workflow-cli` ≥5.18.0 — subcomandos relevantes: `upgrade-hub-mode`, `project-md-upsert`, `sources`, `hook git-commit-advisor`, `hook sql-mutation-guard`, `hook branch-check`.
281
281
  - Histórico: session051 (analyze reglas transversales) → session052 (quick-wins) → session053 (anchors por fuente + Bash hook) → session054 (este migrate update).
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: rules
3
- description: "Bundle invokable de reglas transversales agent-workflow — carga los 7 anchors canónicos (commits, sandbox plan-mode, MCP read-only, redacción, coding-standards, graduación, branch verification) en un solo lugar. Invocar antes de un commit ad-hoc fuera de `/agent-workflow:session`, antes de editar código sin sesión activa, durante onboarding de usuario nuevo a agent-workflow, o cuando se quiera refrescar el contrato agent-workflow en una conversación larga. No requiere sesión activa. v0.2.0: el anchor `agent-workflow:commits-policy` ahora documenta el propose-then-execute universal con AskUserQuestion M1 (cualquier solicitud o mención de commit, en/fuera de sesión, hub/project) + el bypass por mensaje literal."
4
- version: 0.2.0
3
+ description: "Bundle invokable de reglas transversales agent-workflow — carga los 8 anchors canónicos (commits, sandbox plan-mode, MCP read-only, redacción, coding-standards, graduación, branch verification, closure cleanup) en un solo lugar. Invocar antes de un commit ad-hoc fuera de `/agent-workflow:session`, antes de editar código sin sesión activa, durante onboarding de usuario nuevo a agent-workflow, o cuando se quiera refrescar el contrato agent-workflow en una conversación larga. No requiere sesión activa. v0.3.0: agrega anchor #8 `agent-workflow:closure-cleanup` (gate de calidad pre-commit en closure)."
4
+ version: 0.3.0
5
5
  ---
6
6
 
7
7
  > **Profile parametrization**: lee `custom_anchors[]` de `profile.json` (resuelto vía cascade 5 capas). Ver [`references/profile-parametrization.md`](../../references/profile-parametrization.md) para el contrato completo y comportamiento por defecto cuando el profile está vacío.
@@ -177,6 +177,31 @@ Reglas operativas:
177
177
 
178
178
  ---
179
179
 
180
+ ### 8. Closure cleanup — `agent-workflow:closure-cleanup`
181
+
182
+ **Canon**: `agent-workflow/skills/session/SKILL.md` §1.5 "Inspección y limpieza pre-commit (closure cleanup gate)".
183
+
184
+ Resumen:
185
+ - Gate de calidad pre-commit que corre en la fase closure entre paso 1 (graduate) y paso 2 (propose commits — M1).
186
+ - Inspecciona el diff working-tree vs `main_branch` por fuente dirty. 5 categorías: **comentarios redundantes**, **complejidad cognitiva**, **antipatrones**, **code smells**, **código muerto**.
187
+ - Compone `agent-workflow:coding-standards` (fuente de verdad de qué es "bien") y `agent-workflow:redaccion-simple` (formato del reporte breve).
188
+ - Default = propose-then-execute (M13). Auto-correct opt-in vía opción 1 del prompt. Cada edit es local y reversible.
189
+ - Skip silencioso si todas las fuentes tienen `dirty=false`, o si el sumario de hallazgos es 0.
190
+
191
+ Reglas operativas:
192
+ - M13 dispara N questions tab-por-fuente (alias). Header `<alias>`, 3 opciones (aprobar fixes / sólo reportar / saltar) + Other auto = nota custom o fix manual.
193
+ - "Sólo reportar" deja hallazgos en `CHECKPOINT.md` como "Hallazgos pendientes" sin modificar working tree.
194
+ - Refactors estructurales mayores (mover archivos, renombrar packages) NO entran al gate; aplazar a sesión `## Type: refactor` con Strangler Fig.
195
+ - NO ejecuta tests ni reemplaza linter/formatter del stack — el gate complementa (lista canónica de linters en `session/SKILL.md` §1.5).
196
+ - En plan mode: describir hallazgos en plan file por categoría + paths. NO ejecuta `Edit`/`Write`/`Bash` mutante; M13 no se dispara.
197
+
198
+ **Cómo aplicar fuera de sesión**:
199
+ - El gate canónico es per-session-closure. Sin sesión activa no se auto-dispara.
200
+ - El AI puede invocar las reglas manualmente (`agent-workflow:coding-standards` + diff con `agent-workflow sources` ad-hoc) si el usuario lo pide ("revisemos lo que tengo sin commitear"). Sigue las 5 categorías como guía.
201
+ - Workaround formal: crear sesión retroactiva con `## Type: chore` y cerrar para disparar el gate sobre los cambios working-tree. No documentado como flujo canónico.
202
+
203
+ ---
204
+
180
205
  ## Relación con AGENTS.md/CLAUDE.md por fuente
181
206
 
182
207
  Esta skill es la capa **active (on-demand)** del modelo de aplicación de reglas. Coexiste con la capa **passive (system-prompt)**:
@@ -205,6 +230,7 @@ Tabla rápida para situaciones comunes sin sesión activa:
205
230
  | Escribís prosa agent-workflow (PR description, README) | redaccion-simple | 6 reglas (frases cortas, listas, sin jerga). |
206
231
  | Producís artefacto curable (decisión, manual) | graduacion-routing | Crear sesión retroactiva o documentar como fuera de scope graduable. |
207
232
  | Host en plan mode | sandbox-readonly | Describir en plan file, no ejecutar mutaciones. |
233
+ | Revisás cambios pendientes ad-hoc fuera de closure | closure-cleanup | Aplicar las 5 categorías como guía (`coding-standards` + diff). Sin M13 auto-disparado: el AI sugiere, el usuario decide. |
208
234
 
209
235
  ## Sandbox read-only
210
236
 
@@ -220,5 +246,5 @@ Compatible con plan mode sin restricciones adicionales.
220
246
  - **shared-contract** (`../../docs/shared-contract.md`) — contrato cross-plugin de la familia agent-workflow.
221
247
  - **Recomendación de uso conjunto con AGENTS.md/CLAUDE.md**:
222
248
  - El AGENTS.md/CLAUDE.md por fuente (o el bloque transversal en hub) lista 1 línea por anchor con su path canon. Sirve como "tabla de contenidos" siempre cargada.
223
- - Esta skill `agent-workflow:rules` carga los 7 anchors expandidos. Sirve cuando se necesita refrescar el contrato o cuando el AGENTS.md no está disponible.
249
+ - Esta skill `agent-workflow:rules` carga los 8 anchors expandidos. Sirve cuando se necesita refrescar el contrato o cuando el AGENTS.md no está disponible.
224
250
  - **Origen**: session051-analyze-reglas-transversales-fuera-sesion → CONCLUSIONS C7/R7/QW6. Graduado a `docs/conclusiones/006-reglas-transversales-fuera-sesion.md`.
@@ -290,6 +290,46 @@ Material de referencia del usuario (mockups, especificaciones, exports, glosario
290
290
 
291
291
  **Histórico DEC-004**: v1 (sesiones previas): `.workflow/sessions/<folder>/referencias/` por sesión. v2 (session080-dev-referencias-globales): mover a `docs/referencias/` transversal y eliminar lectura legacy.
292
292
 
293
+ ### 1.5. Inspección y limpieza pre-commit (closure cleanup gate)
294
+
295
+ Gate canónico de calidad. Corre entre paso 1 (graduate) y paso 2 (propose commits). Inspecciona el diff working-tree por fuente dirty, categoriza hallazgos y propone correcciones antes de M1. Aplicación del anchor universal `agent-workflow:closure-cleanup` (ver `doctrine/rules/SKILL.md`).
296
+
297
+ **Skip silencioso**:
298
+ - Si todas las fuentes tienen `dirty=false` (nada que limpiar).
299
+ - Si el sumario de hallazgos es 0 tras inspección (working tree ya limpio).
300
+
301
+ **Pasos**:
302
+
303
+ 1. Ejecutar `agent-workflow sources --session <CODE>` para refrescar `dirty` por fuente.
304
+ 2. Para cada fuente con `dirty=true`:
305
+ - Leer diff: `git -C <path> diff <main_branch>...HEAD` (limitar a archivos cambiados; usar `--stat` primero para tamaño).
306
+ - Componer `agent-workflow:coding-standards` (anchor #5 del bundle `/rules`) para reglas por stack del path.
307
+ - Categorizar hallazgos:
308
+ - **Comentarios redundantes** — qué obvio, código muerto comentado, TODO sin owner/fecha, headers decorativos.
309
+ - **Complejidad cognitiva** — métodos largos (>50 líneas), nesting profundo (>3), early-return ausente, condicionales anidados.
310
+ - **Antipatrones** — `catchError(() => of([]))`, magic numbers, side effects no declarados, god class/method, lógica replicada FE+BE.
311
+ - **Code smells** — DRY violado, naming oscuro, duplicación con `shared/`/`common/`, validación post-uso, mutación de parámetros.
312
+ - **Código muerto** — imports sin usar, branches inalcanzables, variables huérfanas, funciones no llamadas.
313
+ - Producir reporte breve: máximo 1 página por fuente, agrupado por categoría, cada hallazgo con `file:line` + 1 línea de fix sugerido.
314
+ 3. Si la suma de hallazgos es 0 en todas las fuentes → skip silencioso al paso 2 (propose commits).
315
+ 4. Disparar `AskUserQuestion` con spec de M13 (`references/prompts-catalog.md#M13`). N questions tab-por-fuente, header `<alias>`, opciones: "Aprobar fixes sugeridos (Recomendado)" / "Sólo reportar (no tocar)" / "Saltar esta fuente". Other = nota custom o fix manual del usuario. NO narrar la pregunta en texto plano.
316
+ 5. Por cada fuente con opción 1 aprobada: aplicar edits acotados (`Edit`/`MultiEdit` por archivo, mostrar diff antes/después). Sin auto-rewrite masivo; cada edit local y reversible.
317
+ 6. Por cada fuente con opción 2: dejar el reporte en `CHECKPOINT.md` como "Hallazgos pendientes" sin modificar working tree.
318
+ 7. Re-ejecutar `agent-workflow sources --session <CODE>` para refrescar `dirty` tras edits aprobados.
319
+
320
+ **Sandbox plan-mode**: describir hallazgos por categoría en el plan file (paths + razones agrupadas). NO ejecuta `Edit`/`Write`/`Bash` mutante. M13 no se dispara.
321
+
322
+ **Composición** (SRP — el gate no duplica reglas):
323
+ - `agent-workflow:coding-standards` — fuente de verdad de qué es "bien".
324
+ - `agent-workflow:redaccion-simple` — formato del reporte (frases cortas, listas, sin jerga).
325
+ - `agent-workflow:branch-verification` — implícita; las fuentes ya vienen verificadas desde execution.
326
+
327
+ **No alcances**:
328
+ - NO reemplaza linter/formatter del stack (ESLint, Spotless, Prettier, Checkstyle, etc.) — el gate complementa.
329
+ - NO refactors estructurales mayores. Esos van a sesiones `## Type: refactor` con Strangler Fig.
330
+ - NO ejecuta tests — inspección estática del diff.
331
+ - NO modifica artefactos ya graduados en paso 1 (vivien en `docs/<categoria>/`, fuera del scope del gate).
332
+
293
333
  ### 2. Proponer commits por fuente afectada (propose-then-execute)
294
334
 
295
335
  Aplicación canónica del patrón **universal** definido en `references/commits-policy.md` (Regla 3) — closure es uno de 3 disparadores del prompt M1 (los otros 2: solicitud explícita con/sin sesión activa). El flujo siguiente describe la variante auto-disparada por closure; el patrón completo (bypass por mensaje literal, fuera de sesión, etc.) vive en el canon.
@@ -0,0 +1,61 @@
1
+ # M13 — closure-cleanup (gate de calidad pre-commit en closure)
2
+
3
+ Spec literal del prompt M13. Index: [`../prompts-catalog.md#m13--closure-cleanup-gate-de-calidad-pre-commit-en-closure`](../prompts-catalog.md#m13--closure-cleanup-gate-de-calidad-pre-commit-en-closure).
4
+
5
+ - **Cuándo**: en `skills/session/SKILL.md` §1.5 "Inspección y limpieza pre-commit", tras graduate (paso 1) y antes de propose commits (M1 / paso 2). Auto-disparado por closure cuando se cumple **ambas** condiciones:
6
+ - ≥1 fuente declarada en la sesión tiene `dirty=true` (`agent-workflow sources --session <CODE>`).
7
+ - La inspección del diff produce ≥1 hallazgo en alguna de las 5 categorías canónicas.
8
+ - **Skip silencioso**:
9
+ - Todas las fuentes `dirty=false` (nada que limpiar).
10
+ - Inspección no encuentra hallazgos en ninguna fuente (working tree ya limpio).
11
+ - Plan mode activo (el gate describe hallazgos en el plan file sin disparar prompt).
12
+ - **Forma**: 1 invocación `AskUserQuestion` con **N questions tab-por-fuente** (max 4 simultáneas; tandas si N>4).
13
+ - Por cada fuente dirty con hallazgos:
14
+ - `header`: `<alias>` (ej. `core`, `dev`, `design`, `analyze`).
15
+ - `question`: "Cleanup en `<alias>` — `<N>` hallazgos (`<categorías>`). ¿Aplico?"
16
+ - `multiSelect`: false.
17
+ - `options`:
18
+ 1. "Aprobar fixes sugeridos (Recomendado)" — "El AI aplica los edits acotados al working tree (`Edit`/`MultiEdit` por archivo, diff visible). Cada fix local y reversible."
19
+ 2. "Sólo reportar (no tocar)" — "Deja los hallazgos en `CHECKPOINT.md` como 'Hallazgos pendientes' sin modificar working tree."
20
+ 3. "Saltar esta fuente" — "Ignora los hallazgos para esta closure. No se registra."
21
+ - **Other auto** = nota custom del usuario (ej. "fixeo manual después", "ignorá X específico", "aplicá sólo categoría comentarios"). El AI interpreta y actúa en consecuencia.
22
+ - **Preview (opcional pero recomendado)**: cuando hallazgos > 5 por fuente, incluir preview ASCII con resumen:
23
+
24
+ ```
25
+ Cleanup report — <alias>
26
+ ────────────────────────
27
+ Comentarios redundantes: 3 hallazgos
28
+ Complejidad cognitiva: 1 hallazgo
29
+ Antipatrones: 2 hallazgos
30
+ Code smells: 0
31
+ Código muerto: 1 hallazgo
32
+
33
+ Top fixes sugeridos:
34
+ 1. src/foo.ts:42 — quitar `// TODO obvio` huérfano
35
+ 2. src/bar.ts:88 — extraer helper de método 80-líneas
36
+ 3. src/baz.ts:15 — reemplazar magic number 86400 con const
37
+ ```
38
+
39
+ - **Aplicación de los fixes (opción 1)**:
40
+ - Por archivo: leer (`Read`), aplicar `Edit` o `MultiEdit` con cambios acotados. Mostrar diff antes/después al usuario.
41
+ - Refactor estructural mayor (mover archivos, renombrar packages, cambios cross-paquete): NO aplica aquí — aplazar a sesión `## Type: refactor` con Strangler Fig.
42
+ - Tras aplicar todos los fixes de una fuente: re-ejecutar `agent-workflow sources --session <CODE> --scope <alias>` para validar consistencia.
43
+ - **Sin auto-confirmación**: aunque opción 1 esté marcada `(Recomendado)`, requiere selección explícita del usuario por fuente. NO se asume auto-correct.
44
+ - **Sandbox plan-mode**:
45
+ - Describir hallazgos por categoría en el plan file (paths + razones).
46
+ - NO ejecuta `Edit`/`Write`/`Bash` mutante.
47
+ - M13 no se dispara; el reporte queda en plan file para que el usuario decida fuera de plan mode.
48
+ - **Categorías canónicas** (referencia, detalles en `session/SKILL.md` §1.5):
49
+ 1. **Comentarios redundantes** — qué obvio, código muerto comentado, TODO sin owner/fecha, headers decorativos.
50
+ 2. **Complejidad cognitiva** — métodos largos (>50 líneas), nesting profundo (>3), early-return ausente, condicionales anidados.
51
+ 3. **Antipatrones** — `catchError(() => of([]))`, magic numbers, side effects no declarados, god class/method, lógica replicada FE+BE.
52
+ 4. **Code smells** — DRY violado, naming oscuro, duplicación con `shared/`/`common/`, validación post-uso, mutación de parámetros.
53
+ 5. **Código muerto** — imports sin usar, branches inalcanzables, variables huérfanas, funciones no llamadas.
54
+ - **Composición**:
55
+ - `agent-workflow:coding-standards` — fuente de verdad de qué es "bien" por stack (anchor #5 del bundle /rules).
56
+ - `agent-workflow:redaccion-simple` — formato del reporte breve (anchor #4 del bundle /rules).
57
+ - **Anti-narración**: NUNCA narrar la pregunta en texto plano ("¿quieres que aplique los fixes en agent-workflow?" en chat es un anti-patrón). Siempre vía `AskUserQuestion`.
58
+ - **Refs**:
59
+ - `skills/session/SKILL.md` §1.5 — pipeline canónica del gate.
60
+ - `skills/rules/SKILL.md` §8 (`agent-workflow:closure-cleanup`) — anchor en bundle /rules.
61
+ - `skills/coding-standards/SKILL.md` — reglas por stack que el gate consulta.
@@ -50,7 +50,7 @@ DEC-006 — mixta según contexto. Cada header debe ser inmediatamente legible e
50
50
 
51
51
  ## Catálogo
52
52
 
53
- ### Q-must (11 puntos — M1..M11; M12 eliminado por DEC-002)
53
+ ### Q-must (12 puntos — M1..M11 + M13; M12 eliminado por DEC-002)
54
54
 
55
55
  #### M1 — commit-prompt (universal — CASO ANCLA)
56
56
  Spec: [`prompts/M1-closure-commit-prompt.md`](prompts/M1-closure-commit-prompt.md) (archivo no renombrado; preserva anchor `#m1`). Cuándo: **cualquier** solicitud o mención de commit como acción a ejecutar — closure auto-disparado, solicitud explícita en planning/execution con sesión activa, solicitud explícita sin sesión activa, hub o project. Forma: 1 invocación con N questions tab-por-fuente (max 4); en project mode N=1. Canon del alcance: `commits-policy.md` Regla 3 + Regla 5 (bypass por mensaje literal).
@@ -86,6 +86,9 @@ Spec: [`prompts/M11-context.md`](prompts/M11-context.md). Cuándo: AI estima car
86
86
 
87
87
  > **M12 — graduacion-destino**: ELIMINADO (DEC-002). El destino de graduación se decide automáticamente por `workspace_mode` sin prompt por sesión. Hub mode → hub root; project mode → cwd. Ver `references/graduacion-routing.md`.
88
88
 
89
+ #### M13 — closure-cleanup (gate de calidad pre-commit en closure)
90
+ Spec: [`prompts/M13-closure-cleanup.md`](prompts/M13-closure-cleanup.md). Cuándo: en `skills/session/SKILL.md` §1.5 "Inspección y limpieza pre-commit", tras graduate (paso 1) y antes de propose commits (M1 / paso 2). Sólo dispara si ≥1 fuente tiene `dirty=true` Y la inspección produce ≥1 hallazgo. Forma: N questions tab-por-fuente (max 4), header `<alias>`, 3 opciones (aprobar fixes / sólo reportar / saltar) + Other auto. Aplicación del anchor `agent-workflow:closure-cleanup` (ver `doctrine/rules/SKILL.md` §8).
91
+
89
92
  ### Q-should (7 puntos — frecuencia media, ROI claro)
90
93
 
91
94
  #### S1 — type-design (standalone o brief ambiguo)
@@ -184,7 +187,7 @@ Las 4 formas son **sinónimos sin diferencia funcional**. Mezclar formas en un m
184
187
 
185
188
  Para extender este catálogo sin romper la convención:
186
189
 
187
- 1. **Numeración secuencial estricta** — siguiente Q-must = M`<N+1>` (último activo: M11; M12 eliminado y no reusable). Igual para Q-should (último: S6) y Q-could (último: C2). No saltar números, no reusar.
190
+ 1. **Numeración secuencial estricta** — siguiente Q-must = M`<N+1>` (último activo: M13; M12 eliminado y no reusable, M13 agregado tras M11). Igual para Q-should (último: S8) y Q-could (último: C2). No saltar números, no reusar.
188
191
  2. **Categoría según frecuencia**: M (must, alto tránsito), S (should, frecuencia media), C (could, parking opcional). Si dudás, empezá en C — promovés a S/M cuando se valida ROI.
189
192
  3. **Header descriptivo** ≤12 chars (`next-step`, `context`, `scope`), salvo alias-puro inequívoco (M1 con `core`, `dev`, etc.).
190
193
  4. **Recomendación dinámica**: si `(Recomendado)` depende del contexto (ej. M10 según `tasks_count`, S5 según `tasks_open`), documentarlo en sub-sección `**Recomendación dinámica**` debajo de `options`. No hardcodear la marca en una opción si el AI debe elegir en runtime.