@tacuchi/agent-workflow-cli 6.1.0 → 7.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 (191) 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/render/history-row.d.ts.map +1 -1
  7. package/dist/application/render/history-row.js +5 -0
  8. package/dist/application/render/history-row.js.map +1 -1
  9. package/dist/application/self/bootstrap.js +2 -1
  10. package/dist/application/self/bootstrap.js.map +1 -1
  11. package/dist/application/self/detect-hosts.d.ts +18 -0
  12. package/dist/application/self/detect-hosts.d.ts.map +1 -0
  13. package/dist/application/self/detect-hosts.js +37 -0
  14. package/dist/application/self/detect-hosts.js.map +1 -0
  15. package/dist/application/self/install-hooks.d.ts +30 -0
  16. package/dist/application/self/install-hooks.d.ts.map +1 -0
  17. package/dist/application/self/install-hooks.js +253 -0
  18. package/dist/application/self/install-hooks.js.map +1 -0
  19. package/dist/application/self/install-skill.d.ts +2 -0
  20. package/dist/application/self/install-skill.d.ts.map +1 -1
  21. package/dist/application/self/install-skill.js +69 -3
  22. package/dist/application/self/install-skill.js.map +1 -1
  23. package/dist/application/session-close-service.d.ts +10 -0
  24. package/dist/application/session-close-service.d.ts.map +1 -1
  25. package/dist/application/session-close-service.js +87 -10
  26. package/dist/application/session-close-service.js.map +1 -1
  27. package/dist/cli/commands/self.d.ts.map +1 -1
  28. package/dist/cli/commands/self.js +9 -1
  29. package/dist/cli/commands/self.js.map +1 -1
  30. package/dist/cli/commands/session-close.d.ts.map +1 -1
  31. package/dist/cli/commands/session-close.js +11 -0
  32. package/dist/cli/commands/session-close.js.map +1 -1
  33. package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
  34. package/dist/cli/tui/tabs/skills-tab.js +100 -24
  35. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  36. package/package.json +2 -2
  37. package/skills/agent-workflow/commands/README.md +24 -0
  38. package/skills/agent-workflow/commands/agent-workflow-compact.md +24 -0
  39. package/skills/agent-workflow/commands/agent-workflow-doctor.md +100 -0
  40. package/skills/agent-workflow/commands/agent-workflow-export-arq.md +77 -0
  41. package/skills/agent-workflow/commands/agent-workflow-export-conclusions.md +78 -0
  42. package/skills/agent-workflow/commands/agent-workflow-export-plan.md +74 -0
  43. package/skills/agent-workflow/commands/agent-workflow-export-qa-note.md +30 -0
  44. package/skills/agent-workflow/commands/agent-workflow-export-report.md +78 -0
  45. package/skills/agent-workflow/commands/agent-workflow-export-requirement.md +30 -0
  46. package/skills/agent-workflow/commands/agent-workflow-export-scripts.md +92 -0
  47. package/skills/agent-workflow/commands/agent-workflow-export-tech-manuals.md +75 -0
  48. package/skills/agent-workflow/commands/agent-workflow-export-tech-note.md +30 -0
  49. package/skills/agent-workflow/commands/agent-workflow-hub-init.md +82 -0
  50. package/skills/agent-workflow/commands/agent-workflow-migrate.md +56 -0
  51. package/skills/agent-workflow/commands/agent-workflow-project-init.md +60 -0
  52. package/skills/agent-workflow/commands/agent-workflow-resume.md +22 -0
  53. package/skills/agent-workflow/commands/agent-workflow-rules.md +40 -0
  54. package/skills/agent-workflow/commands/agent-workflow-session.md +35 -0
  55. package/skills/agent-workflow/doctrine/README.md +15 -0
  56. package/skills/agent-workflow/doctrine/compact/SKILL.md +145 -0
  57. package/skills/agent-workflow/doctrine/doctor/SKILL.md +86 -0
  58. package/skills/agent-workflow/doctrine/doctor/SKILL.md.tmp +0 -0
  59. package/skills/agent-workflow/doctrine/hub-init/SKILL.md +157 -0
  60. package/skills/agent-workflow/doctrine/hub-init/SKILL.md.tmp +0 -0
  61. package/skills/agent-workflow/doctrine/hub-init/references/multiroot-manual.md +51 -0
  62. package/skills/agent-workflow/doctrine/implement/SKILL.md +290 -0
  63. package/skills/agent-workflow/doctrine/implement/references/branch-verification.md +16 -0
  64. package/skills/agent-workflow/doctrine/implement/references/design-md-template.md +108 -0
  65. package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +81 -0
  66. package/skills/agent-workflow/doctrine/migrate/SKILL.md +281 -0
  67. package/skills/agent-workflow/doctrine/migrate/SKILL.md.tmp +0 -0
  68. package/skills/agent-workflow/doctrine/project-init/SKILL.md +100 -0
  69. package/skills/agent-workflow/doctrine/project-init/SKILL.md.tmp +0 -0
  70. package/skills/agent-workflow/doctrine/refactor/SKILL.md +208 -0
  71. package/skills/agent-workflow/doctrine/refactor/references/refactor-md-template.md +108 -0
  72. package/skills/agent-workflow/doctrine/refactor/references/strangler-checklist.md +116 -0
  73. package/skills/agent-workflow/doctrine/resume/SKILL.md +199 -0
  74. package/skills/agent-workflow/doctrine/rules/SKILL.md +224 -0
  75. package/skills/agent-workflow/doctrine/rules/SKILL.md.tmp +0 -0
  76. package/skills/agent-workflow/doctrine/session/SKILL.md +383 -0
  77. package/skills/agent-workflow/doctrine/session/references/auto-plan-rules.md +63 -0
  78. package/skills/agent-workflow/doctrine/session/references/backlog-template.md +95 -0
  79. package/skills/agent-workflow/doctrine/session/references/branch-verification.md +198 -0
  80. package/skills/agent-workflow/doctrine/session/references/commits-policy.md +111 -0
  81. package/skills/agent-workflow/doctrine/session/references/communication-style.md +50 -0
  82. package/skills/agent-workflow/doctrine/session/references/graduacion-routing.md +88 -0
  83. package/skills/agent-workflow/doctrine/session/references/lifecycle-deep.md +160 -0
  84. package/skills/agent-workflow/doctrine/session/references/prompts/C1-specialty-selection.md +11 -0
  85. package/skills/agent-workflow/doctrine/session/references/prompts/C2-cost-guard.md +14 -0
  86. package/skills/agent-workflow/doctrine/session/references/prompts/M1-closure-commit-prompt.md +104 -0
  87. package/skills/agent-workflow/doctrine/session/references/prompts/M10-next-step.md +17 -0
  88. package/skills/agent-workflow/doctrine/session/references/prompts/M11-context.md +16 -0
  89. package/skills/agent-workflow/doctrine/session/references/prompts/M2-branch-caso-A.md +14 -0
  90. package/skills/agent-workflow/doctrine/session/references/prompts/M3-branch-caso-C.md +33 -0
  91. package/skills/agent-workflow/doctrine/session/references/prompts/M4-cross-source-hard-gate.md +33 -0
  92. package/skills/agent-workflow/doctrine/session/references/prompts/M5-modality-analyze.md +15 -0
  93. package/skills/agent-workflow/doctrine/session/references/prompts/M6-phase-gate.md +31 -0
  94. package/skills/agent-workflow/doctrine/session/references/prompts/M7-refactor-legacy-detected.md +28 -0
  95. package/skills/agent-workflow/doctrine/session/references/prompts/M8-refactor-cleanup.md +16 -0
  96. package/skills/agent-workflow/doctrine/session/references/prompts/M9-contract-review.md +39 -0
  97. package/skills/agent-workflow/doctrine/session/references/prompts/S1-type-design.md +15 -0
  98. package/skills/agent-workflow/doctrine/session/references/prompts/S2-topic-change-detection.md +14 -0
  99. package/skills/agent-workflow/doctrine/session/references/prompts/S3-flow-detection.md +28 -0
  100. package/skills/agent-workflow/doctrine/session/references/prompts/S4-resume.md +27 -0
  101. package/skills/agent-workflow/doctrine/session/references/prompts/S5-post-compact.md +17 -0
  102. package/skills/agent-workflow/doctrine/session/references/prompts/S6-scope.md +16 -0
  103. package/skills/agent-workflow/doctrine/session/references/prompts/S7-design-review.md +37 -0
  104. package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +210 -0
  105. package/skills/agent-workflow/doctrine/session/references/sandbox-readonly-rules.md +82 -0
  106. package/skills/agent-workflow/doctrine/session/references/specialty-decision-tree.md +56 -0
  107. package/skills/agent-workflow/doctrine/session/references/topic-change-rules.md +67 -0
  108. package/skills/agent-workflow/exports/README.md +15 -0
  109. package/skills/agent-workflow/exports/export-arq/SKILL.md +229 -0
  110. package/skills/agent-workflow/exports/export-arq/SKILL.md.tmp +0 -0
  111. package/skills/agent-workflow/exports/export-arq/references/lexico-tecnico.md +94 -0
  112. package/skills/agent-workflow/exports/export-arq/references/template-c4.md +293 -0
  113. package/skills/agent-workflow/exports/export-arq/references/template-plantuml.puml +77 -0
  114. package/skills/agent-workflow/exports/export-arq/references/template-structurizr.dsl +72 -0
  115. package/skills/agent-workflow/exports/export-arq/references/validations.md +231 -0
  116. package/skills/agent-workflow/exports/export-conclusions/SKILL.md +169 -0
  117. package/skills/agent-workflow/exports/export-conclusions/references/dedup-rules.md +154 -0
  118. package/skills/agent-workflow/exports/export-conclusions/references/template-conclusions.md +158 -0
  119. package/skills/agent-workflow/exports/export-plan/SKILL.md +225 -0
  120. package/skills/agent-workflow/exports/export-plan/references/state-transitions.md +141 -0
  121. package/skills/agent-workflow/exports/export-plan/references/template-plan.md +132 -0
  122. package/skills/agent-workflow/exports/export-qa-note/SKILL.md +31 -0
  123. package/skills/agent-workflow/exports/export-report/SKILL.md +262 -0
  124. package/skills/agent-workflow/exports/export-report/SKILL.md.tmp +0 -0
  125. package/skills/agent-workflow/exports/export-report/references/lexico.md +174 -0
  126. package/skills/agent-workflow/exports/export-report/references/template-a.md +95 -0
  127. package/skills/agent-workflow/exports/export-report/references/template-b.md +221 -0
  128. package/skills/agent-workflow/exports/export-report/references/template-c.md +180 -0
  129. package/skills/agent-workflow/exports/export-report/references/validations.md +255 -0
  130. package/skills/agent-workflow/exports/export-requirement/SKILL.md +31 -0
  131. package/skills/agent-workflow/exports/export-scripts/SKILL.md +324 -0
  132. package/skills/agent-workflow/exports/export-scripts/references/code-scan-recommendations.md +83 -0
  133. package/skills/agent-workflow/exports/export-scripts/references/deprecation-plan.md +80 -0
  134. package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +80 -0
  135. package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +253 -0
  136. package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +79 -0
  137. package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +168 -0
  138. package/skills/agent-workflow/exports/export-scripts/references/validations.md +242 -0
  139. package/skills/agent-workflow/exports/export-tech-manuals/SKILL.md +214 -0
  140. package/skills/agent-workflow/exports/export-tech-manuals/references/lexico-tecnico.md +97 -0
  141. package/skills/agent-workflow/exports/export-tech-manuals/references/template-index.md +123 -0
  142. package/skills/agent-workflow/exports/export-tech-manuals/references/template-manual.md +143 -0
  143. package/skills/agent-workflow/exports/export-tech-manuals/references/validations.md +211 -0
  144. package/skills/agent-workflow/exports/export-tech-note/SKILL.md +31 -0
  145. package/skills/agent-workflow/hooks/README.md +15 -0
  146. package/skills/agent-workflow/hooks/hooks.template.json +90 -0
  147. package/skills/agent-workflow/references/README.md +12 -0
  148. package/skills/agent-workflow/references/legacy-anchors.md +50 -0
  149. package/skills/agent-workflow/references/profile-parametrization.md +88 -0
  150. package/skills/agent-workflow/specialties/README.md +14 -0
  151. package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +175 -0
  152. package/skills/agent-workflow/specialties/analyze-conclude/references/incident-classification.md +61 -0
  153. package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md +148 -0
  154. package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md.tmp +0 -0
  155. package/skills/agent-workflow/specialties/analyze-investigate/references/cost-guard.md +85 -0
  156. package/skills/agent-workflow/specialties/analyze-synthesize/SKILL.md +127 -0
  157. package/skills/agent-workflow/specialties/design-brief/SKILL.md +90 -0
  158. package/skills/agent-workflow/specialties/design-deliver/SKILL.md +121 -0
  159. package/skills/agent-workflow/specialties/design-develop/SKILL.md +115 -0
  160. package/skills/agent-workflow/specialties/design-discover/SKILL.md +103 -0
  161. package/skills/agent-workflow/standards/README.md +12 -0
  162. package/skills/agent-workflow/standards/coding-standards/SKILL.md +102 -0
  163. package/skills/agent-workflow/standards/coding-standards/SKILL.md.tmp +0 -0
  164. package/skills/agent-workflow/standards/coding-standards/references/angular-typescript.md +266 -0
  165. package/skills/agent-workflow/standards/coding-standards/references/database-conventions.md +170 -0
  166. package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +300 -0
  167. package/skills/agent-workflow/standards/coding-standards/references/frontend-structure.md +182 -0
  168. package/skills/agent-workflow/standards/coding-standards/references/java-spring.md +244 -0
  169. package/skills/agent-workflow/standards/coding-standards/references/project-structure.md +197 -0
  170. package/skills/agent-workflow/standards/frontend-design/SKILL.md +62 -0
  171. package/skills/agent-workflow/standards/frontend-design/references/feedback-toasts-patterns.md +249 -0
  172. package/skills/agent-workflow/standards/frontend-design/references/form-patterns.md +278 -0
  173. package/skills/agent-workflow/standards/frontend-design/references/list-patterns.md +256 -0
  174. package/skills/agent-workflow/standards/frontend-design/references/modal-patterns.md +220 -0
  175. package/skills/agent-workflow/standards/frontend-design/references/navigation-patterns.md +224 -0
  176. package/skills/agent-workflow/standards/redaccion-simple/SKILL.md +128 -0
  177. package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +197 -0
  178. package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md +161 -0
  179. package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +131 -0
  180. package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +255 -0
  181. package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +244 -0
  182. package/skills/agent-workflow/standards/sql-script-organizer/references/bundle-readme-template.md +82 -0
  183. package/skills/agent-workflow/standards/sql-script-organizer/references/categorization-rules.md +122 -0
  184. package/skills/agent-workflow/standards/sql-script-organizer/references/consolidation-cross-session.md +125 -0
  185. package/skills/agent-workflow/standards/sql-script-organizer/references/scripts-sql-format.md +140 -0
  186. package/skills/agent-workflow/standards/testing-strategy/SKILL.md +113 -0
  187. package/skills/agent-workflow/standards/testing-strategy/references/test-levels.md +255 -0
  188. package/skills/agent-workflow/workflows/README.md +12 -0
  189. package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +107 -0
  190. package/skills/agent-workflow/workflows/design-workflow/SKILL.md +100 -0
  191. package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +195 -0
