@tacuchi/agent-workflow-cli 9.3.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 (30) 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/doctrine/implement/references/rollback-guide.md +5 -3
  21. package/skills/agent-workflow/exports/export-scripts/SKILL.md +97 -76
  22. package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +20 -6
  23. package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +13 -1
  24. package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +252 -42
  25. package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +45 -72
  26. package/skills/agent-workflow/exports/export-scripts/references/validations.md +119 -71
  27. package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +77 -62
  28. package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +4 -2
  29. package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +5 -3
  30. package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +16 -16
@@ -1,79 +1,289 @@
1
- # Plantilla — README del bundle export-scripts
1
+ # Plantilla — README del bundle export-scripts (v4.0.0)
2
2
 
3
- Plantilla exacta para el `README.md` del output dir. Se escribe junto con `manifest.md`. Reemplazar `[entre corchetes]` con valores reales.
3
+ Plantilla canónica del `README.md` único del bundle. Reemplaza `manifest.md` + `ORDER.md` legacy desde v4.0.0 (session093). Reemplazar `[entre corchetes]` con valores reales al momento de generar.
4
+
5
+ > **Heredada y consolidada de**: `manifest-template.md` v3.x (informe) + `readme-template.md` v3.x (índice). v4.0.0 unifica ambos en una sola plantilla siguiendo la doctrina "un solo punto de verdad" del usuario.
4
6
 
5
7
  ---
6
8
 
7
9
  ```markdown
8
10
  # Bundle export-scripts NNN — [YYYY-MM-DD]
9
11
 
10
- Bundle SQL + informe consolidado para paso a producción. Generado por `/agent-workflow:export-scripts`.
12
+ - **Rama actual:** `[nombre-rama]`
13
+ - **Rama destino:** `certificacion`
14
+ - **Sesiones incluidas:** [N]
15
+ - **Readiness:** [🟢 verde | 🟡 amarillo | 🔴 rojo]
16
+ - **Generado por:** agent-workflow · skill `export-scripts` v4.0.0
11
17
 
12
- ## Contenido
18
+ ## Contenido del bundle (layout v4.0.0)
13
19
 
14
- | Archivo | Propósito |
15
- |---|---|
16
- | `manifest.md` | Informe consolidado: sesiones, acciones manuales, BD, hallazgos code-scan, git state, checklist final. |
17
- | `ORDER.md` | Secuencia ejecutable cross-bundle (01 02 03 04 por sesión, intercalado por tema si aplica). |
18
- | `rollback-global.sql` | Rollback encadenado inverso (toda sesión primera, 04 01 dentro de cada una). |
19
- | `por-sesion/` | Bundle SQL por sesión, organizado en 4 categorías. |
20
- | `por-tema/` | (opcional) Bundle consolidado cross-session por tema/funcionalidad. |
20
+ | Archivo | Propósito | Condicional |
21
+ |---|---|---|
22
+ | `00-ROLLBACK.sql` | Único rollback cross-session encadenado 04→01 dentro de un `BEGIN; ... COMMIT;` único. Bloque "Fase 5 — Cleanup irreversible" al final fuera de la transacción. | Siempre (si hay sentencias) |
23
+ | `01-DDL-TABLES.sql` | `CREATE TABLE` / `ALTER TABLE` / `CREATE INDEX` / `CREATE SEQUENCE` cross-session. | Skip si categoría vacía |
24
+ | `02-DDL-FUNCTIONS.sql` | `CREATE OR REPLACE FUNCTION` / `PROCEDURE` cross-session. | Skip si categoría vacía |
25
+ | `03-DML.sql` | `UPDATE` / `DELETE` / migración de datos cross-session (con backup en `esq_audit` cuando aplica). | Skip si categoría vacía |
26
+ | `04-INSERTS.sql` | `INSERT` / seed de datos maestros cross-session. | Skip si categoría vacía |
27
+ | `README.md` | Este archivo — único informe + índice + how-to-execute. | Siempre |
28
+ | `_queries/sessionXXX/` | Queries de consulta de soporte por sesión (no ejecución). | Solo si alguna sesión tenía `queries/` |
29
+ | `por-tema/<slug>/` | Capa adicional opt-in con consolidado per-tema (sin rollback duplicado). | Solo si `--themes` activado o `## Temas` declarado |
21
30
 
