@saulwade/swl-ses 2.4.3 → 2.5.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 (197) hide show
  1. package/CLAUDE.md +194 -241
  2. package/README.md +600 -597
  3. package/agentes/_intent-spec.md +73 -73
  4. package/agentes/_propose-step.md +90 -90
  5. package/agentes/abogado-diablo-swl.md +145 -0
  6. package/agentes/accesibilidad-wcag-swl.md +690 -690
  7. package/agentes/arquitecto-swl.md +267 -267
  8. package/agentes/auto-evolucion-swl.md +908 -908
  9. package/agentes/backend-api-swl.md +1 -1
  10. package/agentes/backend-csharp-swl.md +420 -420
  11. package/agentes/backend-go-swl.md +390 -390
  12. package/agentes/backend-java-swl.md +281 -281
  13. package/agentes/backend-node-swl.md +1 -1
  14. package/agentes/backend-python-swl.md +1 -1
  15. package/agentes/backend-rust-swl.md +364 -364
  16. package/agentes/backend-workers-swl.md +482 -482
  17. package/agentes/cloud-infra-swl.md +509 -509
  18. package/agentes/consolidador-swl.md +541 -541
  19. package/agentes/datos-swl.md +1 -1
  20. package/agentes/depurador-swl.md +352 -352
  21. package/agentes/devops-ci-swl.md +400 -400
  22. package/agentes/disenador-ui-swl.md +569 -569
  23. package/agentes/documentador-swl.md +345 -345
  24. package/agentes/frontend-angular-swl.md +621 -621
  25. package/agentes/frontend-css-swl.md +716 -716
  26. package/agentes/frontend-react-swl.md +692 -692
  27. package/agentes/frontend-swl.md +496 -496
  28. package/agentes/frontend-tailwind-swl.md +826 -826
  29. package/agentes/gh-fix-ci-swl.md +6 -1
  30. package/agentes/implementador-swl.md +1 -1
  31. package/agentes/investigador-swl.md +432 -432
  32. package/agentes/investigador-ux-swl.md +505 -505
  33. package/agentes/llm-apps-swl.md +1 -1
  34. package/agentes/migrador-swl.md +442 -442
  35. package/agentes/mobile-android-swl.md +511 -511
  36. package/agentes/mobile-cross-swl.md +541 -541
  37. package/agentes/mobile-ios-swl.md +502 -502
  38. package/agentes/mobile-testing-swl.md +302 -302
  39. package/agentes/nemesis-auditor-swl.md +285 -285
  40. package/agentes/notificador-swl.md +1 -1
  41. package/agentes/observabilidad-swl.md +438 -438
  42. package/agentes/pagos-swl.md +310 -310
  43. package/agentes/perfilador-usuario-swl.md +321 -321
  44. package/agentes/planificador-swl.md +399 -399
  45. package/agentes/producto-prd-swl.md +589 -589
  46. package/agentes/red-team-swl.md +218 -218
  47. package/agentes/release-manager-swl.md +590 -590
  48. package/agentes/rendimiento-swl.md +713 -713
  49. package/agentes/resolutor-build-swl.md +10 -1
  50. package/agentes/revisor-angular-swl.md +278 -278
  51. package/agentes/revisor-codigo-swl.md +1 -1
  52. package/agentes/revisor-csharp-swl.md +264 -264
  53. package/agentes/revisor-go-swl.md +259 -259
  54. package/agentes/revisor-java-swl.md +257 -257
  55. package/agentes/revisor-kotlin-swl.md +273 -273
  56. package/agentes/revisor-nextjs-swl.md +281 -281
  57. package/agentes/revisor-php-swl.md +271 -271
  58. package/agentes/revisor-react-swl.md +278 -278
  59. package/agentes/revisor-rust-swl.md +346 -346
  60. package/agentes/revisor-seguridad-swl.md +399 -399
  61. package/agentes/revisor-swift-swl.md +268 -268
  62. package/agentes/revisor-typescript-swl.md +346 -346
  63. package/agentes/sre-swl.md +1 -1
  64. package/agentes/tdd-qa-swl.md +393 -393
  65. package/bin/lib/bot-comandos.js +1 -1
  66. package/bin/swl-ses.js +6 -0
  67. package/comandos/swl/adoptar-proyecto.md +14 -2
  68. package/comandos/swl/configurar-ci.md +8 -1
  69. package/comandos/swl/deuda-codigo.md +97 -97
  70. package/comandos/swl/discutir-fase.md +22 -118
  71. package/comandos/swl/fix.md +118 -0
  72. package/comandos/swl/nuevo-proyecto.md +54 -3
  73. package/comandos/swl/predecir.md +32 -2
  74. package/comandos/swl/seguridad.md +189 -0
  75. package/comandos/swl/status.md +5 -3
  76. package/habilidades/aprendizaje-continuo/SKILL.md +3 -1
  77. package/habilidades/discutir-fase/SKILL.md +84 -81
  78. package/habilidades/discutir-fase/recursos/plantilla-contexto.md +136 -0
  79. package/habilidades/doc-sync/SKILL.md +3 -1
  80. package/habilidades/doubt-driven-review/SKILL.md +15 -1
  81. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  82. package/habilidades/estructura-proyecto-claude/SKILL.md +11 -2
  83. package/habilidades/harness-claude-code/SKILL.md +3 -1
  84. package/habilidades/instalar-sistema/SKILL.md +3 -1
  85. package/habilidades/meta-reglas-extendido/SKILL.md +92 -0
  86. package/habilidades/meta-reglas-extendido/recursos/analisis-previo-tareas-grandes.md +186 -0
  87. package/habilidades/meta-reglas-extendido/recursos/analizar-directorios-antes-de-escribir.md +235 -0
  88. package/habilidades/meta-reglas-extendido/recursos/api-diseno.md +413 -0
  89. package/habilidades/meta-reglas-extendido/recursos/arquitectura.md +491 -0
  90. package/habilidades/meta-reglas-extendido/recursos/arreglar-al-detectar.md +264 -0
  91. package/habilidades/meta-reglas-extendido/recursos/debatir-antes-de-aceptar.md +152 -0
  92. package/habilidades/meta-reglas-extendido/recursos/git-workflow.md +259 -0
  93. package/habilidades/meta-reglas-extendido/recursos/gobernanza.md +291 -0
  94. package/habilidades/meta-reglas-extendido/recursos/memoria-consolidada.md +263 -0
  95. package/habilidades/meta-reglas-extendido/recursos/seguridad-agentes.md +443 -0
  96. package/habilidades/meta-reglas-extendido/recursos/sesiones-paralelas.md +190 -0
  97. package/habilidades/meta-reglas-extendido/recursos/sin-duplicacion-reglas-globales.md +179 -0
  98. package/habilidades/meta-reglas-extendido/recursos/skills-estandar.md +394 -0
  99. package/habilidades/meta-reglas-extendido/recursos/usar-code-review-graph.md +156 -0
  100. package/habilidades/meta-reglas-extendido/recursos/usar-context7.md +236 -0
  101. package/habilidades/meta-reglas-extendido/recursos/usar-sistema-swl.md +253 -0
  102. package/habilidades/meta-reglas-extendido/recursos/verificar-citas-normativas.md +527 -0
  103. package/habilidades/meta-skills-estandar/SKILL.md +3 -1
  104. package/habilidades/nuevo-proyecto/SKILL.md +20 -3
  105. package/habilidades/php-experto/SKILL.md +10 -3
  106. package/habilidades/{filament-admin/SKILL.md → php-experto/recursos/filament-admin.md} +23 -39
  107. package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
  108. package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
  109. package/habilidades/proceso-debate-adversarial/recursos/personas.md +5 -4
  110. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -0
  111. package/hooks/check-update.js +19 -10
  112. package/hooks/contexto-subagente.js +68 -68
  113. package/hooks/degradacion-instintos.js +1 -1
  114. package/hooks/extraccion-aprendizajes.js +2 -2
  115. package/hooks/lib/briefing.js +3 -3
  116. package/hooks/lib/nudge-tracker.js +1 -1
  117. package/hooks/lib/otlp-exporter.js +1 -1
  118. package/hooks/lib/webhook-dedup.js +1 -1
  119. package/hooks/session-briefing.js +1 -1
  120. package/llms.txt +6 -6
  121. package/manifiestos/canonical-hashes.json +713 -52
  122. package/manifiestos/hooks-config.json +469 -469
  123. package/manifiestos/invariantes-criticos.json +30 -30
  124. package/manifiestos/modulos.json +168 -135
  125. package/manifiestos/perfiles.json +0 -2
  126. package/manifiestos/skills-lock.json +49 -56
  127. package/package.json +7 -5
  128. package/plantillas/github-workflows/README.md +15 -1
  129. package/plantillas/github-workflows/swl-devsecops.yml +70 -0
  130. package/plugin.json +5 -5
  131. package/reglas/analisis-previo-tareas-grandes.md +30 -156
  132. package/reglas/analizar-directorios-antes-de-escribir.md +30 -211
  133. package/reglas/api-diseno.md +28 -398
  134. package/reglas/arquitectura.md +35 -456
  135. package/reglas/arreglar-al-detectar.md +30 -230
  136. package/reglas/debatir-antes-de-aceptar.md +30 -143
  137. package/reglas/docs.md +7 -0
  138. package/reglas/estilo-codigo.md +9 -0
  139. package/reglas/fragmentos-compartidos.md +6 -0
  140. package/reglas/git-workflow.md +44 -240
  141. package/reglas/gobernanza.md +23 -262
  142. package/reglas/memoria-consolidada.md +34 -228
  143. package/reglas/performance.md +8 -0
  144. package/reglas/pruebas.md +12 -0
  145. package/reglas/seguridad-agentes.md +37 -418
  146. package/reglas/seguridad.md +12 -0
  147. package/reglas/sesiones-paralelas.md +29 -162
  148. package/reglas/sin-duplicacion-reglas-globales.md +25 -166
  149. package/reglas/skills-estandar.md +23 -373
  150. package/reglas/usar-code-review-graph.md +31 -140
  151. package/reglas/usar-context7.md +30 -208
  152. package/reglas/usar-sistema-swl.md +47 -242
  153. package/reglas/verificar-citas-normativas.md +47 -537
  154. package/scripts/actualizar.js +253 -253
  155. package/scripts/audit-tools/auditar-relleno-inventario.js +145 -0
  156. package/scripts/auditar-clases-conocidas.js +106 -0
  157. package/scripts/bootstrap-instintos.js +2 -2
  158. package/scripts/canario-hooks.js +166 -0
  159. package/scripts/cli/configurar-ci.js +2 -1
  160. package/scripts/evidencia-valor.js +93 -0
  161. package/scripts/field-report.js +1 -1
  162. package/scripts/generar-comandos.js +143 -0
  163. package/scripts/generar-inventario.js +236 -23
  164. package/scripts/generar-matriz-lenguajes.js +1 -1
  165. package/scripts/instalador.js +15 -1
  166. package/scripts/lib/configurar-ci.js +10 -3
  167. package/scripts/lib/diary-entry.js +3 -1
  168. package/scripts/lib/drift-detector.js +1 -1
  169. package/scripts/lib/evidencia-valor.js +189 -0
  170. package/scripts/lib/expandir-targets.js +71 -71
  171. package/scripts/lib/frontmatter-md.js +63 -0
  172. package/scripts/lib/parsear-opciones.js +2 -0
  173. package/scripts/lib/prune-componentes.js +180 -0
  174. package/scripts/lib/reglas-globales-conocidas.json +16 -2
  175. package/scripts/lib/scoring-instintos.js +2 -2
  176. package/scripts/lib/toml-merge.js +204 -204
  177. package/scripts/lib/transformadores/claude.js +1 -1
  178. package/scripts/lib/transformadores/codex.js +1 -1
  179. package/scripts/lib/transformadores/copilot.js +1 -1
  180. package/scripts/lib/transformadores/cursor.js +1 -1
  181. package/scripts/lib/transformadores/gemini.js +22 -2
  182. package/scripts/lib/transformadores/opencode.js +1 -1
  183. package/scripts/mcp-server/auth.js +105 -105
  184. package/scripts/mcp-server/cache.js +106 -106
  185. package/scripts/prune.js +102 -0
  186. package/scripts/publicar.js +18 -2
  187. package/scripts/tui/pantallas/inspect.js +175 -175
  188. package/scripts/tui/pantallas/uninstall-wizard.js +210 -210
  189. package/scripts/tui/pantallas/update-wizard.js +234 -234
  190. package/scripts/tui/pantallas/welcome.js +189 -189
  191. package/habilidades/paid-media-tracking/SKILL.md +0 -269
  192. package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +0 -220
  193. package/habilidades/paid-media-tracking/recursos/google-ads-api.md +0 -215
  194. package/habilidades/tracking-measurement/SKILL.md +0 -239
  195. package/habilidades/tracking-measurement/recursos/consent-mode.md +0 -231
  196. package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +0 -216
  197. package/habilidades/tracking-measurement/recursos/meta-capi.md +0 -262
