@saulwade/swl-ses 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/CLAUDE.md +238 -0
  2. package/README.md +560 -0
  3. package/_userland/agentes/.gitkeep +0 -0
  4. package/_userland/habilidades/.gitkeep +0 -0
  5. package/agentes/.evolved.json +9 -0
  6. package/agentes/accesibilidad-wcag-swl.md +692 -0
  7. package/agentes/arquitecto-swl.md +238 -0
  8. package/agentes/auto-evolucion-swl.md +854 -0
  9. package/agentes/backend-api-swl.md +470 -0
  10. package/agentes/backend-csharp-swl.md +418 -0
  11. package/agentes/backend-go-swl.md +388 -0
  12. package/agentes/backend-java-swl.md +279 -0
  13. package/agentes/backend-node-swl.md +477 -0
  14. package/agentes/backend-python-swl.md +608 -0
  15. package/agentes/backend-rust-swl.md +362 -0
  16. package/agentes/backend-workers-swl.md +480 -0
  17. package/agentes/cloud-infra-swl.md +485 -0
  18. package/agentes/consolidador-swl.md +539 -0
  19. package/agentes/datos-swl.md +584 -0
  20. package/agentes/depurador-swl.md +349 -0
  21. package/agentes/devops-ci-swl.md +374 -0
  22. package/agentes/disenador-ui-swl.md +558 -0
  23. package/agentes/documentador-swl.md +343 -0
  24. package/agentes/evals/arquitecto-swl.evals.json +56 -0
  25. package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
  26. package/agentes/evals/implementador-swl.evals.json +56 -0
  27. package/agentes/evals/orquestador-swl.evals.json +60 -0
  28. package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
  29. package/agentes/evals/red-team-swl.evals.json +59 -0
  30. package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
  31. package/agentes/frontend-angular-swl.md +627 -0
  32. package/agentes/frontend-css-swl.md +720 -0
  33. package/agentes/frontend-react-swl.md +696 -0
  34. package/agentes/frontend-swl.md +500 -0
  35. package/agentes/frontend-tailwind-swl.md +830 -0
  36. package/agentes/implementador-swl.md +328 -0
  37. package/agentes/investigador-swl.md +430 -0
  38. package/agentes/investigador-ux-swl.md +500 -0
  39. package/agentes/llm-apps-swl.md +276 -0
  40. package/agentes/migrador-swl.md +417 -0
  41. package/agentes/mobile-android-swl.md +509 -0
  42. package/agentes/mobile-cross-swl.md +539 -0
  43. package/agentes/mobile-ios-swl.md +500 -0
  44. package/agentes/mobile-testing-swl.md +300 -0
  45. package/agentes/notificador-swl.md +916 -0
  46. package/agentes/observabilidad-swl.md +436 -0
  47. package/agentes/orquestador-swl.md +884 -0
  48. package/agentes/pagos-swl.md +283 -0
  49. package/agentes/perfilador-usuario-swl.md +306 -0
  50. package/agentes/planificador-swl.md +402 -0
  51. package/agentes/producto-prd-swl.md +587 -0
  52. package/agentes/red-team-swl.md +216 -0
  53. package/agentes/release-manager-swl.md +568 -0
  54. package/agentes/rendimiento-swl.md +714 -0
  55. package/agentes/resolutor-build-swl.md +243 -0
  56. package/agentes/revisor-angular-swl.md +276 -0
  57. package/agentes/revisor-codigo-swl.md +348 -0
  58. package/agentes/revisor-csharp-swl.md +262 -0
  59. package/agentes/revisor-go-swl.md +257 -0
  60. package/agentes/revisor-java-swl.md +255 -0
  61. package/agentes/revisor-kotlin-swl.md +271 -0
  62. package/agentes/revisor-nextjs-swl.md +279 -0
  63. package/agentes/revisor-php-swl.md +269 -0
  64. package/agentes/revisor-react-swl.md +276 -0
  65. package/agentes/revisor-rust-swl.md +344 -0
  66. package/agentes/revisor-seguridad-swl.md +390 -0
  67. package/agentes/revisor-swift-swl.md +266 -0
  68. package/agentes/revisor-typescript-swl.md +344 -0
  69. package/agentes/sre-swl.md +265 -0
  70. package/agentes/tdd-qa-swl.md +354 -0
  71. package/agentes/ux-disenador-swl.md +501 -0
  72. package/bin/lib/bot-comandos.js +1030 -0
  73. package/bin/lib/bot-discovery.js +182 -0
  74. package/bin/lib/bot-git.js +142 -0
  75. package/bin/swl-ses.js +325 -0
  76. package/bin/swl-telegram-bot.js +442 -0
  77. package/bin/swl-telegram-bot.plist +21 -0
  78. package/bin/swl-telegram-bot.service +14 -0
  79. package/comandos/swl/.evolved.json +23 -0
  80. package/comandos/swl/actualizar.md +174 -0
  81. package/comandos/swl/adoptar-proyecto.md +207 -0
  82. package/comandos/swl/aprender.md +701 -0
  83. package/comandos/swl/auditar-deps.md +134 -0
  84. package/comandos/swl/autoresearch.md +170 -0
  85. package/comandos/swl/ayuda.md +224 -0
  86. package/comandos/swl/brainstorm.md +50 -0
  87. package/comandos/swl/checkpoint.md +330 -0
  88. package/comandos/swl/compactar.md +283 -0
  89. package/comandos/swl/configurar-ci.md +227 -0
  90. package/comandos/swl/contexto.md +112 -0
  91. package/comandos/swl/contribuir.md +233 -0
  92. package/comandos/swl/crear-skill.md +292 -0
  93. package/comandos/swl/cron.md +196 -0
  94. package/comandos/swl/dashboard.md +146 -0
  95. package/comandos/swl/discutir-fase.md +230 -0
  96. package/comandos/swl/ejecutar-fase.md +135 -0
  97. package/comandos/swl/evaluar-skill.md +487 -0
  98. package/comandos/swl/evolucion-estado.md +142 -0
  99. package/comandos/swl/evolucionar.md +259 -0
  100. package/comandos/swl/exportar-vault.md +189 -0
  101. package/comandos/swl/gateway.md +158 -0
  102. package/comandos/swl/inbox.md +116 -0
  103. package/comandos/swl/instalar.md +220 -0
  104. package/comandos/swl/instintos.md +86 -0
  105. package/comandos/swl/mapear-codebase.md +312 -0
  106. package/comandos/swl/mcp-status.md +175 -0
  107. package/comandos/swl/metricas.md +270 -0
  108. package/comandos/swl/modelo.md +102 -0
  109. package/comandos/swl/notificaciones.md +396 -0
  110. package/comandos/swl/nuevo-proyecto.md +154 -0
  111. package/comandos/swl/planear-fase.md +221 -0
  112. package/comandos/swl/plugins.md +256 -0
  113. package/comandos/swl/reflect-skills.md +125 -0
  114. package/comandos/swl/release.md +217 -0
  115. package/comandos/swl/revisar-impacto.md +206 -0
  116. package/comandos/swl/revisar.md +330 -0
  117. package/comandos/swl/salud.md +363 -0
  118. package/comandos/swl/sesiones.md +200 -0
  119. package/comandos/swl/skill-search.md +113 -0
  120. package/comandos/swl/verificar.md +585 -0
  121. package/comandos/swl/wiki.md +620 -0
  122. package/contextos/dev.md +32 -0
  123. package/contextos/research.md +30 -0
  124. package/contextos/review.md +31 -0
  125. package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
  126. package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
  127. package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
  128. package/habilidades/agent-browser/SKILL.md +218 -0
  129. package/habilidades/agentes-como-servicio/SKILL.md +218 -0
  130. package/habilidades/ai-runtime-security/SKILL.md +273 -0
  131. package/habilidades/angular-avanzado/SKILL.md +164 -0
  132. package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
  133. package/habilidades/angular-moderno/SKILL.md +186 -0
  134. package/habilidades/angular-moderno/evals/evals.json +45 -0
  135. package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
  136. package/habilidades/api-rest-diseno/SKILL.md +191 -0
  137. package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
  138. package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
  139. package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
  140. package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
  141. package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
  142. package/habilidades/async-python/SKILL.md +149 -0
  143. package/habilidades/async-python/evals/evals.json +47 -0
  144. package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
  145. package/habilidades/auth-patrones/.evolved.json +9 -0
  146. package/habilidades/auth-patrones/SKILL.md +413 -0
  147. package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
  148. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
  149. package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
  150. package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
  151. package/habilidades/autoresearch/SKILL.md +268 -0
  152. package/habilidades/autoresearch/evals/evals.json +41 -0
  153. package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
  154. package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
  155. package/habilidades/azure-cloud/SKILL.md +308 -0
  156. package/habilidades/azure-cloud/recursos/aks.md +327 -0
  157. package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
  158. package/habilidades/backend-production-resilience/SKILL.md +288 -0
  159. package/habilidades/brainstorming/SKILL.md +295 -0
  160. package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
  161. package/habilidades/build-errors-cpp/SKILL.md +270 -0
  162. package/habilidades/build-errors-csharp/SKILL.md +265 -0
  163. package/habilidades/build-errors-go/SKILL.md +306 -0
  164. package/habilidades/build-errors-java/SKILL.md +278 -0
  165. package/habilidades/build-errors-kotlin/SKILL.md +303 -0
  166. package/habilidades/build-errors-nextjs/SKILL.md +312 -0
  167. package/habilidades/build-errors-php/SKILL.md +270 -0
  168. package/habilidades/build-errors-python/SKILL.md +292 -0
  169. package/habilidades/build-errors-rust/SKILL.md +284 -0
  170. package/habilidades/build-errors-swift/SKILL.md +272 -0
  171. package/habilidades/build-errors-typescript/SKILL.md +369 -0
  172. package/habilidades/checklist-calidad/SKILL.md +271 -0
  173. package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
  174. package/habilidades/checklist-seguridad/SKILL.md +285 -0
  175. package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
  176. package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
  177. package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
  178. package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
  179. package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
  180. package/habilidades/cloud-aws/SKILL.md +142 -0
  181. package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
  182. package/habilidades/compactacion-contexto/SKILL.md +247 -0
  183. package/habilidades/contenedores-docker/SKILL.md +137 -0
  184. package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
  185. package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
  186. package/habilidades/context-builder/SKILL.md +170 -0
  187. package/habilidades/control-profundidad/SKILL.md +128 -0
  188. package/habilidades/csharp-experto/SKILL.md +322 -0
  189. package/habilidades/csharp-patrones/SKILL.md +316 -0
  190. package/habilidades/csharp-testing/SKILL.md +286 -0
  191. package/habilidades/css-moderno/SKILL.md +166 -0
  192. package/habilidades/css-moderno/evals/evals.json +43 -0
  193. package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
  194. package/habilidades/datos-etl/SKILL.md +129 -0
  195. package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
  196. package/habilidades/dbml-experto/SKILL.md +339 -0
  197. package/habilidades/dbml-experto/evals/evals.json +56 -0
  198. package/habilidades/dependencias-auditoria/SKILL.md +320 -0
  199. package/habilidades/deprecacion-migracion/SKILL.md +169 -0
  200. package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
  201. package/habilidades/design-tokens/SKILL.md +158 -0
  202. package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
  203. package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
  204. package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
  205. package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
  206. package/habilidades/discutir-fase/SKILL.md +188 -0
  207. package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
  208. package/habilidades/diseno-responsivo/SKILL.md +186 -0
  209. package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
  210. package/habilidades/django-experto/SKILL.md +205 -0
  211. package/habilidades/django-experto/recursos/async-django.md +390 -0
  212. package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
  213. package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
  214. package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
  215. package/habilidades/django-experto/recursos/testing-django.md +415 -0
  216. package/habilidades/doc-sync/SKILL.md +280 -0
  217. package/habilidades/drift-detection/SKILL.md +179 -0
  218. package/habilidades/ejecutar-fase/SKILL.md +468 -0
  219. package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
  220. package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
  221. package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
  222. package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
  223. package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
  224. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
  225. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
  226. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
  227. package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
  228. package/habilidades/evaluacion-agentes/SKILL.md +314 -0
  229. package/habilidades/event-driven/SKILL.md +153 -0
  230. package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
  231. package/habilidades/extraccion-documentos/SKILL.md +221 -0
  232. package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
  233. package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
  234. package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
  235. package/habilidades/fastapi-experto/SKILL.md +221 -0
  236. package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
  237. package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
  238. package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
  239. package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
  240. package/habilidades/filament-admin/SKILL.md +290 -0
  241. package/habilidades/frontend-avanzado/SKILL.md +257 -0
  242. package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
  243. package/habilidades/gcp-cloud/SKILL.md +260 -0
  244. package/habilidades/gcp-cloud/recursos/gke.md +234 -0
  245. package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
  246. package/habilidades/generacion-mermaid/SKILL.md +229 -0
  247. package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
  248. package/habilidades/go-experto/SKILL.md +305 -0
  249. package/habilidades/go-patrones/SKILL.md +299 -0
  250. package/habilidades/go-testing/SKILL.md +291 -0
  251. package/habilidades/graphql-experto/SKILL.md +323 -0
  252. package/habilidades/guardrail-semantico/SKILL.md +282 -0
  253. package/habilidades/harness-claude-code/SKILL.md +299 -0
  254. package/habilidades/iam-secretos/SKILL.md +265 -0
  255. package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
  256. package/habilidades/infra-github-actions/SKILL.md +166 -0
  257. package/habilidades/instalar-sistema/.evolved.json +9 -0
  258. package/habilidades/instalar-sistema/SKILL.md +221 -0
  259. package/habilidades/java-experto/SKILL.md +290 -0
  260. package/habilidades/java-patrones/SKILL.md +275 -0
  261. package/habilidades/java-testing/SKILL.md +288 -0
  262. package/habilidades/kotlin-compose/SKILL.md +278 -0
  263. package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
  264. package/habilidades/kotlin-experto/SKILL.md +318 -0
  265. package/habilidades/kotlin-testing/SKILL.md +267 -0
  266. package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
  267. package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
  268. package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
  269. package/habilidades/langchain-langraph/SKILL.md +386 -0
  270. package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
  271. package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
  272. package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
  273. package/habilidades/legacy-code-rescue/SKILL.md +267 -0
  274. package/habilidades/likec4-experto/SKILL.md +412 -0
  275. package/habilidades/likec4-experto/evals/evals.json +69 -0
  276. package/habilidades/manejo-errores/.evolved.json +9 -0
  277. package/habilidades/manejo-errores/SKILL.md +407 -0
  278. package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
  279. package/habilidades/mapear-codebase/SKILL.md +275 -0
  280. package/habilidades/memoria-busqueda/SKILL.md +194 -0
  281. package/habilidades/memoria-busqueda/evals/evals.json +44 -0
  282. package/habilidades/meta-skills-estandar/SKILL.md +298 -0
  283. package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
  284. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
  285. package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
  286. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
  287. package/habilidades/microservicios/SKILL.md +155 -0
  288. package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
  289. package/habilidades/mobile-flutter/SKILL.md +199 -0
  290. package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
  291. package/habilidades/mobile-react-native/SKILL.md +176 -0
  292. package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
  293. package/habilidades/mongodb-experto/SKILL.md +302 -0
  294. package/habilidades/monitoring-alertas/SKILL.md +201 -0
  295. package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
  296. package/habilidades/nestjs-experto/SKILL.md +307 -0
  297. package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
  298. package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
  299. package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
  300. package/habilidades/nextjs-experto/SKILL.md +335 -0
  301. package/habilidades/nextjs-patrones/SKILL.md +303 -0
  302. package/habilidades/nextjs-testing/SKILL.md +331 -0
  303. package/habilidades/node-experto/.evolved.json +9 -0
  304. package/habilidades/node-experto/SKILL.md +266 -0
  305. package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
  306. package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
  307. package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
  308. package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
  309. package/habilidades/nuevo-proyecto/SKILL.md +204 -0
  310. package/habilidades/orquestacion-async/SKILL.md +303 -0
  311. package/habilidades/paid-media-tracking/SKILL.md +269 -0
  312. package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
  313. package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
  314. package/habilidades/patrones-python/SKILL.md +228 -0
  315. package/habilidades/patrones-python/evals/evals.json +56 -0
  316. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
  317. package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
  318. package/habilidades/perfil-usuario/SKILL.md +200 -0
  319. package/habilidades/perfil-usuario/evals/evals.json +55 -0
  320. package/habilidades/performance-baseline/SKILL.md +297 -0
  321. package/habilidades/php-experto/SKILL.md +291 -0
  322. package/habilidades/php-patrones/SKILL.md +306 -0
  323. package/habilidades/php-testing/SKILL.md +280 -0
  324. package/habilidades/planear-fase/SKILL.md +269 -0
  325. package/habilidades/postgresql-experto/SKILL.md +151 -0
  326. package/habilidades/postgresql-experto/evals/evals.json +53 -0
  327. package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
  328. package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
  329. package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
  330. package/habilidades/privacy-memoria/SKILL.md +141 -0
  331. package/habilidades/privacy-memoria/evals/evals.json +43 -0
  332. package/habilidades/prompt-engineering/SKILL.md +518 -0
  333. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
  334. package/habilidades/rag-arquitectura/SKILL.md +338 -0
  335. package/habilidades/rails-experto/SKILL.md +237 -0
  336. package/habilidades/rails-experto/recursos/active-record.md +260 -0
  337. package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
  338. package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
  339. package/habilidades/react-experto/SKILL.md +209 -0
  340. package/habilidades/react-experto/evals/evals.json +55 -0
  341. package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
  342. package/habilidades/react-optimizacion/SKILL.md +174 -0
  343. package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
  344. package/habilidades/redis-experto/SKILL.md +305 -0
  345. package/habilidades/release-semver/.evolved.json +9 -0
  346. package/habilidades/release-semver/SKILL.md +248 -0
  347. package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
  348. package/habilidades/rust-experto/SKILL.md +400 -0
  349. package/habilidades/rust-patrones/SKILL.md +296 -0
  350. package/habilidades/rust-testing/SKILL.md +311 -0
  351. package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
  352. package/habilidades/sql-optimizacion/SKILL.md +200 -0
  353. package/habilidades/sql-optimizacion/evals/evals.json +54 -0
  354. package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
  355. package/habilidades/sre-patrones/SKILL.md +333 -0
  356. package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
  357. package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
  358. package/habilidades/stripe-pagos/SKILL.md +550 -0
  359. package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
  360. package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
  361. package/habilidades/structured-outputs/SKILL.md +343 -0
  362. package/habilidades/swift-experto/SKILL.md +320 -0
  363. package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
  364. package/habilidades/swift-patrones/SKILL.md +313 -0
  365. package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
  366. package/habilidades/swift-testing/SKILL.md +254 -0
  367. package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
  368. package/habilidades/swl-dashboard/SKILL.md +370 -0
  369. package/habilidades/swl-markitdown/SKILL.md +285 -0
  370. package/habilidades/swl-markitdown/evals/evals.json +52 -0
  371. package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
  372. package/habilidades/tailwind-experto/SKILL.md +240 -0
  373. package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
  374. package/habilidades/tdd-workflow/SKILL.md +293 -0
  375. package/habilidades/terraform-experto/SKILL.md +321 -0
  376. package/habilidades/testing-python/SKILL.md +340 -0
  377. package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
  378. package/habilidades/threat-model-lite/SKILL.md +246 -0
  379. package/habilidades/tracing-processor/SKILL.md +212 -0
  380. package/habilidades/tracking-measurement/SKILL.md +239 -0
  381. package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
  382. package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
  383. package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
  384. package/habilidades/typescript-avanzado/SKILL.md +144 -0
  385. package/habilidades/typescript-avanzado/evals/evals.json +55 -0
  386. package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
  387. package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
  388. package/habilidades/ux-diseno/SKILL.md +116 -0
  389. package/habilidades/ux-diseno/evals/evals.json +43 -0
  390. package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
  391. package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
  392. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
  393. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
  394. package/habilidades/verificacion-evidencia/SKILL.md +160 -0
  395. package/habilidades/verificar-trabajo/SKILL.md +303 -0
  396. package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
  397. package/habilidades/wiki-conocimiento/SKILL.md +276 -0
  398. package/habilidades/wireframes-flujos/SKILL.md +212 -0
  399. package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
  400. package/habilidades/workflow-claude-code/SKILL.md +260 -0
  401. package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
  402. package/hooks/_run-hook.sh +57 -0
  403. package/hooks/actualizar-perfil-usuario.js +364 -0
  404. package/hooks/agente-lifecycle.js +71 -0
  405. package/hooks/aiisms-detector.js +173 -0
  406. package/hooks/audit-trail.js +204 -0
  407. package/hooks/auto-background.js +97 -0
  408. package/hooks/auto-consolidacion.js +178 -0
  409. package/hooks/auto-evolucion.js +666 -0
  410. package/hooks/auto-restaurar-settings.js +360 -0
  411. package/hooks/calidad-pre-commit.js +929 -0
  412. package/hooks/calidad-typescript.js +511 -0
  413. package/hooks/captura-feedback-usuario.js +148 -0
  414. package/hooks/check-update.js +211 -0
  415. package/hooks/clasificador-mensajes.js +271 -0
  416. package/hooks/degradacion-instintos.js +272 -0
  417. package/hooks/escaneo-secretos.js +389 -0
  418. package/hooks/extraccion-aprendizajes.js +763 -0
  419. package/hooks/grafo-contexto.js +129 -0
  420. package/hooks/graph-update.js +67 -0
  421. package/hooks/guardrail-modelo.js +247 -0
  422. package/hooks/inbox-aviso.js +75 -0
  423. package/hooks/inyeccion-contexto.js +246 -0
  424. package/hooks/lib/abort-registry.js +214 -0
  425. package/hooks/lib/agent-backend.js +210 -0
  426. package/hooks/lib/agent-comms.js +263 -0
  427. package/hooks/lib/agent-issue-codes.js +284 -0
  428. package/hooks/lib/agent-matcher.js +189 -0
  429. package/hooks/lib/async-hook-registry.js +252 -0
  430. package/hooks/lib/atomic-write.js +130 -0
  431. package/hooks/lib/auto-consolidator.js +335 -0
  432. package/hooks/lib/canary-skills.js +187 -0
  433. package/hooks/lib/consolidation-lock.js +291 -0
  434. package/hooks/lib/context-builder.js +430 -0
  435. package/hooks/lib/context-compressor.js +657 -0
  436. package/hooks/lib/convergence-detector.js +105 -0
  437. package/hooks/lib/delegation-tracker.js +198 -0
  438. package/hooks/lib/detectar-package-manager.js +423 -0
  439. package/hooks/lib/edit-accumulator.js +171 -0
  440. package/hooks/lib/error-classifier.js +308 -0
  441. package/hooks/lib/event-bus.js +112 -0
  442. package/hooks/lib/evolution-tracker.js +442 -0
  443. package/hooks/lib/execution-state.js +316 -0
  444. package/hooks/lib/fingerprint-id.js +135 -0
  445. package/hooks/lib/gateway-notify.js +116 -0
  446. package/hooks/lib/graph-security.js +75 -0
  447. package/hooks/lib/guardrail-metrics.js +202 -0
  448. package/hooks/lib/hook-circuit-breaker.js +206 -0
  449. package/hooks/lib/loop-detector.js +267 -0
  450. package/hooks/lib/mcp-health.js +184 -0
  451. package/hooks/lib/mcp-pool.js +436 -0
  452. package/hooks/lib/memory-search.js +506 -0
  453. package/hooks/lib/merkle-audit.js +96 -0
  454. package/hooks/lib/model-router.js +222 -0
  455. package/hooks/lib/normalize-error.js +324 -0
  456. package/hooks/lib/normalize-input.js +65 -0
  457. package/hooks/lib/nudge-tracker.js +306 -0
  458. package/hooks/lib/otlp-exporter.js +365 -0
  459. package/hooks/lib/performance-marks.js +239 -0
  460. package/hooks/lib/privacy-filter.js +128 -0
  461. package/hooks/lib/prompt-injection-scanner.js +209 -0
  462. package/hooks/lib/provenance-tracker.js +183 -0
  463. package/hooks/lib/rate-limit-tracker.js +253 -0
  464. package/hooks/lib/reflect-classifier.js +164 -0
  465. package/hooks/lib/resource-quota.js +122 -0
  466. package/hooks/lib/retry-jitter.js +165 -0
  467. package/hooks/lib/risk-engine.js +368 -0
  468. package/hooks/lib/run-log.js +408 -0
  469. package/hooks/lib/session-fts.js +379 -0
  470. package/hooks/lib/session-store.js +293 -0
  471. package/hooks/lib/singleton-guard.js +159 -0
  472. package/hooks/lib/skill-auditor.js +588 -0
  473. package/hooks/lib/sync-status.js +228 -0
  474. package/hooks/lib/taint-tracker.js +107 -0
  475. package/hooks/lib/task-service.js +295 -0
  476. package/hooks/lib/tech-skills-map.js +146 -0
  477. package/hooks/lib/telegram-cliente.js +159 -0
  478. package/hooks/lib/telegram-config.js +170 -0
  479. package/hooks/lib/token-budget.js +156 -0
  480. package/hooks/lib/token-estimator.js +420 -0
  481. package/hooks/lib/toon-compressor.js +245 -0
  482. package/hooks/lib/usage-model.js +183 -0
  483. package/hooks/lib/variable-resolver.js +230 -0
  484. package/hooks/linea-estado.js +324 -0
  485. package/hooks/metricas-evolucion.js +209 -0
  486. package/hooks/monitor-contexto.js +325 -0
  487. package/hooks/notificacion-sesion-stop.js +198 -0
  488. package/hooks/notificacion-telegram-notification.js +4 -0
  489. package/hooks/notificacion-telegram-subagent.js +4 -0
  490. package/hooks/notificacion-telegram.js +267 -0
  491. package/hooks/preservar-estado-pre-compact.js +150 -0
  492. package/hooks/proteccion-rutas.js +366 -0
  493. package/hooks/registro-turnos.js +209 -0
  494. package/hooks/resumen-sesion.js +249 -0
  495. package/hooks/risk-scoring.js +323 -0
  496. package/hooks/rotar-audit-auto.js +122 -0
  497. package/hooks/sugerir-regenerar-inventario.js +170 -0
  498. package/hooks/telemetria-agentes.js +167 -0
  499. package/hooks/tracking-costos.js +688 -0
  500. package/instintos/global.yaml +8 -0
  501. package/instintos/perfil-usuario.yaml +53 -0
  502. package/instintos/prompt-appendices.yaml +57 -0
  503. package/instintos/proyecto.yaml +372 -0
  504. package/manifiestos/gateway-config.json +77 -0
  505. package/manifiestos/handoff-context.json +223 -0
  506. package/manifiestos/hook-profiles.json +44 -0
  507. package/manifiestos/hooks-config.json +360 -0
  508. package/manifiestos/modulos.json +1173 -0
  509. package/manifiestos/perfiles.json +404 -0
  510. package/package.json +86 -0
  511. package/plantillas/ESTADO.md +109 -0
  512. package/plantillas/HOJA-RUTA.md +143 -0
  513. package/plantillas/PROYECTO.md +122 -0
  514. package/plantillas/REQUISITOS.md +132 -0
  515. package/plantillas/auditor-veto-template.md +105 -0
  516. package/plantillas/github-workflows/README.md +47 -0
  517. package/plantillas/github-workflows/release-please.yml +44 -0
  518. package/plantillas/github-workflows/swl-ci.yml +107 -0
  519. package/plantillas/github-workflows/swl-security.yml +51 -0
  520. package/plantillas/mcp-mineru.json +13 -0
  521. package/plantillas/research/ARQUITECTURA.md +220 -0
  522. package/plantillas/research/FUNCIONALIDADES.md +175 -0
  523. package/plantillas/research/RESUMEN.md +165 -0
  524. package/plantillas/research/STACK.md +233 -0
  525. package/plantillas/research/TRAMPAS.md +299 -0
  526. package/plantillas/skill-evals-template.json +44 -0
  527. package/plugin.json +343 -0
  528. package/reglas/accesibilidad.md +269 -0
  529. package/reglas/api-diseno.md +400 -0
  530. package/reglas/arquitectura.md +352 -0
  531. package/reglas/brevedad-output.md +124 -0
  532. package/reglas/cloud-infra.md +247 -0
  533. package/reglas/docs.md +245 -0
  534. package/reglas/estilo-codigo.md +201 -0
  535. package/reglas/git-workflow.md +245 -0
  536. package/reglas/gobernanza.md +271 -0
  537. package/reglas/harness-claude-code.md +213 -0
  538. package/reglas/hooks.md +186 -0
  539. package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
  540. package/reglas/lenguajes/csharp/hooks.md +281 -0
  541. package/reglas/lenguajes/csharp/patrones.md +226 -0
  542. package/reglas/lenguajes/csharp/seguridad.md +258 -0
  543. package/reglas/lenguajes/csharp/testing.md +176 -0
  544. package/reglas/lenguajes/go/estilo-codigo.md +195 -0
  545. package/reglas/lenguajes/go/hooks.md +249 -0
  546. package/reglas/lenguajes/go/patrones.md +249 -0
  547. package/reglas/lenguajes/go/seguridad.md +225 -0
  548. package/reglas/lenguajes/go/testing.md +272 -0
  549. package/reglas/lenguajes/java/estilo-codigo.md +217 -0
  550. package/reglas/lenguajes/java/hooks.md +251 -0
  551. package/reglas/lenguajes/java/patrones.md +226 -0
  552. package/reglas/lenguajes/java/seguridad.md +233 -0
  553. package/reglas/lenguajes/java/testing.md +238 -0
  554. package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
  555. package/reglas/lenguajes/kotlin/hooks.md +245 -0
  556. package/reglas/lenguajes/kotlin/patrones.md +201 -0
  557. package/reglas/lenguajes/kotlin/seguridad.md +202 -0
  558. package/reglas/lenguajes/kotlin/testing.md +236 -0
  559. package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
  560. package/reglas/lenguajes/nextjs/hooks.md +186 -0
  561. package/reglas/lenguajes/nextjs/patrones.md +225 -0
  562. package/reglas/lenguajes/nextjs/seguridad.md +216 -0
  563. package/reglas/lenguajes/nextjs/testing.md +193 -0
  564. package/reglas/lenguajes/php/estilo-codigo.md +228 -0
  565. package/reglas/lenguajes/php/hooks.md +165 -0
  566. package/reglas/lenguajes/php/patrones.md +233 -0
  567. package/reglas/lenguajes/php/seguridad.md +186 -0
  568. package/reglas/lenguajes/php/testing.md +205 -0
  569. package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
  570. package/reglas/lenguajes/rust/hooks.md +240 -0
  571. package/reglas/lenguajes/rust/patrones.md +250 -0
  572. package/reglas/lenguajes/rust/seguridad.md +221 -0
  573. package/reglas/lenguajes/rust/testing.md +194 -0
  574. package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
  575. package/reglas/lenguajes/swift/hooks.md +257 -0
  576. package/reglas/lenguajes/swift/patrones.md +235 -0
  577. package/reglas/lenguajes/swift/seguridad.md +248 -0
  578. package/reglas/lenguajes/swift/testing.md +242 -0
  579. package/reglas/markitdown.md +60 -0
  580. package/reglas/memoria-consolidada.md +209 -0
  581. package/reglas/patrones.md +225 -0
  582. package/reglas/performance.md +195 -0
  583. package/reglas/pruebas.md +159 -0
  584. package/reglas/seguridad-agentes.md +351 -0
  585. package/reglas/seguridad.md +151 -0
  586. package/reglas/skills-estandar.md +373 -0
  587. package/reglas/testing.md +193 -0
  588. package/schemas/agent-contract.json +176 -0
  589. package/schemas/agent-frontmatter.schema.json +149 -0
  590. package/schemas/agent-message.schema.json +53 -0
  591. package/schemas/agent-output-implementacion.schema.json +85 -0
  592. package/schemas/agent-output-planificacion.schema.json +113 -0
  593. package/schemas/agent-output-review.schema.json +78 -0
  594. package/schemas/diary-entry.schema.json +80 -0
  595. package/schemas/hook-profiles.schema.json +39 -0
  596. package/schemas/hooks-config.schema.json +74 -0
  597. package/schemas/instinct.schema.json +115 -0
  598. package/schemas/modulos.schema.json +29 -0
  599. package/schemas/perfiles.schema.json +28 -0
  600. package/schemas/plugin.schema.json +64 -0
  601. package/schemas/skill-evals.schema.json +95 -0
  602. package/schemas/skill-frontmatter.schema.json +170 -0
  603. package/scripts/actualizar.js +145 -0
  604. package/scripts/audit-skills.sh +78 -0
  605. package/scripts/auditar-agentes-gaps.js +149 -0
  606. package/scripts/auditar-cobertura-frameworks.js +241 -0
  607. package/scripts/auditar-skills-gaps.js +206 -0
  608. package/scripts/bootstrap-instintos.js +259 -0
  609. package/scripts/check-update.js +109 -0
  610. package/scripts/comandos/agents.js +105 -0
  611. package/scripts/comandos/info.js +108 -0
  612. package/scripts/comandos/install-asistido.js +186 -0
  613. package/scripts/comandos/skills.js +211 -0
  614. package/scripts/configurar-branch-protection.js +418 -0
  615. package/scripts/daemon-swl.py +388 -0
  616. package/scripts/desinstalar.js +130 -0
  617. package/scripts/doctor.js +559 -0
  618. package/scripts/field-report.js +199 -0
  619. package/scripts/generar-inventario.js +317 -0
  620. package/scripts/inbox-tmux-inject.js +161 -0
  621. package/scripts/inferir-herramientas-permitidas.js +586 -0
  622. package/scripts/inicializar.js +133 -0
  623. package/scripts/instalador.js +1031 -0
  624. package/scripts/instalar-git-hook.js +122 -0
  625. package/scripts/lib/agp-frontmatter.js +222 -0
  626. package/scripts/lib/append-con-marcadores.js +199 -0
  627. package/scripts/lib/artefactos-python.js +43 -0
  628. package/scripts/lib/audit-query.js +221 -0
  629. package/scripts/lib/autostart-linux.js +347 -0
  630. package/scripts/lib/autostart-macos.js +360 -0
  631. package/scripts/lib/autostart-windows.js +307 -0
  632. package/scripts/lib/budget-enforcer.js +252 -0
  633. package/scripts/lib/claude-sessions.js +285 -0
  634. package/scripts/lib/configurar-ci.js +380 -0
  635. package/scripts/lib/console-span-exporter.js +92 -0
  636. package/scripts/lib/contadores-inventario.js +217 -0
  637. package/scripts/lib/dashboard-widgets.js +290 -0
  638. package/scripts/lib/detectar-runtime.js +279 -0
  639. package/scripts/lib/detectar-stack.js +187 -0
  640. package/scripts/lib/diary-entry.js +234 -0
  641. package/scripts/lib/drift-detector.js +545 -0
  642. package/scripts/lib/estado.js +124 -0
  643. package/scripts/lib/gestor-componentes.js +243 -0
  644. package/scripts/lib/gitignore-manifest.js +305 -0
  645. package/scripts/lib/graph-analyze.py +556 -0
  646. package/scripts/lib/graph-builder.py +485 -0
  647. package/scripts/lib/graph-cluster.py +259 -0
  648. package/scripts/lib/health-row.js +168 -0
  649. package/scripts/lib/hooks-settings.js +789 -0
  650. package/scripts/lib/manifiestos.js +138 -0
  651. package/scripts/lib/mc-client.js +137 -0
  652. package/scripts/lib/notificaciones-telegram.js +1107 -0
  653. package/scripts/lib/npm-version.js +261 -0
  654. package/scripts/lib/paquetes-conocidos.js +50 -0
  655. package/scripts/lib/preservar-usuario.js +586 -0
  656. package/scripts/lib/prompt-builder.js +264 -0
  657. package/scripts/lib/resolver-externo.js +332 -0
  658. package/scripts/lib/schedule-parser.js +305 -0
  659. package/scripts/lib/scoring-instintos.js +240 -0
  660. package/scripts/lib/seguridad.js +160 -0
  661. package/scripts/lib/selector-interactivo.js +152 -0
  662. package/scripts/lib/semantic-search.js +242 -0
  663. package/scripts/lib/skill-discovery.js +234 -0
  664. package/scripts/lib/skill-metrics.js +246 -0
  665. package/scripts/lib/skill-normalizer.js +112 -0
  666. package/scripts/lib/skills-hub.js +340 -0
  667. package/scripts/lib/span-schema.js +134 -0
  668. package/scripts/lib/tool-cost-analyzer.js +255 -0
  669. package/scripts/lib/tracing-processor-interface.js +286 -0
  670. package/scripts/lib/transformadores/base.js +80 -0
  671. package/scripts/lib/transformadores/claude.js +124 -0
  672. package/scripts/lib/transformadores/codex.js +115 -0
  673. package/scripts/lib/transformadores/copilot.js +106 -0
  674. package/scripts/lib/transformadores/gemini.js +74 -0
  675. package/scripts/lib/transformadores/index.js +35 -0
  676. package/scripts/lib/transformadores/opencode.js +75 -0
  677. package/scripts/lib/ui.js +259 -0
  678. package/scripts/limpiar-artefactos-python.js +131 -0
  679. package/scripts/mcp-orchestrator.py +386 -0
  680. package/scripts/mcp-pool-manager.py +352 -0
  681. package/scripts/mcp-telemetry.py +378 -0
  682. package/scripts/poblar-evolvable.js +226 -0
  683. package/scripts/publicar.js +287 -0
  684. package/scripts/reflect-skills.js +403 -0
  685. package/scripts/rotar-audit-logs.js +185 -0
  686. package/scripts/run-skill-evals.js +242 -0
  687. package/scripts/smoke-test.js +374 -0
  688. package/scripts/token-analysis.py +471 -0
  689. package/scripts/validar-manifest.js +195 -0
  690. package/scripts/validar-memoria.js +321 -0
  691. package/scripts/validar-tests-aislamiento.js +184 -0
  692. package/scripts/validar-tokens-test.js +208 -0
  693. package/scripts/validar.js +147 -0
  694. package/scripts/validate-markdown.py +339 -0
  695. package/scripts/validate-skills.py +385 -0
  696. package/scripts/vendor/claude-usage/README.md +116 -0
  697. package/scripts/vendor/claude-usage/cli.py +334 -0
  698. package/scripts/vendor/claude-usage/dashboard.py +795 -0
  699. package/scripts/vendor/claude-usage/scanner.py +467 -0
  700. package/scripts/vendor/markitdown/cli.py +194 -0
  701. package/scripts/verificar-evolucion.js +289 -0
  702. package/scripts/verificar-release.js +494 -0