22
- ## Mapping sesión ↔ tema ↔ scripts
31
+ ---
23
32
 
24
- > **Condicional**: incluir esta sección **sólo si** `por-tema/` se generó.
33
+ ## 1. Resumen ejecutivo
25
34
 
26
- | Sesión | Tema | Scripts |
27
- |---|---|---|
28
- | session001 | `tema-rbac` | `01-rol-permiso.sql`, `02-fn-validacion.sql`, `03-mig-roles.sql` |
29
- | session002 | `tema-rbac` | `01-asignacion-default.sql` |
30
- | session003 | `tema-lista-negra-blanca` | `01-listas-table.sql`, `04-inserts-iniciales.sql` |
35
+ [1-2 párrafos sintetizando qué entra en este bundle: módulos tocados, tipo de cambios predominantes (features, fixes, migración de datos), y el juicio general de readiness con 1-2 motivos principales.]
36
+
37
+ **Motivos del color de readiness:**
38
+ - [motivo 1]
39
+ - [motivo 2]
40
+
41
+ ---
42
+
43
+ ## 2. Sesiones incluidas
44
+
45
+ | # | Sesión | Estado | Fase | Fechas | Resumen | Refs |
46
+ |---|---|---|---|---|---|---|
47
+ | 1 | session001-nombre | closed | 5 | YYYY-MM-DD → YYYY-MM-DD | [resumen 1 línea] | [DEC](../decisiones/001-*.md) |
48
+ | 2 | session002-nombre | ⚠ active | 3 | YYYY-MM-DD → — | [resumen 1 línea] + motivo de apertura | — |
49
+
50
+ **Sesiones abiertas:** destacadas con ⚠. Cada una baja la readiness del bundle. Motivo y próxima acción debe quedar explícito en el resumen.
51
+
52
+ ---
53
+
54
+ ## 3. Acciones manuales previas a producción
31
55
 
32
- ## Cómo ejecutar el bundle
56
+ Checklist ordenado. Marcar cada ítem antes del despliegue.
33
57
 
34
- ### Paso 1Validar pre-condiciones
58
+ - [ ] **ACT-001** [Título corto]
59
+ - **Motivo:** [por qué es necesaria]
60
+ - **Quién:** [rol/persona sugerida]
61
+ - **Detalle:** [qué hacer, con qué entrada/salida esperada]
35
62
 
36
- 1. Revisar `manifest.md` §3 (acciones manuales) completar antes de ejecutar SQL.
37
- 2. Revisar `manifest.md` §5 (hallazgos code-scan) resolver severidades altas.
38
- 3. Tomar respaldo completo del esquema afectado.
63
+ - [ ] **ACT-002** Solicitar API keys de producción
64
+ - **Motivo:** REQUIREMENTS de session003 menciona integración con servicio externo pero no hay claves concretas.
65
+ - **Quién:** Administrador de infraestructura
66
+ - **Detalle:** enviar correo con plantilla en §3.1.
67
+
68
+ ### 3.1 Plantillas de correo
69
+
70
+ Copiar, personalizar y enviar manualmente. **Este plugin no envía correos.**
71
+
72
+ ```
73
+ Para: [correo-destino]
74
+ CC: [correo-cc]
75
+ Asunto: [Bundle NNN] Solicitud de API keys de producción
76
+
77
+ Buen día,
78
+
79
+ Para el bundle NNN-[nombre] que se despliega el [fecha objetivo] requerimos las siguientes credenciales de producción:
80
+
81
+ - [servicio 1] — URL y token de acceso
82
+ - [servicio 2] — usuario/clave técnica
83
+
84
+ Adjunto el bundle: docs/scripts/NNN-export-scripts-[YYYY-MM-DD]/README.md
85
+
86
+ Quedamos atentos.
87
+ Saludos.
88
+ ```
89
+
90
+ ---
39
91
 
40
- ### Paso 2 Ejecutar SQL
92
+ ## 4. Secuencia de ejecución (01 → 04)
93
+
94
+ Orden obligatorio. Categorías vacías se omiten (no aparece el archivo).
41
95
 