@@ -0,0 +1,264 @@
1
+ # Detectar → Informar → Arreglar — extendido
2
+
3
+ > Extendido de `reglas/arreglar-al-detectar.md` (Fase D, dieta de contexto). El
4
+ > núcleo instalado es la norma; aquí viven los feedbacks de origen, el detalle
5
+ > completo del patrón Hallazgo A/B/C con su ejemplo validado, los anti-patrones
6
+ > desarrollados y la relación con otras reglas.
7
+
8
+ ## Índice
9
+
10
+ - [Los cuatro feedbacks de origen](#los-cuatro-feedbacks-de-origen)
11
+ - [Cómo aplicar — detalle por situación](#cómo-aplicar--detalle-por-situación)
12
+ - [Hallazgos colaterales con blast radius alto — patrón Hallazgo A/B/C](#hallazgos-colaterales-con-blast-radius-alto--patrón-hallazgo-abc)
13
+ - [Excepciones legítimas](#excepciones-legítimas)
14
+ - [Anti-patrones explícitos](#anti-patrones-explícitos)
15
+ - [Relación con otras reglas](#relación-con-otras-reglas)
16
+ - [Origen de esta regla](#origen-de-esta-regla)
17
+
18
+ ---
19
+
20
+ ## Los cuatro feedbacks de origen
21
+
22
+ La regla consolida cuatro feedbacks repetidos en sesiones distintas entre
23
+ 2026-04-23 y 2026-05-03 con la misma señal: el usuario rechaza entregas
24
+ parciales, deuda silenciosa y bypass de errores ajenos.
25
+
26
+ - "No me gustan las cosas a medias" — rechazo de entregas parciales (2026-04-23).
27
+ - "Cuando detectes errores, bugs, inconsistencias y demás informes al usuario y
28
+ procedas a solucionar y/o arreglar, además nunca debes dejar pendientes, ni
29
+ diferir" (2026-04-30).
30
+ - "Resuelve los test que fallan, no bypass" — al detectar intento de excluir
31
+ tests del glob para evitar arreglarlos (2026-04-30).
32
+ - "Si el job CI falla, hay que arreglarlo todo" — al ver tests rotos
33
+ presentados como "preexistentes, no críticos" (2026-05-03).
34
+
35
+ ---
36
+
37
+ ## Cómo aplicar — detalle por situación
38
+
39
+ ### Al detectar un problema secundario durante el trabajo principal
40
+
41
+ - Reportarlo brevemente al usuario: qué se detectó, dónde, severidad.
42
+ - Resolverlo en el mismo turno o en commit separado de la misma sesión.
43
+ - NUNCA ofrecer "lo documento como deuda" como primera opción.
44
+ - NUNCA usar frases como "son tests con mocks pre-existentes que ya estaban rotos",
45
+ "esto estaba antes", "no es del scope inmediato" para evitar el trabajo.
46
+
47
+ ### Al ejecutar tests, builds, lints, validadores
48
+
49
+ - Si hay failures, listarlos todos y atacarlos todos.
50
+ - No distinguir "bugs reales" vs "tests con mocks mal configurados" como excusa
51
+ para arreglar solo unos. Si están rotos, arreglarlos.
52
+ - Excepción: bugs que requieran decisión arquitectural ambigua del usuario —
53
+ pedir esa decisión explícitamente, no diferir como "tu decisión".
54
+
55
+ ### Al modificar código adyacente
56
+
57
+ - Si tocas líneas con problemas adyacentes (None checks faltantes, schemas
58
+ obsoletos, mocks inconsistentes, contadores stale, paths inválidos),
59
+ arreglarlos en el mismo commit o en commit separado de la misma sesión.
60
+
61
+ ### Al refactorizar
62
+
63
+ - Si encuentras código adyacente que se quedó obsoleto por un refactor previo,
64
+ actualizarlo. No dejar deuda residual.
65
+
66
+ ### Fix de clase, no de instancia (barrido por patrón obligatorio)
67
+
68
+ - Si el bug corregido es un PATRÓN (regex incompleto, umbral mal calibrado,
69
+ construcción de path repetida, gate copy-pasteado) y no un typo puntual,
70
+ el MISMO turno incluye un `grep` de todos los hermanos del patrón en el
71
+ codebase y su corrección — o el registro explícito de por qué no aplica.
72
+ - Arreglar solo la instancia que falló deja a los gemelos esperando el peor
73
+ momento para reventar. Evidencia doble (2026-07-03, swl-ses): se corrigió
74
+ el gate de reloj de un test sin barrer la clase → su gemelo tumbó el
75
+ `npm publish` de v2.4.0 horas después (bump de coordinación innecesario);
76
+ se corrigió el scope fantasma en el doctor sin barrer → quedaron 7 sitios
77
+ más con el mismo patrón, incluido un uninstall-wizard que ofrecía borrar
78
+ la instalación global de Claude Code.
79
+ - Es la aplicación a FIXES del "sweep por patrón" que
80
+ `verificar-citas-normativas.md § Familia 2` ya exige para reportes.
81
+
82
+ ### Al detectar un error ajeno al trabajo actual
83
+
84
+ - NO bypassear (excluir tests del glob, comentar checks, `|| true`,
85
+ downgradear a warning, ignorar).
86
+ - Resolver de raíz o, si requiere decisión, abrir explícitamente la decisión
87
+ con el usuario antes de bypassear.
88
+ - El default es resolver, no esquivar.
89
+
90
+ ### Al presentar planes con sub-tareas
91
+
92
+ - Dar primero la opción "todo completo" con esfuerzo estimado.
93
+ - Si por capacity hay que partir el trabajo, hacerlo explícito con razón
94
+ concreta: "esta sesión cubre 3.1 a 3.4; la 3.5 va en commit separado por
95
+ X razón concreta", no por preferencia genérica.
96
+
97
+ ### Al recomendar diferir un patrón o feature
98
+
99
+ - Redactar **simultáneamente** el ítem de deuda formal con criterio de disparo
100
+ verificable. La oferta "lo dejo apuntado" sin entrada formal no es aceptable.
101
+ - Distinción de categorías:
102
+ - **DT (deuda técnica)** con plan de cierre.
103
+ - **DA (decisión arquitectural)** con trigger verificable.
104
+ - **OP (pendiente operacional)** con responsable.
105
+ - "Mediano plazo / Q3 / cuando aparezca demanda" sin trigger verificable es
106
+ deuda silenciosa. Convertir a DA formal en mismo commit.
107
+ - Trigger verificable significa condición observable: "≥2 clientes distintos
108
+ reportan", "p95 > 60s en producción documentado", "uso > N veces/mes",
109
+ no "cuando sea relevante" o "más adelante".
110
+
111
+ ---
112
+
113
+ ## Hallazgos colaterales con blast radius alto — patrón Hallazgo A/B/C
114
+
115
+ Durante el trabajo principal puedes detectar un problema secundario cuyo fix
116
+ **no cabe** en la regla general "detectar → informar → arreglar en mismo
117
+ turno" porque su blast radius es alto: toca infra compartida, requiere
118
+ downtime, modifica contratos públicos, exige decisión arquitectural, o su
119
+ remediación dura más que el trabajo principal en curso.
120
+
121
+ Aplicar el catálogo de tres opciones explícitas — NUNCA mezclar el fix con
122
+ el trabajo principal sin etiquetarlo y NUNCA dejarlo como deuda silenciosa.
123
+
124
+ ### Definición operacional
125
+
126
+ Un hallazgo colateral cumple **al menos uno** de estos atributos:
127
+
128
+ - Su fix toca archivos fuera del scope del trabajo principal (>3 archivos
129
+ no relacionados con la tarea actual).
130
+ - Requiere operación destructiva (`git filter-branch`, `git filter-repo`,
131
+ drop de tabla, rotación de credencial productiva).
132
+ - Modifica configuración de infra compartida (CI/CD, branch protection,
133
+ permisos de repo, secrets de organización).
134
+ - Exige decisión arquitectural ambigua que el agente no puede tomar solo.
135
+ - Su remediación dura más que el commit actual del trabajo principal.
136
+
137
+ Si NO cumple ninguno de estos atributos, NO es Hallazgo A/B/C — aplicar la
138
+ regla general (arreglar en mismo turno).
139
+
140
+ ### Las tres opciones explícitas
141
+
142
+ | Opción | Cuándo | Acción |
143
+ |---|---|---|
144
+ | **Hallazgo A — Resolver ahora** | Fix < 30 min, reversible con `git revert`, sin blast radius en infra compartida, sin decisión arquitectural | Pausar trabajo principal, fix en commit separado etiquetado, retomar |
145
+ | **Hallazgo B — DT formal con trigger verificable** | Fix con blast radius alto pero NO bloqueante para el trabajo principal. Tiene criterio observable que define cuándo cerrarlo | Redactar entry en `.planning/DEUDA-TECNICA.md` con ID, trigger verificable, plan de cierre paso a paso. Continuar trabajo principal |
146
+ | **Hallazgo C — Escalar al usuario** | Fix excede autorización del agente: requiere decisión arquitectural, operación destructiva irreversible, o modifica contratos productivos | Pausar trabajo principal, reportar al usuario con 3 opciones concretas y recomendación, esperar decisión explícita |
147
+
148
+ ### Reglas duras
149
+
150
+ - **Reportar siempre, independientemente de la opción elegida**: el usuario
151
+ ve el hallazgo en el mismo turno, no se entera en el commit posterior.
152
+ - **DT formal NO es "lo apunto y veremos"**: requiere ID (`DT-NOMBRE-X`),
153
+ trigger verificable observable, plan de cierre con pasos concretos, y
154
+ entry visible en `.planning/DEUDA-TECNICA.md` commiteada en mismo turno.
155
+ - **NUNCA degradar Hallazgo C a Hallazgo B sin pedirlo**: una decisión
156
+ arquitectural disfrazada de DT es deuda silenciosa con cara de proceso.
157
+ - **NUNCA "arreglar como parte del trabajo principal" un Hallazgo B/C
158
+ sin etiquetarlo**: aunque el fix sea pequeño, si su blast radius es alto
159
+ el commit debe ser separado con mensaje explícito ("colateral: cierra
160
+ DT-X" o "colateral: aplica fix urgente fuera de scope original").
161
+
162
+ ### Ejemplo validado (SIGAF, sesión 2026-05-20)
163
+
164
+ Durante implementación de pipeline DevSecOps (gates gitleaks + SAST + deps
165
+ + containers), el agente detectó tres hallazgos colaterales:
166
+
167
+ - **Hallazgo A — Validator JWT con frozenset + regex**: bug detectado en
168
+ `backend/app/core/config.py` donde `_CENTINELA` hardcodeado divergía del
169
+ `.env.example` real. Fix < 30 min, reversible, alcance acotado a
170
+ validators. Aplicado en commit separado mismo turno + 8 tests de regresión.
171
+
172
+ - **Hallazgo B — DT-GHAS-HABILITAR**: detectado que repo PRIVATE en
173
+ organización sin GitHub Advanced Security responde 403 al upload SARIF.
174
+ Mitigación inmediata con `continue-on-error: true` en step de upload.
175
+ DT formal con trigger verificable: "equipo crece >2 personas, auditoría
176
+ externa, o licencia GHAS adquirida". Entry en `.planning/DEUDA-TECNICA.md`
177
+ con plan de cierre (eliminar `continue-on-error` cuando GHAS activo).
178
+
179
+ - **Hallazgo C — DT-HISTORIAL-ENV**: detectado que commit `203a603` en
180
+ historial git contenía `ADMIN_PASSWORD=Admin2026!` (ya rotado, ya en
181
+ `.gitignore`, pero presente en `git log -p`). Fix requiere `git
182
+ filter-branch` o `git filter-repo` (destructivo, irreversible para
183
+ colaboradores con clones locales). El agente escaló al usuario; usuario
184
+ respondió "estamos en desarrollo y etapa de pruebas" → degradado a DT
185
+ formal con trigger "antes del primer deploy productivo, repo público
186
+ o colaborador externo".
187
+
188
+ Los tres hallazgos quedaron visibles, etiquetados y con trigger observable.
189
+ Ninguno se mezcló silenciosamente con el trabajo principal del pipeline.
190
+
191
+ ### Anti-patrones específicos del patrón A/B/C
192
+
193
+ - **"Lo arreglo de paso porque ya estoy aquí"**: si el fix tiene blast
194
+ radius alto, NO va de paso. Va etiquetado o no va.
195
+ - **DT sin trigger verificable**: "cuando sea posible", "más adelante",
196
+ "cuando tengamos tiempo" — viola la regla general. Trigger debe
197
+ ser condición observable.
198
+ - **Reportar Hallazgo C como informativo sin pedir decisión**: si la
199
+ decisión requiere autorización del usuario, la respuesta NO es
200
+ "documentado para tu consideración" — es "elige A, B o C".
201
+ - **Aplicar Hallazgo A descubriendo en medio que era Hallazgo C**: si al
202
+ empezar el fix detectas que tiene blast radius mayor del estimado,
203
+ detente, revierte el WIP, y re-clasifica. NO terminar "porque ya
204
+ empezamos".
205
+
206
+ ---
207
+
208
+ ## Excepciones legítimas
209
+
210
+ NO aplicar la regla al pie de la letra cuando:
211
+
212
+ 1. **El fix es ambiguo** — varias opciones razonables sin criterio claro para
213
+ elegir. Presentar opciones concretas con la recomendación y esperar
214
+ decisión rápida.
215
+ 2. **El fix es destructivo** — `rm -rf`, `git reset --hard`, `git push --force`,
216
+ eliminar tablas de BD. Esos siguen requiriendo confirmación explícita por
217
+ separado, sin importar que el problema esté detectado.
218
+ 3. **El fix tiene blast radius alto** — modifica configuración de CI, infra
219
+ compartida, contratos públicos de API. Presentar plan, pedir confirmación.
220
+ 4. **El bug requiere decisión de producto** — comportamiento esperado ambiguo,
221
+ breaking change. Explícito al usuario y esperar.
222
+
223
+ En todos los casos: presentar la opción y la recomendación, NO dejar el
224
+ problema sin reportar.
225
+
226
+ ---
227
+
228
+ ## Anti-patrones explícitos
229
+
230
+ - "Lo dejo como deuda residual" — sin DT/DA formal con criterio de disparo.
231
+ - "Esos tests ya estaban rotos antes" — usado para evitar arreglarlos.
232
+ - "No es parte del scope inmediato" — para esquivar un fix obvio.
233
+ - "Lo documento y tú decides" — para diferir trabajo claro al usuario.
234
+ - "Mediano plazo" sin trigger verificable.
235
+ - Excluir tests del glob, comentar checks, `|| true`, downgradear severidad de
236
+ un linter — para que el CI deje de fallar sin arreglar la causa.
237
+ - Mover archivos a `legacy/` o `deprecated/` sin plan de eliminación con
238
+ criterio de disparo.
239
+
240
+ ---
241
+
242
+ ## Relación con otras reglas
243
+
244
+ - `seguridad-agentes.md` — sección "Anti-fallback silencioso y anti-degradación"
245
+ cubre el mismo principio aplicado a agentes autónomos. Esta regla lo extiende
246
+ al trabajo del usuario.
247
+ - `git-workflow.md` — los commits siguen siendo atómicos; arreglar un problema
248
+ detectado puede requerir varios commits, no uno solo gigante.
249
+ - `pruebas.md` — los tests rotos son violaciones a esta regla. No se mergea
250
+ con tests rotos (excepción: tests rotos por decisión de producto en proceso).
251
+
252
+ ---
253
+
254
+ ## Origen de esta regla
255
+
256
+ Consolidada el 2026-05-04 a partir de cuatro feedbacks repetidos del usuario en
257
+ memorias nativas de Claude Code de los proyectos sigm, swl-ses y emaia
258
+ (2026-04-23 a 2026-05-03). Antes vivía duplicada en 4 archivos de feedback
259
+ distintos en 2 de los 3 proyectos. Promovida a regla global para eliminar
260
+ duplicación y aplicar uniformemente a todo proyecto del usuario.
261
+
262
+ Memoria nativa local correspondiente: redundante tras esta regla; mantener solo
263
+ una mención mínima en MEMORY.md de cada proyecto si se desea preservar el rastro
264
+ histórico, pero el contenido operativo vive aquí.
@@ -0,0 +1,152 @@
1
+ # Debatir antes de aceptar — extendido
2
+
3
+ > Extendido de `reglas/debatir-antes-de-aceptar.md` (Fase D, dieta de contexto).
4
+ > El núcleo instalado es la norma; aquí viven el protocolo desarrollado, los
5
+ > anti-patrones completos, el ejemplo positivo del VBO y el caso de origen.
6
+
7
+ ## Índice
8
+
9
+ - [Cuándo aplicar](#cuándo-aplicar)
10
+ - [Cómo aplicar](#cómo-aplicar)
11
+ - [Excepciones legítimas](#excepciones-legítimas)
12
+ - [Anti-patrones explícitos](#anti-patrones-explícitos)
13
+ - [Ejemplo positivo](#ejemplo-positivo)
14
+ - [Origen de esta regla](#origen-de-esta-regla)
15
+
16
+ ---
17
+
18
+ ## Cuándo aplicar
19
+
20
+ Cuando la decisión del usuario:
21
+
22
+ - Contradice una regla global de `~/.claude/rules/*.md` (especialmente
23
+ `seguridad-agentes.md`, `arquitectura.md`, `gobernanza.md`, `seguridad.md`).
24
+ - Contradice una regla de `CLAUDE.md` del proyecto o un ADR vigente.
25
+ - Rompe una invariante del dominio (integridad referencial, auditoría
26
+ inmutable, trazabilidad regulatoria, separación de responsabilidades).
27
+ - Introduce una "puerta trasera" para un rol privilegiado que erosiona una
28
+ garantía formal del sistema (ej: ADMIN bypassa una invariante de
29
+ integridad — distinto de bypassar una restricción jerárquica).
30
+
31
+ ---
32
+
33
+ ## Cómo aplicar
34
+
35
+ ### Paso 1 — Contrastar la decisión con las reglas
36
+
37
+ Antes de implementar, ejecuta mentalmente este check:
38
+
39
+ - ¿Existe una regla en `~/.claude/rules/` que aplique?
40
+ - ¿El proyecto tiene `CLAUDE.md` o ADRs que cubran este territorio?
41
+ - ¿La decisión rompe una invariante visible del dominio (audit trail,
42
+ consistencia de estados, integridad referencial)?
43
+ - ¿Hay un ejemplo histórico en el proyecto donde una decisión similar
44
+ causó un incidente?
45
+
46
+ ### Paso 2 — Si hay choque: responder con tres bloques
47
+
48
+ NO implementes en silencio. Responde explícitamente con:
49
+
50
+ 1. **Por qué la decisión es problemática**: cita la regla concreta o la
51
+ invariante violada. Evita generalidades — referencia el archivo y la
52
+ sección.
53
+
54
+ 2. **Cuál es el riesgo real**: descríbelo de forma observable, no abstracta.
55
+ Mal: "puede causar problemas de integridad". Bien: "el chip 'Aprobado por
56
+ X' seguirá visible cuando el contenido haya cambiado, y un auditor
57
+ externo no tendrá forma de saber que se editó después — eso vulnera la
58
+ trazabilidad regulatoria del OIC".
59
+
60
+ 3. **Alternativa concreta** que satisfaga la intención del usuario sin
61
+ romper la regla. Idealmente con costo acotado en pasos.
62
+
63
+ ### Paso 3 — Esperar confirmación informada
64
+
65
+ Tras presentar el análisis, espera. Si el usuario insiste tras conocer el
66
+ costo, implementa — pero ahí queda registrado que es decisión informada,
67
+ no inercia.
68
+
69
+ Si el usuario contradice tu análisis con argumentos válidos (la regla no
70
+ aplica al caso, el riesgo no existe en este contexto), corrige y procede.
71
+ La regla es debatir, no obstinarse.
72
+
73
+ ---
74
+
75
+ ## Excepciones legítimas
76
+
77
+ NO aplicar cuando:
78
+
79
+ 1. **Decisiones de preferencia personal sin impacto técnico**: color,
80
+ naming, estilo de prosa, formato de mensajes. Esas se obedecen sin
81
+ debate.
82
+ 2. **Decisiones donde el usuario ya consideró la regla y la sobrescribió
83
+ intencionalmente** en una sesión previa, en `discutir-fase`, o en un
84
+ ADR documentado.
85
+ 3. **El usuario pide explícitamente "no debates, ejecuta"** para una
86
+ tarea acotada y reversible. Respeta la instrucción explícita; NO
87
+ añadas debate por reflejo.
88
+ 4. **Fix urgente de producción** con incidente activo y blast radius
89
+ acotado. Aplica el fix; el debate puede esperar al post-mortem.
90
+
91
+ ---
92
+
93
+ ## Anti-patrones explícitos
94
+
95
+ - **Aceptar por reflejo**: responder "listo, implemento" a una decisión
96
+ que viola una regla, y solo detectar el problema cuando el usuario pide
97
+ análisis crítico explícito.
98
+ - **Endulzar el análisis**: presentar la objeción como tradeoff opcional
99
+ cuando la regla es absoluta. "Aunque hay tradeoffs, tu enfoque es
100
+ válido si…" cuando en realidad la decisión rompe una invariante del
101
+ sistema.
102
+ - **Soluciones intermedias que vacían la regla**: ofrecer "agregar un
103
+ log warning" cuando el problema real es romper una invariante. Eso es
104
+ fallback silencioso disfrazado — la solución correcta es no romper la
105
+ invariante, no agregar un log invisible al usuario.
106
+ - **Confundir conveniencia con jerarquía**: que el usuario sea el dueño
107
+ del proyecto no significa que toda preferencia suya esté libre de costo
108
+ técnico. El rol del agente es señalar el costo; el del usuario es
109
+ decidir si lo asume.
110
+ - **Implementar primero, debatir después**: si la decisión genera daño
111
+ acumulable (commits que rompen invariantes), revertir es más caro que
112
+ haber debatido al inicio.
113
+
114
+ ---
115
+
116
+ ## Ejemplo positivo
117
+
118
+ > Usuario: "Implementa que ADMIN pueda editar el contenido de un papel
119
+ > de trabajo bajo VBO aprobado, sin tener que revocar primero."
120
+ >
121
+ > Respuesta correcta:
122
+ >
123
+ > Análisis: la regla `seguridad-agentes.md § Anti-fallback silencioso`
124
+ > establece que ningún cambio de garantía puede suceder sin alerta
125
+ > visible al usuario. Permitir esa edición rompe la integridad
126
+ > semántica del VBO: el chip "Aprobado por Juan Pérez — fecha" seguirá
127
+ > visible aunque el contenido cambie, y el auditor externo no podrá
128
+ > distinguir el contenido aprobado del editado después. En un OIC
129
+ > regulado por LGIPE eso compromete la trazabilidad legal.
130
+ >
131
+ > Riesgo observable: cualquier auditoría posterior verá el VBO aprobado
132
+ > y asumirá que ese contenido fue revisado. Si el contenido cambió por
133
+ > override administrativo, la auditoría está mintiendo.
134
+ >
135
+ > Alternativa: el flujo correcto ya existe y no es burocrático. ADMIN
136
+ > puede revocar el VBO desde el panel (1 click, deja registro inmutable
137
+ > en `vbo_historial` con motivo obligatorio), editar, y re-aprobar. Tres
138
+ > acciones, todas trazables. ¿Procedo con este flujo?
139
+
140
+ ---
141
+
142
+ ## Origen de esta regla
143
+
144
+ Sesión 2026-05-08, proyecto SIGAF. Ante la petición de implementar
145
+ "ADMIN puede editar título/contenido de papel de trabajo bajo estatus
146
+ REVISADO sin revocar el VBO primero", el agente aceptó sin debate
147
+ inicial. La implementación rompió la integridad semántica del Visto
148
+ Bueno (VBO aprobado contra contenido que ya no existe) y fue revertida
149
+ en commit `6aaf05c` tras análisis crítico explícito pedido por el
150
+ usuario. Memoria nativa registrada en
151
+ `feedback_no_dar_razon_automatica.md`; promovida a regla global porque
152
+ el patrón se repetiría en cualquier proyecto del usuario.
@@ -0,0 +1,259 @@
1
+ # Git Workflow — extendido
2
+
3
+ > Extendido de `reglas/git-workflow.md` (Fase D, dieta de contexto). El núcleo
4
+ > instalado es la norma; aquí viven templates, ejemplos, el flujo completo y
5
+ > las reglas operativas desarrolladas.
6
+
7
+ ## Índice
8
+
9
+ - [Commits atómicos — 1 cambio lógico = 1 commit](#commits-atómicos--1-cambio-lógico--1-commit)
10
+ - [Mensajes de commit — formato imperativo, <72 chars](#mensajes-de-commit--formato-imperativo-72-chars)
11
+ - [Branches descriptivas](#branches-descriptivas)
12
+ - [No force-push a main / develop](#no-force-push-a-main--develop)
13
+ - [PRs — descripción y test plan obligatorios](#prs--descripción-y-test-plan-obligatorios)
14
+ - [Squash antes de merge](#squash-antes-de-merge)
15
+ - [Flujo completo de trabajo](#flujo-completo-de-trabajo)
16
+ - [Reglas de emergencia (hotfixes)](#reglas-de-emergencia-hotfixes)
17
+ - [Sincronización de versiones antes de release](#sincronización-de-versiones-antes-de-release)
18
+ - [Reglas de oro CI/CD (cuando se adopta swl-configurar-ci)](#reglas-de-oro-cicd-cuando-se-adopta-swl-configurar-ci)
19
+ - [Checklist antes de abrir un PR](#checklist-antes-de-abrir-un-pr)
20
+
21
+ ---
22
+
23
+ ## Commits atómicos — 1 cambio lógico = 1 commit
24
+
25
+ - Un commit contiene exactamente un cambio lógico autocontenido.
26
+ Se puede entender, revertir y aplicar de forma independiente.
27
+ - Un commit NO mezcla: refactor + nueva feature, bugfix + limpieza de código,
28
+ cambio de deps + lógica de negocio.
29
+ - Si al escribir el mensaje de commit se necesita usar "y" o "también":
30
+ es señal de que son dos commits.
31
+ - Commits de trabajo en progreso (`WIP`, `temp`, `fix typo`) están permitidos
32
+ en ramas de feature, pero se squashean antes del merge.
33
+ - Commits con solo cambios de formato/whitespace: nunca mezclar con cambios
34
+ de lógica. Hacer un commit dedicado de formateo si es necesario.
35
+ - Tamaño razonable: si un PR tiene un solo commit con 50 archivos modificados,
36
+ el commit no es atómico — dividir en pasos lógicos.
37
+
38
+ ---
39
+
40
+ ## Mensajes de commit — formato imperativo, <72 chars
41
+
42
+ Formato estándar:
43
+ ```
44
+ <tipo>(<scope>): <descripción en imperativo>
45
+
46
+ [cuerpo opcional — explicar POR QUÉ, no qué hace el diff]
47
+
48
+ [footer opcional — refs a tickets, breaking changes]
49
+ ```
50
+
51
+ Tipos permitidos:
52
+ - `feat`: nueva funcionalidad
53
+ - `fix`: corrección de bug
54
+ - `refactor`: cambio que no agrega funcionalidad ni corrige bug
55
+ - `test`: agregar o corregir tests
56
+ - `docs`: cambios en documentación
57
+ - `chore`: actualización de deps, configuración, tooling
58
+ - `perf`: mejora de rendimiento
59
+ - `style`: cambios de formato (espacios, punto y coma, etc.)
60
+ - `ci`: cambios en pipelines de CI/CD
61
+
62
+ Reglas del mensaje:
63
+ - Primera línea: imperativo, presente, sin punto al final, <72 caracteres.
64
+ - Mal: `Se agregó validación al formulario.`
65
+ - Mal: `Agrega validación al formulario de registro de usuario con múltiples campos`
66
+ - Bien: `feat(auth): agregar validación de formato de email en registro`
67
+ - El cuerpo explica el contexto y la razón del cambio, no repite el diff.
68
+ - Referenciar tickets: `Closes #123`, `Refs #456` en el footer.
69
+ - Breaking changes: `BREAKING CHANGE: descripción` en el footer.
70
+
71
+ ---
72
+
73
+ ## Branches descriptivas
74
+
75
+ Formato: `<tipo>/<descripcion-en-kebab-case>`
76
+
77
+ Tipos de branch:
78
+ - `feat/` — nueva feature
79
+ - `fix/` — corrección de bug
80
+ - `refactor/` — refactoring sin cambio funcional
81
+ - `hotfix/` — corrección urgente de producción
82
+ - `chore/` — mantenimiento, actualizaciones de deps
83
+ - `docs/` — solo documentación
84
+
85
+ Ejemplos:
86
+ - `feat/modulo-facturacion-electronica`
87
+ - `fix/error-calculo-impuesto-ieps`
88
+ - `hotfix/sql-injection-endpoint-productos`
89
+ - `refactor/migrar-callbacks-a-promises`
90
+
91
+ Reglas:
92
+ - Nombre describe el trabajo, no la persona ni el ticket.
93
+ - Mal: `branch-juan`, `feat-123`, `nueva-rama`
94
+ - Bien: `feat/exportacion-reporte-pdf`
95
+ - Vida corta: las ramas de feature no duran más de 2 semanas sin mergearse.
96
+ Ramas largas generan conflictos masivos.
97
+ - Eliminar la rama después del merge al branch base.
98
+
99
+ ---
100
+
101
+ ## No force-push a main / develop
102
+
103
+ - `git push --force` y `git push --force-with-lease` están prohibidos en
104
+ `main`, `master` y `develop`.
105
+ - Estas ramas deben tener protección de branch habilitada en el repositorio.
106
+ - Si se requiere reescribir historial de main: escalar a decisión del equipo,
107
+ con plan de comunicación y ventana de mantenimiento.
108
+ - En ramas de feature propias: `--force-with-lease` está permitido para rebase
109
+ interactivo antes del PR, con precaución.
110
+ - Rebase en ramas compartidas (más de un colaborador): siempre coordinar antes.
111
+
112
+ ---
113
+
114
+ ## PRs — descripción y test plan obligatorios
115
+
116
+ Todo Pull Request debe incluir:
117
+
118
+ **Título**: sigue el mismo formato que el mensaje de commit.
119
+
120
+ **Descripción mínima**:
121
+ ```markdown
122
+ ## Resumen
123
+ - Qué cambió y por qué (1-3 bullets)
124
+
125
+ ## Cambios principales
126
+ - Lista de los cambios técnicos relevantes
127
+
128
+ ## Test plan
129
+ - [ ] Paso 1 para verificar manualmente
130
+ - [ ] Paso 2 para verificar el caso edge
131
+ - [ ] Caso de error verificado
132
+
133
+ ## Screenshots (si hay cambios de UI)
134
+
135
+ ## Notas para el reviewer
136
+ - Contexto adicional, decisiones tomadas, alternativas descartadas
137
+ ```
138
+
139
+ Reglas adicionales:
140
+ - PRs de más de 500 líneas cambiadas: justificar o dividir en PRs menores.
141
+ - Asignar reviewer antes de solicitar revisión.
142
+ - No mergear el propio PR sin revisión (excepto hotfixes urgentes documentados).
143
+ - Resolver todos los comentarios antes de mergear (o marcar como `wontfix` con justificación).
144
+
145
+ ---
146
+
147
+ ## Squash antes de merge
148
+
149
+ - Commits WIP, de typos y de fix de review se squashean antes del merge.
150
+ - El historial de main muestra solo commits semánticos y atómicos.
151
+ - Estrategia recomendada: `Squash and merge` desde la UI de GitHub/GitLab,
152
+ o `rebase interactivo` antes del merge.
153
+ - El mensaje del squash debe ser descriptivo del cambio completo, no solo
154
+ el primer mensaje de la rama.
155
+ - Ramas con múltiples commits lógicos independientes: usar `rebase` en lugar
156
+ de `squash` para preservar la granularidad.
157
+
158
+ ---
159
+
160
+ ## Flujo completo de trabajo
161
+
162
+ ```
163
+ main ─────────────────────────────────────────► main
164
+ │ ▲
165
+ └─ feat/nombre ──[commits]──[squash]─┘
166
+
167
+ └─ [PR] ──[review] ──[CI pass] ──[merge]
168
+ ```
169
+
170
+ 1. Crear branch desde `main` (o `develop` si existe).
171
+ 2. Hacer commits atómicos en la branch.
172
+ 3. Mantener la branch actualizada con `git rebase main` (no merge).
173
+ 4. Abrir PR con descripción completa.
174
+ 5. Pasar CI (linter, tests, type-check).
175
+ 6. Obtener aprobación de al menos 1 reviewer.
176
+ 7. Squash y merge.
177
+ 8. Eliminar la branch.
178
+
179
+ ---
180
+
181
+ ## Reglas de emergencia (hotfixes)
182
+
183
+ - Un hotfix de producción puede saltarse el proceso completo de review si hay
184
+ indisponibilidad activa, con las siguientes condiciones:
185
+ - Notificar al equipo en el canal de incidencias antes de mergear.
186
+ - El fix más pequeño posible — solo lo que resuelve el incidente.
187
+ - PR de follow-up con tests dentro de 24 horas.
188
+ - Post-mortem si el incidente duró más de 30 minutos.
189
+
190
+ ---
191
+
192
+ ## Sincronización de versiones antes de release
193
+
194
+ Cuando se modifican componentes del sistema SWL (agentes, skills, reglas, hooks,
195
+ comandos, schemas o manifiestos), la versión debe actualizarse en TODOS los
196
+ archivos que la declaran antes de hacer commit y publicar:
197
+
198
+ | Archivo | Campo | Ejemplo |
199
+ |---------|-------|---------|
200
+ | `package.json` | `"version"` | `"5.0.3"` |
201
+ | `plugin.json` | `"version"` | `"5.0.3"` |
202
+ | `SALUD.md` | `Versión del sistema` | `5.0.3` (todas las ocurrencias) |
203
+ | `.claude/.swl-install-state.json` | `"versionSistema"` | `"5.0.3"` (local, gitignored) |
204
+
205
+ El tipo de bump sigue SemVer:
206
+ - **PATCH** (5.0.X): correcciones de bugs, mejoras de redacción, ajustes de patrones
207
+ - **MINOR** (5.X.0): agente nuevo, skill nuevo, comando nuevo, regla nueva
208
+ - **MAJOR** (X.0.0): cambio breaking en schemas, reglas obligatorias nuevas, restructuración
209
+
210
+ Verificación rápida de consistencia:
211
+ ```bash
212
+ node -e "const p=require('./package.json'),l=require('./plugin.json');console.log(p.version===l.version?'OK: '+p.version:'INCONSISTENTE: pkg='+p.version+' plugin='+l.version)"
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Reglas de oro CI/CD (cuando se adopta swl-configurar-ci)
218
+
219
+ Cuando un proyecto activa el flujo CI/CD distribuido por swl-ses (vía
220
+ `/swl:configurar-ci init`), aplican las siguientes reglas:
221
+
222
+ - **Toda feature entra vía Pull Request a main**. Nunca se hace push directo
223
+ a main — incluso para hotfixes urgentes (excepción documentada explícita).
224
+ - **Branch protection en main es obligatorio**: aplicar via
225
+ `node scripts/configurar-branch-protection.js` o vía GitHub Settings →
226
+ Branches.
227
+ - **Todo PR ejecuta automáticamente**: lint, validaciones de aislamiento,
228
+ tests, security review con Claude. Si algo falla, el merge queda bloqueado.
229
+ - **main siempre lista para producción**. Cualquier commit en main debe
230
+ pasar el gate de CI antes de mergearse.
231
+ - **Secrets en GitHub Secrets, nunca en código ni en .env del repo**: la
232
+ `CLAUDE_API_KEY` requerida por el security workflow vive en
233
+ Settings → Secrets and variables → Actions.
234
+ - **Permisos mínimos en workflows**: `permissions:` declara solo lo
235
+ estrictamente necesario (`contents: read`, `pull-requests: write`).
236
+ Nunca `permissions: write-all`.
237
+ - **Workflows desde fork PRs no reciben secrets**: la security review
238
+ con Claude no puede correr en PRs desde forks externos sin configuración
239
+ adicional. Esta limitación es de GitHub por diseño — documentarla en el
240
+ proyecto.
241
+
242
+ Estas reglas aplican solo cuando swl-configurar-ci está activo. Proyectos
243
+ sin CI/CD pueden mantener flujos directos a main bajo responsabilidad
244
+ del owner.
245
+
246
+ ---
247
+
248
+ ## Checklist antes de abrir un PR
249
+
250
+ - [ ] Commits son atómicos y tienen mensajes descriptivos
251
+ - [ ] Branch actualizada con `rebase` desde main (sin conflictos)
252
+ - [ ] Tests pasan localmente
253
+ - [ ] Linter y type-checker pasan
254
+ - [ ] PR tiene descripción, cambios principales y test plan
255
+ - [ ] No se fuerza push a main
256
+ - [ ] Commits WIP squasheados
257
+ - [ ] Si se modificaron componentes del sistema (agentes, skills, reglas, hooks):
258
+ versión actualizada en package.json, plugin.json y SALUD.md
259
+ - [ ] Si el proyecto usa `swl-configurar-ci`, este PR pasa todos los gates de CI