@@ -0,0 +1,333 @@
1
+ ---
2
+ name: sre-patrones
3
+ description: >
4
+ Patrones SRE: definición de SLO/SLI, cálculo de error budgets, diseño de
5
+ alertas accionables, runbooks de incidentes y post-mortems blameless.
6
+ Cargar cuando se definan objetivos de confiabilidad, se diseñen alertas
7
+ que minimicen ruido, se escriba un runbook, se conduzca un post-mortem
8
+ o se planifique la estrategia de on-call.
9
+ version: "1.0.0"
10
+ herramientasPermitidas: [Read, Bash]
11
+ evolvable: true # default para skill estandar
12
+ exclusiones:
13
+ - "No cargar para instrumentación de código con Prometheus, OpenTelemetry o logging estructurado — para instrumentación cargar `monitoring-alertas`."
14
+ - "No cargar para configuración de dashboards Grafana o reglas de alerting en YAML — para dashboards y alert rules cargar `monitoring-alertas`."
15
+ - "No cargar para análisis de vulnerabilidades de seguridad o threat modeling — para modelado de amenazas cargar `threat-model-lite`."
16
+ - "No cargar para diseño de arquitectura de microservicios resilientes (circuit breakers, bulkheads) — para patrones de resiliencia de arquitectura cargar el skill de arquitectura correspondiente al stack."
17
+ ---
18
+ # Patrones SRE — Guía de Confiabilidad
19
+
20
+ ## Cuándo NO cargar
21
+
22
+ - La tarea es instrumentar código con Prometheus u OpenTelemetry: cargar `monitoring-alertas`.
23
+ - La tarea es configurar dashboards Grafana o alert rules en YAML: cargar `monitoring-alertas`.
24
+ - La tarea es threat modeling o análisis de vulnerabilidades: cargar `threat-model-lite`.
25
+ - La tarea es diseñar circuit breakers o bulkheads en código: usar el skill del stack correspondiente.
26
+
27
+ ## 1. Jerarquía de confiabilidad
28
+
29
+ La confiabilidad de un sistema se expresa en tres capas anidadas:
30
+
31
+ ```
32
+ SLA (Service Level Agreement) — Contrato con el cliente (ej: 99.9% uptime)
33
+ └─ SLO (Service Level Objective) — Objetivo interno (ej: 99.95% — margen sobre SLA)
34
+ └─ SLI (Service Level Indicator) — Métrica real (ej: % requests exitosos en 28 días)
35
+ └─ Error Budget — Cuánto podemos fallar: 100% - SLO = presupuesto de error
36
+ ```
37
+
38
+ Regla clave: el SLO **siempre** debe ser más estricto que el SLA. La diferencia
39
+ es el margen de seguridad antes de violar el contrato con el cliente.
40
+
41
+ ---
42
+
43
+ ## 2. Definición de SLI por tipo de servicio
44
+
45
+ Los SLIs deben ser medibles con queries reales, no con afirmaciones vagas.
46
+
47
+ ```yaml
48
+ # SLIs para API HTTP
49
+ slis:
50
+ disponibilidad:
51
+ formula: "successful_requests / total_requests * 100"
52
+ ventana: "28 días rolling"
53
+ umbral_bueno: "response_code < 500 AND latency < 1000ms"
54
+ query_prometheus: |
55
+ sum(rate(http_requests_total{code!~"5.."}[28d]))
56
+ / sum(rate(http_requests_total[28d])) * 100
57
+
58
+ latencia:
59
+ formula: "p99 de latencia de response"
60
+ ventana: "1 hora rolling"
61
+ umbral_bueno: "p99 < 500ms"
62
+ query_prometheus: |
63
+ histogram_quantile(0.99,
64
+ sum(rate(http_request_duration_seconds_bucket[1h])) by (le)
65
+ )
66
+
67
+ saturacion:
68
+ formula: "uso_cpu_promedio últimas 4 horas"
69
+ umbral_alerta: "> 80%"
70
+ umbral_critico: "> 95%"
71
+ query_prometheus: |
72
+ 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[4h])) * 100)
73
+
74
+ # SLIs para pipeline de datos
75
+ slis_pipeline:
76
+ frescura:
77
+ formula: "time_since_last_successful_run"
78
+ umbral_bueno: "< 1 hora"
79
+ query_prometheus: |
80
+ time() - pipeline_last_success_timestamp_seconds
81
+
82
+ completitud:
83
+ formula: "registros_procesados / registros_esperados"
84
+ umbral_bueno: "> 99%"
85
+ query_prometheus: |
86
+ pipeline_records_processed_total
87
+ / pipeline_records_expected_total * 100
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 3. Error budget y política de burn rate
93
+
94
+ ### Cálculo de error budget
95
+
96
+ ```python
97
+ def calcular_error_budget(slo_porcentaje: float, ventana_dias: int = 28) -> dict:
98
+ """Calcula el error budget para un SLO dado."""
99
+ uptime_permitido = 1 - (slo_porcentaje / 100)
100
+ minutos_totales = ventana_dias * 24 * 60
101
+ minutos_downtime = minutos_totales * uptime_permitido
102
+
103
+ return {
104
+ "slo": f"{slo_porcentaje}%",
105
+ "ventana": f"{ventana_dias} días",
106
+ "downtime_permitido_min": round(minutos_downtime, 1),
107
+ "downtime_permitido_horas": round(minutos_downtime / 60, 2),
108
+ "requests_fallidos_permitidos": f"{uptime_permitido * 100:.3f}% del total",
109
+ }
110
+
111
+ # Ejemplos comunes:
112
+ # 99.0% → 403.2 min / 6.72 h por mes
113
+ # 99.5% → 201.6 min / 3.36 h por mes
114
+ # 99.9% → 43.8 min / 0.73 h por mes
115
+ # 99.95% → 21.9 min / 0.37 h por mes
116
+ # 99.99% → 4.38 min por mes
117
+ ```
118
+
119
+ ### Política de consumo de error budget
120
+
121
+ | Estado del budget | Acción |
122
+ |-------------------|--------|
123
+ | > 50% disponible | Operación normal, todos los deploys habilitados |
124
+ | 20%–50% disponible | Solo deploys con feature flag y rollback en < 5 min |
125
+ | < 20% disponible | Solo hotfixes críticos, congelar deploys regulares |
126
+ | 0% agotado | Modo emergencia: post-mortem obligatorio, solo incidente activo |
127
+
128
+ La regla del 20% aplica al porcentaje **restante** en la ventana actual de 28
129
+ días. No se calcula sobre el budget anual acumulado.
130
+
131
+ ---
132
+
133
+ ## 4. Alertas accionables (no ruidosas)
134
+
135
+ Las alertas basadas en burn rate son superiores a los thresholds estáticos
136
+ porque detectan tanto incidentes rápidos como degradaciones lentas.
137
+
138
+ ```yaml
139
+ # Alerta de burn rate alto — P1, requiere atención en 1 hora
140
+ # Lógica: consumimos el budget 14x más rápido de lo sostenible
141
+ - alert: ErrorBudgetBurnRateAlto
142
+ expr: |
143
+ (
144
+ sum(rate(http_requests_total{code=~"5.."}[1h])) /
145
+ sum(rate(http_requests_total[1h]))
146
+ ) > (14 * (1 - 0.999))
147
+ for: 5m
148
+ labels:
149
+ severity: critical
150
+ annotations:
151
+ summary: "Error budget consumiéndose 14x más rápido — revisar en 1 hora"
152
+ runbook: "https://wiki/runbooks/error-budget-burn"
153
+ accion: "Ver logs de errores 5xx en los últimos 30 minutos"
154
+
155
+ # Alerta de burn rate moderado — P2, investigar en el día
156
+ # Lógica: consumimos el budget 6x más rápido, se agotará en ~5 días
157
+ - alert: ErrorBudgetBurnRateModerado
158
+ expr: |
159
+ (
160
+ sum(rate(http_requests_total{code=~"5.."}[6h])) /
161
+ sum(rate(http_requests_total[6h]))
162
+ ) > (6 * (1 - 0.999))
163
+ for: 30m
164
+ labels:
165
+ severity: warning
166
+ annotations:
167
+ summary: "Error budget consumiéndose 6x más rápido — investigar hoy"
168
+ runbook: "https://wiki/runbooks/error-budget-burn"
169
+ accion: "Revisar tendencia de errores en el dashboard de SLO"
170
+
171
+ # Alerta de budget bajo — recordatorio de política
172
+ - alert: ErrorBudgetBajo
173
+ expr: |
174
+ (error_budget_remaining_ratio) < 0.20
175
+ for: 0m
176
+ labels:
177
+ severity: warning
178
+ annotations:
179
+ summary: "Error budget < 20% — activar política de deploys conservadores"
180
+ runbook: "https://wiki/runbooks/error-budget-policy"
181
+ ```
182
+
183
+ ### Tabla de multiplicadores de burn rate
184
+
185
+ | Severidad | Multiplicador | Se agota en | `for` recomendado |
186
+ |-----------|--------------|-------------|-------------------|
187
+ | Critical (P1) | 14.4x | ~2 días | 5m |
188
+ | Warning (P2) | 6x | ~5 días | 30m |
189
+ | Info (P3) | 3x | ~9 días | 1h |
190
+
191
+ ---
192
+
193
+ ## 5. Runbook template
194
+
195
+ ```markdown
196
+ # Runbook: [Nombre del Incidente/Alerta]
197
+
198
+ ## Cuando activar
199
+ - Alerta: [nombre exacto de la alerta en Prometheus/Datadog]
200
+ - Severidad: [P1/P2/P3]
201
+ - SLO afectado: [disponibilidad/latencia/etc]
202
+
203
+ ## Diagnóstico rápido (primeros 5 minutos)
204
+ 1. `kubectl get pods -n produccion` — ¿hay pods en CrashLoopBackOff?
205
+ 2. Revisar dashboard: [URL del dashboard]
206
+ 3. Últimos deploys: `kubectl rollout history deployment/mi-api`
207
+
208
+ ## Acciones de mitigación
209
+ ### Si hay pods fallando:
210
+ ```bash
211
+ kubectl rollout undo deployment/mi-api
212
+ kubectl rollout status deployment/mi-api
213
+ ```
214
+
215
+ ### Si es problema de base de datos:
216
+ 1. Verificar conexiones activas: [query SQL]
217
+ 2. Revisar slow queries: [URL de logs]
218
+
219
+ ## Escalación
220
+ - P1 (SLO breach): escalar a Tech Lead inmediatamente
221
+ - P2 (burn rate alto): escalar si no se resuelve en 30 min
222
+ - Contacto de escalación: [nombre] — [medio]
223
+
224
+ ## Post-mortem
225
+ - Abrir ticket en [sistema] con template de post-mortem
226
+ - Conducir revisión en las 48 horas siguientes
227
+ ```
228
+
229
+ ---
230
+
231
+ ## 6. Post-mortem blameless
232
+
233
+ ```markdown
234
+ # Post-mortem: [Título del Incidente]
235
+ **Fecha**: [fecha] **Duración**: [N horas M minutos] **Severidad**: P[N]
236
+
237
+ ## Impacto
238
+ - Usuarios afectados: [N usuarios / % del total]
239
+ - SLO consumido: [X% del error budget mensual]
240
+ - Ingresos en riesgo: [estimado si aplica]
241
+
242
+ ## Causa raíz
243
+ [Descripción técnica objetiva — SIN mencionar nombres de personas.
244
+ Ejemplo correcto: "el proceso de deploy no tenía validación de health check
245
+ antes de enrutar tráfico al nuevo pod."
246
+ Ejemplo incorrecto: "Juan olvidó activar el health check."]
247
+
248
+ ## Timeline
249
+ | Hora | Evento |
250
+ |------|--------|
251
+ | 14:32 | Primera alerta disparada |
252
+ | 14:38 | Ingeniero de guardia detecta el incidente |
253
+ | 15:10 | Causa raíz identificada |
254
+ | 15:25 | Mitigación aplicada, SLO recuperado |
255
+ | 16:00 | Servicio estable, incidente cerrado |
256
+
257
+ ## Qué funcionó bien
258
+ - Las alertas dispararon dentro del SLO de detección
259
+ - El runbook tenía la solución correcta documentada
260
+
261
+ ## Qué no funcionó
262
+ - El deploy no tenía feature flag para rollback rápido
263
+ - No había alerta de degradación antes del incidente completo
264
+
265
+ ## Acciones correctivas
266
+ | Acción | Responsable | Fecha límite | Prioridad |
267
+ |--------|-------------|--------------|-----------|
268
+ | Agregar feature flag a todos los deploys del módulo de pago | [equipo] | [fecha] | P1 |
269
+ | Mejorar el runbook con el nuevo comando de diagnóstico | [equipo] | [fecha] | P2 |
270
+ | Agregar alerta de latencia p95 como señal temprana | [equipo] | [fecha] | P2 |
271
+ ```
272
+
273
+ ---
274
+
275
+ ## 7. MUST DO / MUST NOT DO
276
+
277
+ ### MUST DO
278
+
279
+ - Alertas basadas en SLO burn rate, no en thresholds estáticos de CPU/memoria.
280
+ - Escribir el runbook **antes** de configurar la alerta. Si no hay acción documentada, la alerta genera ruido sin valor.
281
+ - Conducir post-mortems blameless dentro de 48 horas del cierre del incidente.
282
+ - Aplicar la política de error budget: no deploy cuando budget < 20% del período.
283
+ - Usar ventana rolling de 28 días para SLOs — evita el "reset" de inicio de mes.
284
+ - Definir el SLO siempre más estricto que el SLA para tener margen de seguridad.
285
+ - Tener primario y secundario de on-call para cada servicio crítico.
286
+
287
+ ### MUST NOT DO
288
+
289
+ - NUNCA culpar a personas en post-mortems — ni directa ni implícitamente.
290
+ - NUNCA poner el SLA igual o más alto que el SLO interno.
291
+ - NUNCA configurar una alerta sin su runbook correspondiente.
292
+ - NUNCA ignorar cuando el error budget spend supera el 50% en la primera semana del período.
293
+ - NUNCA hacer chaos engineering sin tener el SLO baseline medido y el budget > 50%.
294
+ - NUNCA usar latencia promedio en alertas — usar p99. El promedio oculta percentiles altos.
295
+ - NUNCA dejar acciones correctivas de post-mortem sin responsable y fecha límite.
296
+
297
+ ---
298
+
299
+ ## 8. Tabla de referencias
300
+
301
+ | Tema | Archivo |
302
+ |------|---------|
303
+ | Chaos engineering: steady state, herramientas, safety | [recursos/chaos-engineering.md](recursos/chaos-engineering.md) |
304
+ | On-call: rotación, escalación, fatiga de alertas | [recursos/oncall-design.md](recursos/oncall-design.md) |
305
+ | Alertas Prometheus con runbook completo | `Skill("monitoring-alertas")` |
306
+ | Implementación de métricas en código | `Skill("observabilidad-swl")` |
307
+
308
+ ---
309
+
310
+ ## Checklist de revisión SRE
311
+
312
+ - [ ] SLIs definidos como queries verificables (no descripciones vagas).
313
+ - [ ] SLO más estricto que el SLA en al menos 0.05%.
314
+ - [ ] Error budget calculado y documentado junto al SLO.
315
+ - [ ] Política de error budget documentada y conocida por el equipo.
316
+ - [ ] Cada alerta tiene runbook con diagnóstico y mitigación.
317
+ - [ ] Alertas basadas en burn rate, no en thresholds estáticos.
318
+ - [ ] Post-mortem redactado sin nombres de culpables.
319
+ - [ ] Acciones correctivas con responsable y fecha límite asignados.
320
+ - [ ] On-call con primario y secundario para cada servicio P1.
321
+ - [ ] Chaos engineering solo cuando budget > 50% y en staging primero.
322
+
323
+ ---
324
+
325
+ ## Gotchas / Errores comunes no obvios
326
+
327
+ **Un SLO de 99.9% en ventana rolling de 28 días permite 40.3 minutos de downtime, pero si el equipo usa ventana de mes calendario reinicia el contador cada 1 de mes, creando un incentivo perverso para hacer deploys riesgosos los primeros días del mes cuando el budget está lleno**: con ventana de mes calendario, un incidente de 35 minutos el día 28 consume el 87% del budget, pero el mismo incidente el día 2 consume el mismo 87% pero con 26 días para recuperarse. Causa: el mes calendario crea un "reset" artificial que desconecta el budget del riesgo real acumulado. Fix: usar siempre ventana rolling de 28 días. La ventana rolling refleja el riesgo real que los usuarios experimentan en los últimos 28 días, independientemente de cuándo empieza el mes.
328
+
329
+ **Las alertas de burn rate multiples ventanas (1h + 6h) producen falsos positivos en sistemas con carga diurna/nocturna porque el burn rate de la ventana corta (1h) dispara fuera de horario aunque el presupuesto mensual esté intacto**: un sistema con 10x más tráfico en horario laboral tiene naturalmente más errores absolutos en esas horas; si el SLI se define como "errores / total requests", el burn rate de 1h puede dispararse a las 9am sin que sea un incidente real. Causa: las alertas de burn rate asumen una tasa de requests aproximadamente uniforme; con carga variable, la misma tasa de errores genera diferentes burn rates. Fix: definir el SLI como proporción de errores (no absolutos) y verificar que el denominador (total requests) no sea cercano a cero en ventanas cortas fuera de horario, o añadir un mínimo de volumen de requests como precondición de la alerta.
330
+
331
+ **Los post-mortems blameless fallan en práctica cuando el "sistema" responsabilizado es en realidad una sola persona que tomó una decisión, creando frustración en el equipo porque todos saben quién fue pero no se puede decir**: la redacción "el deploy fue realizado sin validar el rollback" es técnicamente blameless pero todos saben que fue una persona específica. La persona en cuestión se siente expuesta pero sin poder defenderse, y el equipo siente que el proceso es hipócrita. Causa: blameless no significa ignorar la agencia humana — significa identificar los fallos del sistema que hicieron posible el error humano. Fix: reformular desde "qué fallo en el sistema que permitió que esta decisión se tomara": "no existía un checklist de deploy que incluyera verificación de rollback" o "el proceso de deploy no requería aprobación de un segundo ingeniero". La acción correctiva ataca el sistema, no la persona.
332
+
333
+ **El error budget policy de "no deploy cuando budget < 20%" bloquea hotfixes críticos de seguridad porque se aplica sin distinción al tipo de cambio**: un equipo que agotó el 85% del budget por un incidente de infraestructura no puede deployar un parche de seguridad CVE crítico porque la política lo bloquea automáticamente. Causa: la política de error budget fue diseñada para frenar deploys de features riesgosas, no hotfixes de seguridad. Fix: la política debe tener excepciones explícitas: (1) hotfixes de seguridad CVE con severidad CVSS ≥ 8 siempre se pueden deployar con aprobación del Tech Lead, (2) rollbacks de un cambio reciente que causó el budget burn siempre se permiten, (3) deploys de configuración sin cambios de código tienen presupuesto separado.
@@ -0,0 +1,241 @@
1
+ # Chaos Engineering — Guía de Confiabilidad Proactiva
2
+
3
+ El chaos engineering es la disciplina de experimentar en un sistema con el
4
+ objetivo de descubrir debilidades antes de que se manifiesten en incidentes
5
+ reales. No es romper cosas al azar — es ciencia aplicada con hipótesis,
6
+ métricas y criterios de parada.
7
+
8
+ ---
9
+
10
+ ## Principios fundamentales
11
+
12
+ ### 1. Steady State Hypothesis (hipótesis de estado estable)
13
+
14
+ Antes de inyectar fallo, debes definir cómo se ve el sistema funcionando
15
+ correctamente. Sin esta definición, no puedes saber si el experimento causó
16
+ un problema o si el problema ya existía.
17
+
18
+ ```yaml
19
+ # Ejemplo de steady state hypothesis
20
+ steady_state:
21
+ nombre: "API de pedidos en operación normal"
22
+ metricas:
23
+ - nombre: disponibilidad
24
+ query: "sum(rate(http_requests_total{code!~'5..'}[5m])) / sum(rate(http_requests_total[5m]))"
25
+ umbral_minimo: 0.999 # 99.9%
26
+ - nombre: latencia_p99
27
+ query: "histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))"
28
+ umbral_maximo: 0.5 # 500ms
29
+ - nombre: tasa_pedidos_por_minuto
30
+ query: "rate(pedidos_creados_total[5m]) * 60"
31
+ umbral_minimo: 50 # al menos 50 pedidos/min en horario laboral
32
+ ```
33
+
34
+ Si cualquiera de estas métricas no está en el umbral esperado **antes** de
35
+ empezar, cancelar el experimento. El sistema no está en estado estable.
36
+
37
+ ### 2. Gradualidad: staging antes que producción
38
+
39
+ El path correcto es siempre progresivo:
40
+
41
+ ```
42
+ Desarrollo → Staging con tráfico simulado → Producción en horas valle
43
+ → Producción en horario completo → Chaos continuo automatizado
44
+ ```
45
+
46
+ Nunca saltar pasos. Un experimento en producción sin haberlo ejecutado primero
47
+ en staging es un incidente disfrazado de experimento.
48
+
49
+ ### 3. Radio de explosión mínimo (blast radius)
50
+
51
+ Empieza con el experimento de menor impacto posible. Si quieres probar resiliencia
52
+ ante fallo de base de datos, comienza con una instancia de réplica, no con el
53
+ primario.
54
+
55
+ ---
56
+
57
+ ## Herramientas por capa del sistema
58
+
59
+ ### Kubernetes / contenedores
60
+
61
+ | Herramienta | Uso | Instalación |
62
+ |-------------|-----|-------------|
63
+ | **Chaos Monkey** (Netflix) | Terminar instancias aleatoriamente | `brew install chaos-monkey` |
64
+ | **Litmus** | Experimentos nativos en K8s (pods, nodos, red) | `kubectl apply -f litmus-operator.yaml` |
65
+ | **Chaos Mesh** | Chaos nativo K8s con UI web | `helm install chaos-mesh chaos-mesh/chaos-mesh` |
66
+
67
+ ```yaml
68
+ # Litmus: experimento de fallo de pod
69
+ apiVersion: litmuschaos.io/v1alpha1
70
+ kind: ChaosEngine
71
+ metadata:
72
+ name: pod-delete-experiment
73
+ spec:
74
+ appinfo:
75
+ appns: produccion
76
+ applabel: "app=api-pedidos"
77
+ experiments:
78
+ - name: pod-delete
79
+ spec:
80
+ components:
81
+ env:
82
+ - name: TOTAL_CHAOS_DURATION
83
+ value: "60" # 60 segundos de caos
84
+ - name: CHAOS_INTERVAL
85
+ value: "10" # eliminar pod cada 10 segundos
86
+ - name: FORCE
87
+ value: "false" # graceful shutdown, no kill -9
88
+ ```
89
+
90
+ ### Red / latencia
91
+
92
+ | Herramienta | Uso | Instalación |
93
+ |-------------|-----|-------------|
94
+ | **Toxiproxy** (Shopify) | Simular latencia, pérdida de paquetes, corte de conexión | `go install github.com/Shopify/toxiproxy/v2/cmd/toxiproxy-server@latest` |
95
+ | **tc (Linux traffic control)** | Control de red a nivel de kernel | Incluido en Linux |
96
+
97
+ ```bash
98
+ # Toxiproxy: agregar latencia de 100ms al 10% de las conexiones a la BD
99
+ toxiproxy-cli toxic add mi-postgres \
100
+ --type latency \
101
+ --attribute latency=100 \
102
+ --attribute jitter=50 \
103
+ --toxicity 0.10 # afectar 10% de las conexiones
104
+
105
+ # Limpiar después del experimento
106
+ toxiproxy-cli toxic remove mi-postgres --toxicName latency_downstream
107
+ ```
108
+
109
+ ### Recursos del sistema
110
+
111
+ | Herramienta | Uso |
112
+ |-------------|-----|
113
+ | **Gremlin** | Platform SaaS completa: CPU, memoria, disco, red, proceso |
114
+ | **stress-ng** | Stress testing de CPU y memoria (open source) |
115
+ | `dd` + `fallocate` | Simular disco lleno |
116
+
117
+ ```bash
118
+ # stress-ng: consumir 80% de CPU por 60 segundos
119
+ stress-ng --cpu 4 --cpu-load 80 --timeout 60s
120
+
121
+ # Simular disco casi lleno (dejar solo 100MB libres)
122
+ fallocate -l $(df / | tail -1 | awk '{print $4 - 100000}')k /tmp/disco-lleno.tmp
123
+ # Limpiar inmediatamente después
124
+ rm /tmp/disco-lleno.tmp
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Experimentos básicos por tipo
130
+
131
+ ### Experimento 1: Fallo de pod/instancia
132
+
133
+ **Hipótesis**: el servicio sigue disponible cuando un pod falla porque Kubernetes
134
+ lo reinicia y el load balancer redirige el tráfico.
135
+
136
+ ```bash
137
+ # Verificar steady state
138
+ kubectl top pods -n produccion
139
+
140
+ # Inyectar fallo
141
+ kubectl delete pod <nombre-pod> -n produccion
142
+
143
+ # Observar recuperación
144
+ kubectl get pods -n produccion -w
145
+
146
+ # Verificar que el SLO no se violó
147
+ # (revisar en Grafana: disponibilidad durante los 2 minutos del experimento)
148
+ ```
149
+
150
+ **Criterio de parada**: si la disponibilidad cae por debajo del SLO, detener
151
+ y analizar antes de continuar.
152
+
153
+ ### Experimento 2: Latencia de red hacia dependencias
154
+
155
+ **Hipótesis**: el servicio degrada graciosamente cuando la base de datos tiene
156
+ latencia alta, sin causar errores 5xx.
157
+
158
+ ```bash
159
+ # Configurar toxiproxy frente a PostgreSQL
160
+ toxiproxy-cli create mi-postgres --listen 0.0.0.0:5433 --upstream postgres:5432
161
+
162
+ # Inyectar 300ms de latencia
163
+ toxiproxy-cli toxic add mi-postgres --type latency --attribute latency=300
164
+
165
+ # Observar comportamiento (debe ver latencia en p99 del servicio, no errores)
166
+ # Medir: ¿el circuit breaker se activa? ¿los timeouts de conexión están bien configurados?
167
+
168
+ # Limpiar
169
+ toxiproxy-cli toxic remove mi-postgres --toxicName latency_downstream
170
+ toxiproxy-cli delete mi-postgres
171
+ ```
172
+
173
+ ### Experimento 3: Agotamiento de recursos
174
+
175
+ **Hipótesis**: el sistema tiene circuit breakers en el pool de conexiones de BD
176
+ que previenen cascada de fallos cuando las conexiones se agotan.
177
+
178
+ ```bash
179
+ # Saturar el pool de conexiones (con una herramienta de pruebas de carga)
180
+ pgbench -c 100 -j 10 -T 60 postgresql://user@localhost/db
181
+
182
+ # Observar: ¿el servicio retorna 503 en lugar de colgar?
183
+ # ¿Las métricas de saturación alertaron antes de que se violara el SLO?
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Safety: reglas de parada automática
189
+
190
+ Todo experimento de chaos **DEBE** tener un kill switch claro:
191
+
192
+ ```yaml
193
+ # Criterios de parada automática (Litmus ChaosEngine)
194
+ spec:
195
+ jobCleanUpPolicy: retain
196
+ components:
197
+ # Detener si disponibilidad < 99.5% durante el experimento
198
+ statusCheckURLs:
199
+ - "http://api-pedidos/health/ready"
200
+ # Revertir automáticamente después de N segundos
201
+ experimentTimeout: 300 # 5 minutos máximo
202
+ ```
203
+
204
+ ### Checklist de safety antes de ejecutar
205
+
206
+ - [ ] Steady state definido con queries y umbrales.
207
+ - [ ] Error budget > 50% disponible.
208
+ - [ ] El experimento se ejecutó primero en staging.
209
+ - [ ] Kill switch configurado y probado.
210
+ - [ ] Primario y secundario de on-call disponibles.
211
+ - [ ] Runbooks actualizados para los tipos de fallo que se inyectarán.
212
+ - [ ] Ventana de mantenimiento comunicada a stakeholders (para producción).
213
+ - [ ] Experimento programado fuera del período de mayor tráfico.
214
+
215
+ ---
216
+
217
+ ## Cuándo NO hacer chaos engineering
218
+
219
+ Detener y no ejecutar si:
220
+
221
+ - El error budget está por debajo del 50% del período actual.
222
+ - Hay un incidente activo o abierto en el servicio objetivo.
223
+ - El equipo no tiene runbooks para los tipos de fallo que se van a inyectar.
224
+ - El servicio no tiene métricas de SLI funcionando correctamente.
225
+ - Es la primera semana después de un deploy mayor o una migración de base de datos.
226
+ - No hay un ingeniero responsable disponible durante todo el experimento.
227
+
228
+ ---
229
+
230
+ ## Madurez del programa de chaos
231
+
232
+ | Nivel | Descripción | Prerequisito |
233
+ |-------|-------------|-------------|
234
+ | 0 | Sin chaos engineering | — |
235
+ | 1 | Experimentos manuales en staging | SLOs definidos y medidos |
236
+ | 2 | Experimentos manuales en producción (horario laboral) | Nivel 1 + runbooks completos |
237
+ | 3 | Chaos automatizado programado (staging) | Nivel 2 + CI integrado |
238
+ | 4 | Chaos continuo en producción (GameDays regulares) | Nivel 3 + cultura SRE madura |
239
+
240
+ La mayoría de los equipos operan bien en Nivel 2. No existe ninguna razón para
241
+ apresurarse a Nivel 4.