42
96
  ```bash
43
- # Opción A: orden por sesión (default)
44
- cat ORDER.md # ver secuencia
97
+ # 1. DDL de tablas (CREATE/ALTER TABLE, INDEX, SEQUENCE)
98
+ psql -h <host> -U <user> -d <db> -f 01-DDL-TABLES.sql
99
+
100
+ # 2. DDL de funciones (CREATE OR REPLACE FUNCTION/PROCEDURE)
101
+ psql -h <host> -U <user> -d <db> -f 02-DDL-FUNCTIONS.sql
102
+
103
+ # 3. DML / migración (UPDATE, DELETE, backup en esq_audit)
104
+ psql -h <host> -U <user> -d <db> -f 03-DML.sql
45
105
 
46
- # Ejecutar manualmente cada script en orden:
47
- psql -h <host> -U <user> -d <db> -f por-sesion/session001-<slug>/01-ddl-tablas/001-*.sql
48
- # ... continuar con 02, 03, 04 ...
106
+ # 4. Inserts / seed maestros
107
+ psql -h <host> -U <user> -d <db> -f 04-INSERTS.sql
49
108
  ```
50
109
 
51
110
  > **Importante**: este plugin NO ejecuta SQL. El usuario aplica los scripts manualmente.
52
111
 
53
- ### Paso 3 Validar post-ejecución
112
+ ### 4.1 Mapping sesión tema ↔ scripts
54
113
 
55
- 1. Marcar checklist final de `manifest.md` §8.
56
- 2. Si algo falló: aplicar `rollback-global.sql` en una sola transacción.
114
+ > **Condicional**: incluir esta sub-sección **sólo si** `--themes` activado y `por-tema/` se generó. Si no, omitir entera la 4.1.
57
115
 
58
- ## Rollback
116
+ | Sesión | Tema | Sentencias (categoría:NNN-stmt) |
117
+ |---|---|---|
118
+ | session001 | `tema-rbac` | 01:001-rol-permiso, 02:001-fn-validacion, 03:001-mig-roles |
119
+ | session002 | `tema-rbac` | 01:001-asignacion-default |
120
+ | session003 | `tema-lista-negra-blanca` | 01:001-listas-table, 04:001-inserts-iniciales |
59
121
 
60
- Bundle global: `rollback-global.sql` (este directorio).
122
+ ---
61
123
 
62
- Orden inverso absoluto: última sesión → primera; dentro de cada una 04 → 03 → 02 → 01.
124
+ ## 5. Rollback (`00-ROLLBACK.sql`)
63
125
 
64
- **Operaciones irreversibles** (si las hay): listadas en `manifest.md` §4.2 con su mitigación. Revisar antes de ejecutar rollback.
126
+ Un solo archivo cross-session al root del bundle. Orden interno inverso absoluto: última sesión → primera; dentro de cada una 04 → 03 → 02 → 01.
65
127
 
66
- ## Re-generación
128
+ ```bash
129
+ # Ejecutar el rollback completo en una sola transacción:
130
+ psql -h <host> -U <user> -d <db> -f 00-ROLLBACK.sql
131
+ ```
67
132
 
