@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,56 @@
1
+ {
2
+ "$schema": "../../../schemas/skill-evals.schema.json",
3
+ "skill_name": "dbml-experto",
4
+ "artifact_type": "skill",
5
+ "schema_version": 1,
6
+ "description": "Evals para dbml-experto — parseo de DBML, migración de tipos, y fallback sin @dbml/core.",
7
+ "evals": [
8
+ {
9
+ "id": 0,
10
+ "prompt": "Comando minimal para instalar @dbml/core en el proyecto del usuario (no en swl-ses).",
11
+ "files": [],
12
+ "expectations": [
13
+ "La respuesta incluye `npm install --save-dev @dbml/core` (o equivalente --save-dev).",
14
+ "La respuesta NO sugiere instalarlo global (`-g`).",
15
+ "La respuesta aclara que se instala en el proyecto del usuario."
16
+ ],
17
+ "tags": ["primary-flow"],
18
+ "weight": 1.0
19
+ },
20
+ {
21
+ "id": 1,
22
+ "prompt": "Traduce el tipo DBML `timestamp` a PostgreSQL y MySQL mínimo.",
23
+ "files": [],
24
+ "expectations": [
25
+ "PostgreSQL: `timestamp` o `timestamptz` (con timezone).",
26
+ "MySQL: `datetime` (no `timestamp` porque difiere en semántica TZ).",
27
+ "Menciona que `timestamp with tz` requiere `timestamptz` en PG."
28
+ ],
29
+ "tags": ["migration"]
30
+ },
31
+ {
32
+ "id": "anti-pattern-dots-in-id",
33
+ "prompt": "¿`payment.api` es un identificador DBML válido?",
34
+ "files": [],
35
+ "expectations": [
36
+ "La respuesta indica que NO es un identificador válido.",
37
+ "La respuesta explica que los puntos son separadores de FQN, no caracteres de identificador.",
38
+ "La respuesta sugiere `payment-api` o `paymentApi` como alternativa."
39
+ ],
40
+ "grading_guidance": "Failure si la respuesta dice que es válido o si omite la razón (punto como separador).",
41
+ "tags": ["anti-pattern"],
42
+ "weight": 1.5
43
+ },
44
+ {
45
+ "id": "fallback-sin-core",
46
+ "prompt": "El usuario no puede instalar @dbml/core. ¿Puede el skill seguir analizando schemas DBML?",
47
+ "files": [],
48
+ "expectations": [
49
+ "La respuesta afirma que sí, con heurísticas regex.",
50
+ "La respuesta menciona las limitaciones del fallback (no resuelve enums, puede fallar con comentarios).",
51
+ "La respuesta recomienda reportar esta limitación al usuario al ejecutar análisis estructurales."
52
+ ],
53
+ "tags": ["fallback"]
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,320 @@
1
+ ---
2
+ name: dependencias-auditoria
3
+ description: Auditoría completa de dependencias del proyecto. Detecta CVEs conocidos, licencias incompatibles con el uso comercial, dependencias abandonadas sin alternativa, y genera una estrategia de actualización priorizada. Aplica a proyectos Python, Node.js/TypeScript, y contenedores Docker.
4
+ version: "1.0.0"
5
+ herramientasPermitidas: [Read, Bash]
6
+ evolvable: true # default para skill estandar
7
+ nist_csf: [ID.RA-01, GV.SC-07, PR.PS-01, DE.CM-09]
8
+ nist_ai_rmf: [MAP-1.6]
9
+ attack_techniques: [T1195.002]
10
+ exclusiones:
11
+ - "No cargar para revisión de seguridad del código fuente (OWASP, inyección, auth) — para seguridad de código cargar `checklist-seguridad`."
12
+ - "No cargar para actualizar versiones de dependencias con breaking changes — para migraciones de versión cargar `deprecacion-migracion`."
13
+ - "No cargar para análisis de rendimiento de bundles JavaScript (tree-shaking, code splitting) — para rendimiento cargar `react-optimizacion` o equivalente."
14
+ - "No cargar para gestión de secretos o rotación de credenciales de servicios externos — para secretos cargar `iam-secretos`."
15
+ ---
16
+ # Habilidad: Auditoría de Dependencias
17
+
18
+ ## Cuándo NO cargar
19
+
20
+ - La revisión es de seguridad del código fuente (inyección SQL, XSS, OWASP): cargar `checklist-seguridad`.
21
+ - La tarea es actualizar dependencias con breaking changes y guiar la migración: cargar `deprecacion-migracion`.
22
+ - El análisis es de rendimiento de bundles JS (tree-shaking, bundle size): cargar `react-optimizacion` o el skill de frontend correspondiente.
23
+ - La gestión es de secretos, credenciales o rotación de API keys: cargar `iam-secretos`.
24
+
25
+ ## Propósito
26
+
27
+ Las dependencias son el vector de ataque más subestimado. El 80% de los ataques
28
+ de cadena de suministro (supply chain attacks) explotan dependencias con CVEs
29
+ conocidos y disponibles públicamente. Esta habilidad detecta el riesgo antes
30
+ de que se convierta en incidente.
31
+
32
+ ## Cuándo activar
33
+
34
+ - Antes de cada deploy a producción
35
+ - Al comenzar a trabajar en un proyecto heredado
36
+ - Cuando se reporta una vulnerabilidad que podría afectar el stack
37
+ - Trimestralmente como revisión de mantenimiento
38
+ - Antes de una auditoría de seguridad o certificación
39
+
40
+ ---
41
+
42
+ ## Categorías de riesgo en dependencias
43
+
44
+ ### Categoría 1 — CVEs conocidos (CRÍTICO)
45
+
46
+ Un CVE (Common Vulnerabilities and Exposures) en una dependencia directa o
47
+ transitiva es un riesgo activo. La severidad se mide con CVSS:
48
+
49
+ | CVSS Score | Severidad | Acción requerida |
50
+ |-----------|----------|-----------------|
51
+ | 9.0 - 10.0 | Crítica | Fix inmediato — bloquea deploy |
52
+ | 7.0 - 8.9 | Alta | Fix en 48 horas |
53
+ | 4.0 - 6.9 | Media | Fix en próximo sprint |
54
+ | 0.1 - 3.9 | Baja | Registrar, resolver en backlog |
55
+
56
+ ### Categoría 2 — Licencias incompatibles (ALTO)
57
+
58
+ Dependencias con licencias restrictivas en proyectos comerciales:
59
+
60
+ | Licencia | Riesgo en proyecto comercial |
61
+ |----------|----------------------------|
62
+ | GPL v2/v3 | ALTO — puede requerir open-source del código propio |
63
+ | AGPL | CRÍTICO — cualquier uso de red activa la cláusula |
64
+ | LGPL | MEDIO — revisar caso a caso |
65
+ | SSPL | ALTO — restricciones en servicios cloud |
66
+ | MIT, Apache 2.0, BSD | Bajo riesgo — permisivas |
67
+ | ISC, 0BSD | Sin riesgo — extremadamente permisivas |
68
+
69
+ ### Categoría 3 — Dependencias abandonadas (MEDIO)
70
+
71
+ Una dependencia abandonada es aquella que:
72
+ - Sin commits en el repositorio por más de 18 meses
73
+ - Sin versión nueva en más de 12 meses para proyectos activos
74
+ - Issues críticos sin respuesta por más de 6 meses
75
+ - El mantenedor ha declarado públicamente el abandono
76
+
77
+ ### Categoría 4 — Dependencias desactualizadas (BAJO-MEDIO)
78
+
79
+ Versiones con 2+ versiones major de atraso acumulan:
80
+ - CVEs parcheados en versiones nuevas
81
+ - Incompatibilidades futuras con el ecosistema
82
+ - Pérdida de soporte técnico de la comunidad
83
+
84
+ ---
85
+
86
+ ## Herramientas y comandos por stack
87
+
88
+ ### Python
89
+
90
+ ```bash
91
+ # pip-audit: CVEs en dependencias Python (recomendado)
92
+ pip install pip-audit
93
+ pip-audit --output=json > audit-python.json
94
+ pip-audit # Output legible para humanos
95
+
96
+ # safety: Base de datos de vulnerabilidades de PyUp.io
97
+ pip install safety
98
+ safety check --json > safety-report.json
99
+
100
+ # Licencias de todas las dependencias
101
+ pip install pip-licenses
102
+ pip-licenses --format=json --with-urls > licenses.json
103
+ pip-licenses --format=markdown # Output legible
104
+
105
+ # Dependencias desactualizadas
106
+ pip list --outdated --format=json
107
+
108
+ # Ver árbol completo de dependencias transitivas
109
+ pip install pipdeptree
110
+ pipdeptree --warn silence --json-tree > deptree.json
111
+ ```
112
+
113
+ ### Node.js / TypeScript
114
+
115
+ ```bash
116
+ # npm audit: CVEs en dependencias Node.js
117
+ npm audit --json > npm-audit.json
118
+ npm audit # Output legible
119
+
120
+ # Para yarn
121
+ yarn audit --json > yarn-audit.json
122
+
123
+ # Licencias
124
+ npx license-checker --json > npm-licenses.json
125
+ npx license-checker --excludePrivatePackages --onlyAllow \
126
+ "MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;0BSD"
127
+
128
+ # Dependencias desactualizadas
129
+ npm outdated --json
130
+
131
+ # Verificar dependencias no usadas
132
+ npx depcheck
133
+
134
+ # Tamaño del bundle por dependencia
135
+ npx cost-of-modules
136
+ ```
137
+
138
+ ### Docker / Contenedores
139
+
140
+ ```bash
141
+ # Trivy: CVEs en imagen Docker (recomendado)
142
+ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
143
+ aquasec/trivy image --format json [nombre-imagen]:latest > trivy-report.json
144
+
145
+ # Grype: alternativa a Trivy
146
+ grype [nombre-imagen]:latest
147
+
148
+ # Ver imagen base y su historial
149
+ docker inspect [nombre-imagen] | jq '.[0].Config.Image'
150
+
151
+ # Verificar si la imagen base es reciente
152
+ # Comparar con el digest publicado en Docker Hub
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Proceso de auditoría paso a paso
158
+
159
+ ### Paso 1 — Inventario inicial
160
+
161
+ ```bash
162
+ # Python: listar todas las dependencias con versión exacta
163
+ pip freeze > requirements-audit.txt
164
+ # Comparar con requirements.txt original para detectar dependencias no declaradas
165
+
166
+ # Node: listar todo el árbol
167
+ npm ls --all 2>/dev/null | head -100
168
+
169
+ # Verificar si hay dependencias directas no declaradas en package.json
170
+ npx depcheck
171
+ ```
172
+
173
+ ### Paso 2 — Escaneo de CVEs
174
+
175
+ Ejecutar todos los scanners disponibles para el stack. Los resultados se guardan
176
+ en formato JSON para procesamiento posterior.
177
+
178
+ ### Paso 3 — Análisis de licencias
179
+
180
+ ```bash
181
+ # Python: identificar licencias no permitidas
182
+ pip-licenses --fail-on="GPL;AGPL;LGPL;SSPL" 2>&1
183
+ # Exit code != 0 si encuentra licencias problemáticas
184
+
185
+ # Node: verificar lista blanca de licencias
186
+ npx license-checker --onlyAllow "MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC"
187
+ ```
188
+
189
+ ### Paso 4 — Identificar dependencias abandonadas
190
+
191
+ Para cada dependencia directa, verificar en su repositorio:
192
+ - Fecha del último commit
193
+ - Fecha del último release
194
+ - Issues abiertos sin respuesta
195
+ - Estado del repositorio (archived, deprecated)
196
+
197
+ ```bash
198
+ # Script para verificar última versión en PyPI
199
+ python -c "
200
+ import json, urllib.request
201
+ packages = open('requirements.txt').read().split()
202
+ for pkg in packages[:20]:
203
+ name = pkg.split('==')[0].split('>=')[0]
204
+ try:
205
+ url = f'https://pypi.org/pypi/{name}/json'
206
+ data = json.loads(urllib.request.urlopen(url).read())
207
+ last = max(data['releases'].keys())
208
+ print(f'{name}: última versión {last}')
209
+ except: pass
210
+ "
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Plantilla de reporte: `DEPENDENCIES-AUDIT.md`
216
+
217
+ ```markdown
218
+ # DEPENDENCIES-AUDIT.md
219
+ **Fecha**: [fecha] **Stack**: [Python/Node/Docker/todos]
220
+
221
+ ## Resumen ejecutivo
222
+ | Categoría | Críticos | Altos | Medios | Bajos |
223
+ |-----------|---------|-------|--------|-------|
224
+ | CVEs | | | | |
225
+ | Licencias | | | | |
226
+ | Abandonadas | | | | |
227
+ | Desactualizadas | | | | |
228
+
229
+ **Decisión de deploy**: BLOQUEADO / APROBADO CON PLAN / APROBADO
230
+
231
+ ---
232
+
233
+ ## CVEs encontrados
234
+
235
+ ### [CRÍTICO] [Nombre de la dependencia] v[X.Y.Z]
236
+ - **CVE**: CVE-XXXX-XXXXX
237
+ - **CVSS**: [score]
238
+ - **Descripción**: [qué hace vulnerable]
239
+ - **Versión parcheada**: [versión que resuelve el CVE]
240
+ - **Comando de actualización**: `pip install [paquete]==[version]`
241
+ - **Dependencia directa**: Sí / No (transitiva vía [paquete])
242
+ - **Plan de acción**: [actualizar / reemplazar / parchear temporalmente]
243
+ - **Deadline**: [fecha]
244
+
245
+ [Repetir para cada CVE]
246
+
247
+ ---
248
+
249
+ ## Licencias problemáticas
250
+
251
+ | Paquete | Versión | Licencia | Riesgo | Alternativa |
252
+ |---------|---------|---------|--------|------------|
253
+ | | | | | |
254
+
255
+ ---
256
+
257
+ ## Dependencias abandonadas
258
+
259
+ | Paquete | Último commit | Último release | Alternativa recomendada |
260
+ |---------|-------------|---------------|------------------------|
261
+ | | | | |
262
+
263
+ ---
264
+
265
+ ## Dependencias desactualizadas (alta prioridad)
266
+
267
+ | Paquete | Versión actual | Última versión | Versiones de atraso | Prioridad |
268
+ |---------|---------------|----------------|--------------------| ----------|
269
+ | | | | | |
270
+
271
+ ---
272
+
273
+ ## Estrategia de actualización
274
+
275
+ ### Sprint actual (bloqueos de deploy)
276
+ - [ ] [dependencia]: actualizar a [versión] — CVE crítico
277
+
278
+ ### Próximo sprint
279
+ - [ ] [dependencia]: actualizar a [versión] — CVE alto
280
+
281
+ ### Backlog de mantenimiento
282
+ - [ ] [dependencia]: evaluar reemplazo por [alternativa]
283
+
284
+ ---
285
+
286
+ ## Dependencias monitoreadas (sin acción inmediata)
287
+ | Paquete | Razón de monitoreo | Próxima revisión |
288
+ |---------|-------------------|-----------------|
289
+ | | | |
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Automatización recomendada
295
+
296
+ Integrar en el pipeline CI/CD:
297
+
298
+ ```yaml
299
+ # GitHub Actions — auditoría automática en cada PR
300
+ - name: Auditoría de dependencias Python
301
+ run: |
302
+ pip-audit --fail-on-severity high
303
+ # Falla el pipeline si hay CVEs altos o críticos sin resolver
304
+
305
+ - name: Auditoría de dependencias Node
306
+ run: npm audit --audit-level=high
307
+ ```
308
+
309
+ Configurar renovación automática con Dependabot o Renovate Bot para dependencias
310
+ con actualizaciones de parche (patch) que no rompen la API.
311
+
312
+ ## Gotchas / Errores comunes no obvios
313
+
314
+ **`pip-audit` reporta cero CVEs pero hay una dependencia transitiva vulnerable que `pip freeze` no muestra explícitamente**: `pip-audit` analiza el entorno instalado, pero si la dependencia vulnerable es transitiva de una dependencia directa desactualizada, puede no aparecer en `requirements.txt`. Causa: los entornos Python sin `pip freeze` completo tienen dependencias transitivas "flotantes" que se resuelven al instalar sin estar declaradas. Fix: ejecutar `pip freeze > requirements-full.txt` y auditar ese archivo completo, no solo `requirements.txt`. Alternativamente usar `pip-audit --requirement requirements-full.txt` o `pipdeptree` para ver el árbol completo.
315
+
316
+ **`npm audit` muestra 0 vulnerabilidades pero Trivy detecta CVEs en la imagen Docker**: `npm audit` analiza `node_modules/` en el sistema de archivos, mientras Trivy analiza las capas de la imagen donde las dependencias pueden diferir si el Dockerfile usa `npm ci --production` o tiene multi-stage builds. Causa: el entorno de desarrollo y el contenedor de producción pueden tener diferentes versiones si el lockfile no está commiteado o si se usa `--production`. Fix: ejecutar `trivy image` sobre la imagen de producción construida, no solo `npm audit` en el source. Son complementarios, no equivalentes.
317
+
318
+ **Una dependencia con licencia MIT tiene una subdependencia con licencia AGPL no detectada por `license-checker`**: `license-checker` analiza el campo `license` en `package.json`, pero una dependencia puede tener subdependencias con licencias diferentes que solo se ven en su árbol de dependencias transitivas. Causa: `license-checker --production` solo reporta las licencias declaradas en el nivel superior de cada paquete. Fix: para proyectos con requerimientos legales estrictos, usar `license-checker --failOn AGPL` para detectar AGPL en el árbol completo, y revisar manualmente las dependencias con licencias mixtas o duales.
319
+
320
+ **`pip-audit` en CI falla con "connection refused" porque el sistema no tiene acceso a la red de PyPI Vulnerability DB**: `pip-audit` por defecto consulta `https://osv.dev` para obtener las vulnerabilidades. En entornos CI con acceso a red restringido (firewalls corporativos, redes internas), la consulta falla silenciosamente o lanza error de red en lugar de decir "cero CVEs". Causa: la ausencia de resultados se confunde con "sin vulnerabilidades" cuando en realidad el scanner no pudo conectarse. Fix: configurar `pip-audit --local` para usar la base de datos local de OSV descargada previamente, o verificar que el exit code del comando es `0` (no errores) en lugar de solo ver el output de texto.
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: deprecacion-migracion
3
+ description: >
4
+ Estrategias de deprecación y migración: avisos de deprecación, guías de migración,
5
+ compatibilidad hacia atrás, feature flags para migraciones, patrones de migración de
6
+ datos, migraciones sin tiempo de inactividad, patrón strangler fig.
7
+ version: "1.0.0"
8
+ herramientasPermitidas: [Read, Grep]
9
+ evolvable: true # default para skill estandar
10
+ exclusiones:
11
+ - "No cargar para migraciones de esquema de base de datos generadas automáticamente (Alembic autogenerate, Flyway) — para ORM migrations cargar `postgresql-experto`."
12
+ - "No cargar para auditoría de dependencias desactualizadas (CVEs, licencias) — para dependencias cargar `dependencias-auditoria`."
13
+ - "No cargar para refactoring de código sin cambio de interfaz pública — para refactoring sin deprecación usar directamente el skill del lenguaje."
14
+ - "No cargar para versionado semántico de releases — para SemVer y ciclo de release usar `/swl:release`."
15
+ ---
16
+ # Deprecación y Migración — Estrategias de Producción
17
+
18
+ ## Cuándo NO cargar
19
+
20
+ - La migración es de esquema de BD generada automáticamente (Alembic autogenerate, Flyway scripts): cargar `postgresql-experto`.
21
+ - La auditoría es de dependencias desactualizadas con CVEs: cargar `dependencias-auditoria`.
22
+ - El refactoring no cambia la interfaz pública de ningún módulo: usar directamente el skill del lenguaje sin periodo de deprecación.
23
+ - La tarea es gestionar el número de versión del release (SemVer, CHANGELOG): usar `/swl:release`.
24
+
25
+ ## Principios Fundamentales
26
+
27
+ La deprecación no es eliminar — es guiar la transición.
28
+ Una buena deprecación tiene: **aviso anticipado**, **guía de migración**, **período de gracia**, **eliminación limpia**.
29
+
30
+ **Reglas de oro:**
31
+ 1. Nunca eliminar sin deprecar primero (mínimo 1 versión de aviso).
32
+ 2. Una API deprecada sigue funcionando durante el período de gracia.
33
+ 3. Los mensajes de deprecación incluyen qué usar en su lugar y cuándo se eliminará.
34
+ 4. Las migraciones de datos son reversibles hasta confirmar éxito.
35
+
36
+ ---
37
+
38
+ ## Ciclo de Vida de una Deprecación
39
+
40
+ ```
41
+ VIGENTE → DEPRECADO → ELIMINADO
42
+
43
+ Períodos mínimos de gracia:
44
+ - Librerías: 1 versión mayor
45
+ - APIs internas: 2 sprints
46
+ - APIs públicas: 6 meses mínimo
47
+ - Bases de datos: 3 meses mínimo
48
+ ```
49
+
50
+ ---
51
+
52
+ ## Avisos de Deprecación en Python
53
+
54
+ ```python
55
+ import warnings
56
+ import functools
57
+
58
+ def deprecado(*, desde: str, eliminar_en: str, usar_en_su_lugar: str, razon: str = ""):
59
+ def decorador(func):
60
+ mensaje = (
61
+ f"`{func.__qualname__}` está deprecado desde v{desde} y será "
62
+ f"eliminado en v{eliminar_en}. Usar: {usar_en_su_lugar}."
63
+ )
64
+ @functools.wraps(func)
65
+ def wrapper(*args, **kwargs):
66
+ warnings.warn(mensaje, DeprecationWarning, stacklevel=2)
67
+ return func(*args, **kwargs)
68
+ return wrapper
69
+ return decorador
70
+
71
+ @deprecado(
72
+ desde="2.1.0", eliminar_en="3.0.0",
73
+ usar_en_su_lugar="calcular_descuento(precio, porcentaje, moneda='MXN')",
74
+ )
75
+ def calcular_descuento_v1(precio: float, porcentaje: float) -> float:
76
+ return precio * (1 - porcentaje / 100)
77
+ ```
78
+
79
+ ---
80
+
81
+ ## Deprecación de Endpoints REST
82
+
83
+ OBLIGATORIO: headers estándar de deprecación HTTP.
84
+
85
+ ```python
86
+ @router.get("/v1/usuarios/{usuario_id}")
87
+ async def obtener_usuario_v1(usuario_id: str, response: Response) -> dict:
88
+ response.headers["Deprecation"] = "true"
89
+ response.headers["Sunset"] = "2026-09-01"
90
+ response.headers["Link"] = f'</v2/usuarios/{usuario_id}>; rel="successor-version"'
91
+ response.headers["Warning"] = (
92
+ '299 - "Endpoint deprecado. Migrar a /v2/usuarios/{id}"'
93
+ )
94
+ usuario = await servicio_usuarios.obtener(usuario_id)
95
+ return {"id": usuario.id, "nombre_completo": usuario.nombre}
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Migraciones de Base de Datos sin Tiempo de Inactividad
101
+
102
+ ### Estrategia: Expand-Contract (3 fases)
103
+
104
+ ```sql
105
+ -- FASE 1: EXPAND — agregar lo nuevo sin eliminar lo viejo
106
+ ALTER TABLE usuarios ADD COLUMN nombre_display TEXT;
107
+ CREATE INDEX CONCURRENTLY idx_usuarios_nombre_display ON usuarios (nombre_display);
108
+ ```
109
+
110
+ ```python
111
+ # FASE 2: MIGRAR — rellenar en background, sin downtime
112
+ def migrar_nombres_display(batch_size: int = 1000) -> None:
113
+ ultimo_id = None
114
+ while True:
115
+ lote = db.execute(
116
+ f"SELECT id, nombre FROM usuarios WHERE nombre_display IS NULL "
117
+ f"{'AND id > :uid' if ultimo_id else ''} ORDER BY id LIMIT :bs",
118
+ {"uid": ultimo_id, "bs": batch_size},
119
+ ).fetchall()
120
+ if not lote:
121
+ break
122
+ for fila in lote:
123
+ db.execute(
124
+ "UPDATE usuarios SET nombre_display = :nd WHERE id = :id",
125
+ {"nd": formatear_nombre(fila.nombre), "id": fila.id},
126
+ )
127
+ db.commit()
128
+ ultimo_id = lote[-1].id
129
+ time.sleep(0.1) # No saturar BD
130
+ ```
131
+
132
+ ```sql
133
+ -- FASE 3: CONTRACT — eliminar columna vieja (solo cuando TODOS los servicios migraron)
134
+ ALTER TABLE usuarios DROP COLUMN nombre;
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Implementaciones Completas
140
+
141
+ Para Feature Flags con rollout gradual, Patrón Strangler Fig (proxy de migración),
142
+ Plantilla de Guía de Migración para usuarios, y Monitoreo de uso de endpoints
143
+ deprecados, ver
144
+ [recursos/implementaciones-completas.md](recursos/implementaciones-completas.md).
145
+
146
+ ---
147
+
148
+ ## Checklist de Revisión — Deprecación y Migración
149
+
150
+ - [ ] El aviso de deprecación incluye: versión desde, versión de eliminación, alternativa.
151
+ - [ ] El código deprecado sigue funcionando durante el período de gracia completo.
152
+ - [ ] Los endpoints deprecados retornan headers `Deprecation`, `Sunset` y `Link`.
153
+ - [ ] Hay una guía de migración publicada ANTES de deprecar, no después.
154
+ - [ ] Las migraciones de base de datos usan el patrón Expand-Contract (3 fases).
155
+ - [ ] Las migraciones de datos son idempotentes y se pueden re-ejecutar sin duplicados.
156
+ - [ ] Los índices se crean con `CREATE INDEX CONCURRENTLY` para no bloquear.
157
+ - [ ] Las migraciones del Strangler Fig tienen feature flags con rollout gradual.
158
+ - [ ] Hay un proceso para identificar y notificar clientes que aún usan APIs deprecadas.
159
+ - [ ] El plan de eliminación incluye qué retornar después: `410 Gone` con cuerpo explicativo.
160
+
161
+ ## Gotchas / Errores comunes no obvios
162
+
163
+ **El decorator `@deprecado` emite `DeprecationWarning` pero los warnings de Python están silenciados por defecto en producción**: en CPython, los `DeprecationWarning` se suprimen a menos que el código corra en modo test o con `python -W default`. Causa: Python suprime `DeprecationWarning` deliberadamente para no saturar a los usuarios finales con warnings de bibliotecas. Fix: para asegurar visibilidad del aviso, complementar `warnings.warn` con un log estructurado en el wrapper: `logger.warning("deprecado: %s — migrar a %s", func.__qualname__, usar_en_su_lugar)`. El log pasa a través de cualquier configuración de Python warnings.
164
+
165
+ **La Fase 2 del patrón Expand-Contract con migración en background bloquea la tabla en PostgreSQL por el `UPDATE` masivo**: actualizar millones de filas con `UPDATE usuarios SET nombre_display = :nd WHERE nombre_display IS NULL` puede escalar a un lock de tabla que bloquea lecturas. Causa: PostgreSQL escala el lock de fila a lock de tabla cuando el porcentaje de filas actualizadas es alto. Fix: procesar siempre en lotes pequeños (máximo 1000 filas por transacción) con `time.sleep(0.1)` entre lotes. Usar `SELECT ... FOR UPDATE SKIP LOCKED` para evitar deadlocks si múltiples workers corren la migración en paralelo.
166
+
167
+ **El header `Sunset` en endpoints deprecados usa formato de fecha incorrecto y los clientes no lo parsean**: `response.headers["Sunset"] = "2026-09-01"` usa formato ISO 8601, pero el RFC 8594 especifica que `Sunset` debe usar formato HTTP-date: `"Mon, 01 Sep 2026 00:00:00 GMT"`. Causa: el estándar del header `Sunset` es diferente al formato de fecha que los desarrolladores usan intuitivamente. Fix: generar el valor con `email.utils.formatdate(time.mktime(fecha_sunset.timetuple()), usegmt=True)` en Python para producir el formato HTTP-date correcto.
168
+
169
+ **El Strangler Fig con feature flag al 100% nunca elimina el código legacy porque "ya está en producción sin problemas"**: el rollout llega al 100% gradualmente, el código nuevo funciona bien, pero el código legacy nunca se elimina porque "no hay urgencia". Causa: sin fecha de eliminación forzada, el Strangler Fig crea deuda técnica permanente — dos implementaciones que coexisten indefinidamente. Fix: establecer en el plan de migración una fecha de eliminación del código legacy como hito del proyecto, antes de llegar al 100% del rollout. El 100% en feature flag no es el final — la eliminación del código viejo lo es.