@@ -0,0 +1,161 @@
1
+ # Checklist de Operaciones Irreversibles
2
+
3
+ Operaciones que no pueden revertirse automáticamente. Requieren protocolo especial antes de ejecutar.
4
+
5
+ ---
6
+
7
+ ## Protocolo ante una operación irreversible
8
+
9
+ Antes de ejecutar cualquier operación de esta lista:
10
+
11
+ 1. **Agregar `-- WARNING: IRREVERSIBLE`** en el header del forward script
12
+ 2. **Crear script de respaldo** si hay datos en riesgo (ver plantillas en `rollback-patterns.md`)
13
+ 3. **Registrar en `DECISIONS.md`** de la sesión:
14
+ - Qué se va a ejecutar
15
+ - Por qué no es reversible
16
+ - Qué backup existe (o por qué no aplica)
17
+ - Confirmación explícita del usuario
18
+ 4. **Generar rollback best-effort** con nota `-- RESTAURACIÓN MANUAL REQUERIDA` si el rollback automático no es posible
19
+ 5. **Checkpoint**: el usuario debe confirmar explícitamente antes de continuar
20
+
21
+ ---
22
+
23
+ ## Lista de operaciones irreversibles
24
+
25
+ ### TRUNCATE TABLE
26
+
27
+ ```sql
28
+ -- WARNING: IRREVERSIBLE
29
+ -- Elimina TODOS los datos de la tabla sin posibilidad de rollback transaccional en algunos motores.
30
+ -- En PostgreSQL se puede envolver en BEGIN/COMMIT, pero el efecto es inmediato si se confirma.
31
+ -- Respaldo obligatorio en esq_audit antes de ejecutar.
32
+ ```
33
+
34
+ **Mitigación**: `CREATE TABLE esq_audit.tb_bkp_x_sessionXXX AS SELECT * FROM esq_.tb_x;` antes.
35
+
36
+ ---
37
+
38
+ ### DROP COLUMN sin respaldo previo
39
+
40
+ ```sql
41
+ -- WARNING: IRREVERSIBLE
42
+ -- La columna y sus datos se pierden permanentemente.
43
+ -- Respaldo: ALTER TABLE tb_x ADD COLUMN col_bkp ... + UPDATE SET col_bkp = col_original;
44
+ -- o bien: CREATE TABLE esq_audit.tb_bkp_x_col_sessionXXX AS SELECT id, col FROM tb_x;
45
+ ```
46
+
47
+ **Mitigación**: copiar los valores a una columna temporal o tabla de backup antes del DROP.
48
+
49
+ ---
50
+
51
+ ### DROP TABLE sin respaldo previo
52
+
53
+ ```sql
54
+ -- WARNING: IRREVERSIBLE
55
+ -- La tabla y todos sus datos, índices, constraints y sequences asociados se pierden.
56
+ -- Respaldo obligatorio: CREATE TABLE esq_audit.tb_bkp_x_sessionXXX AS SELECT * FROM esq_.tb_x;
57
+ ```
58
+
59
+ ---
60
+
61
+ ### ALTER COLUMN TYPE con pérdida de precisión
62
+
63
+ ```sql
64
+ -- WARNING: IRREVERSIBLE
65
+ -- Cambiar de varchar(500) a varchar(50) trunca datos. Cambiar de numeric(18,4) a integer pierde decimales.
66
+ -- Verificar que no hay datos que excedan el nuevo tamaño/precisión ANTES de ejecutar.
67
+ ```
68
+
69
+ **Mitigación**:
70
+ ```sql
71
+ -- Verificar antes:
72
+ SELECT COUNT(*) FROM esq_.tb_x WHERE length(col_x) > 50;
73
+ SELECT COUNT(*) FROM esq_.tb_x WHERE col_x != FLOOR(col_x);
74
+ ```
75
+
76
+ ---
77
+
78
+ ### DROP ... CASCADE
79
+
80
+ ```sql
81
+ -- WARNING: IRREVERSIBLE
82
+ -- Elimina el objeto Y todos los objetos que dependen de él (views, funciones, constraints).
83
+ -- Listar dependencias antes: SELECT * FROM information_schema.constraint_column_usage WHERE table_name = 'tb_x';
84
+ ```
85
+
86
+ **Mitigación**: antes de ejecutar, listar todas las dependencias y generar los scripts para recrearlas.
87
+
88
+ ---
89
+
90
+ ### DELETE sin WHERE (o con WHERE muy amplio)
91
+
92
+ ```sql
93
+ -- WARNING: IRREVERSIBLE
94
+ -- Un DELETE sin cláusula WHERE o con condición demasiado amplia puede vaciar una tabla.
95
+ -- Respaldo obligatorio: CREATE TABLE esq_audit.tb_bkp_x_sessionXXX AS SELECT * FROM esq_.tb_x WHERE <condicion>;
96
+ ```
97
+
98
+ **Verificación previa recomendada**:
99
+ ```sql
100
+ -- Ejecutar primero como SELECT para ver qué filas afecta:
101
+ SELECT COUNT(*) FROM esq_.tb_x WHERE <condicion_del_delete>;
102
+ ```
103
+
104
+ ---
105
+
106
+ ### UPDATE sin WHERE sobre tabla grande
107
+
108
+ ```sql
109
+ -- WARNING: ALTA SUPERFICIE DE IMPACTO
110
+ -- Un UPDATE sin WHERE o con condición muy amplia modifica todas las filas.
111
+ -- Si es intencional, documentarlo explícitamente en DECISIONS.md.
112
+ -- Respaldo obligatorio antes de ejecutar.
113
+ ```
114
+
115
+ ---
116
+
117
+ ### Eliminar función sin versión anterior conocida
118
+
119
+ ```sql
120
+ -- WARNING: IRREVERSIBLE
121
+ -- Si no hay registro de la versión anterior de la función (no está en el repo ni en la sesión),
122
+ -- no es posible generar un rollback automático.
123
+ -- El rollback best-effort debe incluir el cuerpo actual en un comentario para restauración manual.
124
+ ```
125
+
126
+ ---
127
+
128
+ ### Cambiar tipo de columna con conversión destructiva
129
+
130
+ Por ejemplo: `varchar` → `integer` donde algunos valores no son números; `timestamp` → `date` perdiendo la hora.
131
+
132
+ **Mitigación**:
133
+ ```sql
134
+ -- Verificar antes:
135
+ SELECT col_x FROM esq_.tb_x WHERE col_x !~ '^\d+$'; -- filas que no son números
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Formato del header para scripts irreversibles
141
+
142
+ ```sql
143
+ -- Archivo: 001-elimina-col-legacy-tb-credito.sql
144
+ -- Sesión: sessionXXX-nombre-kebab (YYYY-MM-DD)
145
+ -- WARNING: IRREVERSIBLE — DROP COLUMN sin restauración automática posible
146
+ -- Respaldo: esq_audit.tb_bkp_credito_col_legacy_sessionXXX (creado en 000-backup.sql)
147
+ -- Decisión: DECISIONS.md DEC-XXX — aprobado por [usuario]
148
+ BEGIN;
149
+ -- cuerpo del script
150
+ COMMIT;
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Verificaciones antes de ejecutar en producción
156
+
157
+ - [ ] El script de respaldo fue ejecutado y verificado (`SELECT COUNT(*) FROM esq_audit.tb_bkp_...`)
158
+ - [ ] La decisión está registrada en `DECISIONS.md`
159
+ - [ ] El usuario confirmó explícitamente la ejecución
160
+ - [ ] Se tiene el rollback best-effort documentado (aunque sea manual)
161
+ - [ ] Se notificó al equipo si el cambio afecta a otros servicios
@@ -0,0 +1,131 @@
1
+ # Rollback global de release y por tema
2
+
3
+ Algoritmos detallados para rollbacks consolidados en modo release. El SKILL.md tiene el resumen; este archivo tiene el procedimiento completo paso a paso.
4
+
5
+ ## Rollback global de release (cross-session)
6
+
7
+ `docs/release/NNN-release-YYYY-MM-DD/scripts/rollback/00-rollback-release.sql` revierte el release completo.
8
+
9
+ ### Principio
10
+
11
+ Revertir en **orden inverso absoluto**:
12
+ - Sesiones: última → primera (session_N → … → session_1).
13
+ - Dentro de cada sesión: 04 → 03 → 02 → 01 (contrario al de ejecución).
14
+
15
+ ### Proceso
16
+
17
+ 1. Recolectar todos los `.rollback.sql` del bundle consolidado.
18
+ 2. Ordenar inversamente: primero todos los rollbacks de la sesión más reciente (04→01), luego la anterior, etc.
19
+ 3. Encadenar en un único archivo:
20
+
21
+ ```sql
22
+ -- Rollback global del Release NNN (YYYY-MM-DD)
23
+ -- Cubre N sesiones desde sessionXXX hasta sessionYYY
24
+ BEGIN;
25
+
26
+ -- sessionYYY-nombre (última)
27
+ -- 04-inserts
28
+ [contenido en orden inverso]
29
+ -- 03-migracion
30
+ [contenido en orden inverso]
31
+ -- 02-ddl-funciones
32
+ [contenido en orden inverso]
33
+ -- 01-ddl-tablas
34
+ [contenido en orden inverso]
35
+
36
+ -- sessionXXX-nombre-previo
37
+ [misma estructura]
38
+
39
+ COMMIT;
40
+ ```
41
+
42
+ 4. Preservar marcas `-- WARNING: IRREVERSIBLE` con contexto (sesión origen).
43
+ 5. Listar irreversibles al inicio antes del `BEGIN;`:
44
+
45
+ ```sql
46
+ -- ADVERTENCIA: Este release contiene [N] operaciones irreversibles:
47
+ -- - sessionXXX / 03-migracion/001-*.sql — DROP COLUMN (mitigación: esq_audit.tb_bkp_*_sessionXXX)
48
+ -- - sessionYYY / 01-ddl-tablas/002-*.sql — DROP TABLE CASCADE (mitigación: sin respaldo)
49
+ -- Revisar docs/release/NNN-informe-release.md sección 4.2 antes de ejecutar.
50
+ ```
51
+
52
+ ### Qué NO hacer
53
+
54
+ - Fusionar rollbacks de distintas sesiones sobre la misma tabla — dejar cada bloque independiente.
55
+ - Cambiar el orden inverso — puede dejar referencias colgando.
56
+ - Ejecutar el rollback desde el plugin. Siempre manual por el usuario.
57
+
58
+ ### Verificación mínima
59
+
60
+ - Orden inverso absoluto respetado (sesiones descendente, categorías 04→01).
61
+ - Operaciones irreversibles listadas al inicio.
62
+ - Archivo abre con `BEGIN;` y cierra con `COMMIT;`.
63
+ - Cada bloque de sesión delimitado con `-- === sessionXXX ===`.
64
+ - Headers de respaldo preservados donde aplica.
65
+
66
+ ## Rollback por tema (delegado por release-scripts)
67
+
68
+ Tres niveles:
69
+
70
+ 1. **Consolidado por categoría**: `tema-<slug>/<categoria>.rollback.sql` concatena rollbacks de scripts fuente en orden inverso, envuelto en `BEGIN; … COMMIT;`.
71
+ 2. **Por-tema**: `tema-<slug>/rollback-tema-<slug>.sql` encadena los 4 consolidados (04→03→02→01).
72
+ 3. **Global del release**: `rollback/00-rollback-release.sql` encadena rollbacks por-tema en orden inverso a `ORDER.md`.
73
+
74
+ ### Generación del consolidado por categoría
75
+
76
+ 1. Recolectar `.rollback.sql` correspondientes al consolidado forward.
77
+ 2. Ordenar inversamente: último script primero.
78
+ 3. Eliminar `BEGIN;`/`COMMIT;` de cada rollback individual.
79
+ 4. Concatenar con separadores `[i/N]`.
80
+ 5. Envolver en un único `BEGIN; … COMMIT;`.
81
+
82
+ ### Generación del rollback por-tema
83
+
84
+ ```sql
85
+ -- Rollback del tema <slug> — Release NNN (revierte 04→01)
86
+ BEGIN;
87
+
88
+ -- 04-inserts
89
+ [contenido sin BEGIN/COMMIT]
90
+
91
+ -- 03-migracion
92
+ [contenido sin BEGIN/COMMIT]
93
+
94
+ -- 02-ddl-funciones
95
+ [contenido sin BEGIN/COMMIT]
96
+
97
+ -- 01-ddl-tablas
98
+ [contenido sin BEGIN/COMMIT]
99
+
100
+ COMMIT;
101
+ ```
102
+
103
+ Preservar marcas `-- WARNING: IRREVERSIBLE` y listarlas al inicio.
104
+
105
+ ### Generación del global
106
+
107
+ 1. Tomar `rollback-tema-<slug>.sql` de todos los temas.
108
+ 2. Ordenar inversamente al de `ORDER.md`.
109
+ 3. Encadenar inline (no `\i` includes) en un único `BEGIN; … COMMIT;`.
110
+ 4. Listar irreversibles al inicio agrupadas por tema origen.
111
+
112
+ ### Multi-tema en rollback
113
+
114
+ Scripts multi-tema se incluyen sólo en el consolidado del tema canónico. Su rollback aparece sólo allí; los demás temas no lo duplican. El global lo incluye una vez.
115
+
116
+ ### Qué NO hacer
117
+
118
+ - Duplicar contenido entre consolidados.
119
+ - Cambiar el orden de categorías dentro del rollback por-tema (siempre 04→03→02→01).
120
+ - Generar consolidados de rollback para categorías sin forwards.
121
+ - Dejar `BEGIN;`/`COMMIT;` de scripts individuales dentro de los consolidados.
122
+
123
+ ### Verificación mínima
124
+
125
+ - Cada consolidado forward tiene su rollback consolidado.
126
+ - Bloques en orden inverso al forward.
127
+ - Cada tema con scripts tiene su `rollback-tema-<slug>.sql`.
128
+ - El global encadena en orden inverso a `ORDER.md`.
129
+ - Irreversibles listados al inicio del global, agrupados por tema origen.
130
+ - Ningún rollback multi-tema duplicado.
131
+ - Cada archivo abre con `BEGIN;` y cierra con `COMMIT;` (uno solo por archivo).
@@ -0,0 +1,255 @@
1
+ # Patrones de Rollback SQL
2
+
3
+ Recetas por tipo de operación. Motor primario: **PostgreSQL**. Se incluyen equivalencias para otros motores donde difieren.
4
+
5
+ ---
6
+
7
+ ## DDL de Tablas
8
+
9
+ ### CREATE TABLE → DROP TABLE
10
+
11
+ ```sql
12
+ -- Forward
13
+ BEGIN;
14
+ CREATE TABLE IF NOT EXISTS esq_credito.tb_nueva (
15
+ id_nueva integer NOT NULL DEFAULT nextval('esq_credito.seq_tb_nueva'),
16
+ nombre varchar(100) NOT NULL,
17
+ estado integer NOT NULL DEFAULT 1,
18
+ CONSTRAINT pk_tb_nueva PRIMARY KEY (id_nueva)
19
+ );
20
+ COMMIT;
21
+
22
+ -- Rollback
23
+ BEGIN;
24
+ DROP TABLE IF EXISTS esq_credito.tb_nueva;
25
+ DROP SEQUENCE IF EXISTS esq_credito.seq_tb_nueva; -- si la secuencia fue creada junto a la tabla
26
+ COMMIT;
27
+ ```
28
+
29
+ ### ALTER TABLE ADD COLUMN → DROP COLUMN
30
+
31
+ ```sql
32
+ -- Forward
33
+ BEGIN;
34
+ ALTER TABLE esq_credito.tb_credito
35
+ ADD COLUMN IF NOT EXISTS flag_reestructurado integer NOT NULL DEFAULT 0;
36
+ COMMIT;
37
+
38
+ -- Rollback
39
+ BEGIN;
40
+ ALTER TABLE esq_credito.tb_credito
41
+ DROP COLUMN IF EXISTS flag_reestructurado;
42
+ COMMIT;
43
+ ```
44
+
45
+ ### DROP TABLE (con respaldo previo)
46
+
47
+ ```sql
48
+ -- 000-backup-tb-x.sql (siempre antes del DROP)
49
+ BEGIN;
50
+ CREATE TABLE IF NOT EXISTS esq_audit.tb_bkp_credito_sessionXXX
51
+ AS SELECT * FROM esq_credito.tb_credito_legacy;
52
+ COMMIT;
53
+
54
+ -- Forward
55
+ BEGIN;
56
+ DROP TABLE IF EXISTS esq_credito.tb_credito_legacy;
57
+ COMMIT;
58
+
59
+ -- Rollback
60
+ BEGIN;
61
+ CREATE TABLE IF NOT EXISTS esq_credito.tb_credito_legacy
62
+ AS SELECT * FROM esq_audit.tb_bkp_credito_sessionXXX;
63
+ -- Restaurar constraints si aplica:
64
+ ALTER TABLE esq_credito.tb_credito_legacy
65
+ ADD CONSTRAINT pk_tb_credito_legacy PRIMARY KEY (id_credito_legacy);
66
+ COMMIT;
67
+ ```
68
+
69
+ ### CREATE INDEX → DROP INDEX
70
+
71
+ ```sql
72
+ -- Forward
73
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tb_credito_cliente
74
+ ON esq_credito.tb_credito(id_cliente);
75
+
76
+ -- Rollback
77
+ DROP INDEX CONCURRENTLY IF EXISTS esq_credito.idx_tb_credito_cliente;
78
+ ```
79
+
80
+ > `CONCURRENTLY` no puede ir dentro de `BEGIN/COMMIT` en PostgreSQL — ejecutar fuera de transacción o sin `CONCURRENTLY` dentro de transacción.
81
+
82
+ ---
83
+
84
+ ## DDL de Funciones y SP
85
+
86
+ ### CREATE OR REPLACE FUNCTION → DROP FUNCTION
87
+
88
+ ```sql
89
+ -- Forward
90
+ BEGIN;
91
+ CREATE OR REPLACE FUNCTION esq_credito.fn_calcular_cuota_v2(
92
+ p_monto numeric,
93
+ p_tasa numeric,
94
+ p_plazo integer
95
+ ) RETURNS numeric
96
+ LANGUAGE plpgsql AS $$
97
+ BEGIN
98
+ RETURN p_monto * (p_tasa / 12) / (1 - POWER(1 + p_tasa / 12, -p_plazo));
99
+ END;
100
+ $$;
101
+ COMMIT;
102
+
103
+ -- Rollback: eliminar nueva versión y restaurar la anterior (si existe)
104
+ BEGIN;
105
+ DROP FUNCTION IF EXISTS esq_credito.fn_calcular_cuota_v2(numeric, numeric, integer);
106
+ -- Si existía v1, recrear aquí:
107
+ -- CREATE OR REPLACE FUNCTION esq_credito.fn_calcular_cuota(...) ...
108
+ COMMIT;
109
+ ```
110
+
111
+ > **Siempre incluir la firma completa en `DROP FUNCTION`** (tipos de parámetros). PostgreSQL puede tener múltiples sobrecargas del mismo nombre.
112
+
113
+ ### DROP FUNCTION irreversible
114
+
115
+ ```sql
116
+ -- WARNING: IRREVERSIBLE — no hay versión anterior registrada
117
+ -- Rollback best-effort: cuerpo de la función para restauración manual
118
+ BEGIN;
119
+ DROP FUNCTION IF EXISTS esq_credito.fn_legacy(integer);
120
+ COMMIT;
121
+
122
+ /*
123
+ RESTAURACIÓN MANUAL si se necesita revertir:
124
+ CREATE OR REPLACE FUNCTION esq_credito.fn_legacy(p_id integer)
125
+ RETURNS void LANGUAGE plpgsql AS $$
126
+ BEGIN
127
+ -- [cuerpo de la función aquí]
128
+ END;
129
+ $$;
130
+ */
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Migración de Datos
136
+
137
+ ### UPDATE masivo → restaurar desde backup
138
+
139
+ ```sql
140
+ -- 000-backup-tb-credito.sql
141
+ BEGIN;
142
+ CREATE TABLE IF NOT EXISTS esq_audit.tb_bkp_credito_sessionXXX AS
143
+ SELECT id_credito, estado, estado_proceso
144
+ FROM esq_credito.tb_credito
145
+ WHERE estado = 0 AND fecha_registro < '2024-01-01';
146
+ COMMIT;
147
+
148
+ -- Forward: migración
149
+ BEGIN;
150
+ UPDATE esq_credito.tb_credito
151
+ SET estado = 2
152
+ WHERE estado = 0 AND fecha_registro < '2024-01-01';
153
+ COMMIT;
154
+
155
+ -- Rollback: restaurar desde backup
156
+ BEGIN;
157
+ UPDATE esq_credito.tb_credito t
158
+ SET estado = bkp.estado
159
+ FROM esq_audit.tb_bkp_credito_sessionXXX bkp
160
+ WHERE t.id_credito = bkp.id_credito;
161
+ COMMIT;
162
+ ```
163
+
164
+ ### INSERT ... SELECT → DELETE por rango
165
+
166
+ ```sql
167
+ -- Forward: poblar tabla destino desde origen
168
+ BEGIN;
169
+ INSERT INTO esq_credito.tb_credito_nuevo (id_credito, monto, estado)
170
+ SELECT id_credito, monto_prestamo, 1
171
+ FROM esq_credito.tb_credito_legacy
172
+ WHERE flag_migrado = 0;
173
+ COMMIT;
174
+
175
+ -- Rollback: eliminar solo los registros insertados en esta sesión
176
+ BEGIN;
177
+ DELETE FROM esq_credito.tb_credito_nuevo
178
+ WHERE id_credito IN (
179
+ SELECT id_credito FROM esq_credito.tb_credito_legacy WHERE flag_migrado = 0
180
+ );
181
+ COMMIT;
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Inserts de datos nuevos
187
+
188
+ ### INSERT simple → DELETE por clave natural
189
+
190
+ ```sql
191
+ -- Forward
192
+ BEGIN;
193
+ INSERT INTO esq_sistema.tb_maestra_detalle
194
+ (id_maestra, codprog, descripcion, valor, estado, usuario_registro, fecha_registro)
195
+ VALUES
196
+ (1, 'EST_SOLICITUD', 'Pendiente', 1, 1, 'session_deploy', NOW()),
197
+ (1, 'EST_SOLICITUD', 'Aprobada', 2, 1, 'session_deploy', NOW()),
198
+ (1, 'EST_SOLICITUD', 'Rechazada', 3, 1, 'session_deploy', NOW())
199
+ ON CONFLICT DO NOTHING;
200
+ COMMIT;
201
+
202
+ -- Rollback
203
+ BEGIN;
204
+ DELETE FROM esq_sistema.tb_maestra_detalle
205
+ WHERE codprog = 'EST_SOLICITUD'
206
+ AND valor IN (1, 2, 3)
207
+ AND usuario_registro = 'session_deploy';
208
+ COMMIT;
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Bundle global (`00-rollback-global.sql`)
214
+
215
+ ```sql
216
+ -- ROLLBACK GLOBAL — sessionXXX-[nombre]
217
+ -- Revierte TODOS los cambios en orden inverso. Ejecutar sólo para deshacer la sesión completa.
218
+ BEGIN;
219
+
220
+ -- Paso 4 invertido: deshacer inserts
221
+ DELETE FROM esq_sistema.tb_maestra_detalle
222
+ WHERE codprog = 'EST_SOLICITUD' AND usuario_registro = 'session_deploy';
223
+
224
+ -- Paso 3 invertido: deshacer migraciones
225
+ UPDATE esq_credito.tb_credito t
226
+ SET estado = bkp.estado
227
+ FROM esq_audit.tb_bkp_credito_sessionXXX bkp
228
+ WHERE t.id_credito = bkp.id_credito;
229
+
230
+ -- Paso 2 invertido: eliminar funciones nuevas
231
+ DROP FUNCTION IF EXISTS esq_credito.fn_calcular_cuota_v2(numeric, numeric, integer);
232
+
233
+ -- Paso 1 invertido: eliminar tablas nuevas
234
+ DROP TABLE IF EXISTS esq_credito.tb_nueva;
235
+ DROP SEQUENCE IF EXISTS esq_credito.seq_tb_nueva;
236
+
237
+ COMMIT;
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Equivalencias entre motores
243
+
244
+ | Concepto | PostgreSQL | Oracle | SQL Server |
245
+ |---|---|---|---|
246
+ | Idempotencia CREATE TABLE | `CREATE TABLE IF NOT EXISTS` | `BEGIN EXECUTE IMMEDIATE ... EXCEPTION WHEN OTHERS THEN NULL; END;` | `IF NOT EXISTS (SELECT...) CREATE TABLE` |
247
+ | Idempotencia DROP | `DROP TABLE IF EXISTS` | No nativo — usar bloque PL/SQL | `DROP TABLE IF EXISTS` (2016+) |
248
+ | Create o reemplazar función | `CREATE OR REPLACE FUNCTION` | `CREATE OR REPLACE FUNCTION` | `CREATE OR ALTER PROCEDURE` |
249
+ | Insertar sin duplicar | `ON CONFLICT DO NOTHING` | `INSERT INTO ... WHERE NOT EXISTS (SELECT 1 ...)` | `IF NOT EXISTS (SELECT 1 ...) INSERT` |
250
+ | Esquema explícito | `esq_credito.tb_x` | `schema.tb_x` | `[schema].[tb_x]` |
251
+ | Secuencias | `CREATE SEQUENCE` / `nextval(...)` | `CREATE SEQUENCE` / `.NEXTVAL` | `IDENTITY` o `SEQUENCE` (2012+) |
252
+ | Transacción | `BEGIN; ... COMMIT;` | `-- implícita; usar COMMIT;` | `BEGIN TRANSACTION; ... COMMIT;` |
253
+ | Creación condicional índice | `CREATE INDEX IF NOT EXISTS` | No nativo | `IF NOT EXISTS (SELECT...) CREATE INDEX` |
254
+
255
+ > Si el motor de destino no es PostgreSQL, indicarlo en el header del script y ajustar la sintaxis según la tabla anterior.