68
- Para regenerar este bundle:
133
+ ### 5.1 Operaciones irreversibles
134
+
135
+ **Detectadas en el bundle:**
136
+
137
+ | Sesión origen | Operación | Mitigación disponible |
138
+ |---|---|---|
139
+ | session003 | `DROP COLUMN col_legacy` | Respaldo previo en `esq_audit.tb_bkp_session003` (incluido en `03-DML.sql`) |
140
+ | session005 | `TRUNCATE esq_x.tb_z` | Sin backup automático — pérdida total de datos |
141
+
142
+ Si no hay irreversibles: incluir un placeholder con "Sin operaciones irreversibles en este bundle." (el AI debe reemplazar la tabla por esta frase única).
143
+
144
+ **Bloque "Fase 5" del `00-ROLLBACK.sql`**: las operaciones irreversibles aparecen al final del archivo **fuera de la transacción** principal, con header `-- WARNING: IRREVERSIBLE` y referencia a la DECISION de la sesión origen. El operador decide ejecutar este bloque manualmente.
145
+
146
+ ### 5.2 Impacto
147
+
148
+ - **Tablas creadas:** [lista]
149
+ - **Tablas modificadas:** [lista, indicando tipo de ALTER]
150
+ - **Funciones creadas/modificadas:** [lista]
151
+ - **Filas afectadas por migración:** [estimación si hay count en sesiones]
152
+
153
+ ---
154
+
155
+ ## 6. Código fuente — hallazgos del escaneo
156
+
157
+ > **Condicional V4.b**: si `--skip-code-scan` fue usado, esta sección contiene **sólo** una nota inline `_(Escaneo omitido por --skip-code-scan)_` y nada más.
158
+
159
+ **Resumen:** [X] críticos · [Y] medios · [Z] bajos
160
+
161
+ ### 6.1 Severidad alta (bloqueantes para producción)
162
+
163
+ | # | Patrón | Archivo:línea | Snippet | Recomendación |
164
+ |---|---|---|---|---|
165
+ | H1 | Credencial hardcodeada | `src/.../Config.java:42` | `password = "..."` | Mover a variable de entorno o gestor de secretos. Rotar la credencial si fue commiteada. |
166
+
167
+ Si vacío: incluir un placeholder con "Sin hallazgos de severidad alta." (frase única que reemplaza la tabla).
168
+
169
+ ### 6.2 Severidad media
170
+
171
+ | # | Patrón | Archivo:línea | Snippet | Recomendación |
172
+ |---|---|---|---|---|
173
+ | M1 | URL localhost | `src/.../api.service.ts:18` | `http://localhost:8080` | Reemplazar por `environment.apiUrl` u otro mecanismo de configuración. |
174
+
175
+ ### 6.3 Severidad baja
176
+
177
+ Agrupados por patrón, con conteo.
178
+
179
+ | Patrón | Conteo | Ejemplos |
180
+ |---|---|---|
181
+ | `TODO` | 7 | `UserService.java:88`, `OrderService.java:42`, ... |
182
+ | `FIXME` | 2 | `validator.ts:15`, `payment.ts:103` |
183
+
184
+ ### 6.4 Alcance del escaneo
185
+
186
+ - **Directorios incluidos:** [lista]
187
+ - **Directorios excluidos:** `node_modules/`, `target/`, `dist/`, `build/`, `.workflow/`, `docs/`, `tests/`, `test/`, `.git/`
188
+ - **Extensiones:** [lista]
189
+
190
+ ---
191
+
192
+ ## 7. Git y ramas
193
+
194
+ - **Rama actual:** `[nombre]`
195
+ - **Rama destino:** `certificacion`
196
+ - **Commits pendientes de merge (rama actual → certificacion):** [N]
197
+
198
+ ### 7.1 Commits pendientes
69
199
 
70
200
  ```
71
- /agent-workflow:export-scripts [--since sessionNNN] [--themes slug1,slug2]
201
+ [sha corto] [mensaje]
202
+ [sha corto] [mensaje]
72
203
  ```
73
204
 
74
- Cada invocación toma siguiente NNN. NO sobrescribe bundles previos.
205
+ ### 7.2 Archivos modificados (git diff --stat)
75
206
 
