@tacuchi/agent-workflow-cli 6.2.0 → 7.0.1

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 (181) hide show
  1. package/README.md +65 -12
  2. package/dist/application/profile/profile-service.d.ts +53 -0
  3. package/dist/application/profile/profile-service.d.ts.map +1 -0
  4. package/dist/application/profile/profile-service.js +210 -0
  5. package/dist/application/profile/profile-service.js.map +1 -0
  6. package/dist/application/self/bootstrap.js +2 -1
  7. package/dist/application/self/bootstrap.js.map +1 -1
  8. package/dist/application/self/detect-hosts.d.ts +18 -0
  9. package/dist/application/self/detect-hosts.d.ts.map +1 -0
  10. package/dist/application/self/detect-hosts.js +37 -0
  11. package/dist/application/self/detect-hosts.js.map +1 -0
  12. package/dist/application/self/install-hooks.d.ts +30 -0
  13. package/dist/application/self/install-hooks.d.ts.map +1 -0
  14. package/dist/application/self/install-hooks.js +253 -0
  15. package/dist/application/self/install-hooks.js.map +1 -0
  16. package/dist/application/self/install-skill.d.ts +2 -0
  17. package/dist/application/self/install-skill.d.ts.map +1 -1
  18. package/dist/application/self/install-skill.js +69 -3
  19. package/dist/application/self/install-skill.js.map +1 -1
  20. package/dist/cli/commands/self.d.ts.map +1 -1
  21. package/dist/cli/commands/self.js +9 -1
  22. package/dist/cli/commands/self.js.map +1 -1
  23. package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
  24. package/dist/cli/tui/tabs/skills-tab.js +100 -24
  25. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  26. package/package.json +2 -2
  27. package/skills/agent-workflow/commands/README.md +26 -0
  28. package/skills/agent-workflow/commands/compact.md +24 -0
  29. package/skills/agent-workflow/commands/doctor.md +100 -0
  30. package/skills/agent-workflow/commands/export-arq.md +77 -0
  31. package/skills/agent-workflow/commands/export-conclusions.md +78 -0
  32. package/skills/agent-workflow/commands/export-plan.md +74 -0
  33. package/skills/agent-workflow/commands/export-qa-note.md +30 -0
  34. package/skills/agent-workflow/commands/export-report.md +78 -0
  35. package/skills/agent-workflow/commands/export-requirement.md +30 -0
  36. package/skills/agent-workflow/commands/export-scripts.md +92 -0
  37. package/skills/agent-workflow/commands/export-tech-manuals.md +75 -0
  38. package/skills/agent-workflow/commands/export-tech-note.md +30 -0
  39. package/skills/agent-workflow/commands/hub-init.md +82 -0
  40. package/skills/agent-workflow/commands/migrate.md +56 -0
  41. package/skills/agent-workflow/commands/project-init.md +60 -0
  42. package/skills/agent-workflow/commands/resume.md +22 -0
  43. package/skills/agent-workflow/commands/rules.md +40 -0
  44. package/skills/agent-workflow/commands/session.md +35 -0
  45. package/skills/agent-workflow/doctrine/README.md +15 -0
  46. package/skills/agent-workflow/doctrine/compact/SKILL.md +145 -0
  47. package/skills/agent-workflow/doctrine/doctor/SKILL.md +86 -0
  48. package/skills/agent-workflow/doctrine/doctor/SKILL.md.tmp +0 -0
  49. package/skills/agent-workflow/doctrine/hub-init/SKILL.md +157 -0
  50. package/skills/agent-workflow/doctrine/hub-init/SKILL.md.tmp +0 -0
  51. package/skills/agent-workflow/doctrine/hub-init/references/multiroot-manual.md +51 -0
  52. package/skills/agent-workflow/doctrine/implement/SKILL.md +290 -0
  53. package/skills/agent-workflow/doctrine/implement/references/branch-verification.md +16 -0
  54. package/skills/agent-workflow/doctrine/implement/references/design-md-template.md +108 -0
  55. package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +81 -0
  56. package/skills/agent-workflow/doctrine/migrate/SKILL.md +281 -0
  57. package/skills/agent-workflow/doctrine/migrate/SKILL.md.tmp +0 -0
  58. package/skills/agent-workflow/doctrine/project-init/SKILL.md +100 -0
  59. package/skills/agent-workflow/doctrine/project-init/SKILL.md.tmp +0 -0
  60. package/skills/agent-workflow/doctrine/refactor/SKILL.md +208 -0
  61. package/skills/agent-workflow/doctrine/refactor/references/refactor-md-template.md +108 -0
  62. package/skills/agent-workflow/doctrine/refactor/references/strangler-checklist.md +116 -0
  63. package/skills/agent-workflow/doctrine/resume/SKILL.md +199 -0
  64. package/skills/agent-workflow/doctrine/rules/SKILL.md +224 -0
  65. package/skills/agent-workflow/doctrine/rules/SKILL.md.tmp +0 -0
  66. package/skills/agent-workflow/doctrine/session/SKILL.md +383 -0
  67. package/skills/agent-workflow/doctrine/session/references/auto-plan-rules.md +63 -0
  68. package/skills/agent-workflow/doctrine/session/references/backlog-template.md +95 -0
  69. package/skills/agent-workflow/doctrine/session/references/branch-verification.md +198 -0
  70. package/skills/agent-workflow/doctrine/session/references/commits-policy.md +111 -0
  71. package/skills/agent-workflow/doctrine/session/references/communication-style.md +50 -0
  72. package/skills/agent-workflow/doctrine/session/references/graduacion-routing.md +88 -0
  73. package/skills/agent-workflow/doctrine/session/references/lifecycle-deep.md +160 -0
  74. package/skills/agent-workflow/doctrine/session/references/prompts/C1-specialty-selection.md +11 -0
  75. package/skills/agent-workflow/doctrine/session/references/prompts/C2-cost-guard.md +14 -0
  76. package/skills/agent-workflow/doctrine/session/references/prompts/M1-closure-commit-prompt.md +104 -0
  77. package/skills/agent-workflow/doctrine/session/references/prompts/M10-next-step.md +17 -0
  78. package/skills/agent-workflow/doctrine/session/references/prompts/M11-context.md +16 -0
  79. package/skills/agent-workflow/doctrine/session/references/prompts/M2-branch-caso-A.md +14 -0
  80. package/skills/agent-workflow/doctrine/session/references/prompts/M3-branch-caso-C.md +33 -0
  81. package/skills/agent-workflow/doctrine/session/references/prompts/M4-cross-source-hard-gate.md +33 -0
  82. package/skills/agent-workflow/doctrine/session/references/prompts/M5-modality-analyze.md +15 -0
  83. package/skills/agent-workflow/doctrine/session/references/prompts/M6-phase-gate.md +31 -0
  84. package/skills/agent-workflow/doctrine/session/references/prompts/M7-refactor-legacy-detected.md +28 -0
  85. package/skills/agent-workflow/doctrine/session/references/prompts/M8-refactor-cleanup.md +16 -0
  86. package/skills/agent-workflow/doctrine/session/references/prompts/M9-contract-review.md +39 -0
  87. package/skills/agent-workflow/doctrine/session/references/prompts/S1-type-design.md +15 -0
  88. package/skills/agent-workflow/doctrine/session/references/prompts/S2-topic-change-detection.md +14 -0
  89. package/skills/agent-workflow/doctrine/session/references/prompts/S3-flow-detection.md +28 -0
  90. package/skills/agent-workflow/doctrine/session/references/prompts/S4-resume.md +27 -0
  91. package/skills/agent-workflow/doctrine/session/references/prompts/S5-post-compact.md +17 -0
  92. package/skills/agent-workflow/doctrine/session/references/prompts/S6-scope.md +16 -0
  93. package/skills/agent-workflow/doctrine/session/references/prompts/S7-design-review.md +37 -0
  94. package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +210 -0
  95. package/skills/agent-workflow/doctrine/session/references/sandbox-readonly-rules.md +82 -0
  96. package/skills/agent-workflow/doctrine/session/references/specialty-decision-tree.md +56 -0
  97. package/skills/agent-workflow/doctrine/session/references/topic-change-rules.md +67 -0
  98. package/skills/agent-workflow/exports/README.md +15 -0
  99. package/skills/agent-workflow/exports/export-arq/SKILL.md +229 -0
  100. package/skills/agent-workflow/exports/export-arq/SKILL.md.tmp +0 -0
  101. package/skills/agent-workflow/exports/export-arq/references/lexico-tecnico.md +94 -0
  102. package/skills/agent-workflow/exports/export-arq/references/template-c4.md +293 -0
  103. package/skills/agent-workflow/exports/export-arq/references/template-plantuml.puml +77 -0
  104. package/skills/agent-workflow/exports/export-arq/references/template-structurizr.dsl +72 -0
  105. package/skills/agent-workflow/exports/export-arq/references/validations.md +231 -0
  106. package/skills/agent-workflow/exports/export-conclusions/SKILL.md +169 -0
  107. package/skills/agent-workflow/exports/export-conclusions/references/dedup-rules.md +154 -0
  108. package/skills/agent-workflow/exports/export-conclusions/references/template-conclusions.md +158 -0
  109. package/skills/agent-workflow/exports/export-plan/SKILL.md +225 -0
  110. package/skills/agent-workflow/exports/export-plan/references/state-transitions.md +141 -0
  111. package/skills/agent-workflow/exports/export-plan/references/template-plan.md +132 -0
  112. package/skills/agent-workflow/exports/export-qa-note/SKILL.md +31 -0
  113. package/skills/agent-workflow/exports/export-report/SKILL.md +262 -0
  114. package/skills/agent-workflow/exports/export-report/SKILL.md.tmp +0 -0
  115. package/skills/agent-workflow/exports/export-report/references/lexico.md +174 -0
  116. package/skills/agent-workflow/exports/export-report/references/template-a.md +95 -0
  117. package/skills/agent-workflow/exports/export-report/references/template-b.md +221 -0
  118. package/skills/agent-workflow/exports/export-report/references/template-c.md +180 -0
  119. package/skills/agent-workflow/exports/export-report/references/validations.md +255 -0
  120. package/skills/agent-workflow/exports/export-requirement/SKILL.md +31 -0
  121. package/skills/agent-workflow/exports/export-scripts/SKILL.md +324 -0
  122. package/skills/agent-workflow/exports/export-scripts/references/code-scan-recommendations.md +83 -0
  123. package/skills/agent-workflow/exports/export-scripts/references/deprecation-plan.md +80 -0
  124. package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +80 -0
  125. package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +253 -0
  126. package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +79 -0
  127. package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +168 -0
  128. package/skills/agent-workflow/exports/export-scripts/references/validations.md +242 -0
  129. package/skills/agent-workflow/exports/export-tech-manuals/SKILL.md +214 -0
  130. package/skills/agent-workflow/exports/export-tech-manuals/references/lexico-tecnico.md +97 -0
  131. package/skills/agent-workflow/exports/export-tech-manuals/references/template-index.md +123 -0
  132. package/skills/agent-workflow/exports/export-tech-manuals/references/template-manual.md +143 -0
  133. package/skills/agent-workflow/exports/export-tech-manuals/references/validations.md +211 -0
  134. package/skills/agent-workflow/exports/export-tech-note/SKILL.md +31 -0
  135. package/skills/agent-workflow/hooks/README.md +15 -0
  136. package/skills/agent-workflow/hooks/hooks.template.json +90 -0
  137. package/skills/agent-workflow/references/README.md +12 -0
  138. package/skills/agent-workflow/references/legacy-anchors.md +50 -0
  139. package/skills/agent-workflow/references/profile-parametrization.md +88 -0
  140. package/skills/agent-workflow/specialties/README.md +14 -0
  141. package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +175 -0
  142. package/skills/agent-workflow/specialties/analyze-conclude/references/incident-classification.md +61 -0
  143. package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md +148 -0
  144. package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md.tmp +0 -0
  145. package/skills/agent-workflow/specialties/analyze-investigate/references/cost-guard.md +85 -0
  146. package/skills/agent-workflow/specialties/analyze-synthesize/SKILL.md +127 -0
  147. package/skills/agent-workflow/specialties/design-brief/SKILL.md +90 -0
  148. package/skills/agent-workflow/specialties/design-deliver/SKILL.md +121 -0
  149. package/skills/agent-workflow/specialties/design-develop/SKILL.md +115 -0
  150. package/skills/agent-workflow/specialties/design-discover/SKILL.md +103 -0
  151. package/skills/agent-workflow/standards/README.md +12 -0
  152. package/skills/agent-workflow/standards/coding-standards/SKILL.md +102 -0
  153. package/skills/agent-workflow/standards/coding-standards/SKILL.md.tmp +0 -0
  154. package/skills/agent-workflow/standards/coding-standards/references/angular-typescript.md +266 -0
  155. package/skills/agent-workflow/standards/coding-standards/references/database-conventions.md +170 -0
  156. package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +300 -0
  157. package/skills/agent-workflow/standards/coding-standards/references/frontend-structure.md +182 -0
  158. package/skills/agent-workflow/standards/coding-standards/references/java-spring.md +244 -0
  159. package/skills/agent-workflow/standards/coding-standards/references/project-structure.md +197 -0
  160. package/skills/agent-workflow/standards/frontend-design/SKILL.md +62 -0
  161. package/skills/agent-workflow/standards/frontend-design/references/feedback-toasts-patterns.md +249 -0
  162. package/skills/agent-workflow/standards/frontend-design/references/form-patterns.md +278 -0
  163. package/skills/agent-workflow/standards/frontend-design/references/list-patterns.md +256 -0
  164. package/skills/agent-workflow/standards/frontend-design/references/modal-patterns.md +220 -0
  165. package/skills/agent-workflow/standards/frontend-design/references/navigation-patterns.md +224 -0
  166. package/skills/agent-workflow/standards/redaccion-simple/SKILL.md +128 -0
  167. package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +197 -0
  168. package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md +161 -0
  169. package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +131 -0
  170. package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +255 -0
  171. package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +244 -0
  172. package/skills/agent-workflow/standards/sql-script-organizer/references/bundle-readme-template.md +82 -0
  173. package/skills/agent-workflow/standards/sql-script-organizer/references/categorization-rules.md +122 -0
  174. package/skills/agent-workflow/standards/sql-script-organizer/references/consolidation-cross-session.md +125 -0
  175. package/skills/agent-workflow/standards/sql-script-organizer/references/scripts-sql-format.md +140 -0
  176. package/skills/agent-workflow/standards/testing-strategy/SKILL.md +113 -0
  177. package/skills/agent-workflow/standards/testing-strategy/references/test-levels.md +255 -0
  178. package/skills/agent-workflow/workflows/README.md +12 -0
  179. package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +107 -0
  180. package/skills/agent-workflow/workflows/design-workflow/SKILL.md +100 -0
  181. package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +195 -0
