@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,305 @@
1
+ ---
2
+ name: redis-experto
3
+ description: >
4
+ Redis: caching patterns (cache-aside, write-through), data structures, pub/sub
5
+ vs streams, rate limiting, distributed locks con Redlock y pipelining. Cargar
6
+ cuando se implemente caching, rate limiting o comunicación en tiempo real.
7
+ version: "1.0.0"
8
+ herramientasPermitidas: [Read, Write]
9
+ evolvable: true # default para skill estandar
10
+ exclusiones:
11
+ - "No cargar para mensajería async entre microservicios con garantías de durabilidad y reintentos — para colas duraderas con dead letter queue usar `kafka-experto` o SQS/Service Bus."
12
+ - "No cargar para almacenamiento de sesiones distribuidas en aplicaciones Angular/Next.js — para manejo de sesiones en el frontend el estado vive en el cliente; Redis aplica al backend."
13
+ - "No cargar para caché de assets estáticos o CDN — para caché de archivos estáticos usar CloudFront, Nginx o similar; Redis es para datos de aplicación."
14
+ - "No cargar para búsqueda de texto completo — Redis tiene módulos de búsqueda (RediSearch) pero para full-text search general cargar `postgresql-experto` con `tsvector` o usar Elasticsearch."
15
+ ---
16
+ # Redis Experto — Caching, Estructuras y Tiempo Real
17
+
18
+ ## Cuándo NO cargar
19
+
20
+ - La tarea es cola de mensajes con garantías de durabilidad fuerte y DLQ: usar Kafka, SQS o Azure Service Bus.
21
+ - La tarea es caché de assets estáticos o CDN: usar CloudFront, Nginx o un CDN dedicado.
22
+ - La tarea es full-text search: cargar `postgresql-experto` (tsvector) o Elasticsearch.
23
+ - La tarea es base de datos primaria de documentos: Redis no reemplaza a MongoDB o PostgreSQL.
24
+
25
+ Redis es una estructura de datos en memoria con persistencia. Su velocidad lo
26
+ hace ideal para caching, rate limiting, colas ligeras y pub/sub. Este skill
27
+ cubre los patrones de caching, las estructuras de datos correctas para cada
28
+ caso, y las operaciones atómicas con Lua para garantizar consistencia.
29
+
30
+ ## Cuándo cargar este skill
31
+
32
+ Invoca `Skill("redis-experto")` cuando:
33
+
34
+ - Se implemente caching con estrategia cache-aside o write-through
35
+ - Se diseñe rate limiting para endpoints o usuarios
36
+ - Se implemente distributed lock para evitar race conditions
37
+ - Se use pub/sub o Streams para mensajeria
38
+ - Se diseñan claves con TTL y namespacing
39
+ - Se configure connection pooling o Redis Cluster
40
+
41
+ ## Conceptos clave
42
+
43
+ ### Tres estrategias de caching
44
+
45
+ Cache-aside (lazy loading): la aplicación lee cache primero; si no existe, lee
46
+ la BD y llena el cache. Write-through: al escribir en BD, también se escribe
47
+ en cache. Write-behind: se escribe en cache primero, la BD se actualiza
48
+ asincrónamente. Cache-aside es el patrón más común y seguro.
49
+
50
+ ### Atomicidad con Lua scripts
51
+
52
+ Redis es single-threaded para comandos. Un script Lua se ejecuta atómicamente:
53
+ ningún otro comando puede interferir entre las instrucciones del script. Usar
54
+ para operaciones que requieren "leer y escribir" sin race conditions.
55
+
56
+ ### Pub/Sub vs Streams
57
+
58
+ Pub/Sub es fire-and-forget: si un consumidor está desconectado, pierde mensajes.
59
+ Streams (XADD/XREAD) persisten mensajes, soportan consumer groups y permiten
60
+ replay. Usar Streams para eventos importantes; Pub/Sub para notificaciones efímeras.
61
+
62
+ ## Reglas obligatorias
63
+
64
+ ### SIEMPRE definir TTL al crear claves — nunca claves permanentes en produccion
65
+
66
+ ```typescript
67
+ // MAL — clave sin TTL que vive para siempre
68
+ await redis.set(`usuario:${id}`, JSON.stringify(usuario));
69
+
70
+ // BIEN — TTL explicito segun la naturaleza del dato
71
+ await redis.setex(`usuario:${id}`, 3600, JSON.stringify(usuario)); // 1 hora
72
+ // O con la API moderna:
73
+ await redis.set(`usuario:${id}`, JSON.stringify(usuario), { EX: 3600 });
74
+ ```
75
+
76
+ **Por qué**: Claves sin TTL consumen memoria indefinidamente. En producción,
77
+ la memoria de Redis es limitada y cara.
78
+
79
+ ### Namespacing obligatorio en todas las claves
80
+
81
+ ```typescript
82
+ // MAL — colisión entre ambientes y módulos
83
+ await redis.set('usuario:123', data);
84
+ await redis.set('sesion:abc', token);
85
+
86
+ // BIEN — prefijo de ambiente y modulo
87
+ const PREFIJO = `${process.env.NODE_ENV}:miapp`;
88
+ await redis.set(`${PREFIJO}:usuario:123`, data, { EX: 3600 });
89
+ await redis.set(`${PREFIJO}:sesion:abc`, token, { EX: 86400 });
90
+ ```
91
+
92
+ ### NUNCA usar KEYS * en produccion
93
+
94
+ ```bash
95
+ # MAL — bloquea Redis mientras escanea toda la keyspace
96
+ KEYS usuario:*
97
+
98
+ # BIEN — SCAN con cursor, no bloquea
99
+ SCAN 0 MATCH usuario:* COUNT 100
100
+ ```
101
+
102
+ En código:
103
+ ```typescript
104
+ // Usar scan iterativo, nunca keys()
105
+ for await (const key of redis.scanIterator({ MATCH: 'prod:usuario:*', COUNT: 100 })) {
106
+ // procesar key
107
+ }
108
+ ```
109
+
110
+ ### Distributed Lock con TTL de seguridad — NUNCA lock sin expiracion
111
+
112
+ ```typescript
113
+ // MAL — lock sin TTL, si el proceso muere queda bloqueado para siempre
114
+ await redis.set('lock:proceso-critico', '1');
115
+
116
+ // BIEN — lock con TTL (NX = solo si no existe, EX = TTL en segundos)
117
+ const adquirido = await redis.set(
118
+ 'lock:proceso-critico',
119
+ tokenUnico, // valor único para verificar propiedad al liberar
120
+ { NX: true, EX: 30 } // TTL de 30s como safety net
121
+ );
122
+ if (!adquirido) throw new Error('No se pudo adquirir el lock');
123
+ ```
124
+
125
+ ## Patrones recomendados
126
+
127
+ ### Cache-aside con helper tipado
128
+
129
+ ```typescript
130
+ class CacheService {
131
+ constructor(private readonly redis: Redis) {}
132
+
133
+ async obtenerOCargar<T>(
134
+ clave: string,
135
+ ttlSegundos: number,
136
+ cargador: () => Promise<T>,
137
+ ): Promise<T> {
138
+ const cached = await this.redis.get(clave);
139
+ if (cached) return JSON.parse(cached) as T;
140
+
141
+ const valor = await cargador();
142
+ await this.redis.setex(clave, ttlSegundos, JSON.stringify(valor));
143
+ return valor;
144
+ }
145
+
146
+ async invalidar(patron: string): Promise<void> {
147
+ for await (const clave of this.redis.scanIterator({ MATCH: patron })) {
148
+ await this.redis.del(clave);
149
+ }
150
+ }
151
+ }
152
+
153
+ // Uso
154
+ const producto = await cache.obtenerOCargar(
155
+ `prod:producto:${id}`,
156
+ 3600,
157
+ () => db.producto.findUnique({ where: { id } }),
158
+ );
159
+ ```
160
+
161
+ ### Rate limiting con Sorted Sets (sliding window)
162
+
163
+ ```typescript
164
+ async function verificarRateLimit(
165
+ usuarioId: string,
166
+ limite: number,
167
+ ventanaMs: number,
168
+ ): Promise<{ permitido: boolean; restantes: number }> {
169
+ const clave = `prod:ratelimit:${usuarioId}`;
170
+ const ahora = Date.now();
171
+ const ventanaInicio = ahora - ventanaMs;
172
+
173
+ const [, , conteo] = await redis
174
+ .multi()
175
+ .zremrangebyscore(clave, 0, ventanaInicio) // limpiar entradas viejas
176
+ .zadd(clave, { score: ahora, value: `${ahora}-${Math.random()}` })
177
+ .zcard(clave)
178
+ .expire(clave, Math.ceil(ventanaMs / 1000))
179
+ .exec();
180
+
181
+ const permitido = (conteo as number) <= limite;
182
+ return { permitido, restantes: Math.max(0, limite - (conteo as number)) };
183
+ }
184
+ ```
185
+
186
+ ### Lua script para operación atómica
187
+
188
+ ```typescript
189
+ // Decrementar stock solo si hay suficiente — atomico
190
+ const luaDecrementarStock = `
191
+ local stock = tonumber(redis.call('GET', KEYS[1]))
192
+ if stock == nil then return -1 end
193
+ if stock < tonumber(ARGV[1]) then return -2 end
194
+ return redis.call('DECRBY', KEYS[1], ARGV[1])
195
+ `;
196
+
197
+ const resultado = await redis.eval(luaDecrementarStock, {
198
+ keys: [`prod:stock:${productoId}`],
199
+ arguments: [cantidad.toString()],
200
+ });
201
+ // -1: clave no existe, -2: stock insuficiente, >=0: nuevo valor
202
+ ```
203
+
204
+ ### Streams para cola de eventos con consumer groups
205
+
206
+ ```typescript
207
+ // Productor: agregar evento al stream
208
+ await redis.xadd('prod:eventos:pedidos', '*', {
209
+ pedidoId: pedido.id,
210
+ tipo: 'CREADO',
211
+ datos: JSON.stringify(pedido),
212
+ });
213
+
214
+ // Consumidor con consumer group (tolerante a fallos)
215
+ await redis.xgroupCreate('prod:eventos:pedidos', 'procesadores', '0', { MKSTREAM: true });
216
+
217
+ while (true) {
218
+ const mensajes = await redis.xreadgroup(
219
+ 'procesadores', 'worker-1',
220
+ [{ key: 'prod:eventos:pedidos', id: '>' }],
221
+ { COUNT: 10, BLOCK: 2000 }
222
+ );
223
+ for (const { id, message } of mensajes?.[0]?.messages ?? []) {
224
+ await procesarEvento(message);
225
+ await redis.xack('prod:eventos:pedidos', 'procesadores', id);
226
+ }
227
+ }
228
+ ```
229
+
230
+ ### Pipelining para operaciones masivas
231
+
232
+ ```typescript
233
+ // MAL — round trip por cada operación
234
+ for (const id of ids) {
235
+ await redis.get(`prod:usuario:${id}`);
236
+ }
237
+
238
+ // BIEN — pipeline envia todo de una vez
239
+ const pipeline = redis.multi();
240
+ for (const id of ids) {
241
+ pipeline.get(`prod:usuario:${id}`);
242
+ }
243
+ const resultados = await pipeline.exec();
244
+ ```
245
+
246
+ ## Anti-patrones conocidos
247
+
248
+ ### Single Point of Failure — usar Redis Sentinel o Cluster en producción
249
+
250
+ Un único nodo Redis que falla detiene la aplicación si no hay fallback.
251
+ Configurar Redis Sentinel para alta disponibilidad o Redis Cluster para
252
+ escalabilidad horizontal.
253
+
254
+ ### Cache sin invalidacion al mutar datos
255
+
256
+ ```typescript
257
+ // MAL — actualiza la BD pero no invalida el cache
258
+ await db.producto.update({ where: { id }, data: { precio } });
259
+ // El cache sigue devolviendo el precio viejo
260
+
261
+ // BIEN — invalidar el cache inmediatamente después de la mutación
262
+ await db.producto.update({ where: { id }, data: { precio } });
263
+ await redis.del(`prod:producto:${id}`);
264
+ ```
265
+
266
+ ### Hash grandes con HGETALL completo
267
+
268
+ ```typescript
269
+ // MAL — carga todo el hash aunque solo se necesite un campo
270
+ const datos = await redis.hgetall(`prod:usuario:${id}`);
271
+ const nombre = datos.nombre;
272
+
273
+ // BIEN — obtener solo el campo necesario
274
+ const nombre = await redis.hget(`prod:usuario:${id}`, 'nombre');
275
+ ```
276
+
277
+ ## Checklist de verificación
278
+
279
+ - [ ] Todas las claves tienen TTL definido explícitamente
280
+ - [ ] Namespacing con prefijo de ambiente en todas las claves
281
+ - [ ] Sin KEYS * — usar SCAN con cursor
282
+ - [ ] Distributed locks con TTL de seguridad y valor único para verificar propiedad
283
+ - [ ] Operaciones "leer-modificar-escribir" con Lua script o transacciones MULTI/EXEC
284
+ - [ ] Pipelining para operaciones masivas
285
+ - [ ] Redis Sentinel o Cluster configurado en producción
286
+
287
+ ## Referencias
288
+
289
+ - [Redis Commands](https://redis.io/docs/latest/commands/)
290
+ - [Redis Patterns](https://redis.io/docs/latest/develop/use/patterns/)
291
+ - [node-redis](https://github.com/redis/node-redis)
292
+
293
+ ---
294
+
295
+ ## Gotchas / Errores comunes no obvios
296
+
297
+ **`redis.del(key)` en Node.js `node-redis` v4 no lanza error si la clave no existe — devuelve `0` en lugar de fallar, causando que la invalidación de caché silencie errores de lógica**: un servicio que llama `await redis.del("prod:usuario:123")` después de una mutación asume que la clave existía, pero si la clave ya había expirado o nunca se creó (por un bug en write-through), el `0` pasa desapercibido y el código continúa sin invalidar nada en realidad. Causa: `DEL` en Redis devuelve el número de claves eliminadas; la API de node-redis expone ese número, no un error. Fix: cuando la invalidación es crítica, usar `EXISTS` antes del `DEL` o verificar que el retorno sea `> 0`. Para caché convencional cache-aside, el `0` es aceptable (la clave ya expiró), pero documentar explícitamente la decisión.
298
+
299
+ **El patrón Redlock con 3 nodos falla en escenarios de split-brain cuando los nodos Redis están en diferentes zonas de disponibilidad con latencia asimétrica**: si el cliente adquiere el lock en 2 de 3 nodos (mayoría), pero el tercer nodo reaparece antes de que expire el TTL del lock, otro cliente puede adquirir el lock en ese nodo tardío y los dos primeros, creando dos titulares del lock simultáneamente. Causa: Redlock asume relojes sincronizados y latencia simétrica entre nodos; en producción cloud con múltiples AZs ambas suposiciones son aproximadas. Fix: usar TTLs de lock generosos (10-30s para operaciones rápidas) y diseñar el trabajo protegido por el lock para ser idempotente — si dos workers ejecutan simultáneamente, el sistema debe tolerarlo o detectarlo y revertir.
300
+
301
+ **`redis.xreadgroup` con `BLOCK: 2000` bloquea la conexión del pool durante 2 segundos y agota el pool si hay más consumidores concurrentes que conexiones disponibles**: con un pool de 10 conexiones y 8 workers de Streams que bloquean durante 2s esperando mensajes, los requests de la API que llegan durante ese tiempo no encuentran conexiones disponibles y fallan. Causa: las operaciones bloqueantes de Redis (BLPOP, BRPOP, XREAD con BLOCK) mantienen una conexión del pool ocupada durante el período de bloqueo. Fix: usar un pool de conexiones separado exclusivamente para los consumers de Streams, independiente del pool de la API. Configurar el pool de Streams con `max: N_workers + buffer`, donde buffer = 20% para tolerancia.
302
+
303
+ **`KEYS *` en producción con 1M+ claves congela Redis durante varios segundos porque es una operación O(N) que bloquea el event loop de Redis**: un script de diagnóstico que ejecuta `await redis.keys("prod:session:*")` para contar sesiones activas hace que todas las operaciones del servidor queden en cola durante 3-8 segundos. Causa: Redis es single-threaded para comandos; `KEYS` escanea todo el keyspace sin pausas. Fix: usar siempre `SCAN` con cursor: `for await (const key of redis.scanIterator({ MATCH: "prod:session:*", COUNT: 100 }))` — procesa lotes de 100 claves, cediendo el event loop entre lotes.
304
+
305
+ *Skill creado con swl:crear-skill el 2026-03-31. Versión 1.0.0.*
@@ -0,0 +1,9 @@
1
+ {
2
+ "SKILL.md": {
3
+ "evolved": true,
4
+ "evolvedFrom": "5.10.4",
5
+ "evolvedAt": "2026-04-20",
6
+ "evolvedBy": "aprender",
7
+ "evolvedNote": "npx @latest en post-install"
8
+ }
9
+ }
@@ -0,0 +1,248 @@
1
+ ---
2
+ name: release-semver
3
+ description: Versionado semántico (SemVer). Cuándo bumpar major/minor/patch, changelogs convencionales, estrategia de tags y proceso de release completo.
4
+ version: "1.0.1"
5
+ herramientasPermitidas: [Read, Bash]
6
+ exclusiones:
7
+ - "No cargar para versionar el sistema SWL — el bump de versión de swl-ses sigue el checklist de 15 ubicaciones documentado en `/swl:release`; este skill cubre SemVer general para proyectos de usuario, no el proceso interno de release del sistema."
8
+ - "No cargar para decidir el tipo de commit individual (feat/fix/refactor) — el mensaje de commit se elige al hacer commit; este skill se carga cuando se necesita decidir el número de versión del release o crear el proceso completo de release."
9
+ - "No cargar para proyectos internos sin versionado público ni consumidores externos — si no hay consumidores del paquete que dependen de compatibilidad, la disciplina SemVer completa puede ser excesiva; usar `git-workflow.md` para el flujo de commits."
10
+ - "No cargar si el proceso de release ya está automatizado en CI con `semantic-release` — en ese caso el número de versión se calcula automáticamente desde los commits y cargar este skill solo agrega duplicación."
11
+ evolvable: true # default para skill estandar
12
+ ---
13
+ # Versionado Semántico (SemVer)
14
+
15
+ ## Principio fundamental
16
+
17
+ Un número de versión tiene la forma `MAJOR.MINOR.PATCH` (ej. `2.4.1`). Cada segmento comunica
18
+ intención de compatibilidad a los consumidores del paquete o servicio.
19
+
20
+ ---
21
+
22
+ ## Cuándo bumpar cada segmento
23
+
24
+ ### PATCH — arreglos compatibles hacia atrás
25
+
26
+ Incrementa PATCH cuando:
27
+ - Se corrige un bug sin cambiar la interfaz pública.
28
+ - Se corrige documentación o typos en código que afectan comportamiento.
29
+ - Se mejoran mensajes de error sin cambiar el tipo de excepción.
30
+ - Se actualizan dependencias de parche (`requests 2.31.0 → 2.31.1`).
31
+
32
+ ```
33
+ 1.4.2 → 1.4.3 # fix: corrige cálculo incorrecto en factura
34
+ ```
35
+
36
+ ### MINOR — funcionalidad nueva compatible hacia atrás
37
+
38
+ Incrementa MINOR cuando:
39
+ - Se agrega un endpoint, método o parámetro opcional nuevo.
40
+ - Se agrega una funcionalidad que los consumidores pueden ignorar.
41
+ - Se depreca algo (pero aún funciona).
42
+ - Se actualiza una dependencia minor que agrega capacidades.
43
+
44
+ ```
45
+ 1.4.3 → 1.5.0 # feat: agrega exportación a PDF
46
+ ```
47
+
48
+ Al subir MINOR, el PATCH siempre regresa a 0.
49
+
50
+ ### MAJOR — cambios incompatibles hacia atrás (breaking changes)
51
+
52
+ Incrementa MAJOR cuando:
53
+ - Se elimina un endpoint, método o campo.
54
+ - Se cambia el tipo o contrato de un parámetro existente.
55
+ - Se cambia el comportamiento esperado de forma que rompe integraciones existentes.
56
+ - Se cambia la autenticación/autorización de forma incompatible.
57
+
58
+ ```
59
+ 1.5.0 → 2.0.0 # feat!: migra autenticación de JWT a OAuth2
60
+ ```
61
+
62
+ Al subir MAJOR, MINOR y PATCH regresan a 0.
63
+
64
+ ### Versión 0.x.y — desarrollo inicial
65
+
66
+ Mientras la versión MAJOR sea `0`, la API se considera inestable. Cualquier MINOR puede
67
+ contener breaking changes. Cuando el software está listo para producción, se lanza `1.0.0`.
68
+
69
+ ---
70
+
71
+ ## Commits Convencionales
72
+
73
+ Los commits convencionales generan el changelog automáticamente y determinan el bump.
74
+
75
+ ### Formato
76
+
77
+ ```
78
+ <tipo>[scope opcional][! para breaking]: <descripción corta>
79
+
80
+ [cuerpo opcional]
81
+
82
+ [footer opcional: BREAKING CHANGE: descripción]
83
+ ```
84
+
85
+ ### Tipos y su impacto en versión
86
+
87
+ | Tipo | Impacto versión | Descripción |
88
+ |------------|----------------|--------------------------------------------------|
89
+ | `fix` | PATCH | Corrección de bug |
90
+ | `feat` | MINOR | Nueva funcionalidad |
91
+ | `feat!` | MAJOR | Nueva funcionalidad con breaking change |
92
+ | `fix!` | MAJOR | Fix con breaking change |
93
+ | `refactor` | ninguno | Refactorización sin cambio de comportamiento |
94
+ | `chore` | ninguno | Tareas de mantenimiento (CI, deps, config) |
95
+ | `docs` | ninguno | Documentación únicamente |
96
+ | `test` | ninguno | Agregar o corregir tests |
97
+ | `perf` | PATCH | Mejora de rendimiento sin cambio de interfaz |
98
+ | `ci` | ninguno | Cambios en pipelines de CI/CD |
99
+ | `style` | ninguno | Formato, espacios, punto y coma (sin lógica) |
100
+
101
+ ### Ejemplos de commits bien escritos
102
+
103
+ ```bash
104
+ git commit -m "fix(auth): corrige expiración incorrecta de tokens de refresco"
105
+ git commit -m "feat(reportes): agrega exportación a Excel con formato condicional"
106
+ git commit -m "feat(api)!: cambia paginación de offset a cursor
107
+
108
+ BREAKING CHANGE: el parámetro 'page' fue reemplazado por 'cursor'.
109
+ Los clientes deben actualizar sus integraciones."
110
+ ```
111
+
112
+ ---
113
+
114
+ ## Proceso de release
115
+
116
+ ### Paso 1 — Preparar la rama de release
117
+
118
+ ```bash
119
+ # En main, crear rama release
120
+ git checkout -b release/2.1.0
121
+
122
+ # Actualizar versión en archivos del proyecto
123
+ # Python: pyproject.toml, __version__
124
+ # Node: package.json
125
+ # Java: pom.xml o build.gradle
126
+ ```
127
+
128
+ ### Paso 2 — Generar CHANGELOG
129
+
130
+ Usar `conventional-changelog` o `git-cliff` para generar el changelog automáticamente:
131
+
132
+ ```bash
133
+ # Con git-cliff (recomendado)
134
+ git cliff --tag v2.1.0 --output CHANGELOG.md
135
+
136
+ # Con conventional-changelog
137
+ npx conventional-changelog -p conventionalcommits -i CHANGELOG.md -s
138
+ ```
139
+
140
+ Estructura esperada del CHANGELOG:
141
+
142
+ ```markdown
143
+ ## [2.1.0] - 2026-03-25
144
+
145
+ ### Nuevas funcionalidades
146
+ - feat(reportes): agrega exportación a Excel (#234)
147
+ - feat(usuarios): agrega campo de foto de perfil (#241)
148
+
149
+ ### Correcciones
150
+ - fix(auth): corrige expiración incorrecta de tokens (#238)
151
+ - fix(factura): redondeo incorrecto en descuentos (#240)
152
+ ```
153
+
154
+ ### Paso 3 — Commit de versión y tag
155
+
156
+ ```bash
157
+ # Commit del bump de versión
158
+ git add pyproject.toml CHANGELOG.md
159
+ git commit -m "chore(release): v2.1.0"
160
+
161
+ # Crear tag anotado (no ligero)
162
+ git tag -a v2.1.0 -m "Release v2.1.0"
163
+
164
+ # Subir rama y tag
165
+ git push origin release/2.1.0
166
+ git push origin v2.1.0
167
+ ```
168
+
169
+ ### Paso 4 — Merge a main y develop
170
+
171
+ ```bash
172
+ git checkout main
173
+ git merge --no-ff release/2.1.0
174
+ git push origin main
175
+
176
+ git checkout develop
177
+ git merge --no-ff release/2.1.0
178
+ git push origin develop
179
+
180
+ git branch -d release/2.1.0
181
+ ```
182
+
183
+ ---
184
+
185
+ ## Estrategia de tags
186
+
187
+ ### Tags anotados vs. ligeros
188
+
189
+ Siempre usar **tags anotados** (`git tag -a`) para releases. Los tags ligeros son solo para
190
+ marcado temporal interno. Los tags anotados incluyen autor, fecha y mensaje — esto es esencial
191
+ para `git describe` y herramientas de release.
192
+
193
+ ### Convención de nombres
194
+
195
+ ```
196
+ v{MAJOR}.{MINOR}.{PATCH} # release estable: v2.1.0
197
+ v{MAJOR}.{MINOR}.{PATCH}-rc.{N} # release candidate: v2.1.0-rc.1
198
+ v{MAJOR}.{MINOR}.{PATCH}-beta.{N} # beta pública: v2.1.0-beta.2
199
+ v{MAJOR}.{MINOR}.{PATCH}-alpha.{N} # alpha interna: v2.1.0-alpha.1
200
+ ```
201
+
202
+ ### Listar y filtrar tags
203
+
204
+ ```bash
205
+ git tag --sort=-v:refname # Lista tags en orden semver descendente
206
+ git tag -l "v2.*" # Solo tags de la serie 2.x
207
+ git describe --tags --abbrev=0 # Último tag del commit actual
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Herramientas recomendadas
213
+
214
+ | Herramienta | Uso |
215
+ |------------------------|----------------------------------------------|
216
+ | `git-cliff` | Generación de CHANGELOG desde commits |
217
+ | `commitizen` | Wizard interactivo para commits convencionales |
218
+ | `semantic-release` | Release automatizado desde CI |
219
+ | `bump2version` | Bump de versión en archivos Python |
220
+ | `conventional-commits` | Spec oficial de commits convencionales |
221
+
222
+ ---
223
+
224
+ ## Anti-patrones a evitar
225
+
226
+ - **Nunca reutilizar un tag**: Si el release `v2.1.0` se publicó, no se puede mover ese tag.
227
+ Si hay un error, publicar `v2.1.1`.
228
+ - **Nunca usar tags ligeros en releases**: No aportan metadata y dificultan trazabilidad.
229
+ - **Nunca saltarse MAJOR por miedo**: Si hay breaking change, es MAJOR. Ocultarlo como MINOR
230
+ rompe la confianza de los consumidores.
231
+ - **No mezclar tipos de commit en uno solo**: Un commit = un cambio lógico = un tipo.
232
+ - **No escribir changelogs manuales sin estructura**: Usar el formato estándar para que las
233
+ herramientas puedan procesarlos.
234
+
235
+ ## Cuándo NO cargar
236
+
237
+ - Se versiona el sistema SWL propio — ese proceso usa el checklist de 15 ubicaciones de `/swl:release`; este skill cubre SemVer general para proyectos de aplicación, no el flujo interno del sistema.
238
+ - Se elige el tipo de commit para un cambio individual — el tipo (`feat`, `fix`, `refactor`) se decide al redactar el mensaje del commit; cargar este skill es excesivo para esa decisión puntual.
239
+ - `semantic-release` ya está configurado en CI — si el release está automatizado, el número de versión se calcula desde los commits sin intervención manual; cargar este skill duplicaría el trabajo.
240
+ - El proyecto es una herramienta interna sin consumidores que dependan de compatibilidad de versión — SemVer completo compensa cuando hay consumidores que confían en los números de versión para evaluar breaking changes.
241
+
242
+ ## Gotchas / Errores comunes no obvios
243
+
244
+ - **Tag ligero creado en lugar de anotado para el release**: `git tag v2.1.0` sin la flag `-a` crea un tag ligero que no incluye metadata de autor, fecha ni mensaje. Causa: olvidar la flag `-a` o la costumbre de usar tags ligeros para marcado temporal. Solución: siempre `git tag -a v2.1.0 -m "Release v2.1.0"` para releases — los tags anotados son los que `git describe` y las herramientas de changelog usan correctamente.
245
+ - **MAJOR evitado por considerar el breaking change "pequeño"**: el equipo sube de `1.4.2` a `1.5.0` un endpoint que cambió su contrato de respuesta. Causa: subestimar el impacto del breaking change para evitar el salto de versión mayor. Solución: si un consumidor tiene que actualizar su código para seguir funcionando, es MAJOR sin importar el tamaño del cambio — el anti-patrón "Nunca saltarse MAJOR por miedo" es explícito en el skill.
246
+ - **Changelog generado con `git cliff` sin configuración personalizada incluye commits de chore y docs**: el CHANGELOG.md resultante tiene 80% de entradas de limpieza que no interesan a los consumidores. Causa: `git cliff` sin `.cliff.toml` incluye todos los tipos de commit. Solución: crear `.cliff.toml` en el repo con la sección `[git]` filtrando solo `feat`, `fix`, `perf` y `BREAKING CHANGE` para el changelog de release público.
247
+ - **Rama `release/2.1.0` mergeada a `main` pero no a `develop`**: el próximo desarrollo parte de `develop` sin incluir los commits del release, generando conflictos en la siguiente rama de feature. Causa: el Paso 4 requiere merge a ambas ramas pero se omite el merge a `develop` por considerar que el release ya está en `main`. Solución: el proceso de release de 4 pasos del skill requiere merge a `main` Y a `develop` antes de eliminar la rama de release — ambos merges son parte del mismo paso atómico.
248
+ - **`npx <paquete> <comando>` sin `@latest` usa caché stale indefinidamente**: tras publicar una nueva versión, `npx swl-ses doctor` sigue ejecutando la primera versión que el usuario cacheó (por ejemplo v5.7.0 cuando ya hay v5.10.3 instalada). Causa: npx resuelve a la primera versión disponible y la cachea; sin `@latest` nunca vuelve a consultar el registry. Solución: SIEMPRE usar `npx paquete@latest <comando>` en mensajes post-install, hooks de alerta de nueva versión, docs del README, ejemplos en CHANGELOG y scripts de inicialización. Nunca `npx paquete <comando>` desnudo — incluso si el paquete acaba de publicarse; el caché de un desarrollador vecino puede tener una versión anterior desde hace meses. Un bump sin `@latest` en los mensajes post-install perpetúa el problema para todos los usuarios nuevos.