@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,137 @@
1
+ ---
2
+ name: contenedores-docker
3
+ description: Docker y containerización. Dockerfiles optimizados con multi-stage builds, docker-compose, volúmenes, networking, health checks, security scanning, build caching, distroless images. Anti-patrones comunes.
4
+ version: "1.0.0"
5
+ herramientasPermitidas: [Read]
6
+ exclusiones:
7
+ - "No cargar para orquestación Kubernetes (Deployments, Services, Helm, HPA) — para Kubernetes cargar `kubernetes-orquestacion`."
8
+ - "No cargar para infraestructura como código con Terraform o Pulumi — para IaC cargar `terraform-experto`."
9
+ - "No cargar para CI/CD pipelines (GitHub Actions, GitLab CI, build triggers) — para pipelines cargar `ci-cd-pipelines`."
10
+ - "No cargar para registros de contenedores en cloud (ECR, GCR, ACR) y sus políticas de acceso — para cloud cargar `cloud-aws`, `azure-cloud` o `gcp-cloud`."
11
+ evolvable: true # default para skill estandar
12
+ ---
13
+ # Docker y Containerización — Producción
14
+
15
+ ## Cuándo NO cargar
16
+
17
+ - La tarea es orquestación de contenedores con Kubernetes: Deployments, Services, Helm, HPA — cargar `kubernetes-orquestacion`.
18
+ - El trabajo es infraestructura como código con Terraform o Pulumi — cargar `terraform-experto`.
19
+ - La tarea es configurar pipelines CI/CD: GitHub Actions, GitLab CI, build triggers automáticos — cargar `ci-cd-pipelines`.
20
+ - El trabajo es con registros de contenedores en cloud (ECR, GCR, ACR) y sus políticas IAM — cargar `cloud-aws`, `azure-cloud` o `gcp-cloud`.
21
+
22
+ Docker en producción requiere imágenes seguras, pequeñas y reproducibles.
23
+ Este skill cubre desde Dockerfiles hasta orquestación con Compose.
24
+
25
+ ---
26
+
27
+ ## Reglas Obligatorias
28
+
29
+ 1. **SIEMPRE multi-stage build** — imagen final < 200MB si posible.
30
+ 2. **NUNCA correr como root** — definir `USER` no-root en el Dockerfile.
31
+ 3. **SIEMPRE `.dockerignore`** — sin él, el contexto incluye `.git`, `.env`, `node_modules`.
32
+ 4. **SIEMPRE `HEALTHCHECK`** — el orquestador necesita saber si el contenedor está sano.
33
+ 5. **NUNCA secrets en `ARG` o `ENV`** del Dockerfile — son visibles en `docker history`.
34
+ 6. **SIEMPRE tag de versión exacta** en producción — NUNCA `latest`.
35
+ 7. **`CMD` en forma exec (array)** — `CMD ["ejecutable", "arg"]`, no shell string.
36
+ 8. **Copiar dependencias ANTES que código** — maximiza el caché de build.
37
+ 9. **Limpiar apt-get en la misma capa de RUN** — `rm -rf /var/lib/apt/lists/*`.
38
+
39
+ ---
40
+
41
+ ## Dockerfile Base — Python API
42
+
43
+ ```dockerfile
44
+ # Etapa 1: Dependencias (caché eficiente)
45
+ FROM python:3.12-slim AS deps
46
+
47
+ RUN apt-get update && apt-get install -y --no-install-recommends \
48
+ build-essential libpq-dev \
49
+ && rm -rf /var/lib/apt/lists/*
50
+
51
+ WORKDIR /app
52
+ COPY pyproject.toml uv.lock* requirements*.txt ./
53
+ RUN pip install --no-cache-dir --upgrade pip && \
54
+ pip install --no-cache-dir -r requirements.txt
55
+
56
+ # Etapa 2: Build
57
+ FROM deps AS builder
58
+ COPY . .
59
+ RUN python -m compileall -q /app
60
+
61
+ # Etapa 3: Producción (imagen final mínima)
62
+ FROM python:3.12-slim AS production
63
+
64
+ RUN groupadd --gid 1001 appuser && \
65
+ useradd --uid 1001 --gid appuser --shell /bin/bash --create-home appuser
66
+
67
+ WORKDIR /app
68
+
69
+ COPY --from=builder --chown=appuser:appuser /usr/local/lib/python3.12/site-packages \
70
+ /usr/local/lib/python3.12/site-packages
71
+ COPY --from=builder --chown=appuser:appuser /app /app
72
+
73
+ RUN apt-get update && apt-get install -y --no-install-recommends \
74
+ libpq5 curl \
75
+ && rm -rf /var/lib/apt/lists/*
76
+
77
+ USER appuser
78
+
79
+ ENV PYTHONDONTWRITEBYTECODE=1 \
80
+ PYTHONUNBUFFERED=1 \
81
+ PYTHONFAULTHANDLER=1 \
82
+ PORT=8000
83
+
84
+ EXPOSE 8000
85
+
86
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
87
+ CMD curl -f http://localhost:8000/health || exit 1
88
+
89
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", \
90
+ "--workers", "2", "--log-level", "info"]
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Anti-patrones Comunes
96
+
97
+ | Anti-patrón | Consecuencia | Corrección |
98
+ |-------------|-------------|------------|
99
+ | `FROM python:3.12` (imagen completa) | Imagen 1GB+ innecesaria | `python:3.12-slim` o `distroless` |
100
+ | Correr como `root` en contenedor | Escalación de privilegios | `USER 1001` en Dockerfile |
101
+ | `COPY . .` antes de dependencias | Invalidar caché en cada cambio | Copiar deps primero |
102
+ | Sin `.dockerignore` | Contexto enorme, secretos incluidos | `.dockerignore` siempre |
103
+ | `apt-get` sin limpiar | Imagen más grande | Limpiar en misma `RUN` |
104
+ | Secrets en `ARG` o `ENV` | Visibles en `docker history` | Runtime env o secrets |
105
+ | Latest tag en producción | No reproducible | Tag de versión exacta |
106
+ | Sin `HEALTHCHECK` | Orquestador no sabe si está sano | `HEALTHCHECK` siempre |
107
+ | `CMD` como shell string | Signals no llegan al proceso | Forma exec (array) |
108
+ | Múltiples procesos en un contenedor | Viola responsabilidad única | Un proceso por contenedor |
109
+
110
+ ---
111
+
112
+ ## Checklist de Imagen Productiva
113
+
114
+ - [ ] Multi-stage build — imagen final < 200MB si posible
115
+ - [ ] Usuario no-root definido
116
+ - [ ] Variables sensibles fuera de la imagen
117
+ - [ ] `HEALTHCHECK` definido
118
+ - [ ] `.dockerignore` presente y completo
119
+ - [ ] Dependencias del sistema limpiadas en misma capa de RUN
120
+ - [ ] Tag de versión semántica (no `latest`) en producción
121
+ - [ ] Escaneo de vulnerabilidades en CI/CD
122
+ - [ ] `CMD` en forma exec (array), no shell
123
+ - [ ] `PYTHONUNBUFFERED=1` y `PYTHONDONTWRITEBYTECODE=1` para Python
124
+
125
+ ---
126
+
127
+ Para ejemplos completos de multi-stage Node.js/Angular, .dockerignore, docker-compose, networking, volúmenes, secrets, security scanning en CI y optimización de build cache, ver [recursos/ejemplos-y-configuraciones.md](recursos/ejemplos-y-configuraciones.md).
128
+
129
+ ## Gotchas / Errores comunes no obvios
130
+
131
+ **`COPY . .` antes de `RUN pip install` invalida el caché de build en cada cambio de código fuente**: Docker invalida el caché de una capa cuando cambia cualquier archivo copiado — si el código fuente cambia en cada commit, la capa de instalación de dependencias nunca se cachea. Causa: el orden de las instrucciones en el Dockerfile determina la eficiencia del caché. Fix: copiar PRIMERO los archivos de dependencias (`pyproject.toml`, `requirements.txt`, `package.json`) e instalar, luego copiar el código fuente — las dependencias solo se reinstalan cuando sus archivos de definición cambian.
132
+
133
+ **`CMD ["python", "app.py"]` en lugar de `CMD ["gunicorn", ...]` en producción deja el proceso de Python sin manejo de señales SIGTERM**: cuando Kubernetes envía `SIGTERM` para terminar gracefully un pod, el proceso debe recibirlo y terminar limpiamente. Python corriendo con `python app.py` puede no propagar la señal correctamente si usa threads. Causa: `CMD` en forma exec pasa la señal al proceso directamente, pero si el proceso no maneja `SIGTERM`, el contenedor espera el `SIGKILL` tras el `terminationGracePeriodSeconds`. Fix: usar un servidor WSGI/ASGI (`gunicorn`, `uvicorn`) que maneja `SIGTERM` gracefully, o implementar el signal handler en la aplicación.
134
+
135
+ **Secrets pasados como `ARG` en el Dockerfile son visibles en `docker history` aunque se eliminen en una capa posterior**: `ARG SECRET_KEY` seguido de `RUN rm -f /app/.env` no elimina el valor del ARG del historial de la imagen — `docker history --no-trunc imagen` muestra los valores de los ARG. Causa: `docker history` registra los comandos de cada capa, incluyendo los valores de ARG usados. Fix: NUNCA pasar secretos como `ARG` o `ENV` en el Dockerfile; para secrets en build-time usar `--secret` de Docker BuildKit: `RUN --mount=type=secret,id=api_key cat /run/secrets/api_key`.
136
+
137
+ **`.dockerignore` mal configurado incluye archivos `.env` o `node_modules` en el contexto de build, ralentizando el daemon y exponiendo secretos**: si `.dockerignore` no existe o no excluye `node_modules`, el contexto de build puede ser de cientos de MB — todo se transfiere al daemon antes del build. Causa: el contexto de build incluye todo el directorio por defecto. Fix: crear `.dockerignore` con al menos `.git`, `node_modules`, `__pycache__`, `.env*`, `*.pyc`, `dist`, `build`, y verificar el tamaño del contexto con `docker build` mirando la línea "Sending build context to Docker daemon X.XX MB".
@@ -0,0 +1,160 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Dockerfile multi-stage para aplicaciones Python (FastAPI / Django)
3
+ # Optimizado para producción: imagen pequeña, sin root, sin caché innecesario.
4
+ #
5
+ # USO:
6
+ # docker build -t mi-app:1.0.0 .
7
+ # docker build --target deps -t mi-app:deps . # solo la etapa de dependencias
8
+ #
9
+ # VARIABLES DE BUILD (--build-arg):
10
+ # PYTHON_VERSION Versión de Python (default: 3.12)
11
+ # APP_PORT Puerto expuesto (default: 8000)
12
+ # APP_USER_UID UID del usuario sin privilegios (default: 1001)
13
+ #
14
+ # INSTRUCCIÓN: Reemplazar todos los valores entre [corchetes] con los reales.
15
+ # ═══════════════════════════════════════════════════════════════════════════════
16
+
17
+ ARG PYTHON_VERSION=3.12
18
+ ARG APP_PORT=8000
19
+ ARG APP_USER_UID=1001
20
+
21
+ # ─────────────────────────────────────────────────────────────────────────────
22
+ # Etapa 1: deps — instalar dependencias Python (máximo cache hit en rebuilds)
23
+ # ─────────────────────────────────────────────────────────────────────────────
24
+ FROM python:${PYTHON_VERSION}-slim AS deps
25
+
26
+ # Dependencias del sistema mínimas (solo las necesarias para compilar wheels)
27
+ # INSTRUCCIÓN: ajustar según las librerías Python que uses
28
+ # psycopg2 → libpq-dev
29
+ # Pillow → libjpeg-dev zlib1g-dev
30
+ # lxml → libxml2-dev libxslt-dev
31
+ # cryptography → libssl-dev
32
+ RUN apt-get update \
33
+ && apt-get install -y --no-install-recommends \
34
+ build-essential \
35
+ libpq-dev \
36
+ && rm -rf /var/lib/apt/lists/*
37
+
38
+ WORKDIR /app
39
+
40
+ # Copiar SOLO los archivos de dependencias primero.
41
+ # Esto permite que Docker reutilice la capa de pip install si el código cambia
42
+ # pero las dependencias no cambian.
43
+ COPY pyproject.toml uv.lock* requirements*.txt ./
44
+
45
+ # Actualizar pip e instalar dependencias sin caché
46
+ RUN pip install --no-cache-dir --upgrade pip==24.* \
47
+ && pip install --no-cache-dir -r requirements.txt
48
+
49
+ # ─────────────────────────────────────────────────────────────────────────────
50
+ # Etapa 2: builder — copiar código y precompilar bytecode
51
+ # ─────────────────────────────────────────────────────────────────────────────
52
+ FROM deps AS builder
53
+
54
+ # Copiar el código fuente DESPUÉS de instalar dependencias (mejor cache hit)
55
+ COPY . .
56
+
57
+ # Precompilar .pyc — reduce el tiempo de arranque del contenedor en producción
58
+ # -q suprime output, -b escribe .pyc junto a los .py
59
+ RUN python -m compileall -q /app
60
+
61
+ # ─────────────────────────────────────────────────────────────────────────────
62
+ # Etapa 3: production — imagen final mínima sin herramientas de build
63
+ # ─────────────────────────────────────────────────────────────────────────────
64
+ FROM python:${PYTHON_VERSION}-slim AS production
65
+
66
+ ARG APP_PORT
67
+ ARG APP_USER_UID
68
+
69
+ # Instalar SOLO dependencias de runtime (sin herramientas de compilación)
70
+ # INSTRUCCIÓN: ajustar según las librerías que uses en runtime
71
+ RUN apt-get update \
72
+ && apt-get install -y --no-install-recommends \
73
+ libpq5 \
74
+ curl \
75
+ && rm -rf /var/lib/apt/lists/* \
76
+ && apt-get clean
77
+
78
+ # ── Seguridad: usuario sin privilegios ────────────────────────────────────────
79
+ # NUNCA correr como root en producción
80
+ RUN groupadd --gid ${APP_USER_UID} appuser \
81
+ && useradd \
82
+ --uid ${APP_USER_UID} \
83
+ --gid ${APP_USER_UID} \
84
+ --no-create-home \
85
+ --shell /sbin/nologin \
86
+ appuser
87
+
88
+ WORKDIR /app
89
+
90
+ # Copiar dependencias instaladas y código compilado desde las etapas anteriores
91
+ COPY --from=builder /usr/local/lib/python*/site-packages /usr/local/lib/python3.12/site-packages/
92
+ COPY --from=builder /usr/local/bin /usr/local/bin/
93
+ COPY --from=builder /app /app
94
+
95
+ # Establecer permisos correctos ANTES de cambiar de usuario
96
+ RUN chown -R appuser:appuser /app
97
+
98
+ # Cambiar al usuario sin privilegios
99
+ USER appuser
100
+
101
+ # ── Variables de entorno de runtime ───────────────────────────────────────────
102
+ # INSTRUCCIÓN: estas son las variables mínimas recomendadas para Python en producción
103
+ ENV PYTHONDONTWRITEBYTECODE=1 \
104
+ PYTHONUNBUFFERED=1 \
105
+ PYTHONFAULTHANDLER=1 \
106
+ PYTHONHASHSEED=random \
107
+ # FastAPI/Uvicorn
108
+ PORT=${APP_PORT} \
109
+ # INSTRUCCIÓN: agregar variables de entorno propias de la aplicación
110
+ # Las variables con valores sensibles deben venir de secrets, NO hardcodeadas aquí
111
+ APP_ENV=production
112
+
113
+ EXPOSE ${APP_PORT}
114
+
115
+ # ── Health check ──────────────────────────────────────────────────────────────
116
+ # INSTRUCCIÓN: reemplazar /health con el endpoint real de health check
117
+ # interval: frecuencia del check
118
+ # timeout: tiempo máximo de respuesta
119
+ # start_period: tiempo antes del primer check (para que la app arranque)
120
+ # retries: intentos fallidos antes de marcar como unhealthy
121
+ HEALTHCHECK \
122
+ --interval=30s \
123
+ --timeout=10s \
124
+ --start-period=15s \
125
+ --retries=3 \
126
+ CMD curl -f http://localhost:${APP_PORT}/health || exit 1
127
+
128
+ # ── Comando de inicio ─────────────────────────────────────────────────────────
129
+ # INSTRUCCIÓN: ajustar según el framework que uses
130
+ #
131
+ # FastAPI con Uvicorn:
132
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]
133
+ #
134
+ # FastAPI con Gunicorn + Uvicorn workers (para producción con múltiples CPUs):
135
+ # CMD ["gunicorn", "app.main:app", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000"]
136
+ #
137
+ # Django con Gunicorn:
138
+ # CMD ["gunicorn", "[nombre_proyecto].wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "4"]
139
+
140
+ # ═══════════════════════════════════════════════════════════════════════════════
141
+ # .dockerignore recomendado (crear en la raíz del proyecto):
142
+ # ───────────────────────────────────────────────────────────────────────────────
143
+ # __pycache__/
144
+ # *.pyc
145
+ # *.pyo
146
+ # .pytest_cache/
147
+ # .mypy_cache/
148
+ # .ruff_cache/
149
+ # .git/
150
+ # .gitignore
151
+ # .env
152
+ # .env.*
153
+ # !.env.example
154
+ # tests/
155
+ # docs/
156
+ # *.md
157
+ # docker-compose*.yml
158
+ # Dockerfile*
159
+ # .github/
160
+ # ═══════════════════════════════════════════════════════════════════════════════
@@ -0,0 +1,327 @@
1
+ # Docker — Ejemplos y Configuraciones Completas
2
+
3
+ Referencia extendida de la skill `contenedores-docker`. Contiene Dockerfiles completos,
4
+ docker-compose, networking, volúmenes, security scanning y optimización de caché.
5
+
6
+ ---
7
+
8
+ ## Dockerfile — Node.js + Angular (Multi-stage)
9
+
10
+ ```dockerfile
11
+ # Etapa 1: Dependencias npm
12
+ FROM node:20-alpine AS npm-deps
13
+ WORKDIR /app
14
+ COPY package.json package-lock.json ./
15
+ RUN npm ci --only=production
16
+
17
+ # Etapa 2: Build Angular
18
+ FROM node:20-alpine AS angular-builder
19
+ WORKDIR /app
20
+ COPY package.json package-lock.json ./
21
+ RUN npm ci
22
+ COPY . .
23
+ RUN npm run build -- --configuration=production --output-path=dist
24
+
25
+ # Etapa 3: Nginx para servir el SPA
26
+ FROM nginx:1.25-alpine AS production
27
+
28
+ COPY nginx.conf /etc/nginx/nginx.conf
29
+ COPY --from=angular-builder /app/dist /usr/share/nginx/html
30
+
31
+ RUN chown -R nginx:nginx /usr/share/nginx/html && \
32
+ chown -R nginx:nginx /var/cache/nginx && \
33
+ touch /var/run/nginx.pid && \
34
+ chown nginx:nginx /var/run/nginx.pid
35
+
36
+ USER nginx
37
+
38
+ EXPOSE 80
39
+
40
+ HEALTHCHECK --interval=30s --timeout=5s \
41
+ CMD curl -f http://localhost/health || exit 1
42
+ ```
43
+
44
+ ---
45
+
46
+ ## .dockerignore completo
47
+
48
+ ```dockerignore
49
+ # Control de versiones
50
+ .git
51
+ .gitignore
52
+
53
+ # Dependencias locales
54
+ node_modules
55
+ __pycache__
56
+ *.pyc
57
+ *.pyo
58
+ .venv
59
+ venv
60
+ env
61
+
62
+ # Tests y documentacion
63
+ tests/
64
+ docs/
65
+ *.md
66
+ !README.md
67
+
68
+ # Archivos de configuracion de desarrollo
69
+ .env
70
+ .env.*
71
+ *.env
72
+ docker-compose.override.yml
73
+ .editorconfig
74
+ .eslintrc*
75
+ .prettierrc*
76
+
77
+ # IDE
78
+ .vscode
79
+ .idea
80
+ *.swp
81
+
82
+ # Build outputs locales
83
+ dist/
84
+ build/
85
+ .angular/
86
+ coverage/
87
+ .pytest_cache/
88
+
89
+ # CI/CD
90
+ .github/
91
+ .gitlab-ci.yml
92
+ Dockerfile*
93
+ docker-compose*.yml
94
+ ```
95
+
96
+ ---
97
+
98
+ ## docker-compose — Entorno de Desarrollo Completo
99
+
100
+ ```yaml
101
+ version: '3.9'
102
+
103
+ services:
104
+ api:
105
+ build:
106
+ context: .
107
+ dockerfile: Dockerfile
108
+ target: deps
109
+ command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
110
+ volumes:
111
+ - .:/app
112
+ - /app/.venv
113
+ ports:
114
+ - "8000:8000"
115
+ environment:
116
+ - DATABASE_URL=postgresql+asyncpg://postgres:postgres@db:5432/appdb
117
+ - REDIS_URL=redis://redis:6379/0
118
+ - DEBUG=true
119
+ env_file:
120
+ - .env.local
121
+ depends_on:
122
+ db:
123
+ condition: service_healthy
124
+ redis:
125
+ condition: service_healthy
126
+ networks:
127
+ - app-network
128
+ restart: unless-stopped
129
+
130
+ db:
131
+ image: postgres:15-alpine
132
+ volumes:
133
+ - postgres_data:/var/lib/postgresql/data
134
+ - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
135
+ environment:
136
+ POSTGRES_DB: appdb
137
+ POSTGRES_USER: postgres
138
+ POSTGRES_PASSWORD: postgres
139
+ ports:
140
+ - "5432:5432"
141
+ healthcheck:
142
+ test: ["CMD-SHELL", "pg_isready -U postgres -d appdb"]
143
+ interval: 10s
144
+ timeout: 5s
145
+ retries: 5
146
+ start_period: 30s
147
+ networks:
148
+ - app-network
149
+
150
+ redis:
151
+ image: redis:7-alpine
152
+ command: redis-server --appendonly yes --requirepass "${REDIS_PASSWORD:-dev_password}"
153
+ volumes:
154
+ - redis_data:/data
155
+ ports:
156
+ - "6379:6379"
157
+ healthcheck:
158
+ test: ["CMD", "redis-cli", "ping"]
159
+ interval: 10s
160
+ timeout: 3s
161
+ retries: 3
162
+ networks:
163
+ - app-network
164
+
165
+ nginx:
166
+ image: nginx:1.25-alpine
167
+ volumes:
168
+ - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
169
+ - ./nginx/ssl:/etc/nginx/ssl:ro
170
+ ports:
171
+ - "80:80"
172
+ - "443:443"
173
+ depends_on:
174
+ - api
175
+ networks:
176
+ - app-network
177
+
178
+ volumes:
179
+ postgres_data:
180
+ driver: local
181
+ redis_data:
182
+ driver: local
183
+
184
+ networks:
185
+ app-network:
186
+ driver: bridge
187
+ ipam:
188
+ config:
189
+ - subnet: 172.20.0.0/16
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Networking en Docker
195
+
196
+ ```bash
197
+ # Crear red personalizada
198
+ docker network create --driver bridge --subnet 172.21.0.0/16 mi-red
199
+
200
+ # Inspeccionar red
201
+ docker network inspect mi-red
202
+
203
+ # MAL: usar --link (obsoleto)
204
+ docker run --link db:database api
205
+
206
+ # BIEN: red compartida
207
+ docker run --network mi-red --name api mi-imagen-api
208
+ docker run --network mi-red --name db postgres:15
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Volúmenes — Persistencia Correcta
214
+
215
+ ```yaml
216
+ # 1. Named volumes (RECOMENDADO para datos de BD)
217
+ volumes:
218
+ postgres_data:
219
+
220
+ # 2. Bind mounts (SOLO para desarrollo — hot reload)
221
+ volumes:
222
+ - ./src:/app/src
223
+
224
+ # 3. tmpfs (datos efimeros)
225
+ tmpfs:
226
+ - /tmp
227
+ - /run
228
+
229
+ # MAL: montar directorio completo en produccion
230
+ volumes:
231
+ - .:/app # Incluye .git, node_modules, .env!
232
+
233
+ # BIEN: montar solo lo necesario
234
+ volumes:
235
+ - ./config:/app/config:ro
236
+ - ./logs:/app/logs
237
+ ```
238
+
239
+ ---
240
+
241
+ ## Variables de Entorno y Secrets
242
+
243
+ ```bash
244
+ # MAL: secrets en variables de entorno del Dockerfile
245
+ ENV DATABASE_PASSWORD=supersecreta123
246
+
247
+ # MAL: pasar secrets en build args
248
+ docker build --build-arg DB_PASS=secreto .
249
+
250
+ # BIEN: runtime environment variables
251
+ docker run -e DATABASE_URL="postgresql://..." mi-imagen
252
+
253
+ # BIEN: Docker Secrets (en Swarm)
254
+ docker secret create db_password ./db_password.txt
255
+
256
+ # BIEN: En docker-compose con .env
257
+ env_file:
258
+ - .env
259
+ ```
260
+
261
+ ---
262
+
263
+ ## Security Scanning — Pipeline de CI
264
+
265
+ ```yaml
266
+ # .github/workflows/security.yml
267
+ name: Security Scan
268
+
269
+ on: [push, pull_request]
270
+
271
+ jobs:
272
+ scan:
273
+ runs-on: ubuntu-latest
274
+ steps:
275
+ - uses: actions/checkout@v4
276
+
277
+ - name: Build imagen
278
+ run: docker build -t mi-app:${{ github.sha }} .
279
+
280
+ - name: Trivy scan
281
+ uses: aquasecurity/trivy-action@master
282
+ with:
283
+ image-ref: mi-app:${{ github.sha }}
284
+ format: 'sarif'
285
+ output: 'trivy-results.sarif'
286
+ severity: 'CRITICAL,HIGH'
287
+ exit-code: '1'
288
+
289
+ - name: Hadolint
290
+ uses: hadolint/hadolint-action@v3.1.0
291
+ with:
292
+ dockerfile: Dockerfile
293
+
294
+ - name: Dockle
295
+ run: |
296
+ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
297
+ goodwithtech/dockle:latest --exit-code 1 mi-app:${{ github.sha }}
298
+ ```
299
+
300
+ ---
301
+
302
+ ## Optimización de Build Cache
303
+
304
+ ```dockerfile
305
+ # ORDEN CRITICO para maximizar cache:
306
+ # 1. Lo que cambia MENOS al inicio
307
+ # 2. Lo que cambia MAS al final
308
+
309
+ # MAL: copiar todo antes de instalar dependencias
310
+ COPY . .
311
+ RUN pip install -r requirements.txt
312
+
313
+ # BIEN: dependencias antes que codigo
314
+ COPY requirements.txt .
315
+ RUN pip install -r requirements.txt
316
+ COPY . .
317
+
318
+ # BuildKit — cache de montaje
319
+ # syntax=docker/dockerfile:1
320
+ FROM python:3.12-slim
321
+
322
+ RUN --mount=type=cache,target=/root/.cache/pip \
323
+ pip install -r requirements.txt
324
+
325
+ RUN --mount=type=cache,target=/var/cache/apt \
326
+ apt-get update && apt-get install -y libpq-dev
327
+ ```