@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,224 @@
1
+ # Patrones de navegación
2
+
3
+ Principios de diseño para navegación en aplicaciones admin: sidebar, toolbar, breadcrumbs, tabs, routing, back navigation. Agnóstico a framework.
4
+
5
+ Para el código del stack (routing, guards, lazy loading, store sincronizado con `NavigationEnd`), ver `coding-standards/references/<stack>.md`.
6
+
7
+ ---
8
+
9
+ ## 1. Layout admin de 2 zonas
10
+
11
+ Las aplicaciones admin siguen un layout persistente con 2 zonas fijas alrededor del contenido:
12
+
13
+ ```
14
+ ┌──────────────────────────────────────────────────────────┐
15
+ │ Logo [≡] │ Breadcrumbs | Sucursal Usuario ⎋ │ ← toolbar (top)
16
+ ├─────────────┬──┴──────────────────────────────────────────┤
17
+ │ │ │
18
+ │ Sidebar │ Contenido de la vista │
19
+ │ (menu) │ (title + action + filters + table/form) │
20
+ │ │ │
21
+ │ │ │
22
+ └─────────────┴──────────────────────────────────────────────┘
23
+ ```
24
+
25
+ **Reglas:**
26
+
27
+ - Toolbar fija en el top; sidebar fija a la izquierda.
28
+ - El contenido de la vista se renderiza en el área central (`<router-outlet>`).
29
+ - Sidebar colapsable: en desktop ocupa ~240 px expandida / ~60 px colapsada (solo íconos).
30
+ - En mobile: sidebar se convierte en drawer overlay (`position: fixed` + backdrop).
31
+
32
+ ---
33
+
34
+ ## 2. Sidebar
35
+
36
+ **Comportamiento:**
37
+
38
+ - **Colapsable** con toggle desde la toolbar. Estado persistente (store + opcional localStorage) para que sobreviva a navegación entre páginas.
39
+ - **Ítems dinámicos** leídos de un catálogo central (no hardcoded por app). El catálogo expone qué ve cada usuario según su rol.
40
+ - **Ítem activo destacado** con clase `.active` + color de fondo o borde lateral. Sincronizado con la ruta actual vía evento del router (`NavigationEnd` en Angular).
41
+
42
+ **Estructura de cada ítem:**
43
+
44
+ ```html
45
+ <a class="sidebar-item" [class.active]="isActive" [title]="!sidebarOpen ? label : null">
46
+ <span class="sidebar-icon"><i class="fa fa-users"></i></span>
47
+ <span class="sidebar-label" *ngIf="sidebarOpen">{{ label }}</span>
48
+ </a>
49
+ ```
50
+
51
+ **Reglas:**
52
+
53
+ - Ícono a la izquierda, label a la derecha. Label se oculta en colapsado; tooltip (`title`) lo sustituye.
54
+ - Máximo 1 nivel de anidación visible; si el menú crece, agrupar por secciones con separador.
55
+ - Ítems ordenados por frecuencia de uso del rol dominante (no alfabéticamente).
56
+ - Pie opcional con "Volver al home" o enlace al cambio de app.
57
+
58
+ ---
59
+
60
+ ## 3. Toolbar (top bar)
61
+
62
+ 3 zonas horizontales:
63
+
64
+ | Zona | Contenido |
65
+ |------|-----------|
66
+ | Izquierda | Logo + botón toggle del sidebar. |
67
+ | Centro | Breadcrumbs (opcional — ver §5). |
68
+ | Derecha (desktop) | Contexto (sucursal si es cambiable) + nombre usuario + avatar + logout. |
69
+ | Derecha (mobile) | Solo avatar; al tap abre drawer con las opciones. |
70
+
71
+ **Reglas:**
72
+
73
+ - Logo siempre navegable al home (click → ruta raíz).
74
+ - El **contexto** (sucursal activa, periodo contable, etc.) vive en la toolbar cuando es relevante al trabajo en curso y puede cambiarse globalmente.
75
+ - **Avatar = iniciales** (primeras 2 letras del nombre, upper) si no hay foto. Badge redondo con color consistente por usuario.
76
+ - Logout como enlace `⎋` o "Salir" — nunca oculto en un sub-menú innecesario.
77
+
78
+ ---
79
+
80
+ ## 4. Título de página + acción primaria (page header)
81
+
82
+ Cada vista del área de contenido abre con un header consistente:
83
+
84
+ ```html
85
+ <div class="mb-4">
86
+ <div class="d-flex justify-content-between align-items-center flex-wrap gap-3">
87
+ <div>
88
+ <h2 class="fw-bold mb-1">Título de la vista</h2>
89
+ <p class="text-muted mb-0">Descripción de una línea.</p>
90
+ </div>
91
+ <button class="btn btn-primary">Acción primaria</button>
92
+ </div>
93
+ </div>
94
+ ```
95
+
96
+ **Reglas:**
97
+
98
+ - `h2 fw-bold` para el título, `p text-muted` para la descripción de una sola línea.
99
+ - Acción primaria top-right; si no hay, el header queda sin botón (no forzar uno).
100
+ - `flex-wrap gap-3` para que el botón baje en mobile sin solaparse.
101
+
102
+ **[shared-candidato] `page-header`** — se repite en 6+ vistas; amerita extracción con slots `[title]`, `[subtitle]`, `[action]`. Ver también `list-patterns.md` §2 y `form-patterns.md` §2.
103
+
104
+ ---
105
+
106
+ ## 5. Breadcrumbs
107
+
108
+ **Cuándo activarlos:**
109
+
110
+ - Jerarquía de navegación es profunda (3+ niveles) y la ruta es relevante al usuario.
111
+ - La URL no es suficientemente descriptiva (IDs en vez de nombres).
112
+
113
+ **Cuándo omitirlos:**
114
+
115
+ - App de 2 niveles (home → sección). El título de la vista ya indica dónde está el usuario.
116
+ - Admin plano (todos los módulos al mismo nivel bajo `/admin`). El sidebar ya es la navegación principal.
117
+
118
+ **Estructura cuando existen:**
119
+
120
+ ```html
121
+ <nav class="breadcrumbs">
122
+ <a routerLink="/admin">Administración</a>
123
+ <span class="separator">›</span>
124
+ <a routerLink="/admin/usuario">Usuarios</a>
125
+ <span class="separator">›</span>
126
+ <span class="current">Editar</span>
127
+ </nav>
128
+ ```
129
+
130
+ **Reglas:**
131
+
132
+ - Separador visual (`›`, `/`, `>`). Tipografía pequeña (`small`) + color atenuado para los links intermedios.
133
+ - Último ítem (la vista actual) no es link; se destaca en negrita o color del texto base.
134
+ - Derivados del router (no escritos a mano por vista) — para que nunca queden desincronizados con la URL real.
135
+
136
+ ---
137
+
138
+ ## 6. Tabs dentro de una sección
139
+
140
+ Cuando un módulo tiene 2-3 sub-vistas relacionadas (p. ej. "Sucursales" + "Carga masiva", o "Roles" + "Permisos"), usar tabs en vez de ítems separados del sidebar.
141
+
142
+ ```html
143
+ <ul class="nav nav-tabs mb-4 px-2 bg-white rounded-top">
144
+ <li class="nav-item">
145
+ <a class="nav-link" routerLink="./roles" routerLinkActive="active">Roles</a>
146
+ </li>
147
+ <li class="nav-item">
148
+ <a class="nav-link" routerLink="./permisos" routerLinkActive="active">Permisos</a>
149
+ </li>
150
+ </ul>
151
+ <router-outlet></router-outlet>
152
+ ```
153
+
154
+ **Reglas:**
155
+
156
+ - **Tabs con routing** (`routerLink` + `routerLinkActive`) — cada tab es una URL propia, bookmarkeable y con back button funcional.
157
+ - Evitar tabs con estado local (`[tab]="currentTab"` sin routing) cuando las sub-vistas son no triviales; el usuario pierde su lugar al recargar.
158
+ - Máximo 3-4 tabs por sección. Si hay más, probablemente son módulos independientes que merecen sidebar.
159
+
160
+ **[shared-candidato]:** el componente shared `nav-tabs` existe pero se usa mezclando los dos enfoques (routing vs state local). Documentar qué enfoque gana (routing) y migrar los que están en state local.
161
+
162
+ ---
163
+
164
+ ## 7. Back navigation
165
+
166
+ Para vistas que abren desde un listado (p. ej. `admin/usuario` → `admin/usuario/editar/:id`), ofrecer retorno explícito al listado:
167
+
168
+ - **Opción A (recomendada):** link "← Volver a usuarios" en la parte superior del header, alineado con el título.
169
+ - **Opción B:** botón `Cancelar` en el footer del formulario que navega a la ruta padre.
170
+
171
+ **Reglas:**
172
+
173
+ - El back siempre navega a la ruta **explícita** (router a `/admin/usuario`), no `history.back()` (comportamiento impredecible si el usuario llegó por deep link o recarga).
174
+ - Usar un helper compartido para resolver la "ruta padre" desde la ruta actual (evita hardcodear).
175
+
176
+ **[shared-candidato] `back-button`** — observado reinventado en 3+ lugares (`volverHome()` en sidebar, `irHome()` en header, similar en sucursal). Extraer a un componente o servicio.
177
+
178
+ ---
179
+
180
+ ## 8. Routing: lazy loading y rutas anidadas
181
+
182
+ Cada módulo admin (usuario, sucursal, producto, accesos, etc.) vive como **módulo Angular lazy-loaded** bajo el layout padre:
183
+
184
+ ```ts
185
+ { path: 'usuario', loadChildren: () => import('./usuario/usuario.module').then(m => m.UsuarioModule) }
186
+ ```
187
+
188
+ Cada módulo hijo define sus rutas anidadas (`lista`, `nuevo`, `editar/:id`, sub-tabs, modales con estado en URL si aplica).
189
+
190
+ **Reglas:**
191
+
192
+ - El layout admin (`admin-layout.component`) envuelve todas las rutas hijas con `<router-outlet>`, de forma que sidebar y toolbar persistan entre navegaciones.
193
+ - Default redirect por módulo: `{ path: '', redirectTo: 'lista' }` para que `/admin/usuario` abra automáticamente el listado.
194
+ - Guards a nivel de layout (autenticación, sesión) — no repetir en cada ruta hija.
195
+
196
+ Detalles técnicos y ejemplo completo del routing: `coding-standards/references/angular-typescript.md` y `coding-standards/references/frontend-structure.md`.
197
+
198
+ ---
199
+
200
+ ## 9. Stack del proyecto
201
+
202
+ El proyecto usa **Angular + Bootstrap + ng-bootstrap**:
203
+
204
+ - **Sidebar/toolbar:** componentes dedicados en `@presentation/admin/layout/` (`admin-layout`, `sidebar`, `toolbar`). Consumen `MenuCatalogService` para el catálogo dinámico.
205
+ - **Tabs:** usar `nav-tabs` shared con `routerLink` + `routerLinkActive="active"`. La variante state-local existe pero es legado — no replicar.
206
+ - **Breadcrumbs:** hay lógica en `AdminStore.breadcrumbs` (computed signal) pero **no se renderiza en la UI actual**. Si se activa, conectar el computed al template en `admin-layout`.
207
+ - **wizard-footer** shared existe pero no se usa en admin. Reservado para futuros flujos multi-step.
208
+
209
+ ---
210
+
211
+ ## 10. Checklist de replicación
212
+
213
+ Al añadir un módulo nuevo bajo admin:
214
+
215
+ - [ ] Lazy loading como módulo Angular (`loadChildren`).
216
+ - [ ] Añadir ítem en el catálogo de menú (`MenuCatalogService`) con nombre, ícono y ruta.
217
+ - [ ] Rutas anidadas dentro del módulo: `lista`, `nuevo`, `editar/:id` como mínimo.
218
+ - [ ] Default redirect del módulo → `lista`.
219
+ - [ ] Page header consistente en cada vista (`h2 fw-bold` + descripción + acción).
220
+ - [ ] Si hay sub-vistas relacionadas, tabs con routing (no state local).
221
+ - [ ] Back navigation explícito en las vistas de edición.
222
+ - [ ] Sidebar/toolbar se heredan del layout padre — no crear otros.
223
+ - [ ] Guards de sesión/autenticación a nivel de layout.
224
+ - [ ] Revisar `shared/` antes de crear helpers de navegación.
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: redaccion-simple
3
+ description: "Guía transversal de redacción para artefactos qtc-*. Reglas para escribir OBJECTIVE/TASKS/DECISIONS/EVIDENCE/FINDINGS/CONCLUSIONS/CHECKPOINT/STATUS/PROBLEM/IDEAS/DELIVERY (legacy ES = OBJETIVO/DECISIONES/EVIDENCIA/HALLAZGOS/CONCLUSIONES/PROBLEMA/ENTREGA) con frases cortas, listas sobre prosa, sin jerga. Activable cross-plugin como `agent-workflow:redaccion-simple`. Aplica a toda prosa que el AI produzca en contexto qtc-*: artefactos `.md` de sesión, mensajes de commit, descripciones de PR, READMEs ad-hoc, respuestas en chat sobre temas qtc-*. No requiere sesión activa."
4
+ version: 2.0.1
5
+ ---
6
+
7
+ # Redacción simple — Guía transversal qtc-*
8
+
9
+ Reglas de estilo y formato para los artefactos que producen los plugins qtc-* (core, dev, design, analyze).
10
+
11
+ ## Cuándo se invoca
12
+
13
+ - Implícitamente al escribir cualquier `.md` dentro de una sesión qtc-* (artefactos canónicos).
14
+ - Implícitamente al producir prosa en contexto qtc-* fuera de sesión activa: commit messages, descripciones de PR, READMEs ad-hoc, respuestas en chat sobre runtime/skills/sesiones qtc-*.
15
+ - Explícitamente con `Skill(agent-workflow:redaccion-simple)` desde un flow plugin o desde la skill agregadora `agent-workflow:rules`.
16
+ - Referenciada desde `session`, `compact`, `resume` y los skills de los flow plugins.
17
+
18
+ ## Las 6 reglas
19
+
20
+ 1. **Frases cortas**: máximo ~15 palabras. Si pasa de 20, partir en dos.
21
+ 2. **Listas sobre prosa**: 3+ ideas paralelas van en bullets. Prosa solo para narrar.
22
+ 3. **Una idea por línea**: si el bullet usa "y" o ";" para meter una segunda idea, separar.
23
+ 4. **"Qué + por qué" en una línea**: formato `<qué>: <por qué corto>`. Sin párrafo aparte para el "por qué".
24
+ 5. **Sin jerga ni abreviaturas raras**: palabras comunes. Términos técnicos (MCP, C4) OK; abreviaturas inventadas (ej. "TLDR del CTX") no.
25
+ 6. **Sin relleno**: borrar "es importante notar que…", "cabe destacar…", "como se mencionó…", "en conclusión…". La idea va directo.
26
+
27
+ ## Palabras a evitar / preferir
28
+
29
+ | Evitar | Preferir |
30
+ |---|---|
31
+ | "es importante notar que" | (borrar y empezar con la idea) |
32
+ | "cabe destacar" | (borrar) |
33
+ | "en otras palabras" | (borrar) |
34
+ | "se procede a" | "vamos a" / verbo directo |
35
+ | "implementar la funcionalidad de X" | "implementar X" |
36
+ | "realizar la validación de" | "validar" |
37
+ | "llevar a cabo" | "hacer" |
38
+ | "a los efectos de" | "para" |
39
+ | "en el marco de" | "en" |
40
+ | "asimismo" | "también" |
41
+ | "no obstante" | "pero" |
42
+ | "previamente mencionado" | "antes" / "ya dicho" |
43
+ | "TLDR", "FYI", "WIP" | escribir la palabra completa |
44
+
45
+ ## Ejemplos antes / después
46
+
47
+ **1. Prosa redundante**
48
+
49
+ Antes:
50
+ > Es importante notar que los MCPs `<mcp-cert>` y `<mcp-prod>` constituyen hoy la única vía de acceso a la información de schema desde las sesiones de Claude Code. En el marco de la operatoria habitual, cada llamada implica un round-trip al servidor MCP además del consumo de tokens correspondiente al JSON de respuesta.
51
+
52
+ Después (-50%):
53
+ > Hoy las sesiones acceden al schema solo vía MCP `<mcp-cert>` y `<mcp-prod>`. Cada llamada cuesta un round-trip y los tokens del JSON.
54
+
55
+ **2. Decisión densa**
56
+
57
+ Antes:
58
+ > Se decidió, luego de analizar las distintas alternativas, implementar la validación de roles a nivel del frontend exclusivamente, dado que el backend de mantenimiento no requiere conocer la lógica de permisos para operar correctamente, y además esto evita duplicar la regla de negocio en dos lugares distintos.
59
+
60
+ Después:
61
+ > **Decisión**: validar permisos solo en el frontend.
62
+ > **Por qué**: el backend de mantenimiento no necesita la lógica; evita duplicar la regla.
63
+
64
+ **3. Tarea con código inline**
65
+
66
+ Antes:
67
+ > - [ ] **T3**: Implementar el método `validarRol`.
68
+ > ```java
69
+ > public boolean validarRol(Usuario u, Rol r) {
70
+ > if (u == null) throw new IllegalArgumentException("...");
71
+ > ...
72
+ > }
73
+ > ```
74
+
75
+ Después:
76
+ > - [ ] **T3**: Implementar `validarRol(Usuario, Rol)` en `RolService`. Hecho cuando devuelve `true` para la matriz de `EVIDENCE.md § matriz-roles`.
77
+
78
+ ## Cuándo SÍ se permite prosa larga
79
+
80
+ - `## Summary` de CONCLUSIONS.md (modality=technical): si la decisión necesita 4-6 oraciones para sostenerse.
81
+ - Conclusión de causa raíz dentro de CONCLUSIONS.md (modality=incident): la cadena causal puede requerir un párrafo.
82
+ - `## UX decisions` de DELIVERY: cuando explicar un tradeoff visual.
83
+
84
+ En esos casos sigue aplicando "frases cortas": prosa de oraciones simples encadenadas, no oraciones largas.
85
+
86
+ ## Estructuras mínimas por artefacto
87
+
88
+ Cada artefacto tiene una estructura fija. Cambia el contenido, no los headings que los parsers leen.
89
+
90
+ | Artefacto | Headings | Tamaño objetivo |
91
+ |---|---|---|
92
+ | OBJECTIVE.md (legacy: OBJETIVO.md) | `## <Modality\|Type\|Requirement>`, `## <Question\|Brief\|Requirement>`, `## Context`, `## Acceptance criteria`, `## Origin` (opcional), `## Topics` (opcional dev) | 30-60 líneas |
93
+ | TASKS.md | `## Plan summary`, `## Tasks`, `## Risks / external dependencies` | 40-100 (full); 20-40 (lite) |
94
+ | DECISIONS.md (legacy: DECISIONES.md) | `## DEC-NNN: <título>` con `**Decisión**:` + `**Por qué**:` + opcionales | 3-6 líneas por decisión |
95
+ | STATUS.md | campos planos + `## Branches por fuente`, `## Next step` o `## Cierre` | 15-25 líneas |
96
+ | CHECKPOINT.md | `## Last action`, `## Next step`, `## Recent decisions`, `## Files touched`, `## Critical context to resume`, `## Refs` | 20-50 líneas |
97
+ | EVIDENCE.md (legacy: EVIDENCIA.md) | `## Original question`, `## Sources consulted`, `## Raw finding N: <título>`, `## Notes / tentative hypotheses` | 40-150 líneas |
98
+ | FINDINGS.md (legacy: HALLAZGOS.md) | `## Patterns identified`, `## Model decision`, `## What is NOT known (gaps)`, `## False positives discarded` (opcional) | 30-100 líneas |
99
+ | CONCLUSIONS.md (cualquier modality, legacy: CONCLUSIONES.md) | `## Modality`, `## Summary`, `## Conclusions`, `## Recommendations`, `## Traceability`, `## Open` (opcional) | 60-200 líneas según modality y profundidad |
100
+ | PROBLEM.md (legacy: PROBLEMA.md) | `## Statement`, `## Key constraints`, `## Success metrics` | 20-50 líneas |
101
+ | IDEAS.md | `## Variant A/B/C` con Idea/Pros/Contras, `## Initial recommendation` | 60-120 líneas |
102
+ | DELIVERY.md (legacy: ENTREGA.md) | `## Summary`, `## Components` (con `### <Component>`), `## Flows / interactions`, `## UX decisions`, `## Out of scope` | 150-300 líneas |
103
+
104
+ Tamaño objetivo es **suave**: pasarlo está OK si se justifica.
105
+
106
+ ## Reglas operativas por artefacto
107
+
108
+ - **OBJECTIVE**: `## Context` arranca con "Lo que NO está en la pregunta:". Sin sección `## Restricciones` separada.
109
+ - **TASKS**: prohibido código inline. Si hace falta código, va en EVIDENCE y se referencia.
110
+ - **DECISIONS**: si una DEC-NNN es obvia, no se registra. Sin SQL/código inline.
111
+ - **STATUS**: sin `## Artefactos` enumerando archivos (`ls` ya lo hace). Sin `## Handoff sugerido` separado.
112
+ - **CHECKPOINT**: si una sección no aplica, se borra entera. Sin placeholders vacíos.
113
+ - **EVIDENCE**: cada hallazgo 4-8 líneas. Tablas solo si comparan más de 3 cosas.
114
+ - **CONCLUSIONS**: sin `## Context` que repita el OBJECTIVE. Sin opciones falsas tipo "no hacer nada". Sin pseudocódigo. Cada `**CN**` con evidencia link; cada `**RN**` con responsable + cuándo.
115
+
116
+ ## Sandbox read-only
117
+
118
+ Canon universal en `../session/references/sandbox-readonly-rules.md`. Esta skill es read-only por diseño — carga reglas de redacción, no escribe artefactos por sí misma. Los skills consumidores (`session`, `compact`, `resume`, etc.) son quienes producen el `.md`.
119
+
120
+ En plan mode: describir en el plan file qué artefacto se redactaría (OBJECTIVE / TASKS / DECISIONS / EVIDENCE / FINDINGS / CONCLUSIONS / CHECKPOINT / STATUS / commit-msg / PR-description), qué reglas operativas aplican, y el tamaño objetivo en líneas. NO ejecuta `Write`, `Edit`, `MultiEdit` por sí misma — describe el contenido para que el consumidor lo materialice.
121
+
122
+ Compatible con plan mode sin restricciones adicionales.
123
+
124
+ ## Referencias
125
+
126
+ - Propuesta origen: `agent-workflow/docs/propuestas/001-simplificar-artefactos.md` (graduado de session005-analyze; el repo legacy era `core-workflow-plugin`).
127
+ - Templates afectados: `agent-workflow-cli/src/application/templates/objective.ts` (canon EN; ES legacy `OBJETIVO.md` sigue siendo legible vía bilingual readers R1).
128
+ - Skills consumidores: `session`, `compact`, `resume`, y los workflows `dev-workflow`/`design-workflow`/`analyze-workflow` (todos en `agent-workflow`).
@@ -0,0 +1,197 @@
1
+ ---
2
+ name: sql-rollback-generator
3
+ description: "Genera rollback **post-hoc** desde SCRIPTS.sql consolidado (v1.0.0 BREAKING — F-D session062): cuando /agent-workflow:export-scripts separa el bundle, este skill produce `.rollback.sql` por sentencia forward + `rollback-global.sql` encadenado en orden inverso (04→03→02→01). Cubre DDL (DROP IF EXISTS), migraciones con backup en esq_audit, e inserts. Marca operaciones irreversibles (DROP COLUMN, TRUNCATE, DROP CASCADE) con header WARNING. BREAKING desde v1.0.0: deja de generar rollbacks durante exec por archivo; la generación ocurre exclusivamente al exportar."
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # SQL Rollback Generator (v1.0.0 — on-export)
8
+
9
+ Generación de rollbacks **post-hoc** desde el archivo único `SCRIPTS.sql` de cada sesión. Disparado por `/agent-workflow:export-scripts` v3.0.0+ al producir el bundle de release.
10
+
11
+ > **BREAKING desde v1.0.0**: este skill ya NO genera `.rollback.sql` durante la sesión. La política previa "on-write per archivo" (v0.x) generaba un rollback acoplado por cada forward; la política nueva "on-export" agrupa la generación al consolidar el bundle. Razón: el flujo SQL durante exec ahora es un único `SCRIPTS.sql` (ver `sql-script-organizer` v1.0.0); no hay archivos individuales que parear con rollbacks. Layouts legacy se migran con `/agent-workflow:migrate --upgrade-topology`.
12
+
13
+ ## When to use
14
+
15
+ - **Disparado por `/agent-workflow:export-scripts`** al consolidar el bundle desde N sesiones.
16
+ - NL del usuario: "generar rollback", "script de reversa", "rollback global".
17
+ - Si el usuario quiere entender cómo revertir un cambio específico ANTES del export: este skill puede simular un rollback en plan-mode sin escribir archivos.
18
+
19
+ ## Sandbox read-only
20
+
21
+ Reglas en `../session/references/sandbox-readonly-rules.md`. En plan mode describir estrategia por sentencia forward (sin crear `.rollback.sql`); irreversibles se anotan para revisión.
22
+
23
+ ## Principios (v1.0.0)
24
+
25
+ - **Input**: `SCRIPTS.sql` de cada sesión incluida en el corpus de export, parseado vía markers `@category`/`@stmt` (ver `sql-script-organizer/references/scripts-sql-format.md`).
26
+ - **Output**: archivos `.rollback.sql` ubicados junto al forward separado en el bundle export (`por-sesion/sessionXXX/<categoria>/NNN-*.rollback.sql`).
27
+ - **Global**: `por-sesion/sessionXXX/rollback/00-rollback-global.sql` encadena los rollbacks en orden inverso (04 → 03 → 02 → 01), todo en `BEGIN; ... COMMIT;` único.
28
+ - **Idempotencia obligatoria**: `DROP ... IF EXISTS`, `CREATE OR REPLACE`, `ON CONFLICT DO NOTHING`.
29
+ - **Transacción obligatoria** en cada rollback individual.
30
+ - **Header del rollback** reusa el del forward (4 líneas Script/Sesion/Objeto/Alcance) con `Objeto:` describiendo la reversa.
31
+ - **Irreversibles** (DROP COLUMN, TRUNCATE, DROP CASCADE, datos sin backup) marcados con `-- WARNING: IRREVERSIBLE` debajo del header.
32
+ - **Datos**: si el forward es UPDATE/DELETE masivo sin backup, generar un `000-backup-*.sql` previo en el bundle (Categoría 03-migracion) + rollback que restaure desde `esq_audit.tb_bkp_<x>_sNNN`.
33
+
34
+ ## Header del rollback
35
+
36
+ El `.rollback.sql` reusa el mismo formato canónico definido en `sql-script-organizer/SKILL.md#header-canónico`:
37
+
38
+ ```sql
39
+ -- ============================================================================
40
+ -- Script: NNN-tipo-objetivo.rollback.sql
41
+ -- Sesion: sNNN
42
+ -- Objeto: Revierte los cambios de NNN-tipo-objetivo.sql (<resumen de la reversa>).
43
+ -- Alcance: <mismo alcance que el forward>
44
+ -- ============================================================================
45
+ ```
46
+
47
+ - `Objeto:` describe la reversa, no el forward (ej. "Repone tb_x.cod_usuario al valor de esq_audit.tb_bkp_x_sNNN").
48
+ - `Alcance:` repite literal el del forward para que quede explícito que la reversa cubre exactamente el mismo set.
49
+ - Si el forward es irreversible, agregar **debajo del header** una línea suelta:
50
+
51
+ ```sql
52
+ -- ============================================================================
53
+ -- Script: ...
54
+ -- Sesion: ...
55
+ -- Objeto: ...
56
+ -- Alcance: ...
57
+ -- ============================================================================
58
+ -- WARNING: IRREVERSIBLE — best-effort, ver DECISIONS.md DEC-NNN (legacy: DECISIONES.md).
59
+ ```
60
+
61
+ El bloque WARNING explica qué no se puede recuperar y referencia la decisión.
62
+
63
+ ## Estrategias por tipo de operación
64
+
65
+ ### DDL de tablas
66
+
67
+ | Forward | Rollback |
68
+ |---|---|
69
+ | `CREATE TABLE IF NOT EXISTS esq_.tb_x` | `DROP TABLE IF EXISTS esq_.tb_x;` |
70
+ | `ALTER TABLE tb_x ADD COLUMN col_y ...` | `ALTER TABLE tb_x DROP COLUMN IF EXISTS col_y;` |
71
+ | `CREATE INDEX idx_... ON tb_x(col)` | `DROP INDEX IF EXISTS idx_...;` |
72
+ | `CREATE SEQUENCE esq_.seq_tb_x` | `DROP SEQUENCE IF EXISTS esq_.seq_tb_x;` |
73
+ | `DROP TABLE tb_x` | Backup previo en `esq_audit.tb_bkp_x_sessionXXX`; rollback es `CREATE TABLE ... AS SELECT * FROM esq_audit.tb_bkp_x_sessionXXX` |
74
+ | Reconstrucción | Script previo `000-backup-tb-x.sql` que copia a `esq_audit`; rollback restaura desde backup |
75
+
76
+ ### DDL de funciones y SP
77
+
78
+ | Forward | Rollback |
79
+ |---|---|
80
+ | `CREATE OR REPLACE FUNCTION fn_x(...)` | `DROP FUNCTION IF EXISTS fn_x(<firma>);` o recrear versión previa con `CREATE OR REPLACE` embebido |
81
+ | `CREATE OR REPLACE PROCEDURE sp_x(...)` | `DROP PROCEDURE IF EXISTS sp_x(<firma>);` + recreación si existe versión anterior |
82
+ | `DROP FUNCTION fn_x` | `-- WARNING: IRREVERSIBLE` — incluir cuerpo en comentario |
83
+
84
+ ### Migración de datos (UPDATE / DELETE)
85
+
86
+ Pasos obligatorios antes del forward:
87
+
88
+ 1. Generar `000-backup-<tabla>.sql` que copia filas afectadas a `esq_audit.tb_bkp_<tabla>_sessionXXX`.
89
+ 2. Rollback usa el backup:
90
+
91
+ ```sql
92
+ BEGIN;
93
+ UPDATE esq_.tb_x t
94
+ SET col_a = bkp.col_a, col_b = bkp.col_b
95
+ FROM esq_audit.tb_bkp_x_sessionXXX bkp
96
+ WHERE t.id_x = bkp.id_x;
97
+ COMMIT;
98
+ ```
99
+
100
+ Si DELETE masivo, rollback es `INSERT INTO ... SELECT * FROM esq_audit.tb_bkp_...`.
101
+
102
+ ### Inserts de datos nuevos
103
+
104
+ ```sql
105
+ BEGIN;
106
+ DELETE FROM esq_.tb_maestras WHERE campo_identificador IN (<lista>);
107
+ COMMIT;
108
+ ```
109
+
110
+ Usar claves naturales o rango de IDs conocido — nunca DELETE sin WHERE.
111
+
112
+ ### Operaciones irreversibles
113
+
114
+ Marcar con `-- WARNING: IRREVERSIBLE` en el header del forward:
115
+
116
+ - `TRUNCATE TABLE`
117
+ - `DROP COLUMN` sin respaldo previo
118
+ - `DROP TABLE` sin respaldo previo
119
+ - `ALTER COLUMN TYPE` con pérdida de precisión
120
+ - Cascadas destructivas (`DROP ... CASCADE`)
121
+ - `DELETE` sin respaldo en `esq_audit`
122
+
123
+ Protocolo:
124
+
125
+ 1. Header WARNING.
126
+ 2. Registrar decisión en DECISIONS.md (legacy: DECISIONES.md) antes de ejecutar.
127
+ 3. Generar rollback "best-effort" indicando qué se perdería.
128
+ 4. **Confirmación explícita** del usuario antes de continuar.
129
+
130
+ Lista completa en `references/irreversible-checklist.md`.
131
+
132
+ ## Layout (post-export-scripts v3.0.0)
133
+
134
+ ### Par acoplado
135
+
136
+ `export-scripts` produce los archivos separados desde SCRIPTS.sql y este skill genera el rollback junto a cada forward:
137
+
138
+ ```
139
+ <docs>/scripts/NNN-export-scripts-YYYY-MM-DD/por-sesion/sessionXXX/01-ddl-tablas/
140
+ ├── 001-crea-tb-x.sql (forward, derivado de @stmt en SCRIPTS.sql)
141
+ └── 001-crea-tb-x.rollback.sql (rollback, generado por este skill)
142
+ ```
143
+
144
+ ### Bundle global
145
+
146
+ ```
147
+ <docs>/scripts/NNN-export-scripts-YYYY-MM-DD/por-sesion/sessionXXX/rollback/
148
+ ├── 00-rollback-global.sql (encadena todos 04→01 con BEGIN/COMMIT único)
149
+ ├── 04-inserts-rollback.sql
150
+ ├── 03-migracion-rollback.sql
151
+ ├── 02-ddl-funciones-rollback.sql
152
+ └── 01-ddl-tablas-rollback.sql
153
+ ```
154
+
155
+ Layout pre-v1.0.0 (`scripts/bundle/...` dentro de la sesión durante exec) ya no se genera. Layouts legacy se migran con `/agent-workflow:migrate --upgrade-topology`.
156
+
157
+ ## Proceso
158
+
159
+ 1. Leer el forward — identificar tipo.
160
+ 2. Clasificar — seleccionar estrategia.
161
+ 3. Generar rollback acoplado.
162
+ 4. Verificar irreversibilidades — warning + DECISIÓN + confirmación si aplica.
163
+ 5. Actualizar bundle global.
164
+ 6. Verificar cobertura antes de graduar.
165
+
166
+ ## Notas de portabilidad (PostgreSQL como motor primario)
167
+
168
+ | Concepto | PostgreSQL | Oracle | SQL Server |
169
+ |---|---|---|---|
170
+ | Rollback de función | `DROP FUNCTION IF EXISTS fn(...sig)` | `DROP FUNCTION fn` | `DROP FUNCTION IF EXISTS fn` |
171
+ | Idempotencia create | `CREATE OR REPLACE FUNCTION` | `CREATE OR REPLACE FUNCTION` | `CREATE OR ALTER PROCEDURE` |
172
+ | Insertar sin duplicar | `ON CONFLICT DO NOTHING` | `INSERT ... WHERE NOT EXISTS` | `IF NOT EXISTS (SELECT 1 ...) INSERT` |
173
+ | Secuencia | `DROP SEQUENCE IF EXISTS seq_` | `DROP SEQUENCE seq_` | No aplica (IDENTITY) |
174
+
175
+ Si el destino no es Postgres, indicarlo en `Objeto:` o como nota libre debajo del header (no como campo nuevo).
176
+
177
+ ## Graduación al cierre
178
+
179
+ `rollback/` viaja junto al bundle forward bajo `docs/scripts/NNN-sessionXXX-nombre/rollback/`.
180
+
181
+ ## Modo release (cross-session + por tema)
182
+
183
+ `release` y `release-scripts` invocan este skill para producir rollback global del release y rollback por tema. Algoritmo detallado (3 niveles, principios, qué NO hacer, verificación) en **`references/release-rollback.md`**.
184
+
185
+ ## Integración con otros skills
186
+
187
+ - **`sql-script-organizer`** — companion: organiza el bundle forward y coordina rollbacks. En modo release, provee bundle consolidado.
188
+ - **`release`** — consume rollback global de release.
189
+ - **`release-scripts`** — consume rollback por tema.
190
+ - **`coding-standards`** — reglas de estilo SQL en `database-conventions.md#estilo-de-scripts-sql`.
191
+ - **`session`** — Fase 3 invoca este skill junto a `sql-script-organizer` al escribir el primer `.sql`.
192
+
193
+ ## Recursos adicionales
194
+
195
+ - **`references/rollback-patterns.md`** — recetas completas con ejemplos SQL.
196
+ - **`references/irreversible-checklist.md`** — lista de irreversibles y protocolo.
197
+ - **`references/release-rollback.md`** — algoritmos de rollback global y por tema (modo release).