76
- ## Relación con release legacy
207
+ ```
208
+ [salida de git diff certificacion --stat]
209
+ ```
210
+
211
+ ### 7.3 Cambios sin commitear
212
+
213
+ Si `git status` muestra archivos modificados/untracked:
214
+
215
+ ```
216
+ [salida de git status --porcelain]
217
+ ```
218
+
219
+ **Acción recomendada:** el usuario decide si esos cambios entran al bundle (commit) o no (stash/descartar).
220
+
221
+ ### 7.4 PR sugerido (texto — no se crea)
222
+
223
+ ```
224
+ Título: [feat/fix/chore]: [resumen del bundle]
225
+ Rama origen: [rama actual]
226
+ Rama destino: certificacion
227
+ Descripción:
228
+ - Bundle NNN consolidando las siguientes sesiones:
229
+ - session001 — [título]
230
+ - session002 — [título]
231
+ - Bundle completo: docs/scripts/NNN-export-scripts-[YYYY-MM-DD]/
232
+ ```
233
+
234
+ ---
235
+
236
+ ## 8. Documentación graduada
237
+
238
+ | Sesión | Decisiones | Manuales | Especificaciones | Conclusiones |
239
+ |---|---|---|---|---|
240
+ | session001 | `001-*.md`, `002-*.md` | — | — | — |
241
+ | session002 | — | `003-*.md` | — | — |
242
+ | session003 | `004-*.md` | — | `001-*/` | — |
243
+
244
+ Nota: el modelo nuevo gradua 6 kinds (`decision`, `manual`, `script`, `especificacion`, `conclusion`, `release`). Este README enlaza los 4 primeros; `release` queda implícito en este mismo dossier; `script` queda implícito en los archivos `0X-*.sql` del root.
245
+
246
+ ---
247
+
248
+ ## 9. Checklist final de producción
249
+
250
+ Lista única consolidada. Todos los ítems deben marcarse antes del "go":
251
+
252
+ - [ ] **BD:** respaldo completo del esquema afectado tomado y verificado
253
+ - [ ] **BD:** scripts ejecutados en orden (`01-DDL-TABLES.sql` → `02-DDL-FUNCTIONS.sql` → `03-DML.sql` → `04-INSERTS.sql`)
254
+ - [ ] **BD:** `00-ROLLBACK.sql` probado en staging/certificación
255
+ - [ ] **Infra:** variables de entorno actualizadas (ver §3)
256
+ - [ ] **Infra:** API keys de producción solicitadas y configuradas
257
+ - [ ] **Código:** hallazgos de severidad alta resueltos (§6.1)
258
+ - [ ] **Git:** rama mergeada a `certificacion` (o PR aprobado)
259
+ - [ ] **Git:** tag/release creado en el repositorio
260
+ - [ ] **Stakeholders:** notificación enviada antes y después del despliegue
261
+ - [ ] **Acciones manuales:** todos los ACT-XXX de §3 completados
262
+
263
+ ### 9.1 Advertencias
264
+
265
+ Cosas que el skill detectó pero no pudo validar automáticamente. Leer antes de marcar el checklist como completo.
266
+
267
+ Si no hay advertencias: incluir un placeholder con "Sin advertencias pendientes." (frase única).
268
+
269
+ ---
270
+
271
+ ## 10. Metadata
272
+
273
+ - **Generado:** YYYY-MM-DD HH:MM
274
+ - **Versión del skill:** export-scripts v4.0.0 (layout plano cross-session)
275
+ - **Sub-skill rollback:** sql-rollback-generator v2.0.0
276
+ - **Argumentos usados:** `[sin argumentos | --sessions NNN[,NNN] | --since sessionNNN | --themes slug1,slug2 | --dry-run | --skip-code-scan]`
277
+ - **Comando original:** `/agent-workflow:export-scripts [args]`
278
+ - **Reemplaza:** `/agent-workflow:release` v2.0.0 + `/agent-workflow:release-scripts` v2.0.0 (ambos en deprecation Fase 1 desde plugin v2.8.0)
279
+
280
+ ## Re-generación
281
+
282
+ Para regenerar este bundle:
283
+
284
+ ```
285
+ /agent-workflow:export-scripts [--sessions NNN[,NNN]] [--since sessionNNN] [--themes slug1,slug2]
286
+ ```
77
287
 
78
- Este bundle reemplaza el output que generaban `/agent-workflow:release` + `/agent-workflow:release-scripts` legacy (ambos en deprecation Fase 1 desde plugin v2.8.0). Si tu workspace tiene `docs/release/` poblado: queda como histórico, no se migra.
288
+ Cada invocación toma siguiente NNN. NO sobrescribe bundles previos. Bundles generados con export-scripts v3.x (layout `por-sesion/` + `manifest.md` + `ORDER.md` + `rollback-global.sql`) quedan como histórico y no se migran.
79
289
  ```
@@ -1,16 +1,16 @@
1
- # Theme handling — detección + consolidación + ORDER cross-tema
1
+ # Theme handling — detección + consolidación per-tema (v4.0.0)
2
2
 
3
- > **Port adaptado** de `release-scripts/references/theme-detection.md` + `release-scripts/references/order-generation.md` (ambos v2.0.0). DEC-004 de session061: contenido equivalente, paths actualizados al output dir único de export-scripts.
3
+ > **Port adaptado** de `release-scripts/references/theme-detection.md` + `release-scripts/references/order-generation.md` (ambos v2.0.0). DEC-004 de session061: contenido equivalente, paths actualizados al layout plano de export-scripts v4.0.0. **session093**: la capa `por-tema/` ya NO duplica el rollback y NO emite `ORDER.md` separado — el rollback canónico es `00-ROLLBACK.sql` único al root, y la secuencia de ejecución vive en §4 del `README.md`.
4
4
 
5
- ## Activación de la vista `por-tema/`
5
+ ## Activación de la capa `por-tema/`
6
6
 
7
- `por-tema/` se genera **sólo** si se cumple **alguna** de estas condiciones:
7
+ `por-tema/` es **capa adicional opt-in encima del root plano** — NO reemplaza los archivos `0X-*.sql` consolidados cross-session al root. Se genera **sólo** si se cumple **alguna** de estas condiciones:
8
8
 
9
9
  1. `--themes slug1,slug2` declarado explícitamente.
10
10
  2. Al menos una de las sesiones incluidas tiene sección `## Temas` en su `OBJECTIVE.md` (o `OBJETIVO.md` legacy).
