@saulwade/swl-ses 2.2.4 → 2.3.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 (325) hide show
  1. package/CLAUDE.md +48 -7
  2. package/README.md +3 -3
  3. package/agentes/accesibilidad-wcag-swl.md +690 -690
  4. package/agentes/arquitecto-swl.md +267 -267
  5. package/agentes/auto-evolucion-swl.md +908 -908
  6. package/agentes/backend-api-swl.md +472 -472
  7. package/agentes/backend-csharp-swl.md +420 -420
  8. package/agentes/backend-go-swl.md +390 -390
  9. package/agentes/backend-java-swl.md +281 -281
  10. package/agentes/backend-node-swl.md +479 -479
  11. package/agentes/backend-python-swl.md +605 -605
  12. package/agentes/backend-rust-swl.md +364 -364
  13. package/agentes/backend-workers-swl.md +482 -482
  14. package/agentes/cloud-infra-swl.md +509 -509
  15. package/agentes/consolidador-swl.md +541 -541
  16. package/agentes/datos-swl.md +605 -605
  17. package/agentes/depurador-swl.md +352 -352
  18. package/agentes/devops-ci-swl.md +400 -400
  19. package/agentes/disenador-ui-swl.md +569 -569
  20. package/agentes/documentador-swl.md +345 -345
  21. package/agentes/frontend-angular-swl.md +621 -621
  22. package/agentes/frontend-css-swl.md +716 -716
  23. package/agentes/frontend-react-swl.md +692 -692
  24. package/agentes/frontend-swl.md +496 -496
  25. package/agentes/frontend-tailwind-swl.md +826 -826
  26. package/agentes/gh-fix-ci-swl.md +2 -2
  27. package/agentes/implementador-swl.md +328 -328
  28. package/agentes/investigador-swl.md +432 -432
  29. package/agentes/investigador-ux-swl.md +505 -505
  30. package/agentes/llm-apps-swl.md +278 -278
  31. package/agentes/migrador-swl.md +442 -442
  32. package/agentes/mobile-android-swl.md +511 -511
  33. package/agentes/mobile-cross-swl.md +541 -541
  34. package/agentes/mobile-ios-swl.md +502 -502
  35. package/agentes/mobile-testing-swl.md +302 -302
  36. package/agentes/nemesis-auditor-swl.md +285 -285
  37. package/agentes/notificador-swl.md +918 -918
  38. package/agentes/observabilidad-swl.md +438 -438
  39. package/agentes/orquestador-swl.md +1026 -1026
  40. package/agentes/pagos-swl.md +310 -310
  41. package/agentes/perfilador-usuario-swl.md +321 -321
  42. package/agentes/planificador-swl.md +399 -399
  43. package/agentes/producto-prd-swl.md +589 -589
  44. package/agentes/red-team-swl.md +1 -1
  45. package/agentes/release-manager-swl.md +590 -590
  46. package/agentes/rendimiento-swl.md +713 -713
  47. package/agentes/resolutor-build-swl.md +245 -245
  48. package/agentes/revisor-angular-swl.md +278 -278
  49. package/agentes/revisor-codigo-swl.md +505 -505
  50. package/agentes/revisor-csharp-swl.md +264 -264
  51. package/agentes/revisor-go-swl.md +259 -259
  52. package/agentes/revisor-java-swl.md +257 -257
  53. package/agentes/revisor-kotlin-swl.md +273 -273
  54. package/agentes/revisor-nextjs-swl.md +281 -281
  55. package/agentes/revisor-php-swl.md +271 -271
  56. package/agentes/revisor-react-swl.md +278 -278
  57. package/agentes/revisor-rust-swl.md +346 -346
  58. package/agentes/revisor-seguridad-swl.md +399 -399
  59. package/agentes/revisor-swift-swl.md +268 -268
  60. package/agentes/revisor-typescript-swl.md +346 -346
  61. package/agentes/sre-swl.md +291 -291
  62. package/agentes/tdd-qa-swl.md +393 -393
  63. package/comandos/swl/aprobar-plan.md +146 -141
  64. package/comandos/swl/briefing.md +119 -119
  65. package/comandos/swl/contribuir.md +233 -233
  66. package/comandos/swl/predecir.md +139 -139
  67. package/comandos/swl/release.md +30 -8
  68. package/comandos/swl/sesiones.md +1 -1
  69. package/comandos/swl/status.md +343 -333
  70. package/gateway/agent-executor.js +1 -1
  71. package/gateway/lib/event-channel.js +191 -191
  72. package/habilidades/agent-deep-links/SKILL.md +148 -148
  73. package/habilidades/agentes-como-servicio/SKILL.md +2 -2
  74. package/habilidades/angular-moderno/SKILL.md +20 -1
  75. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  76. package/habilidades/backend-async-postgres-testing/SKILL.md +215 -215
  77. package/habilidades/backend-error-design/SKILL.md +221 -221
  78. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  79. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  80. package/habilidades/calidad-anti-patrones-universales/SKILL.md +368 -368
  81. package/habilidades/calidad-contract-testing/SKILL.md +165 -165
  82. package/habilidades/calidad-mutation-testing/SKILL.md +170 -170
  83. package/habilidades/changelog-generator/scripts/parse-commits.js +367 -367
  84. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
  85. package/habilidades/contenedores-docker/SKILL.md +3 -1
  86. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  87. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  88. package/habilidades/drift-detection/SKILL.md +179 -179
  89. package/habilidades/ejecutar-fase/SKILL.md +564 -541
  90. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  91. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +1 -1
  92. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
  93. package/habilidades/eval-framework/SKILL.md +212 -212
  94. package/habilidades/extractor-de-aprendizajes/SKILL.md +3 -3
  95. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  96. package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +252 -252
  97. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  98. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  99. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  100. package/habilidades/perfil-usuario/SKILL.md +200 -200
  101. package/habilidades/planear-fase/SKILL.md +15 -1
  102. package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
  103. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -255
  104. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
  105. package/habilidades/proceso-debate-adversarial/SKILL.md +191 -164
  106. package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -105
  107. package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
  108. package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -138
  109. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
  110. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
  111. package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
  112. package/habilidades/proceso-modular-split/SKILL.md +256 -256
  113. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +2 -2
  114. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  115. package/habilidades/structured-outputs/SKILL.md +2 -2
  116. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
  117. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
  118. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
  119. package/habilidades/swl-dashboard/SKILL.md +2 -2
  120. package/habilidades/tdd-workflow/SKILL.md +33 -1
  121. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
  122. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +1 -1
  123. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +1 -1
  124. package/hooks/captura-acciones-post.js +151 -0
  125. package/hooks/captura-acciones-session.js +155 -0
  126. package/hooks/ciclo-evolucion-subagente.js +26 -26
  127. package/hooks/ciclo-evolucion.js +26 -26
  128. package/hooks/claudemd-bloat-detector.js +161 -161
  129. package/hooks/claudemd-duplicacion-detector.js +170 -170
  130. package/hooks/contexto-iteracion.js +144 -144
  131. package/hooks/guardrail-modelo.js +1 -1
  132. package/hooks/lib/agent-routing.js +107 -107
  133. package/hooks/lib/auto-consolidator.js +335 -335
  134. package/hooks/lib/autonomia.js +208 -208
  135. package/hooks/lib/briefing.js +512 -474
  136. package/hooks/lib/captura-acciones.js +392 -0
  137. package/hooks/lib/ciclo-evolucion.js +47 -47
  138. package/hooks/lib/deep-links.js +185 -185
  139. package/hooks/lib/error-classifier.js +308 -308
  140. package/hooks/lib/etapa-auto-evolucion.js +701 -701
  141. package/hooks/lib/etapa-metricas.js +388 -388
  142. package/hooks/lib/etapa-perfil-usuario.js +376 -376
  143. package/hooks/lib/loop-telemetry.js +321 -321
  144. package/hooks/lib/merkle-audit.js +96 -96
  145. package/hooks/lib/model-router.js +2 -2
  146. package/hooks/lib/propose-step.js +358 -358
  147. package/hooks/lib/provenance-tracker.js +191 -191
  148. package/hooks/lib/rate-limit-tracker.js +253 -253
  149. package/hooks/lib/resource-quota.js +122 -122
  150. package/hooks/lib/retry-jitter.js +165 -165
  151. package/hooks/lib/security-net.js +201 -201
  152. package/hooks/lib/skill-auditor.js +588 -588
  153. package/hooks/lib/sync-status.js +228 -228
  154. package/hooks/lib/taint-tracker.js +107 -107
  155. package/hooks/lib/text-similarity.js +241 -241
  156. package/hooks/lib/token-estimator.js +1 -0
  157. package/hooks/lib/toon-compressor.js +245 -245
  158. package/hooks/lib/usage-model.js +1 -1
  159. package/hooks/linea-estado.js +2 -0
  160. package/hooks/registro-turnos.js +209 -209
  161. package/hooks/session-briefing.js +98 -98
  162. package/hooks/spec-gate.js +211 -211
  163. package/hooks/sugerir-regenerar-inventario.js +170 -170
  164. package/hooks/tdd-gate.js +241 -241
  165. package/hooks/telemetria-skill-routing.js +100 -100
  166. package/hooks/validar-formato-post-subagente.js +140 -140
  167. package/hooks/validar-intent-spec.js +242 -242
  168. package/hooks/validar-memoria-hook.js +218 -218
  169. package/hooks/validar-planning-paths.js +134 -134
  170. package/instintos/autonomia.yaml +27 -27
  171. package/instintos/prompt-appendices.yaml +57 -57
  172. package/llms.txt +2 -2
  173. package/manifiestos/agent-output-schemas.json +57 -57
  174. package/manifiestos/canonical-hashes.json +2291 -1637
  175. package/manifiestos/hooks-config.json +18 -0
  176. package/manifiestos/modulos.json +4 -0
  177. package/manifiestos/planning-paths.json +44 -44
  178. package/manifiestos/skills-lock.json +1282 -1282
  179. package/package.json +2 -2
  180. package/plantillas/auditor-veto-template.md +105 -105
  181. package/plantillas/github-workflows/README.md +47 -47
  182. package/plantillas/github-workflows/release-please.yml +44 -44
  183. package/plantillas/github-workflows/swl-ci.yml +107 -107
  184. package/plantillas/github-workflows/swl-security.yml +51 -51
  185. package/plugin.json +2 -2
  186. package/reglas/accesibilidad.md +10 -10
  187. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  188. package/reglas/api-diseno.md +9 -9
  189. package/reglas/arreglar-al-detectar.md +240 -240
  190. package/reglas/auditorias-documentales-estructurales.md +7 -7
  191. package/reglas/cloud-infra.md +8 -8
  192. package/reglas/consultar-vault-primero.md +195 -195
  193. package/reglas/debatir-antes-de-aceptar.md +158 -158
  194. package/reglas/fragmentos-compartidos.md +183 -183
  195. package/reglas/hooks.md +6 -6
  196. package/reglas/intent-engineering.md +218 -218
  197. package/reglas/markitdown.md +8 -8
  198. package/reglas/memoria-consolidada.md +41 -0
  199. package/reglas/monitor-ci.md +309 -309
  200. package/reglas/patrones.md +6 -6
  201. package/reglas/seguridad-agentes.md +66 -0
  202. package/reglas/sesiones-paralelas.md +180 -180
  203. package/reglas/sin-duplicacion-reglas-globales.md +182 -182
  204. package/reglas/skills-estandar.md +6 -6
  205. package/reglas/testing.md +7 -7
  206. package/reglas/tests-cleanup.md +224 -224
  207. package/reglas/usar-code-review-graph.md +155 -155
  208. package/reglas/usar-context7.md +226 -226
  209. package/reglas/verificar-citas-normativas.md +548 -548
  210. package/schemas/agent-frontmatter.schema.json +3 -3
  211. package/schemas/agent-message.schema.json +73 -73
  212. package/schemas/agent-output-implementacion.schema.json +114 -114
  213. package/schemas/agent-output-planificacion.schema.json +150 -150
  214. package/schemas/agent-output-review.schema.json +98 -98
  215. package/schemas/diary-entry.schema.json +112 -112
  216. package/schemas/hook-profiles.schema.json +54 -54
  217. package/schemas/hooks-config.schema.json +89 -89
  218. package/schemas/instinct.schema.json +161 -152
  219. package/schemas/modulos.schema.json +38 -38
  220. package/schemas/perfiles.schema.json +36 -36
  221. package/schemas/plugin.schema.json +77 -77
  222. package/schemas/skill-evals.schema.json +119 -119
  223. package/schemas/skill-frontmatter.schema.json +245 -245
  224. package/scripts/audit-tools/audit-history.js +330 -330
  225. package/scripts/audit-tools/bundle-tracker.js +290 -290
  226. package/scripts/audit-tools/canary-monitor.js +352 -352
  227. package/scripts/audit-tools/code-profiler.js +605 -605
  228. package/scripts/audit-tools/dep-doctor.js +320 -320
  229. package/scripts/audit-tools/env-validator.js +206 -206
  230. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  231. package/scripts/audit-tools/lib/output.js +23 -23
  232. package/scripts/audit-tools/migration-checker.js +392 -392
  233. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  234. package/scripts/benchmark-memoria.js +167 -167
  235. package/scripts/bootstrap-instintos.js +25 -7
  236. package/scripts/cli/aprobar-plan.js +73 -73
  237. package/scripts/cli/briefing.js +23 -23
  238. package/scripts/cli/ciclo-evolucion.js +26 -26
  239. package/scripts/cli/configurar-ci.js +40 -40
  240. package/scripts/cli/derivar-feature-list.js +25 -25
  241. package/scripts/cli/detectar-host.js +27 -27
  242. package/scripts/cli/diary-entry.js +69 -69
  243. package/scripts/cli/execution-state.js +18 -18
  244. package/scripts/cli/gateway-notify.js +41 -41
  245. package/scripts/cli/liberar-fase.js +42 -42
  246. package/scripts/cli/loop-telemetry.js +125 -125
  247. package/scripts/cli/mark-evolved.js +56 -56
  248. package/scripts/cli/metricas-dora.js +26 -26
  249. package/scripts/cli/near-duplicate.js +55 -55
  250. package/scripts/cli/notificaciones.js +123 -123
  251. package/scripts/cli/propose-step.js +29 -29
  252. package/scripts/cli/schedule-parse.js +19 -19
  253. package/scripts/cli/sugerir-modelo.js +20 -20
  254. package/scripts/cli/verificar-plan.js +36 -36
  255. package/scripts/cli/verificar-trazabilidad.js +35 -35
  256. package/scripts/configurar-branch-protection.js +418 -418
  257. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  258. package/scripts/field-report.js +199 -199
  259. package/scripts/generar-checklists-consolidados.js +273 -273
  260. package/scripts/generar-matriz-lenguajes.js +271 -271
  261. package/scripts/lib/artefactos-python.js +43 -43
  262. package/scripts/lib/auditar-invocaciones-comandos.js +104 -104
  263. package/scripts/lib/benchmark-metrics.js +160 -160
  264. package/scripts/lib/budget-enforcer.js +252 -252
  265. package/scripts/lib/ci-reader.js +193 -193
  266. package/scripts/lib/claude-sessions.js +1 -0
  267. package/scripts/lib/configurar-ci.js +380 -380
  268. package/scripts/lib/contadores-inventario.js +217 -217
  269. package/scripts/lib/detectar-host-swl.js +175 -175
  270. package/scripts/lib/detectar-stack-detallado.js +307 -307
  271. package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
  272. package/scripts/lib/detector-reglas-duplicadas.js +220 -220
  273. package/scripts/lib/diary-entry.js +234 -234
  274. package/scripts/lib/eval-metrics-store.js +218 -218
  275. package/scripts/lib/eval-quality.js +171 -171
  276. package/scripts/lib/eval-schemas.js +144 -144
  277. package/scripts/lib/eval-self-correct.js +106 -106
  278. package/scripts/lib/eval-validator.js +185 -185
  279. package/scripts/lib/evidencia-release.js +322 -322
  280. package/scripts/lib/expandir-targets.js +71 -71
  281. package/scripts/lib/gate-hooks-requires.js +249 -249
  282. package/scripts/lib/gate-licencias.js +212 -212
  283. package/scripts/lib/git-metricas.js +257 -257
  284. package/scripts/lib/gitignore-manifest.js +44 -11
  285. package/scripts/lib/jaccard-similarity.js +98 -98
  286. package/scripts/lib/longmemeval-runner.js +125 -125
  287. package/scripts/lib/metricas-dora.js +204 -204
  288. package/scripts/lib/npm-version.js +261 -261
  289. package/scripts/lib/paquetes-conocidos.js +50 -50
  290. package/scripts/lib/plan-lock.js +275 -275
  291. package/scripts/lib/pr-analyzer.js +399 -399
  292. package/scripts/lib/prompt-builder.js +264 -264
  293. package/scripts/lib/reglas-globales-conocidas.json +180 -180
  294. package/scripts/lib/resolver-plan-fase.js +37 -37
  295. package/scripts/lib/rrf-fusion.js +175 -175
  296. package/scripts/lib/schema-version.js +164 -164
  297. package/scripts/lib/scoring-instintos.js +277 -277
  298. package/scripts/lib/semantic-search.js +252 -252
  299. package/scripts/lib/skill-metrics.js +41 -1
  300. package/scripts/lib/toml-merge.js +204 -204
  301. package/scripts/lib/tool-cost-analyzer.js +1 -0
  302. package/scripts/limpiar-artefactos-python.js +131 -131
  303. package/scripts/mcp-server/auth.js +105 -105
  304. package/scripts/mcp-server/cache.js +106 -106
  305. package/scripts/migrar-csv-a-array.js +168 -168
  306. package/scripts/migrar-fase-dominio.js +200 -200
  307. package/scripts/publicar.js +497 -497
  308. package/scripts/run-eval.js +141 -141
  309. package/scripts/tui/componentes/selector-multi.js +189 -189
  310. package/scripts/tui/componentes/selector-unico.js +158 -158
  311. package/scripts/tui/ejecutores.js +375 -375
  312. package/scripts/tui/index.js +162 -162
  313. package/scripts/tui/lib/colores.js +129 -129
  314. package/scripts/tui/lib/render.js +264 -264
  315. package/scripts/tui/lib/teclas.js +113 -113
  316. package/scripts/tui/pantallas/inspect.js +173 -173
  317. package/scripts/tui/pantallas/install-wizard.js +334 -334
  318. package/scripts/tui/pantallas/menu-principal.js +52 -52
  319. package/scripts/tui/pantallas/progreso.js +274 -274
  320. package/scripts/tui/pantallas/resumen.js +132 -132
  321. package/scripts/tui/pantallas/uninstall-wizard.js +208 -208
  322. package/scripts/tui/pantallas/update-wizard.js +232 -232
  323. package/scripts/tui/pantallas/welcome.js +187 -187
  324. package/scripts/validar-userland-vacio.js +110 -110
  325. package/scripts/verificar-trazabilidad.js +329 -298