@@ -0,0 +1,244 @@
1
+ ---
2
+ name: sql-script-organizer
3
+ description: "Mantiene el archivo único SCRIPTS.sql por sesión (uppercase EN canon, F-D session062), aplica estilo del proyecto (BEGIN/COMMIT, idempotencia, schema explícito), markers @category (01-ddl-tablas, 02-ddl-funciones, 03-migracion, 04-inserts) y @stmt por sentencia. La separación 01-04 + generación de rollbacks ocurre post-hoc en /agent-workflow:export-scripts (no durante exec). BREAKING desde v1.0.0: reemplaza el layout scripts/01-04/* + .rollback.sql per archivo (2N+1) por SCRIPTS.sql único. Layouts legacy se migran con /agent-workflow:migrate --upgrade-topology."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # SQL Script Organizer
8
+
9
+ Organización, estilo y graduación de scripts SQL dentro del flujo de sesiones.
10
+
11
+ ## Regla cero — read/write filesystem only
12
+
13
+ Este skill **organiza, renumera, escribe diffs y prepara el bundle** en disco. **Nunca ejecuta SQL** contra `<mcp-cert>`/`<mcp-prod>` ni ningún otro destino. La aplicación del bundle (DDL, migraciones, inserts) la realiza el **usuario** manualmente, fuera del scope de este skill. Si durante el flujo aparece tentación de "verificar aplicando" — refusar y pedir al usuario que ejecute.
14
+
15
+ ## When to use
16
+
17
+ - Cuando existan ≥2 archivos `.sql` en la sesión y necesiten ordenarse para entrega.
18
+ - **Antes de escribir un nuevo `.sql`** — para elegir categoría correcta y aplicar estilo desde el inicio.
19
+ - Al llegar a Fase 5 (Cierre) con scripts SQL pendientes de graduar.
20
+ - NL: "unificar", "reorganizar", "preparar bundle de scripts", "listos para prod".
21
+ - Al renumerar o reclasificar scripts durante la sesión.
22
+
23
+ ## Sandbox read-only
24
+
25
+ `../session/references/sandbox-readonly-rules.md`. Plan describe clasificación, renumeración y orden propuestos (sin crear ni mover `.sql`).
26
+
27
+ ## Staging durante la sesión (v1.0.0 — BREAKING)
28
+
29
+ **Archivo único** en la raíz de la sesión:
30
+
31
+ ```
32
+ .workflow/sessions/sessionXXX-nombre/
33
+ └── SCRIPTS.sql (consolidado de todas las sentencias de la sesión)
34
+ ```
35
+
36
+ Spec completa: ver [`references/scripts-sql-format.md`](references/scripts-sql-format.md).
37
+
38
+ **Cada sentencia** se appendea al SCRIPTS.sql con un par de markers en comentarios:
39
+
40
+ ```sql
41
+ -- @category: 01-ddl-tablas
42
+ -- @stmt: 01-crear-tabla-usuarios
43
+ CREATE TABLE IF NOT EXISTS esq_credito.tb_usuarios (
44
+ ...
45
+ );
46
+ ```
47
+
48
+ - `@category` clasifica la sentencia (4 valores canónicos, ver tabla abajo).
49
+ - `@stmt` da el slug determinístico (`NN-verbo-objetivo`). Sirve para que `export-scripts` derive el filename al separar.
50
+ - Orden cronológico dentro del archivo = orden en que se appendea. `export-scripts` resuelve el orden de ejecución final por categoría (01 → 02 → 03 → 04).
51
+ - `BEGIN;` global al inicio del archivo, `COMMIT;` al final. Cada sentencia individual NO trae su propio BEGIN/COMMIT (la separación post-hoc los agrega por archivo).
52
+
53
+ > **Sin .rollback.sql per archivo durante exec**. Los rollbacks se generan post-hoc al correr `/agent-workflow:export-scripts` (ver `sql-rollback-generator` v1.0.0).
54
+
55
+ ## Migración desde layout legacy
56
+
57
+ Sesiones creadas con `sql-script-organizer` v0.x usan layout antiguo:
58
+
59
+ ```
60
+ .workflow/sessions/sessionXXX-nombre/scripts/
61
+ ├── 01-ddl-tablas/
62
+ │ └── 001-crear-tabla.sql
63
+ ├── 02-ddl-funciones/
64
+ │ └── 001-crear-fn.sql
65
+ └── ...
66
+ ```
67
+
68
+ Para migrar: `/agent-workflow:migrate --upgrade-topology`. El skill `migrate` detecta el layout legacy y consolida en `SCRIPTS.sql` preservando order + agregando markers. Ver `agent-workflow/skills/migrate/SKILL.md` capability 11.
69
+
70
+ `/agent-workflow:export-scripts` aborta si detecta layout legacy sin migrar. NO consume sesiones mixtas.
71
+
72
+ ## Las 4 categorías (markers `@category`)
73
+
74
+ | Marker | Patrones de detección |
75
+ |---|---|
76
+ | `01-ddl-tablas` | `CREATE TABLE`, `DROP TABLE`, `ALTER TABLE`, `CREATE INDEX`, `CREATE SEQUENCE` |
77
+ | `02-ddl-funciones` | `CREATE [OR REPLACE] FUNCTION`, `CREATE [OR REPLACE] PROCEDURE`, `DROP FUNCTION`, `DROP PROCEDURE` |
78
+ | `03-migracion` | `UPDATE`, `INSERT ... SELECT ...`, `DELETE` sobre datos existentes, transformaciones de columnas |
79
+ | `04-inserts` | `INSERT INTO ... VALUES`, seeds de catálogos, `tb_maestra_detalle`, datos de configuración inicial |
80
+
81
+ **Orden de ejecución obligatorio**: 01 → 02 → 03 → 04. El archivo SCRIPTS.sql puede mezclar categorías cronológicamente; `export-scripts` ordena al bundle final.
82
+
83
+ Patrones detallados y edge cases en `references/categorization-rules.md`.
84
+
85
+ ## Reglas de estilo SQL
86
+
87
+ Cumplir `coding-standards/references/database-conventions.md#estilo-de-scripts-sql`:
88
+
89
+ - `BEGIN;` al inicio, `COMMIT;` al final.
90
+ - Idempotencia: `CREATE TABLE IF NOT EXISTS`, `DROP ... IF EXISTS`, `CREATE OR REPLACE`, `ON CONFLICT`.
91
+ - Cuerpo: preferir `WITH ... AS` (CTEs encadenadas) sobre subqueries anidados y sobre `DO $$ ... LOOP ... END $$`. Ver "Cuerpo: CTEs sobre DO/LOOP" abajo.
92
+ - Header canónico de 4 líneas (Script / Sesion / Objeto / Alcance). Ver "Header canónico" abajo.
93
+ - Separador entre secciones: una línea de comentario envuelta por guiones. Ver "Separadores entre secciones" abajo.
94
+ - Nunca crear `fn_*`/`sp_*` para reusar lógica exclusiva de un script; usar CTE o inline.
95
+ - Schema siempre explícito (`esq_credito.tb_x`, nunca `public.`).
96
+
97
+ ### Header canónico
98
+
99
+ Bloque único al inicio del script, entre dos líneas de iguales:
100
+
101
+ ```sql
102
+ -- ============================================================================
103
+ -- Script: NNN-tipo-objetivo.sql
104
+ -- Sesion: sNNN
105
+ -- Objeto: <qué hace, 1-2 líneas>
106
+ -- Alcance: <filtros y boundaries del cambio, 1 línea>
107
+ -- ============================================================================
108
+ ```
109
+
110
+ - Solo 4 campos: `Script`, `Sesion`, `Objeto`, `Alcance`.
111
+ - `Sesion` puede listar varias sesiones cuando el script trazó historia (ej. `s078 → s080 (fix UNIQUE) → s082 (simplificado)`).
112
+ - Autor / Fecha / "Defensa futura" / notas largas **NO** van dentro del header. Si el contexto lo amerita, van como bloque libre debajo del header (separado por una línea en blanco). Default: no se generan.
113
+ - Si el motor no es Postgres, indicarlo en `Objeto:` o como nota libre debajo, no como campo del header.
114
+
115
+ ### Separadores entre secciones
116
+
117
+ Cada sección del cuerpo se introduce con una línea de comentario corta envuelta por guiones seguidos:
118
+
119
+ ```sql
120
+ -- ----------------------------------------------------------------------------
121
+ -- N. Descripción corta de qué hace este bloque.
122
+ -- ----------------------------------------------------------------------------
123
+ ```
124
+
125
+ - Sin cajas dobles (`====` queda solo para el header).
126
+ - Si el script tiene una sola sección, omitir separadores.
127
+ - No partir un bloque corto solo por estética — los separadores marcan flujos lógicos, no líneas.
128
+
129
+ ### Cuerpo: CTEs sobre DO/LOOP
130
+
131
+ - Default: una transformación = `WITH ... AS` con CTEs encadenadas + un `INSERT/UPDATE/DELETE` final que las consume.
132
+ - Evitar `DO $$ DECLARE ... FOR ... LOOP ... END $$` cuando el mismo resultado se logra declarativamente. Es código que el lector tiene que mentalizar fila a fila; el SQL declarativo es más fácil de auditar y revertir.
133
+ - Excepción permitida: descubrimiento dinámico de objetos (FKs, columnas, constraints, secuencias) que no se puede expresar en SQL declarativo. En ese caso documentar el motivo en `Objeto:` del header (ej. `Objeto: ... cascadea a hijas via FKs detectadas dinámicamente.`).
134
+
135
+ ## Proceso de mantenimiento del SCRIPTS.sql (v1.0.0)
136
+
137
+ 1. **Detectar la categoría** del cambio a aplicar siguiendo la tabla de markers.
138
+ 2. **Verificar idempotencia** del statement (CREATE OR REPLACE, IF EXISTS, ON CONFLICT, etc.).
139
+ 3. **Append** al `SCRIPTS.sql` con par de markers (`@category` + `@stmt`).
140
+ 4. **Style check** — el statement debe cumplir el header canónico, CTEs sobre DO/LOOP, schema explícito.
141
+ 5. **NO mover ni renumerar** archivos individuales (solo hay un SCRIPTS.sql).
142
+ 6. **NO generar `.rollback.sql`** durante exec (rollback se genera al exportar).
143
+
144
+ El usuario revisa el SCRIPTS.sql periódicamente; la separación 01-04 final y la verificación de dependencias cruzadas la hace `/agent-workflow:export-scripts` post-hoc.
145
+
146
+ ## Layout del bundle (post-export-scripts v3.0.0)
147
+
148
+ `/agent-workflow:export-scripts` produce el bundle al ejecutarse, no este skill:
149
+
150
+ ```
151
+ <docs>/scripts/NNN-export-scripts-YYYY-MM-DD/por-sesion/sessionXXX-nombre/
152
+ ├── README.md (generado por export-scripts)
153
+ ├── 01-ddl-tablas/
154
+ │ ├── 001-crea-tb-x.sql (derivado de @stmt: 001-crea-tb-x)
155
+ │ └── ...
156
+ ├── 02-ddl-funciones/
157
+ ├── 03-migracion/
158
+ │ ├── 000-backup-tb-x.sql (auto-generado por sql-rollback-generator si UPDATE/DELETE masivo)
159
+ │ └── ...
160
+ ├── 04-inserts/
161
+ └── rollback/
162
+ ├── 00-rollback-global.sql (encadenado 04→03→02→01)
163
+ └── NNN-*.rollback.sql (1 por @stmt forward)
164
+ ```
165
+
166
+ Layout **legacy** pre-v1.0.0 (`scripts/01-04/*.sql + .rollback.sql` directo en sesión) ya **no se genera**; sesiones nuevas usan SCRIPTS.sql. Layouts legacy en sesiones cerradas se migran con `/agent-workflow:migrate --upgrade-topology`.
167
+
168
+ ## Graduación al cierre (vía `/agent-workflow:release`)
169
+
170
+ Los scripts viven en la sesión durante execution: `.workflow/sessions/<folder>/scripts/`. La graduación a `docs/scripts/NNN-sessionXXX-<slug>/` la hace **`/agent-workflow:release` exclusivamente** (DEC-003) — único disparador de `kind=script`. Sesiones individuales NO invocan `agent-workflow graduate --kind script` directamente.
171
+
172
+ Destino al graduar (DEC-002, vía release):
173
+ - **hub mode** → `<hub>/docs/scripts/NNN-sessionXXX-<slug>/`.
174
+ - **project mode** → `<cwd>/docs/scripts/NNN-sessionXXX-<slug>/`.
175
+
176
+ `NNN` = siguiente correlativo en `docs/scripts/` (`agent-workflow next-number docs/scripts`). Release registra la ruta en `.workflow/HISTORY.md`.
177
+
178
+ ## Modo release (cross-session + por tema)
179
+
180
+ Cuando `release` o `release-scripts` invocan este skill, aplica modo consolidación cross-session o modo por tema. Ambos comparten la clasificación 01→04 pero cambian el layout y la transaccionalidad.
181
+
182
+ Procedimiento completo (entrada, proceso paso a paso, layout destino, formato del consolidado, qué NO hacer) en **`references/consolidation-cross-session.md`**.
183
+
184
+ ## Integración con otros skills
185
+
186
+ - **`sql-rollback-generator`** v1.0.0+ — **on-export**: ya NO genera rollbacks durante exec. La generación ocurre cuando `export-scripts` corre.
187
+ - **`export-scripts`** v3.0.0+ — consume `SCRIPTS.sql` per sesión, separa en 01-04 y delega a `sql-rollback-generator` para los rollbacks. Aborta si detecta layout legacy.
188
+ - **`migrate`** v1.3.0+ — capability 11: convierte layouts legacy `scripts/01-04/*.sql` → `SCRIPTS.sql` consolidado.
189
+ - **`coding-standards`** — fuente de las reglas de estilo (`database-conventions.md`).
190
+ - **`session`** — Fase execution invoca este skill al primer change SQL; Fase closure no necesita acción adicional.
191
+
192
+ ## Ejemplo de header simplificado
193
+
194
+ Antes (estilo viejo, evitar):
195
+
196
+ ```sql
197
+ -- ============================================================================
198
+ -- Script: 020-dml-normalizar-codusuario-uppercase.sql
199
+ -- Sesion: s078 (creado) → s079 (formato iniciales) → s080 (fix UNIQUE)
200
+ -- Fecha: 2026-04-29
201
+ -- Autor: Jesus Loayza (con asistencia AI)
202
+ -- Objeto: Renombra esq_x.tb_x.cod a MAYUSCULAS con sufijo numerico para
203
+ -- colisiones internas. Cascadea a hijas via FKs detectadas dinamicamente.
204
+ -- Alcance: SOLO usuarios id_tipo = 'CORE' con tb_persona valida.
205
+ -- Defensa futura: AuthSvc.generarCod en mscore-mantenimiento.
206
+ -- ============================================================================
207
+ -- Si el INSERT al mapping rebota con UNIQUE, significa que ...
208
+ -- ============================================================================
209
+ ```
210
+
211
+ Después (estilo canónico):
212
+
213
+ ```sql
214
+ -- ============================================================================
215
+ -- Script: 020-dml-normalizar-codusuario-uppercase.sql
216
+ -- Sesion: s078 → s080 (fix UNIQUE) → s082 (simplificado one-shot, sin trigger)
217
+ -- Objeto: Renombra esq_x.tb_x.cod a MAYUSCULAS con sufijo numérico para
218
+ -- colisiones. Cascadea a hijas vía FKs detectadas dinámicamente.
219
+ -- Alcance: SOLO usuarios id_tipo = 'CORE' con tb_persona válida.
220
+ -- ============================================================================
221
+ ```
222
+
223
+ Y en el cuerpo, las secciones se separan así:
224
+
225
+ ```sql
226
+ -- ----------------------------------------------------------------------------
227
+ -- 1. Mapping old → new para CORE con persona válida.
228
+ -- ----------------------------------------------------------------------------
229
+ WITH bases AS (
230
+ SELECT u.id, u.cod AS old_code,
231
+ UPPER(LEFT(TRIM(p.nombres), 1) || REPLACE(TRIM(p.apellido_paterno), ' ', '')) AS base_code
232
+ FROM esq_x.tb_x u
233
+ JOIN esq_x.tb_persona p ON p.id_persona = u.id_persona
234
+ WHERE u.id_tipo = 'CORE'
235
+ ),
236
+ mapped AS ( ... )
237
+ INSERT INTO _cod_map (id, old_code, new_code) SELECT id, old_code, new_code FROM mapped;
238
+ ```
239
+
240
+ ## Recursos adicionales
241
+
242
+ - **`references/categorization-rules.md`** — patrones detallados, edge cases, scripts mixtos.
243
+ - **`references/bundle-readme-template.md`** — plantilla para `scripts/bundle/README.md`.
244
+ - **`references/consolidation-cross-session.md`** — modo release (cross-session + por tema).
@@ -0,0 +1,82 @@
1
+ # Plantilla — README del Bundle SQL
2
+
3
+ Usar esta plantilla para generar `scripts/bundle/README.md` al finalizar la reorganización.
4
+
5
+ ---
6
+
7
+ ```markdown
8
+ # Bundle SQL — sessionXXX: [nombre de sesión]
9
+
10
+ ## Información
11
+
12
+ - **Sesión:** sessionXXX-[nombre-kebab]
13
+ - **Fecha de bundle:** YYYY-MM-DD
14
+ - **Motor de BD:** PostgreSQL [versión si se conoce]
15
+ - **Esquemas afectados:** esq_[dominio1], esq_[dominio2]
16
+
17
+ ## Resumen
18
+
19
+ [1-2 líneas describiendo qué hace este bundle en conjunto]
20
+
21
+ ## Orden de ejecución (forward)
22
+
23
+ Ejecutar en este orden exacto. Cada script usa `BEGIN`/`COMMIT`.
24
+
25
+ ### 01 — DDL de Tablas
26
+
27
+ | # | Archivo | Descripción |
28
+ |---|---|---|
29
+ | 1 | `01-ddl-tablas/001-crea-tb-x.sql` | [descripción breve] |
30
+ | 2 | `01-ddl-tablas/002-agrega-col-tb-y.sql` | [descripción breve] |
31
+
32
+ ### 02 — DDL de Funciones / SP
33
+
34
+ | # | Archivo | Descripción |
35
+ |---|---|---|
36
+ | 1 | `02-ddl-funciones/001-crea-fn-z.sql` | [descripción breve] |
37
+
38
+ ### 03 — Migración de Datos
39
+
40
+ > Ejecutar scripts de respaldo (`000-backup-*.sql`) primero.
41
+
42
+ | # | Archivo | Descripción |
43
+ |---|---|---|
44
+ | 1 | `03-migracion/000-backup-tb-x.sql` | Respaldo previo en esq_audit |
45
+ | 2 | `03-migracion/001-migra-estado-x.sql` | [descripción breve] |
46
+
47
+ ### 04 — Inserts Nuevos
48
+
49
+ | # | Archivo | Descripción |
50
+ |---|---|---|
51
+ | 1 | `04-inserts/001-inserta-maestras.sql` | [descripción breve] |
52
+
53
+ ## Rollback
54
+
55
+ Para revertir **toda** la sesión: ejecutar `rollback/00-rollback-global.sql`.
56
+
57
+ Para revertir **un script específico**: ejecutar el `.rollback.sql` acoplado al lado del forward.
58
+
59
+ **Orden de rollback** (inverso al forward): 04 → 03 → 02 → 01.
60
+
61
+ ## Operaciones irreversibles
62
+
63
+ <!-- Listar si aplica. Si no hay ninguna, eliminar esta sección. -->
64
+
65
+ | Script | Operación | Riesgo | Mitigation |
66
+ |---|---|---|---|
67
+ | `01-ddl-tablas/002-elimina-col-legacy.sql` | DROP COLUMN | Pérdida de datos | Backup en esq_audit antes de ejecutar |
68
+
69
+ ## Dependencias externas
70
+
71
+ <!-- Scripts o estados de BD que deben existir ANTES de ejecutar este bundle -->
72
+
73
+ - [Ej: `tb_maestra_detalle` debe tener el `codprog` X con los estados Y, Z]
74
+ - [Ej: El feature flag `FLAG_NUEVA_FUNCIONALIDAD` debe estar activo]
75
+
76
+ ## Notas de ejecución
77
+
78
+ <!-- Cualquier instrucción manual necesaria antes o después del bundle -->
79
+
80
+ - [Ej: Detener el servicio X antes de ejecutar `03-migracion/`]
81
+ - [Ej: Refrescar la caché de parámetros después de `04-inserts/`]
82
+ ```
@@ -0,0 +1,122 @@
1
+ # Reglas de Categorización de Scripts SQL
2
+
3
+ ## Patrones de detección por categoría
4
+
5
+ ### `01-ddl-tablas/` — Estructura de tablas
6
+
7
+ | Patrón | Ejemplos |
8
+ |---|---|
9
+ | `CREATE TABLE` | `CREATE TABLE IF NOT EXISTS esq_credito.tb_solicitud (...)` |
10
+ | `DROP TABLE` | `DROP TABLE IF EXISTS esq_credito.tb_solicitud_bkp;` |
11
+ | `ALTER TABLE ... ADD COLUMN` | `ALTER TABLE esq_credito.tb_credito ADD COLUMN flag_activo integer;` |
12
+ | `ALTER TABLE ... DROP COLUMN` | `ALTER TABLE esq_credito.tb_credito DROP COLUMN IF EXISTS col_legacy;` |
13
+ | `ALTER TABLE ... ALTER COLUMN` | `ALTER TABLE tb_x ALTER COLUMN monto_total TYPE numeric(18,4);` |
14
+ | `ALTER TABLE ... RENAME` | `ALTER TABLE esq_credito.tb_x RENAME COLUMN col_vieja TO col_nueva;` |
15
+ | `CREATE INDEX` | `CREATE INDEX IF NOT EXISTS idx_tb_credito_cliente ON esq_credito.tb_credito(id_cliente);` |
16
+ | `DROP INDEX` | `DROP INDEX IF EXISTS esq_credito.idx_tb_credito_legacy;` |
17
+ | `CREATE SEQUENCE` | `CREATE SEQUENCE IF NOT EXISTS esq_credito.seq_tb_nueva;` |
18
+ | `DROP SEQUENCE` | `DROP SEQUENCE IF EXISTS esq_credito.seq_tb_legacy;` |
19
+ | `CREATE TABLE ... AS SELECT` | Reconstrucción desde backup |
20
+ | Constraint `ADD/DROP` | `ALTER TABLE tb_x ADD CONSTRAINT pk_tb_x PRIMARY KEY (id_x);` |
21
+
22
+ ### `02-ddl-funciones/` — Funciones y Stored Procedures
23
+
24
+ | Patrón | Ejemplos |
25
+ |---|---|
26
+ | `CREATE [OR REPLACE] FUNCTION` | `CREATE OR REPLACE FUNCTION esq_credito.fn_calcular_cuota(...)` |
27
+ | `CREATE [OR REPLACE] PROCEDURE` | `CREATE OR REPLACE PROCEDURE esq_credito.sp_genera_credito(...)` |
28
+ | `DROP FUNCTION` | `DROP FUNCTION IF EXISTS esq_credito.fn_legacy(integer, numeric);` |
29
+ | `DROP PROCEDURE` | `DROP PROCEDURE IF EXISTS esq_credito.sp_legacy(integer);` |
30
+ | `CREATE [OR REPLACE] VIEW` | Vistas con lógica de negocio compleja |
31
+ | `DROP VIEW` | `DROP VIEW IF EXISTS esq_credito.vw_resumen_credito;` |
32
+
33
+ > **Nota**: La firma completa (incluyendo tipos de parámetros) es necesaria en `DROP FUNCTION`/`DROP PROCEDURE` para evitar ambigüedad en PostgreSQL.
34
+
35
+ ### `03-migracion/` — Transformación de datos existentes
36
+
37
+ | Patrón | Ejemplos |
38
+ |---|---|
39
+ | `UPDATE` sobre tabla existente | `UPDATE esq_credito.tb_credito SET estado = 1 WHERE estado IS NULL;` |
40
+ | `INSERT ... SELECT ...` | Copiar/transformar datos entre tablas |
41
+ | `DELETE` sobre datos existentes | `DELETE FROM tb_x WHERE fecha_registro < '2020-01-01';` |
42
+ | Relleno de nueva columna | `UPDATE tb_x SET nueva_col = fn_calcula(otra_col);` |
43
+ | Normalización de datos | Separar una columna en múltiples, fusionar tablas |
44
+ | Migración de tipo de dato | Copiar valores transformados antes de cambiar tipo |
45
+
46
+ > **Importante**: Cualquier script de migración debe ir precedido de un `000-backup-<tabla>.sql` que respalde las filas afectadas a `esq_audit`.
47
+
48
+ ### `04-inserts/` — Datos nuevos (seeds / catálogos)
49
+
50
+ | Patrón | Ejemplos |
51
+ |---|---|
52
+ | `INSERT INTO ... VALUES (...)` | Registros de `tb_maestra_detalle`, roles, perfiles |
53
+ | Seeds de configuración | Parámetros iniciales, valores de lookup |
54
+ | Datos de referencia | Países, monedas, estados de proceso |
55
+ | `INSERT ... ON CONFLICT DO NOTHING` | Idempotent inserts de catálogos |
56
+ | `INSERT ... ON CONFLICT DO UPDATE` | Upserts de configuración |
57
+
58
+ ---
59
+
60
+ ## Edge cases y scripts mixtos
61
+
62
+ ### Script con DDL + DML (mezcla)
63
+
64
+ Si un script crea una tabla Y la puebla inmediatamente (patrón común en seeds):
65
+
66
+ **Opción A (recomendada)**: Dividir en dos scripts — `01-ddl-tablas/001-crea-tb-x.sql` + `04-inserts/001-inserta-tb-x.sql`.
67
+
68
+ **Opción B**: Si la división no tiene sentido semántico (ej: tabla temporal de trabajo que se llena y elimina en la misma operación), clasificar según la operación **dominante**. Documentar en el `README.md` del bundle.
69
+
70
+ ### Scripts de respaldo previo (`000-backup-*.sql`)
71
+
72
+ Los scripts de respaldo pertenecen a la misma categoría que su script de migración:
73
+ - `03-migracion/000-backup-tb-credito.sql` precede a `03-migracion/001-migra-estado.sql`
74
+ - Numeración especial `000` para indicar que va primero dentro de la categoría
75
+
76
+ ### Funciones de apoyo temporal
77
+
78
+ Si un script `03-migracion` usa una función **solo dentro de ese script** (creada y eliminada en el mismo archivo), **no** moverla a `02-ddl-funciones/`. Usar un bloque `DO $$ ... $$` o una CTE en su lugar, siguiendo la regla "sin funciones utilitarias efímeras".
79
+
80
+ ### Scripts de versionado de funciones (`_v2`, `_v3`)
81
+
82
+ Al actualizar una función a una nueva versión:
83
+ - `02-ddl-funciones/001-actualiza-fn-x-v2.sql` → `CREATE OR REPLACE FUNCTION fn_x(...)`
84
+ - El rollback contiene la versión anterior (`v1`) para restaurar en caso necesario
85
+ - **No eliminar** la versión anterior hasta confirmar que `v2` funciona en producción
86
+
87
+ ### Views
88
+
89
+ Clasificar en `02-ddl-funciones/` (mismo directorio que funciones). Las views son DDL de objetos de BD, no migración de datos.
90
+
91
+ ---
92
+
93
+ ## Resolución de dependencias entre categorías
94
+
95
+ Al renumerar, verificar:
96
+
97
+ 1. `03-migracion` no puede referenciar una columna creada en `01-ddl-tablas` si ese script aún no fue ejecutado
98
+ 2. `04-inserts` no puede insertar en una tabla que existe solo en `01-ddl-tablas` del mismo bundle (al ejecutar prod, ir en orden)
99
+ 3. `02-ddl-funciones` puede depender de tablas de `01-ddl-tablas` — verificar que la función no se crea antes que su tabla
100
+
101
+ Si se detecta una dependencia circular o un orden imposible, dividir el bundle en sub-bundles y documentarlo en `README.md`.
102
+
103
+ ---
104
+
105
+ ## Nomenclatura de archivos
106
+
107
+ Formato: `NNN-verbo-sustantivo-objetivo.sql`
108
+
109
+ | Elemento | Regla | Ejemplos |
110
+ |---|---|---|
111
+ | `NNN` | 3 dígitos, cero-padded dentro de la categoría | `001`, `002`, `010` |
112
+ | `verbo` | acción que realiza el script | `crea`, `elimina`, `modifica`, `migra`, `inserta`, `actualiza`, `agrega` |
113
+ | `sustantivo` | objeto principal afectado | `tb-credito`, `fn-calcular-cuota`, `sp-genera-credito` |
114
+ | `objetivo` | detalle adicional si es necesario | `columna-estado`, `v2`, `sesion-inicial` |
115
+
116
+ Ejemplos válidos:
117
+ - `001-crea-tb-solicitud.sql`
118
+ - `002-agrega-columna-flag-activo-tb-credito.sql`
119
+ - `001-crea-fn-calcular-cuota-v2.sql`
120
+ - `001-migra-estado-credito.sql`
121
+ - `000-backup-tb-credito.sql`
122
+ - `001-inserta-maestras-estado-solicitud.sql`
@@ -0,0 +1,125 @@
1
+ # Consolidación cross-session (release) y modo por tema
2
+
3
+ Detalles del comportamiento de `sql-script-organizer` cuando es invocado por `release` (cross-session) o por `release-scripts` (por tema). El SKILL.md tiene el resumen; este archivo tiene el procedimiento completo.
4
+
5
+ ## Modo consolidación cross-session (delegado por `release`)
6
+
7
+ Produce un bundle único que abarca múltiples sesiones en `docs/release/NNN-release-YYYY-MM-DD/scripts/`.
8
+
9
+ ### Entrada
10
+
11
+ Lista de bundles fuente en orden cronológico de sesión:
12
+ - Sesiones cerradas: `docs/scripts/NNN-sessionXXX-*/` (ya graduados).
13
+ - Sesiones abiertas: `.workflow/sessions/sessionXXX-*/scripts/bundle/` o `scripts/` flat (organizar antes).
14
+
15
+ ### Proceso
16
+
17
+ 1. **Validar organización** de cada bundle fuente. Si flat, aplicar el proceso estándar de las 4 categorías antes.
18
+ 2. **Crear estructura destino** con `01-ddl-tablas/`, `02-ddl-funciones/`, `03-migracion/`, `04-inserts/`, `rollback/`.
19
+ 3. **Copiar scripts preservando orden**:
20
+ - Sesiones cronológicas (session001 → session002 → …).
21
+ - Dentro de cada sesión, orden 01→02→03→04.
22
+ - Renumerar `NNN` continuo dentro de la categoría.
23
+ - Header de origen:
24
+ ```sql
25
+ -- Origen: sessionXXX-nombre · docs/scripts/NNN-sessionXXX-nombre/03-migracion/001-xyz.sql
26
+ -- Consolidado en release NNN (YYYY-MM-DD)
27
+ ```
28
+ - El `.rollback.sql` viaja con su forward.
29
+ 4. **No fusionar** scripts distintos en un único archivo.
30
+ 5. **Resolver conflictos cross-sesión**: documentar en `scripts/README.md` si una migración depende de algo reemplazado.
31
+ 6. **Generar `scripts/README.md`** con:
32
+ - Secuencia de ejecución lineal.
33
+ - Tabla "script en release | sesión origen | script original".
34
+ - Listado de irreversibles.
35
+ 7. **Delegar a `sql-rollback-generator`** para el rollback global.
36
+
37
+ ### Qué NO hacer
38
+
39
+ - Modificar scripts originales en `docs/scripts/NNN-sessionXXX-*/` — son memoria permanente.
40
+ - Mezclar sentencias de scripts distintos.
41
+ - Renombrar categorías — siempre 01→02→03→04.
42
+ - Saltar sesiones sin registrarlo.
43
+
44
+ ### Layout del bundle consolidado
45
+
46
+ ```
47
+ docs/release/NNN-release-YYYY-MM-DD/scripts/
48
+ ├── README.md (mapeo sesión → script + secuencia)
49
+ ├── 01-ddl-tablas/
50
+ │ ├── 001-crea-tb-x.sql (origen: session001)
51
+ │ ├── 001-crea-tb-x.rollback.sql
52
+ │ ├── 002-crea-tb-y.sql (origen: session003)
53
+ │ └── 002-crea-tb-y.rollback.sql
54
+ ├── 02-ddl-funciones/
55
+ │ └── ...
56
+ ├── 03-migracion/
57
+ │ ├── 000-backup-tb-x.sql (origen: session001)
58
+ │ ├── 001-migra-col-z.sql
59
+ │ ├── 001-migra-col-z.rollback.sql
60
+ │ └── ...
61
+ ├── 04-inserts/
62
+ │ └── ...
63
+ └── rollback/
64
+ └── 00-rollback-release.sql (sql-rollback-generator)
65
+ ```
66
+
67
+ ### Confirmación
68
+
69
+ Si el usuario no confirmó producir el bundle consolidado, NO crear la carpeta. Referenciar bundles graduados por sesión y listar ejecución lineal.
70
+
71
+ ## Modo por tema consolidado (delegado por `release-scripts`)
72
+
73
+ Reutiliza la clasificación 01→04 pero la aplica **dentro de cada tema** y **consolida** todos los scripts de una misma `(tema, categoría)` en un único `.sql`.
74
+
75
+ ### Layout destino
76
+
77
+ ```
78
+ docs/release/NNN-release-YYYY-MM-DD/scripts-por-tema/
79
+ └── tema-<slug>/
80
+ ├── 01-ddl-tablas.sql (consolidado, BEGIN/COMMIT único)
81
+ ├── 01-ddl-tablas.rollback.sql (consolidado inverso)
82
+ ├── 02-ddl-funciones.sql
83
+ ├── 02-ddl-funciones.rollback.sql
84
+ ├── 03-migracion.sql
85
+ ├── 03-migracion.rollback.sql
86
+ ├── 04-inserts.sql
87
+ ├── 04-inserts.rollback.sql
88
+ └── rollback-tema-<slug>.sql (revierte el tema completo)
89
+ ```
90
+
91
+ ### Qué cambia respecto al modo estándar
92
+
93
+ - **Consolidación**: N scripts de `(tema, categoría)` se concatenan en un único archivo. Eliminar `BEGIN;`/`COMMIT;` de cada uno; añadir `BEGIN;` único al inicio y `COMMIT;` al final. Transacción atómica por categoría del tema.
94
+ - **Trazabilidad**: separador `-- === [i/N] <nombre-original> ===` + ruta canónica.
95
+ - **Sin subcarpetas por categoría**: el nombre de archivo ya indica la categoría.
96
+ - **Categorías vacías** no se crean.
97
+ - **Scripts fuente preservados opt** con `--keep-parts` → `parts/<categoria>/*.sql`.
98
+ - **Orden cross-tema**: en `ORDER.md` (resuelto por `release-scripts`).
99
+
100
+ ### Qué NO cambia
101
+
102
+ - Las 4 categorías y sus patrones.
103
+ - Las reglas de estilo SQL.
104
+ - El bundle plano sigue generándose igual; el modo por-tema es aditivo.
105
+
106
+ ### Formato del archivo consolidado
107
+
108
+ ```sql
109
+ -- Tema: <slug>
110
+ -- Categoría: 01-ddl-tablas
111
+ -- Release: NNN (YYYY-MM-DD)
112
+ -- Consolidado: <nombre1>.sql, <nombre2>.sql, …
113
+
114
+ BEGIN;
115
+
116
+ -- [1/N] <nombre>.sql (origen: sessionXXX)
117
+ <contenido sin BEGIN/COMMIT>
118
+
119
+ -- [2/N] <nombre>.sql (origen: sessionXXX)
120
+ <contenido>
121
+
122
+ COMMIT;
123
+ ```
124
+
125
+ Ver `release-scripts/SKILL.md` y `release-scripts/references/theme-detection.md` para asignación script→tema.