11
11
  3. `--themes infer` declarado (inferencia LLM con confirmación).
12
12
 
13
- Si **ninguna** se cumple: el output dir contiene solo `por-sesion/` + archivos top-level. No se crea sub-carpeta `por-tema/` vacía.
13
+ Si **ninguna** se cumple: el output dir contiene sólo `00-ROLLBACK.sql` + `0X-*.sql` (categorías con contenido) + `README.md` al root. No se crea sub-carpeta `por-tema/` vacía.
14
14
 
15
15
  ## Formato de `## Temas` en OBJECTIVE
16
16
 
@@ -37,12 +37,12 @@ Para cada sesión incluida, leer `OBJECTIVE.md` (fallback bilingual a `OBJETIVO.
37
37
 
38
38
  Para cada sesión sin `## Temas`:
39
39
 
40
- 1. Leer OBJECTIVE + nombres de scripts SQL.
40
+ 1. Leer OBJECTIVE + sentencias del `SCRIPTS.sql` (con sus markers `@objeto`).
41
41
  2. Inferir temas candidatos (3-5 max) con confidence score 0-1.
42
42
  3. Proponer al usuario:
43
43
  ```
44
44
  Sesión session057:
45
- - Tema candidato: `export-report` (confidence 0.92, scripts: ...)
45
+ - Tema candidato: `export-report` (confidence 0.92, sentencias: ...)
46
46
  - Tema candidato: `lifecycle-extension` (confidence 0.45)
47
47
  - ¿Aceptar / editar / declarar uno propio?
48
48
  ```
@@ -52,112 +52,85 @@ Para cada sesión sin `## Temas`:
52
52
 
53
53
  ### Paso C — Filtro `--themes`
54
54
 
55
- Si `--themes slug1,slug2` declarado: restringir el output `por-tema/` a esos slugs. Scripts cuyo tema no entre en el filtro caen en `por-sesion/` solamente (no aparecen en `por-tema/`).
55
+ Si `--themes slug1,slug2` declarado: restringir el output `por-tema/` a esos slugs. Sentencias cuyo tema no entre en el filtro **siguen apareciendo en los archivos `0X-*.sql` del root** (la consolidación cross-session es independiente del filtro de temas) pero no se replican en `por-tema/`.
56
56
 
57
- ## Asignación de cada script a su tema
57
+ ## Asignación de cada sentencia a su tema
58
58
 
59
- Por cada `.sql` forward de las sesiones incluidas:
59
+ Por cada sentencia forward parseada del `SCRIPTS.sql` (markers `@category` + `@stmt`):
60
60
 
61
- 1. **Header declarativo**: leer primeras 10 líneas buscando `-- Temas: slug1, slug2`. Si presente: usa esos slugs.
62
- 2. **Por nombre**: matchear contra patrones del tema (substring del slug en el filename, ej. `rbac-rol-permiso.sql` → `rbac`).
63
- 3. **Por contenido**: leer el SQL y aplicar heurística (qué tabla/función toca, qué módulo de negocio).
64
- 4. **Fallback**: si nada matchea, asignar a `tema-general/` con warning en el manifest.
61
+ 1. **Header declarativo**: leer marker `-- Temas: slug1, slug2` si está presente. Si sí: usar esos slugs.
62
+ 2. **Por nombre del stmt**: matchear contra patrones del tema (substring del slug en el nombre `@stmt`, ej. `rbac-rol-permiso` → `rbac`).
63
+ 3. **Por contenido**: leer el cuerpo de la sentencia y aplicar heurística (qué tabla/función toca, qué módulo de negocio).
64
+ 4. **Fallback**: si nada matchea, asignar a `tema-general/` con warning en el `README.md` §1.
65
65
 
66
66
  ### Multi-tema
67
67
 
68
- Si un script aplica a 2+ temas: copia al primer tema declarado y crea `.link.md` en los demás referenciando el canónico:
68
+ Si una sentencia aplica a 2+ temas: copia al primer tema declarado y crea `.link.md` en los demás referenciando el canónico:
69
69
 
70
70
  ```markdown
71
- # Link — script multi-tema
71
+ # Link — sentencia multi-tema
72
72
 
73
- Este script aplica al tema `[secundario]` pero su versión canónica vive en:
73
+ Esta sentencia aplica al tema `[secundario]` pero su versión canónica vive en:
74
74
 
75
- - `por-tema/tema-[primario]/03-migracion.sql` (sección [N], script `[nombre-original.sql]`)
75
+ - `por-tema/tema-[primario]/03-DML.sql` (sección [N], sentencia `[stmt-original]`)
76
76
 
77
- Razón: el header declarativo del script lista temas múltiples, y por convención el primero es el canónico.
77
+ Razón: el marker `-- Temas:` lista temas múltiples, y por convención el primero es el canónico.
78
78
  ```
79
79
 
80
80
  ## Consolidación por categoría dentro de cada tema
81
81
 
82
82
  Para cada tema y cada categoría (01..04):
83
83
 
84
- 1. Ordenar scripts fuente por NNN original (cronológico cross-session).
85
- 2. Leer cada `.sql`, extraer cuerpo eliminando `BEGIN;` inicial y `COMMIT;` final.
86
- 3. Concatenar con separadores `[i/N]` + nombre + ruta canónica.
84
+ 1. Ordenar sentencias fuente por orden cronológico (cross-session por sNNN → orden de aparición en SCRIPTS.sql).
85
+ 2. Para cada sentencia, extraer cuerpo eliminando `BEGIN;` inicial y `COMMIT;` final.
86
+ 3. Concatenar con separadores `[i/N]` + nombre `@stmt` + ruta canónica al `SCRIPTS.sql` original.
87
87
  4. Envolver todo en un único `BEGIN; … COMMIT;`.
88
- 5. Escribir `por-tema/tema-<slug>/<categoria>.sql`.
89
- 6. Consolidar `.rollback.sql` en orden inverso.
88
+ 5. Escribir `por-tema/tema-<slug>/<categoria>.sql` con nombres UPPERCASE EN canon: `01-DDL-TABLES.sql`, `02-DDL-FUNCTIONS.sql`, `03-DML.sql`, `04-INSERTS.sql`.
89
+ 6. **NO se genera** `<tema>/rollback*` ni `<tema>/00-ROLLBACK.sql`. El rollback canónico es `<bundle-root>/00-ROLLBACK.sql` único un solo punto de verdad para reversa.
90
90
 
91
91
  ### Header del consolidado
92
92
 
93
93
  **Uno solo** al inicio del archivo, con el formato canónico de 4 líneas definido en `sql-script-organizer/SKILL.md#header-canónico`:
94
94
 
95
95
  ```
96
- -- Script: tema-rbac/03-migracion.sql
97
- -- Sesion: s057, s058, s063
98
- -- Objeto: migración de roles y asignaciones RBAC
96
+ -- ============================================================================
97
+ -- Script: tema-rbac/03-DML.sql
98
+ -- Sesion: s057, s058, s063
99
+ -- Objeto: migración de roles y asignaciones RBAC
99
100
  -- Alcance: tablas tb_rol, tb_permiso_rol, tb_rol_usuario
101
+ -- ============================================================================
100
102
  ```
101
103
 
102
- **No copiar** los headers de los scripts individuales — su origen queda registrado en los separadores `[i/N]` del cuerpo y en `README.md`.
104
+ **No copiar** los headers individuales de cada sentencia — su origen queda registrado en los separadores `[i/N]` del cuerpo y en `README.md` §4.1 (mapping cuando `por-tema/` activo).
103
105
 
104
106
  ### `--keep-parts`
105
107
 
106
- Si el flag está activo: preservar `por-tema/<slug>/parts/<categoria>/*.sql` con los scripts individuales (no consolidados). Permite ejecutar uno por vez para debugging.
108
+ Si el flag está activo: preservar `por-tema/<slug>/parts/<categoria>/*.sql` con sentencias individuales (no consolidadas). Permite ejecutar una por vez para debugging.
107
109
 
108
- ## Rollback por tema y global
110
+ ## Rollback con temas activos
109
111
 
110
- ### `por-tema/tema-<slug>/rollback-tema-<slug>.sql`
112
+ Sigue siendo **único**: `<bundle-root>/00-ROLLBACK.sql` cubre todas las sentencias del corpus, indistinto del tema. Cuando `por-tema/` está activo, el `README.md` §5 incluye una nota explícita:
111
113
 
112
- Encadena los 4 consolidados de rollback (04→03→02→01) dentro de un único `BEGIN; COMMIT;`. Operaciones irreversibles marcadas con header WARNING.
114
+ > El `00-ROLLBACK.sql` revierte todos los temas. NO ejecutar rollbacks parciales por tema — dejaría el estado de BD inconsistente cuando los temas comparten objetos (tablas, funciones, foreign keys).
113
115
 
114
- ### `rollback-global.sql` (en output dir top-level)
116
+ Algoritmo de generación del `00-ROLLBACK.sql` en `sql-rollback-generator/SKILL.md` v2.0.0.
115
117
 
116
- Encadena rollback por-tema en orden **inverso a `ORDER.md`**. Si `por-tema/` no existe, encadena `por-sesion/<sessionXXX>/rollback/*.sql` por sesión cronológica inversa.
118
+ ## Secuencia de ejecución cuando `por-tema/` está activo
117
119
 
118
- Algoritmo completo en `sql-rollback-generator/references/release-rollback.md` (referenciable cross-skill).
119
-
120
- ## `ORDER.md` cross-tema
121
-
122
- Cuando hay `por-tema/`: el `ORDER.md` top-level del bundle intercala scripts por **fase** (no por tema):
120
+ §4 del `README.md` incluye una variante "Por tema (opcional)" además del orden canónico al root. Ejemplo:
123
121
 
124
122
  ```markdown
125
- ## Fase 1 DDL tablas
126
-
127
- psql -f por-tema/tema-rbac/01-ddl-tablas.sql
128
- psql -f por-tema/tema-lista-negra-blanca/01-ddl-tablas.sql
129
- psql -f por-tema/tema-auditoria/01-ddl-tablas.sql
130
-
131
- ## Fase 2 — DDL funciones
132
-
133
- psql -f por-tema/tema-rbac/02-ddl-funciones.sql
134
- ...
135
-
136
- ## Fase 3 — Migración
137
-
138
- ...
139
-
140
- ## Fase 4 — Inserts iniciales
123
+ ### 4.2 Ejecución per-tema (opcional, requiere --themes)
141
124
 
142
- ...
125
+ Útil cuando un solo tema necesita validarse aisladamente en staging antes del despliegue completo. **Importante**: si se ejecuta un tema parcial, el rollback canónico (`00-ROLLBACK.sql`) sigue cubriendo todo el bundle — no hay rollback per-tema.
143
126
 
144
- ## Fase 5 — Cleanup irreversible
145
-
146
- (operaciones DROP COLUMN, TRUNCATE, DROP CASCADE — al final)
127
+ ```bash
128
+ # Tema rbac:
129
+ psql -f por-tema/tema-rbac/01-DDL-TABLES.sql
130
+ psql -f por-tema/tema-rbac/02-DDL-FUNCTIONS.sql
131
+ psql -f por-tema/tema-rbac/03-DML.sql
132
+ psql -f por-tema/tema-rbac/04-INSERTS.sql
147
133
  ```
148
-
149
- Cuando **no** hay `por-tema/`: el `ORDER.md` lista scripts por sesión cronológica, dentro de cada una 01→04:
150
-
151
- ```markdown
152
- ## Sesión session057-export-func
153
-
154
- psql -f por-sesion/session057-export-func/01-ddl-tablas/001-...sql
155
- psql -f por-sesion/session057-export-func/02-ddl-funciones/001-...sql
156
- ...
157
-
158
- ## Sesión session058-export-arq
159
-
160
- ...
161
134
  ```
162
135
 
163
136
  ## Idempotencia