@@ -1,309 +1,309 @@
1
- ---
2
- paths:
3
- - "**/.github/workflows/**"
4
- ---
5
- # Regla: Monitor de CI tras push
6
-
7
- Esta regla es OBLIGATORIA para todo proyecto del usuario que use GitHub
8
- Actions (presencia de `.github/workflows/`). Aplica tras cada `git push` a la
9
- rama principal o a una rama con CI activo.
10
-
11
- ---
12
-
13
- ## Principio
14
-
15
- > Tras cualquier push que dispare workflows de CI, **arma un Monitor que
16
- > emita una notificación cuando cada workflow termine** (success o failure)
17
- > en lugar de pollear con `sleep` o esperar que el usuario pregunte.
18
-
19
- El Monitor de Claude Code permite reaccionar inmediatamente a fallos sin
20
- bloquear la conversación: si un workflow falla, el monitor lo emite como
21
- evento y Claude diagnostica/arregla sin esperar input. Si todo pasa, Claude
22
- puede continuar trabajando en paralelo.
23
-
24
- ---
25
-
26
- ## Cuándo armar el Monitor
27
-
28
- OBLIGATORIO armarlo:
29
-
30
- - Tras `git push` a rama con workflows activos.
31
- - Tras crear un PR con CI requerido (cuando GitHub corre los checks).
32
- - Tras `gh workflow run` manual.
33
- - Cuando el usuario pide "verifica el CI" sin más detalle.
34
-
35
- NO armarlo cuando:
36
-
37
- - El push fue a una rama sin workflows activos para esa rama.
38
- - Es un push de solo documentación que no dispara workflows (verificar el
39
- filtro `paths:` del workflow primero).
40
- - El usuario explícitamente dijo "no monitorees" o "termina aquí".
41
-
42
- ---
43
-
44
- ## Patrón estándar del comando
45
-
46
- Plantilla para la herramienta `Monitor` de Claude Code. **Usa el `--jq`
47
- integrado de `gh` (NO `| jq`)** para evitar dependencia externa — `jq` no
48
- viene preinstalado en Windows + Git Bash, y `gh --jq` funciona idéntico
49
- sin requerir instalación adicional. Tampoco usa `2>/dev/null` para que
50
- errores reales del shell (PATH, `cd` fallido) se vean en stdout y aborten
51
- el monitor en lugar de hacerlo expirar silenciosamente.
52
-
53
- ```bash
54
- prev=""
55
- while true; do
56
- cur=$(cd PROJECT_PATH && gh run list --branch BRANCH --limit N \
57
- --json status,conclusion,name,headSha \
58
- --jq '.[] | "\(.headSha[0:7]) | \(.name): \(.status)/\(.conclusion // "pending")"' \
59
- | sort)
60
- comm -13 <(echo "$prev") <(echo "$cur")
61
- prev=$cur
62
- if cd PROJECT_PATH && gh run list --branch BRANCH --limit N \
63
- --json status \
64
- --jq 'all(.[]; .status == "completed")' | grep -q true; then
65
- break
66
- fi
67
- sleep 25
68
- done
69
- ```
70
-
71
- **Variables a sustituir:**
72
-
73
- | Variable | Valor |
74
- |----------|-------|
75
- | `PROJECT_PATH` | Working directory del proyecto (ej: `D:/Python/sigm`) |
76
- | `BRANCH` | Rama del push (`main`, feature branch, etc.) |
77
- | `N` | Cantidad de workflows que dispara ese push (3 si son frontend+backend+security; 4 si incluye database; etc.) |
78
-
79
- **Argumentos típicos para `Monitor`:**
80
-
81
- ```jsonc
82
- {
83
- "description": "CI commit <hash-corto> (<contexto>) — sale cuando los N workflows finalizan",
84
- "timeout_ms": 600000, // 10 min — suficiente para la mayoría de CIs
85
- "persistent": false, // false = sale al completar todos
86
- "command": "<plantilla arriba>"
87
- }
88
- ```
89
-
90
- Para CIs largos (>10 min), subir `timeout_ms` a 1200000 (20 min) o
91
- 1800000 (30 min). Máximo soportado: 3600000 (60 min).
92
-
93
- ---
94
-
95
- ## Cómo funciona
96
-
97
- - `gh run list --branch BRANCH --limit N` devuelve los N runs más recientes
98
- de esa rama (los recién disparados por tu push aparecen en orden).
99
- - `--jq '...'` (integrado en `gh`, NO el binario `jq` externo) formatea
100
- `sha-corto | name: status/conclusion` por línea. Equivalente a `| jq`
101
- pero sin dependencia externa.
102
- - `comm -13` emite solo las líneas NUEVAS respecto a la iteración anterior
103
- (cada vez que un workflow cambia de estado, sale como notificación).
104
- - El segundo bloque verifica con `--jq 'all(.[]; .status == "completed")'`
105
- + `grep -q true` si todos los workflows terminaron — sale del loop.
106
- - El loop sale cuando todos los workflows están en estado `completed`.
107
-
108
- Cada cambio de estado genera **una notificación al chat**, así que recibes
109
- eventos como:
110
-
111
- ```
112
- ee6e03e | Frontend CI: in_progress/pending
113
- ee6e03e | Backend CI: completed/success
114
- ee6e03e | Security: completed/success
115
- ```
116
-
117
- cuando el primer workflow se mueve de `pending` a `in_progress`, otro a
118
- `success`, etc.
119
-
120
- ### Por qué `gh --jq` y no `jq` externo
121
-
122
- El comando original usaba `| jq` y expiraba silenciosamente en sistemas
123
- Windows sin `jq` instalado: el pipe a `jq` (que no existe) hacía que `$cur`
124
- quedara vacío, `comm -13` no emitía deltas y el check de "todos completed"
125
- siempre fallaba → loop dormía hasta timeout sin notificar nada. Caso real
126
- (SIGM, 2026-05-12): dos monitores consecutivos expiraron sin un solo evento;
127
- diagnóstico reveló `jq: command not found` en Git Bash de Windows.
128
-
129
- `gh --jq` está embebido en el binario de `gh` (que ya es requisito), aplica
130
- la misma sintaxis y funciona idéntico en Windows, macOS y Linux sin
131
- instalaciones adicionales. **Esta es la forma recomendada — usa el flag
132
- integrado siempre, salvo que tengas razón fuerte para depender de `jq`
133
- externo (filtros muy complejos que solo cubre el binario completo).**
134
-
135
- ---
136
-
137
- ## Acciones tras evento del Monitor
138
-
139
- 1. **Si todos terminan en `success`**: continuar con el siguiente paso del
140
- plan (commit nuevo, fase nueva, etc.). No pedir confirmación al usuario
141
- para cosas obvias.
142
- 2. **Si alguno termina en `failure`**: descargar log con
143
- `gh run view <run-id> --log-failed` y diagnosticar inmediatamente.
144
- Aplicar la regla `arreglar-al-detectar.md`: detectar → informar →
145
- arreglar en mismo turno.
146
-
147
- En proyectos con swl-ses instalado (presencia de `agentes/gh-fix-ci-swl.md`),
148
- el camino canónico para cerrar el ciclo failure → fix → re-push → green
149
- es invocar el agente **`gh-fix-ci-swl`** (HITL approval obligatorio antes
150
- de aplicar el fix; max 3 iteraciones; `maxTurnos: 12`). El agente carga
151
- el `Skill("build-errors-<lang>")` correspondiente automáticamente. Si el
152
- error es del workflow YAML mismo (secret, action, syntax), delega a
153
- `devops-ci-swl`. Si el error es local (no específico de CI), prefiere
154
- `resolutor-build-swl`. Origen: ADR-0029 (swl-ses).
155
-
156
- 3. **Si el monitor expira (`timeout_ms`)**: re-armar con timeout mayor o
157
- verificar manualmente con `gh run list`.
158
-
159
- ---
160
-
161
- ## Anti-patrones a evitar
162
-
163
- - `sleep N && gh run list` — bloquea la conversación, no recibe eventos.
164
- - Polling manual con múltiples `Bash` calls separadas.
165
- - Arrancar el siguiente trabajo sin saber si el CI pasó (riesgo de
166
- acumular commits sobre código roto).
167
- - Olvidar el monitor tras un push y que el usuario tenga que recordártelo.
168
-
169
- ---
170
-
171
- ## Antes de declarar "CI verde" — verificación obligatoria por SHA
172
-
173
- Esta sección formaliza la regla post-mortem (L-124, SIGM Sub-fase 5c, 2026-05-11):
174
- reportar al usuario "CI verde" sin verificar cada workflow individualmente es
175
- **falsificación de estado**. Un monitor expirado, un commit donde un workflow
176
- no se disparó, o asumir "verde por default" llevan a declarar saludable un
177
- sistema que está roto.
178
-
179
- ### Checklist obligatorio antes de afirmar "CI verde"
180
-
181
- 1. **Listar todos los workflows del SHA específico**:
182
- ```bash
183
- # Forma recomendada — gh --jq integrado, sin jq ni python externos:
184
- gh run list --branch main --limit 8 \
185
- --json status,conclusion,name,headSha \
186
- --jq '.[] | "\(.headSha[0:7]) | \(.name): \(.status)/\(.conclusion // "pending")"'
187
-
188
- # Fallback con Python si necesitas filtrar/agrupar por SHA en cliente:
189
- gh run list --branch main --limit 20 --json status,conclusion,name,headSha \
190
- | python -c "import sys,json; runs=json.load(sys.stdin); sha='ee6e03e'; \
191
- [print(f'{r[\"name\"]}: {r[\"status\"]}/{r.get(\"conclusion\") or \"pending\"}') \
192
- for r in runs if r['headSha'].startswith(sha)]"
193
- ```
194
-
195
- 2. **Confirmar `conclusion=success` para cada workflow aplicable**:
196
- - Cada workflow tiene `paths:` distintos en `on:`. Si el commit solo toca
197
- `frontend/`, **NO** se dispara Backend CI — eso es comportamiento correcto,
198
- no fallo. Pero un workflow que SÍ debió dispararse y NO aparece en la
199
- lista por el SHA es señal de mala configuración: investigar.
200
- - **NUNCA** asumir verde por ausencia. La ausencia significa "no se ejecutó",
201
- no "pasó".
202
-
203
- 3. **NO interpretar Monitor expirado como verde**:
204
- - El Monitor de Claude Code emite `[Monitor timed out — re-arm if needed.]`
205
- cuando el timeout vence antes de que todos los workflows finalicen.
206
- - **Timeout ≠ success**. Equivale a "estado desconocido al momento del corte".
207
- - Re-armar el Monitor con timeout mayor, O verificar manualmente con
208
- `gh run list --commit <sha>`.
209
-
210
- 4. **Si algún workflow está en `failure` o `cancelled`**:
211
- - Bajar el log con `gh run view <run-id> --log-failed` y diagnosticar.
212
- - NO declarar verde hasta que el workflow fallido tenga su propio
213
- `conclusion=success` en un commit posterior que lo arregle.
214
-
215
- 5. **Reportar al usuario el estado exacto por workflow**:
216
-
217
- ```
218
- CI verde confirmado para commit <sha-corto>:
219
- - Backend CI: success ✓
220
- - Frontend CI: success ✓
221
- - Security: success ✓
222
- - E2E Smoke: success ✓
223
- (Database CI no se disparó — el commit solo modificó frontend/, comportamiento correcto)
224
- ```
225
-
226
- NO usar afirmaciones genéricas como "todo verde" sin enumerar.
227
-
228
- ### Anti-patrones explícitos
229
-
230
- - **Reportar "CI verde" tras `git push` sin esperar finalización**: push retorna
231
- exit 0 cuando GitHub aceptó el push, NO cuando los workflows pasaron.
232
- Push exitoso ≠ CI verde.
233
-
234
- - **Reportar "CI verde" porque el Monitor anterior dijo `success`**: si el
235
- Monitor cubre commits A-B pero el último push es C, los workflows de C aún
236
- no se evaluaron. Re-armar Monitor o verificar.
237
-
238
- - **Reportar "CI verde" para un workflow NUEVO en su primer push**: un workflow
239
- nuevo (ej: `e2e.yml`) tiene alta probabilidad de fallar en el primer run
240
- porque no se validó localmente. Probar localmente Docker + servicios + tests
241
- antes de reportar verde.
242
-
243
- - **Asumir Frontend CI siempre verde porque "solo cambié docs"**: si modificas
244
- un `.md` dentro de `frontend/`, Frontend CI se dispara igual por el matcher
245
- `paths: ['frontend/**']`. Verificar.
246
-
247
- - **"CI verde formal" (0 failed) ≠ "tests ejecutaron"**. Un run con 94 passed +
248
- 5 skipped + 0 failed es verde formal pero zero cobertura de los 5 saltados.
249
- Tests con `if (!precondicion) test.skip()` aumentan silenciosamente el conteo
250
- de skipped cuando la precondición falla. Comparar el conteo `skipped` entre
251
- commits: si aumenta sin causa documentada (tests intencionalmente skipped en
252
- el spec), es **regresión silenciosa**, no éxito. Reportar al usuario con cifras:
253
- *"verde con N skipped (antes M)"*, no solo "verde". Origen: sesión SIGAF
254
- 2026-05-13, 7 commits con TC036-TC041 saltando por `actoId=null` antes de
255
- detectar el patrón.
256
-
257
- - **Fix de seed/fixture roto puede destapar tests "verde por suerte"**. Tests
258
- que dependen de datos seedeados saltan por null check cuando el seed falla;
259
- el CI los marca skipped y queda verde formal. Al arreglar el seed, los tests
260
- vuelven a ejecutar y exponen fallas latentes que estaban camufladas. **Al
261
- publicar un fix de seed/fixture, comparar el delta de skipped antes/después**
262
- y revisar cada test que pase de SKIPPED a EJECUTANDO — pueden fallar por
263
- otras razones acumuladas. Patrón observado en SIGAF 2026-05-13: fix
264
- `e6d3f63` (seed grupo20 con `hallazgo.tipo_id`) destapó TC036-TC041 que
265
- llevaban meses skipped por falta de actos en BD.
266
-
267
- ### Origen
268
-
269
- Aprendizaje L-124 documentado en SIGM (`.planning/APRENDIZAJES.md`) tras
270
- Sub-fase 5c (2026-05-11): se reportó "CI verde en cada push" en 7 commits
271
- seguidos cuando Frontend CI estaba en `failure` desde el commit 4. El usuario
272
- detectó la inconsistencia al pedir validación adicional ("no podemos avanzar
273
- de fase hasta no probar que todo esté perfecto"). El Monitor que expiró fue
274
- interpretado como verde por defecto — equivocadamente.
275
-
276
- ---
277
-
278
- ## Excepciones documentadas
279
-
280
- - **Repos sin GitHub Actions**: usar el sistema de CI nativo del repo
281
- (GitLab CI, CircleCI). Adaptar el comando.
282
- - **Workflows en forks**: los workflows desde fork PRs no reciben secrets
283
- por diseño de GitHub. El monitor sirve igual, pero algunos jobs pueden
284
- saltarse.
285
- - **Rama protegida con auto-merge**: si el repo tiene auto-merge tras CI,
286
- el monitor sale al `success` y el merge ocurre automáticamente — no es
287
- necesario push adicional.
288
-
289
- ---
290
-
291
- ## Origen de esta regla
292
-
293
- Promovida a regla global el 2026-05-09 a petición del usuario tras observar
294
- que el patrón Monitor con `gh run list` + `jq` + `comm -13` se repetía
295
- con éxito en cada push del proyecto SIGM (~10 invocaciones en sesión 2026-05-09)
296
- y que ahorraba 5-10 minutos por iteración vs polling manual.
297
-
298
- Reemplaza el patrón anterior de "esperar que el usuario reporte el log
299
- fallido y reaccionar reactivamente" por proactividad.
300
-
301
- **Revisión 2026-05-12** (SIGM): migrado de `| jq` a `gh --jq` integrado
302
- para eliminar dependencia de binario externo. Causa: dos monitores
303
- consecutivos expiraron silenciosamente en Windows + Git Bash por
304
- `jq: command not found`, sin emitir un solo evento. Lección: las
305
- herramientas del Monitor tool corren en sub-shell sin `2>&1` visible —
306
- cualquier comando faltante hace que el monitor dure hasta timeout sin
307
- señal de fallo. Diagnóstico: `which jq` antes de armar (debería
308
- devolver path, no exit 1). `gh --jq` no tiene esta dependencia porque
309
- está embebido en `gh` (ya requisito previo).
1
+ ---
2
+ paths:
3
+ - "**/.github/workflows/**"
4
+ ---
5
+ # Regla: Monitor de CI tras push
6
+
7
+ Esta regla es OBLIGATORIA para todo proyecto del usuario que use GitHub
8
+ Actions (presencia de `.github/workflows/`). Aplica tras cada `git push` a la
9
+ rama principal o a una rama con CI activo.
10
+
11
+ ---
12
+
13
+ ## Principio
14
+
15
+ > Tras cualquier push que dispare workflows de CI, **arma un Monitor que
16
+ > emita una notificación cuando cada workflow termine** (success o failure)
17
+ > en lugar de pollear con `sleep` o esperar que el usuario pregunte.
18
+
19
+ El Monitor de Claude Code permite reaccionar inmediatamente a fallos sin
20
+ bloquear la conversación: si un workflow falla, el monitor lo emite como
21
+ evento y Claude diagnostica/arregla sin esperar input. Si todo pasa, Claude
22
+ puede continuar trabajando en paralelo.
23
+
24
+ ---
25
+
26
+ ## Cuándo armar el Monitor
27
+
28
+ OBLIGATORIO armarlo:
29
+
30
+ - Tras `git push` a rama con workflows activos.
31
+ - Tras crear un PR con CI requerido (cuando GitHub corre los checks).
32
+ - Tras `gh workflow run` manual.
33
+ - Cuando el usuario pide "verifica el CI" sin más detalle.
34
+
35
+ NO armarlo cuando:
36
+
37
+ - El push fue a una rama sin workflows activos para esa rama.
38
+ - Es un push de solo documentación que no dispara workflows (verificar el
39
+ filtro `paths:` del workflow primero).
40
+ - El usuario explícitamente dijo "no monitorees" o "termina aquí".
41
+
42
+ ---
43
+
44
+ ## Patrón estándar del comando
45
+
46
+ Plantilla para la herramienta `Monitor` de Claude Code. **Usa el `--jq`
47
+ integrado de `gh` (NO `| jq`)** para evitar dependencia externa — `jq` no
48
+ viene preinstalado en Windows + Git Bash, y `gh --jq` funciona idéntico
49
+ sin requerir instalación adicional. Tampoco usa `2>/dev/null` para que
50
+ errores reales del shell (PATH, `cd` fallido) se vean en stdout y aborten
51
+ el monitor en lugar de hacerlo expirar silenciosamente.
52
+
53
+ ```bash
54
+ prev=""
55
+ while true; do
56
+ cur=$(cd PROJECT_PATH && gh run list --branch BRANCH --limit N \
57
+ --json status,conclusion,name,headSha \
58
+ --jq '.[] | "\(.headSha[0:7]) | \(.name): \(.status)/\(.conclusion // "pending")"' \
59
+ | sort)
60
+ comm -13 <(echo "$prev") <(echo "$cur")
61
+ prev=$cur
62
+ if cd PROJECT_PATH && gh run list --branch BRANCH --limit N \
63
+ --json status \
64
+ --jq 'all(.[]; .status == "completed")' | grep -q true; then
65
+ break
66
+ fi
67
+ sleep 25
68
+ done
69
+ ```
70
+
71
+ **Variables a sustituir:**
72
+
73
+ | Variable | Valor |
74
+ |----------|-------|
75
+ | `PROJECT_PATH` | Working directory del proyecto (ej: `D:/Python/sigm`) |
76
+ | `BRANCH` | Rama del push (`main`, feature branch, etc.) |
77
+ | `N` | Cantidad de workflows que dispara ese push (3 si son frontend+backend+security; 4 si incluye database; etc.) |
78
+
79
+ **Argumentos típicos para `Monitor`:**
80
+
81
+ ```jsonc
82
+ {
83
+ "description": "CI commit <hash-corto> (<contexto>) — sale cuando los N workflows finalizan",
84
+ "timeout_ms": 600000, // 10 min — suficiente para la mayoría de CIs
85
+ "persistent": false, // false = sale al completar todos
86
+ "command": "<plantilla arriba>"
87
+ }
88
+ ```
89
+
90
+ Para CIs largos (>10 min), subir `timeout_ms` a 1200000 (20 min) o
91
+ 1800000 (30 min). Máximo soportado: 3600000 (60 min).
92
+
93
+ ---
94
+
95
+ ## Cómo funciona
96
+
97
+ - `gh run list --branch BRANCH --limit N` devuelve los N runs más recientes
98
+ de esa rama (los recién disparados por tu push aparecen en orden).
99
+ - `--jq '...'` (integrado en `gh`, NO el binario `jq` externo) formatea
100
+ `sha-corto | name: status/conclusion` por línea. Equivalente a `| jq`
101
+ pero sin dependencia externa.
102
+ - `comm -13` emite solo las líneas NUEVAS respecto a la iteración anterior
103
+ (cada vez que un workflow cambia de estado, sale como notificación).
104
+ - El segundo bloque verifica con `--jq 'all(.[]; .status == "completed")'`
105
+ + `grep -q true` si todos los workflows terminaron — sale del loop.
106
+ - El loop sale cuando todos los workflows están en estado `completed`.
107
+
108
+ Cada cambio de estado genera **una notificación al chat**, así que recibes
109
+ eventos como:
110
+
111
+ ```
112
+ ee6e03e | Frontend CI: in_progress/pending
113
+ ee6e03e | Backend CI: completed/success
114
+ ee6e03e | Security: completed/success
115
+ ```
116
+
117
+ cuando el primer workflow se mueve de `pending` a `in_progress`, otro a
118
+ `success`, etc.
119
+
120
+ ### Por qué `gh --jq` y no `jq` externo
121
+
122
+ El comando original usaba `| jq` y expiraba silenciosamente en sistemas
123
+ Windows sin `jq` instalado: el pipe a `jq` (que no existe) hacía que `$cur`
124
+ quedara vacío, `comm -13` no emitía deltas y el check de "todos completed"
125
+ siempre fallaba → loop dormía hasta timeout sin notificar nada. Caso real
126
+ (SIGM, 2026-05-12): dos monitores consecutivos expiraron sin un solo evento;
127
+ diagnóstico reveló `jq: command not found` en Git Bash de Windows.
128
+
129
+ `gh --jq` está embebido en el binario de `gh` (que ya es requisito), aplica
130
+ la misma sintaxis y funciona idéntico en Windows, macOS y Linux sin
131
+ instalaciones adicionales. **Esta es la forma recomendada — usa el flag
132
+ integrado siempre, salvo que tengas razón fuerte para depender de `jq`
133
+ externo (filtros muy complejos que solo cubre el binario completo).**
134
+
135
+ ---
136
+
137
+ ## Acciones tras evento del Monitor
138
+
139
+ 1. **Si todos terminan en `success`**: continuar con el siguiente paso del
140
+ plan (commit nuevo, fase nueva, etc.). No pedir confirmación al usuario
141
+ para cosas obvias.
142
+ 2. **Si alguno termina en `failure`**: descargar log con
143
+ `gh run view <run-id> --log-failed` y diagnosticar inmediatamente.
144
+ Aplicar la regla `arreglar-al-detectar.md`: detectar → informar →
145
+ arreglar en mismo turno.
146
+
147
+ En proyectos con swl-ses instalado (presencia de `agentes/gh-fix-ci-swl.md`),
148
+ el camino canónico para cerrar el ciclo failure → fix → re-push → green
149
+ es invocar el agente **`gh-fix-ci-swl`** (HITL approval obligatorio antes
150
+ de aplicar el fix; max 3 iteraciones; `maxTurnos: 12`). El agente carga
151
+ el `Skill("build-errors-<lang>")` correspondiente automáticamente. Si el
152
+ error es del workflow YAML mismo (secret, action, syntax), delega a
153
+ `devops-ci-swl`. Si el error es local (no específico de CI), prefiere
154
+ `resolutor-build-swl`. Origen: ADR-0029 (swl-ses).
155
+
156
+ 3. **Si el monitor expira (`timeout_ms`)**: re-armar con timeout mayor o
157
+ verificar manualmente con `gh run list`.
158
+
159
+ ---
160
+
161
+ ## Anti-patrones a evitar
162
+
163
+ - `sleep N && gh run list` — bloquea la conversación, no recibe eventos.
164
+ - Polling manual con múltiples `Bash` calls separadas.
165
+ - Arrancar el siguiente trabajo sin saber si el CI pasó (riesgo de
166
+ acumular commits sobre código roto).
167
+ - Olvidar el monitor tras un push y que el usuario tenga que recordártelo.
168
+
169
+ ---
170
+
171
+ ## Antes de declarar "CI verde" — verificación obligatoria por SHA
172
+
173
+ Esta sección formaliza la regla post-mortem (L-124, SIGM Sub-fase 5c, 2026-05-11):
174
+ reportar al usuario "CI verde" sin verificar cada workflow individualmente es
175
+ **falsificación de estado**. Un monitor expirado, un commit donde un workflow
176
+ no se disparó, o asumir "verde por default" llevan a declarar saludable un
177
+ sistema que está roto.
178
+
179
+ ### Checklist obligatorio antes de afirmar "CI verde"
180
+
181
+ 1. **Listar todos los workflows del SHA específico**:
182
+ ```bash
183
+ # Forma recomendada — gh --jq integrado, sin jq ni python externos:
184
+ gh run list --branch main --limit 8 \
185
+ --json status,conclusion,name,headSha \
186
+ --jq '.[] | "\(.headSha[0:7]) | \(.name): \(.status)/\(.conclusion // "pending")"'
187
+
188
+ # Fallback con Python si necesitas filtrar/agrupar por SHA en cliente:
189
+ gh run list --branch main --limit 20 --json status,conclusion,name,headSha \
190
+ | python -c "import sys,json; runs=json.load(sys.stdin); sha='ee6e03e'; \
191
+ [print(f'{r[\"name\"]}: {r[\"status\"]}/{r.get(\"conclusion\") or \"pending\"}') \
192
+ for r in runs if r['headSha'].startswith(sha)]"
193
+ ```
194
+
195
+ 2. **Confirmar `conclusion=success` para cada workflow aplicable**:
196
+ - Cada workflow tiene `paths:` distintos en `on:`. Si el commit solo toca
197
+ `frontend/`, **NO** se dispara Backend CI — eso es comportamiento correcto,
198
+ no fallo. Pero un workflow que SÍ debió dispararse y NO aparece en la
199
+ lista por el SHA es señal de mala configuración: investigar.
200
+ - **NUNCA** asumir verde por ausencia. La ausencia significa "no se ejecutó",
201
+ no "pasó".
202
+
203
+ 3. **NO interpretar Monitor expirado como verde**:
204
+ - El Monitor de Claude Code emite `[Monitor timed out — re-arm if needed.]`
205
+ cuando el timeout vence antes de que todos los workflows finalicen.
206
+ - **Timeout ≠ success**. Equivale a "estado desconocido al momento del corte".
207
+ - Re-armar el Monitor con timeout mayor, O verificar manualmente con
208
+ `gh run list --commit <sha>`.
209
+
210
+ 4. **Si algún workflow está en `failure` o `cancelled`**:
211
+ - Bajar el log con `gh run view <run-id> --log-failed` y diagnosticar.
212
+ - NO declarar verde hasta que el workflow fallido tenga su propio
213
+ `conclusion=success` en un commit posterior que lo arregle.
214
+
215
+ 5. **Reportar al usuario el estado exacto por workflow**:
216
+
217
+ ```
218
+ CI verde confirmado para commit <sha-corto>:
219
+ - Backend CI: success ✓
220
+ - Frontend CI: success ✓
221
+ - Security: success ✓
222
+ - E2E Smoke: success ✓
223
+ (Database CI no se disparó — el commit solo modificó frontend/, comportamiento correcto)
224
+ ```
225
+
226
+ NO usar afirmaciones genéricas como "todo verde" sin enumerar.
227
+
228
+ ### Anti-patrones explícitos
229
+
230
+ - **Reportar "CI verde" tras `git push` sin esperar finalización**: push retorna
231
+ exit 0 cuando GitHub aceptó el push, NO cuando los workflows pasaron.
232
+ Push exitoso ≠ CI verde.
233
+
234
+ - **Reportar "CI verde" porque el Monitor anterior dijo `success`**: si el
235
+ Monitor cubre commits A-B pero el último push es C, los workflows de C aún
236
+ no se evaluaron. Re-armar Monitor o verificar.
237
+
238
+ - **Reportar "CI verde" para un workflow NUEVO en su primer push**: un workflow
239
+ nuevo (ej: `e2e.yml`) tiene alta probabilidad de fallar en el primer run
240
+ porque no se validó localmente. Probar localmente Docker + servicios + tests
241
+ antes de reportar verde.
242
+
243
+ - **Asumir Frontend CI siempre verde porque "solo cambié docs"**: si modificas
244
+ un `.md` dentro de `frontend/`, Frontend CI se dispara igual por el matcher
245
+ `paths: ['frontend/**']`. Verificar.
246
+
247
+ - **"CI verde formal" (0 failed) ≠ "tests ejecutaron"**. Un run con 94 passed +
248
+ 5 skipped + 0 failed es verde formal pero zero cobertura de los 5 saltados.
249
+ Tests con `if (!precondicion) test.skip()` aumentan silenciosamente el conteo
250
+ de skipped cuando la precondición falla. Comparar el conteo `skipped` entre
251
+ commits: si aumenta sin causa documentada (tests intencionalmente skipped en
252
+ el spec), es **regresión silenciosa**, no éxito. Reportar al usuario con cifras:
253
+ *"verde con N skipped (antes M)"*, no solo "verde". Origen: sesión SIGAF
254
+ 2026-05-13, 7 commits con TC036-TC041 saltando por `actoId=null` antes de
255
+ detectar el patrón.
256
+
257
+ - **Fix de seed/fixture roto puede destapar tests "verde por suerte"**. Tests
258
+ que dependen de datos seedeados saltan por null check cuando el seed falla;
259
+ el CI los marca skipped y queda verde formal. Al arreglar el seed, los tests
260
+ vuelven a ejecutar y exponen fallas latentes que estaban camufladas. **Al
261
+ publicar un fix de seed/fixture, comparar el delta de skipped antes/después**
262
+ y revisar cada test que pase de SKIPPED a EJECUTANDO — pueden fallar por
263
+ otras razones acumuladas. Patrón observado en SIGAF 2026-05-13: fix
264
+ `e6d3f63` (seed grupo20 con `hallazgo.tipo_id`) destapó TC036-TC041 que
265
+ llevaban meses skipped por falta de actos en BD.
266
+
267
+ ### Origen
268
+
269
+ Aprendizaje L-124 documentado en SIGM (`.planning/APRENDIZAJES.md`) tras
270
+ Sub-fase 5c (2026-05-11): se reportó "CI verde en cada push" en 7 commits
271
+ seguidos cuando Frontend CI estaba en `failure` desde el commit 4. El usuario
272
+ detectó la inconsistencia al pedir validación adicional ("no podemos avanzar
273
+ de fase hasta no probar que todo esté perfecto"). El Monitor que expiró fue
274
+ interpretado como verde por defecto — equivocadamente.
275
+
276
+ ---
277
+
278
+ ## Excepciones documentadas
279
+
280
+ - **Repos sin GitHub Actions**: usar el sistema de CI nativo del repo
281
+ (GitLab CI, CircleCI). Adaptar el comando.
282
+ - **Workflows en forks**: los workflows desde fork PRs no reciben secrets
283
+ por diseño de GitHub. El monitor sirve igual, pero algunos jobs pueden
284
+ saltarse.
285
+ - **Rama protegida con auto-merge**: si el repo tiene auto-merge tras CI,
286
+ el monitor sale al `success` y el merge ocurre automáticamente — no es
287
+ necesario push adicional.
288
+
289
+ ---
290
+
291
+ ## Origen de esta regla
292
+
293
+ Promovida a regla global el 2026-05-09 a petición del usuario tras observar
294
+ que el patrón Monitor con `gh run list` + `jq` + `comm -13` se repetía
295
+ con éxito en cada push del proyecto SIGM (~10 invocaciones en sesión 2026-05-09)
296
+ y que ahorraba 5-10 minutos por iteración vs polling manual.
297
+
298
+ Reemplaza el patrón anterior de "esperar que el usuario reporte el log
299
+ fallido y reaccionar reactivamente" por proactividad.
300
+
301
+ **Revisión 2026-05-12** (SIGM): migrado de `| jq` a `gh --jq` integrado
302
+ para eliminar dependencia de binario externo. Causa: dos monitores
303
+ consecutivos expiraron silenciosamente en Windows + Git Bash por
304
+ `jq: command not found`, sin emitir un solo evento. Lección: las
305
+ herramientas del Monitor tool corren en sub-shell sin `2>&1` visible —
306
+ cualquier comando faltante hace que el monitor dure hasta timeout sin
307
+ señal de fallo. Diagnóstico: `which jq` antes de armar (debería
308
+ devolver path, no exit 1). `gh --jq` no tiene esta dependencia porque
309
+ está embebido en `gh` (ya requisito previo).
@@ -1,9 +1,9 @@
1
- ---
2
- paths:
3
- - "**/*.tsx"
4
- - "**/*.jsx"
5
- - "**/next.config.{js,mjs,ts}"
6
- ---
1
+ ---
2
+ paths:
3
+ - "**/*.tsx"
4
+ - "**/*.jsx"
5
+ - "**/next.config.{js,mjs,ts}"
6
+ ---
7
7
  # Regla: Patrones de Arquitectura — Next.js (App Router)
8
8
 
9
9
  El App Router de Next.js cambia fundamentalmente dónde y cómo se cargan datos.