@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,247 @@
1
+ # Regla: Infraestructura Cloud
2
+
3
+ Esta regla es OBLIGATORIA para todo recurso desplegado en cloud sin excepción.
4
+ Una infraestructura mal configurada puede causar brechas de seguridad, pérdida de datos
5
+ o costos desbocados en cuestión de horas. Ningún recurso cloud se considera listo para
6
+ producción si viola cualquiera de los puntos aquí listados.
7
+
8
+ ---
9
+
10
+ ## Principio de menor privilegio en IAM
11
+
12
+ Cada identidad (usuario, rol, cuenta de servicio) recibe solo los permisos
13
+ estrictamente necesarios para su función, y nada más.
14
+
15
+ - NUNCA asignar políticas de administrador (`AdministratorAccess`, `Owner`, `*:*`)
16
+ a cuentas de servicio, aplicaciones o usuarios que no sean administradores reales.
17
+ - NUNCA asignar permisos de escritura cuando solo se necesita lectura.
18
+ - NUNCA asignar permisos a nivel de cuenta/organización cuando el scope correcto
19
+ es un recurso específico (ej: un bucket S3, no todos los buckets).
20
+ - Crear roles de IAM específicos por función:
21
+ - Rol para la aplicación web (lectura de secrets, escritura en BD, publicar en cola)
22
+ - Rol para el proceso de backup (lectura de BD, escritura en storage)
23
+ - Rol para el pipeline de CI/CD (push de imágenes, despliegue en el servicio)
24
+ Estos roles son diferentes y tienen permisos diferentes.
25
+ - Revisar y limpiar permisos no utilizados cada 90 días.
26
+ AWS tiene `IAM Access Analyzer` para detectar permisos sin uso.
27
+ GCP tiene `IAM Recommender` con el mismo propósito.
28
+ - Las llaves de acceso programático (API keys, service account keys) deben
29
+ rotarse cada 90 días máximo. Preferir roles temporales (STS AssumeRole, Workload Identity)
30
+ sobre llaves de larga duración cuando sea posible.
31
+ - Autenticación multifactor (MFA) obligatoria para todos los usuarios humanos
32
+ de la consola cloud, sin excepción. Incluyendo administradores.
33
+
34
+ ---
35
+
36
+ ## Cifrado en reposo y en tránsito
37
+
38
+ Todos los datos deben estar cifrados, tanto almacenados como en movimiento.
39
+
40
+ ### En reposo
41
+
42
+ - Todos los volúmenes de disco (EBS, Persistent Disk, Managed Disks) deben
43
+ tener cifrado habilitado. Verificar que no está desactivado por defecto.
44
+ - Todos los buckets de object storage (S3, GCS, Azure Blob) con cifrado activado.
45
+ Preferir llaves administradas por el cliente (KMS) para datos sensibles.
46
+ - Las bases de datos relacionales y NoSQL con cifrado de almacenamiento habilitado.
47
+ RDS: `StorageEncrypted: true`. Cloud SQL: `diskEncryptionConfiguration`.
48
+ - Los backups cifrados con la misma llave (o llave separada para mayor aislamiento).
49
+ - Los snapshots de volúmenes y AMIs cifrados.
50
+
51
+ ### En tránsito
52
+
53
+ - TLS 1.2 mínimo. TLS 1.3 preferido. Deshabilitar TLS 1.0 y TLS 1.1 explícitamente.
54
+ - HTTPS obligatorio para toda comunicación entre servicios, incluyendo comunicación
55
+ interna entre microservicios dentro de la misma VPC.
56
+ - Certificados de TLS renovados automáticamente (ACM, Let's Encrypt con cert-manager,
57
+ Google-managed certificates).
58
+ - HSTS habilitado con `max-age` mínimo de 31536000 (1 año) en servicios públicos.
59
+ - La comunicación con bases de datos debe ser sobre TLS:
60
+ `sslmode=require` en PostgreSQL, `require_secure_transport=ON` en MySQL.
61
+ - Las colas de mensajes (SQS, Pub/Sub, Service Bus) con cifrado de mensajes habilitado.
62
+
63
+ ---
64
+
65
+ ## Prohibición absoluta de credenciales hardcodeadas
66
+
67
+ Las credenciales en código fuente son una de las causas más comunes de brechas de seguridad.
68
+
69
+ - NUNCA hardcodear en código fuente: passwords, API keys, tokens de acceso,
70
+ connection strings, certificados privados, IDs de cuenta, ARNs con cuenta específica.
71
+ - NUNCA hardcodear credenciales en Dockerfiles, docker-compose.yml, manifiestos
72
+ de Kubernetes, archivos de Terraform, scripts de CI/CD.
73
+ - NUNCA commitear archivos `.env` con valores reales. Solo `.env.example` con
74
+ nombres de variables y valores de placeholder.
75
+ - Usar el servicio de gestión de secretos correspondiente al cloud provider:
76
+ - AWS: Secrets Manager o Parameter Store (SSM)
77
+ - GCP: Secret Manager
78
+ - Azure: Key Vault
79
+ - Kubernetes: External Secrets Operator (integrando con el cloud secrets manager)
80
+ - Para variables de entorno en CI/CD, usar las variables de entorno cifradas
81
+ del servicio de CI (GitHub Actions Secrets, GitLab CI Variables, etc.).
82
+ NUNCA escribirlas en archivos de configuración del pipeline.
83
+ - Ejecutar `git-secrets` o `truffleHog` en el pipeline de CI para detectar
84
+ credenciales accidentalmente commiteadas.
85
+ - Si se detecta una credencial comprometida en git:
86
+ 1. Revocarla/rotarla INMEDIATAMENTE
87
+ 2. Asumir que fue vista por actores maliciosos
88
+ 3. Limpiar el historial con `git filter-repo` o BFG Repo Cleaner
89
+ 4. No es suficiente con un commit que la borre — el historial es público
90
+
91
+ ---
92
+
93
+ ## Infraestructura como código (IaC) para todo recurso
94
+
95
+ Ningún recurso cloud se crea manualmente desde la consola en ambientes no locales.
96
+
97
+ - Todo recurso de producción y staging debe estar definido en código:
98
+ Terraform, Pulumi, AWS CDK, AWS CloudFormation, Azure Bicep, o el equivalente.
99
+ - Los recursos creados manualmente no son reproducibles, no son auditables y no
100
+ son recuperables en caso de desastre. Son deuda técnica crítica.
101
+ - El código de IaC vive en el repositorio del proyecto (o en un repositorio
102
+ dedicado de infraestructura si el equipo es grande).
103
+ - Los cambios de infraestructura pasan por code review igual que el código de aplicación.
104
+ - Antes de aplicar cambios: `terraform plan` (o equivalente) debe revisarse
105
+ y aprobarse. NUNCA aplicar IaC sin revisar el plan.
106
+ - Los cambios de infraestructura se despliegan a través del pipeline de CI/CD,
107
+ no manualmente desde la terminal de un desarrollador.
108
+ - Los módulos de Terraform/Pulumi deben tener versiones pinneadas. No usar
109
+ rangos abiertos en módulos de infraestructura.
110
+ - Estado de Terraform almacenado en backend remoto (S3+DynamoDB, GCS, Terraform Cloud)
111
+ con locking habilitado. NUNCA usar estado local en equipos.
112
+
113
+ ---
114
+
115
+ ## Alta disponibilidad y multi-AZ para producción
116
+
117
+ Los servicios de producción deben tolerar la falla de una zona de disponibilidad.
118
+
119
+ - Las bases de datos de producción deben ser multi-AZ:
120
+ RDS con Multi-AZ deployment, Cloud SQL con high availability, Azure SQL con Zone Redundancy.
121
+ - Los servidores de aplicación deben escalar horizontalmente en múltiples AZs.
122
+ NUNCA desplegar en una sola instancia sin failover para servicios de producción.
123
+ - El load balancer debe distribuir tráfico entre múltiples AZs.
124
+ - Los buckets de object storage son multi-AZ por defecto en la mayoría de providers.
125
+ Verificar que la clase de almacenamiento seleccionada sea multi-regional o multi-AZ.
126
+ - Para servicios con SLA de alta disponibilidad: considerar multi-región con
127
+ routing DNS geográfico (Route 53 latency routing, Cloud DNS, Azure Traffic Manager).
128
+ - El objetivo de tiempo de recuperación (RTO) y el objetivo de punto de recuperación (RPO)
129
+ deben estar definidos y documentados para cada servicio de producción.
130
+ - Las fallas de AZ deben probarse periódicamente (Game Days, Chaos Engineering).
131
+
132
+ ---
133
+
134
+ ## Backups automatizados con retención definida
135
+
136
+ Los datos deben poder recuperarse. Sin backups verificados, no hay recuperación.
137
+
138
+ - Todos los servicios con estado (bases de datos, filesystems, object storage crítico)
139
+ deben tener backups automatizados configurados por IaC.
140
+ - La política de retención debe estar definida explícitamente:
141
+ - Producción: mínimo 30 días de retención, recomendado 90 días
142
+ - Staging: mínimo 7 días
143
+ - Backups de largo plazo (compliance): definir según requisito regulatorio
144
+ - Los backups deben almacenarse en una cuenta o proyecto cloud diferente al de
145
+ producción para protección contra eliminación accidental o ransomware.
146
+ - El cifrado de backups es obligatorio (misma regla que datos en reposo).
147
+ - La restauración de backups debe probarse mensualmente en staging.
148
+ Un backup que no se ha restaurado exitosamente no existe.
149
+ - Configurar alertas cuando un backup falla. NUNCA descubrir la falla en el momento
150
+ en que se necesita restaurar.
151
+ - Para bases de datos: point-in-time recovery (PITR) habilitado en producción.
152
+ Permite restaurar a cualquier momento dentro de la ventana de retención.
153
+
154
+ ---
155
+
156
+ ## Monitoring, alertas y observabilidad obligatorios
157
+
158
+ Si no está monitorizado, no está en producción.
159
+
160
+ - Todo servicio de producción debe tener:
161
+ - **Métricas de infraestructura**: CPU, memoria, disco, red (CloudWatch, Cloud Monitoring, Azure Monitor)
162
+ - **Métricas de aplicación**: latencia p50/p95/p99, tasa de errores, throughput
163
+ - **Logs centralizados**: CloudWatch Logs, Cloud Logging, Azure Log Analytics
164
+ - **Trazas distribuidas**: X-Ray, Cloud Trace, Application Insights (si hay microservicios)
165
+ - Alertas obligatorias con acción definida (no alertas sin destinatario):
166
+ - CPU > 80% por más de 5 minutos
167
+ - Disco > 85% de uso
168
+ - Tasa de errores HTTP 5xx > 1% del tráfico
169
+ - Latencia p95 > umbral definido por SLA
170
+ - Fallo de backup
171
+ - Certificado TLS con vencimiento < 30 días
172
+ - Las alertas deben ir a un canal con responsable activo (PagerDuty, OpsGenie, Slack con on-call).
173
+ NUNCA alertas que van a un buzón que nadie revisa.
174
+ - Implementar dashboards de salud accesibles al equipo completo.
175
+ - Los logs NO deben contener datos sensibles: passwords, tokens, PII, números de tarjeta.
176
+ Configurar filtros de sanitización de logs.
177
+ - Retención de logs: mínimo 90 días en producción. Requisitos de compliance pueden
178
+ requerir más (1-7 años según el sector).
179
+
180
+ ---
181
+
182
+ ## Tagging obligatorio de recursos
183
+
184
+ Los recursos sin tags son inauditables, sin dueño y sin costo asignable.
185
+
186
+ Los siguientes tags son OBLIGATORIOS en TODOS los recursos cloud:
187
+
188
+ ```
189
+ proyecto: nombre del proyecto o sistema (ej: "swl-core", "facturacion")
190
+ ambiente: prod | staging | dev | test
191
+ equipo: nombre del equipo responsable (ej: "backend", "infraestructura")
192
+ costo-center: centro de costo para facturación interna (ej: "ing-2024", "cliente-abc")
193
+ ```
194
+
195
+ Tags adicionales recomendados:
196
+
197
+ ```
198
+ owner: correo del responsable técnico
199
+ version: versión del componente (si aplica)
200
+ auto-apagado: "true" para recursos de dev/test que se apagan fuera de horario laboral
201
+ ```
202
+
203
+ - Configurar políticas de gobernanza que rechacen la creación de recursos sin los
204
+ tags obligatorios (AWS Service Control Policies, GCP Organization Policies).
205
+ - Los tags deben definirse en el IaC, no agregarse manualmente después.
206
+ - Usar los tags para:
207
+ - Filtrar recursos por proyecto en las consultas de costo
208
+ - Identificar recursos huérfanos (sin equipo asignado)
209
+ - Implementar apagado automático de recursos de no-producción
210
+
211
+ ---
212
+
213
+ ## Segmentación de red (VPC, subnets, security groups)
214
+
215
+ La red debe estar diseñada con defensa en profundidad.
216
+
217
+ - Cada ambiente (prod, staging, dev) debe tener su propia VPC separada.
218
+ NUNCA mezclar prod y dev en la misma VPC.
219
+ - Las bases de datos y servicios internos NUNCA deben tener IP pública.
220
+ Deben vivir en subnets privadas sin ruta directa a internet.
221
+ - Los security groups deben seguir el principio de menor privilegio:
222
+ - NUNCA `0.0.0.0/0` en reglas de ingreso de puertos de aplicación (80, 443 son excepciones para el LB)
223
+ - NUNCA `0.0.0.0/0` en reglas de ingreso para SSH (22) o RDP (3389) en producción.
224
+ Usar VPN, bastion host o AWS Systems Manager Session Manager.
225
+ - Las reglas de egreso deben ser explícitas — no `0.0.0.0/0` sin justificación.
226
+ - El acceso SSH/RDP a instancias de producción debe ser a través de bastion host
227
+ o VPN corporativa, nunca directamente desde internet.
228
+ - Los balanceadores de carga son los únicos recursos en subnets públicas.
229
+ Las instancias de aplicación van en subnets privadas.
230
+ - VPC Flow Logs habilitados en producción para auditoría de tráfico de red.
231
+ - Network ACLs como capa adicional de defensa para subnets críticas.
232
+
233
+ ---
234
+
235
+ ## Checklist antes de desplegar un nuevo recurso en producción
236
+
237
+ - [ ] Definido en IaC — no creado manualmente en la consola
238
+ - [ ] Tag obligatorio de proyecto, ambiente, equipo y costo-center asignados
239
+ - [ ] Principio de menor privilegio aplicado a los roles IAM asociados
240
+ - [ ] Cifrado en reposo habilitado
241
+ - [ ] Comunicación sobre TLS configurada
242
+ - [ ] Multi-AZ configurado (si es un servicio con estado)
243
+ - [ ] Backups automatizados configurados con política de retención definida
244
+ - [ ] Monitoreo y alertas configuradas
245
+ - [ ] El recurso está en subnet privada (si no es un LB o CDN)
246
+ - [ ] No hay credenciales hardcodeadas en la configuración
247
+ - [ ] El código de IaC pasó code review
package/reglas/docs.md ADDED
@@ -0,0 +1,245 @@
1
+ # Regla: Documentación
2
+
3
+ La documentación es para los humanos que vienen después — incluyendo tú mismo
4
+ en seis meses. Documenta el POR QUÉ, no el QUÉ: el código ya explica el qué.
5
+ La documentación explica el contexto, las restricciones y las decisiones.
6
+
7
+ ---
8
+
9
+ ## Documentar el POR QUÉ, no el QUÉ
10
+
11
+ El código bien escrito es autoexplicativo en el QUÉ. Los comentarios agregan
12
+ valor cuando explican lo que el código no puede expresar por sí solo:
13
+
14
+ - Por qué se tomó esta decisión en lugar de la alternativa obvia
15
+ - Por qué hay una excepción a la regla general
16
+ - Qué restricción externa (API, regulación, legacy) explica una solución poco intuitiva
17
+ - Qué bug histórico motivó este código aparentemente innecesario
18
+
19
+ Mal — documenta el qué (redundante con el código):
20
+ ```python
21
+ # Incrementar el contador
22
+ contador += 1
23
+
24
+ # Verificar si el usuario está activo
25
+ if usuario.es_activo:
26
+ ```
27
+
28
+ Bien — documenta el por qué:
29
+ ```python
30
+ # El SAT requiere que el folio fiscal sea consecutivo sin gaps.
31
+ # Usar SEQUENCE de PostgreSQL garantiza atomicidad bajo concurrencia.
32
+ folio = await db.execute(text("SELECT nextval('folio_fiscal_seq')"))
33
+
34
+ # HACK: la API de CFDI devuelve 200 incluso para errores de validación.
35
+ # Detectar el error por la presencia del campo "faultcode" en la respuesta.
36
+ if "faultcode" in respuesta:
37
+ ```
38
+
39
+ ---
40
+
41
+ ## README actualizado
42
+
43
+ El README es el punto de entrada al proyecto. Debe estar siempre actualizado.
44
+ Un README desactualizado es peor que no tener README — genera confianza falsa.
45
+
46
+ Estructura mínima del README del proyecto:
47
+ ```markdown
48
+ # Nombre del Proyecto
49
+
50
+ Descripción en 2-3 líneas: qué hace, para quién, qué problema resuelve.
51
+
52
+ ## Requisitos previos
53
+ - Python 3.12+
54
+ - PostgreSQL 15+
55
+ - Node.js 20+
56
+
57
+ ## Instalación y setup local
58
+ Instrucciones paso a paso. Que funcionen. Probarlas en una máquina limpia.
59
+
60
+ ## Cómo correr los tests
61
+
62
+ ## Cómo levantar el entorno de desarrollo
63
+
64
+ ## Variables de entorno requeridas
65
+ Lista con descripción de cada variable (nunca valores reales).
66
+
67
+ ## Arquitectura
68
+ Link al diagrama o descripción de alto nivel.
69
+
70
+ ## Contribuir
71
+ Link al CONTRIBUTING.md o instrucciones básicas.
72
+ ```
73
+
74
+ Reglas del README:
75
+ - Las instrucciones de instalación deben funcionar. Probarlas periódicamente.
76
+ - Actualizar el README en el mismo PR que introduce el cambio que lo hace obsoleto.
77
+ - Sin secciones "TODO" o "próximamente" — si no está listo, no va en el README.
78
+ - Sin secciones genéricas copiadas de templates sin personalizar.
79
+
80
+ ---
81
+
82
+ ## CHANGELOG con formato Keep a Changelog
83
+
84
+ Formato oficial: https://keepachangelog.com/es/1.0.0/
85
+
86
+ Estructura:
87
+ ```markdown
88
+ # Changelog
89
+
90
+ ## [Sin publicar]
91
+
92
+ ### Agregado
93
+ - Nueva funcionalidad X
94
+
95
+ ## [1.2.0] - 2026-01-15
96
+
97
+ ### Agregado
98
+ - Soporte para exportación de reportes en PDF
99
+
100
+ ### Cambiado
101
+ - El endpoint /facturas ahora devuelve paginación por defecto
102
+
103
+ ### Corregido
104
+ - Error al calcular IEPS para productos con tasa 0%
105
+
106
+ ### Eliminado
107
+ - Endpoint /facturas/legacy deprecado desde v1.0
108
+
109
+ ## [1.1.0] - 2025-11-20
110
+ ...
111
+ ```
112
+
113
+ Reglas del CHANGELOG:
114
+ - Actualizar en cada PR que cambia comportamiento observable por el usuario.
115
+ Cambios internos de refactor o tests: no requieren entrada en CHANGELOG.
116
+ - Sección "Sin publicar" para cambios no lanzados todavía.
117
+ Al lanzar: renombrar la sección con la versión y fecha.
118
+ - Una línea por cambio, redactada para el usuario, no para el desarrollador.
119
+ "Corregido error al exportar PDF con caracteres especiales" > "fix: null pointer en PdfExportService"
120
+ - El CHANGELOG vive en la raíz del repositorio como `CHANGELOG.md`.
121
+
122
+ ---
123
+
124
+ ## ADRs para decisiones arquitecturales
125
+
126
+ Ver también: `reglas/arquitectura.md`
127
+
128
+ - Directorio: `docs/adr/` en el repositorio.
129
+ - Índice en `docs/adr/README.md` con lista de todos los ADRs y su estado.
130
+ - Buscar en los ADRs existentes antes de proponer una decisión nueva.
131
+ Si ya hay un ADR que la cubre: referenciarlo, no crear uno duplicado.
132
+ - ADRs deprecados o reemplazados: no borrar — actualizar el estado y referenciar
133
+ el ADR nuevo. El historial de decisiones es valioso.
134
+
135
+ ---
136
+
137
+ ## Runbooks para procesos operativos
138
+
139
+ Un runbook es una guía paso a paso para ejecutar un proceso operativo:
140
+ deploy, rollback, migración de datos, respuesta a incidentes.
141
+
142
+ Ubicación: `docs/runbooks/`
143
+
144
+ Estructura mínima de un runbook:
145
+ ```markdown
146
+ # Runbook: [Nombre del proceso]
147
+
148
+ **Propósito**: Qué hace este proceso y cuándo ejecutarlo.
149
+ **Tiempo estimado**: N minutos
150
+ **Prerrequisitos**: Qué accesos/herramientas se necesitan
151
+ **Riesgos**: Qué puede salir mal y cómo mitigarlo
152
+
153
+ ## Pasos
154
+
155
+ ### 1. [Nombre del paso]
156
+ ```bash
157
+ comando exacto a ejecutar
158
+ ```
159
+ **Resultado esperado**: descripción de qué debe pasar.
160
+ **Si falla**: qué hacer.
161
+
162
+ ## Verificación post-ejecución
163
+ - [ ] Paso de verificación 1
164
+ - [ ] Paso de verificación 2
165
+
166
+ ## Rollback
167
+ Pasos para deshacer el proceso si algo falla.
168
+ ```
169
+
170
+ Procesos que DEBEN tener runbook:
171
+ - Deploy a producción
172
+ - Rollback de deploy
173
+ - Migraciones de BD en producción
174
+ - Rotación de secrets
175
+ - Respuesta a incidente de seguridad
176
+ - Backup y restore de BD
177
+
178
+ ---
179
+
180
+ ## Documentación de APIs
181
+
182
+ - Toda API REST tiene documentación OpenAPI/Swagger generada automáticamente
183
+ y disponible en `/docs` (desarrollo) y `/api/docs` (producción con auth).
184
+ - Cada endpoint tiene descripción, parámetros documentados y ejemplos de respuesta.
185
+ - Los campos de schemas Pydantic con `description=` son parte de la spec — no opcionales.
186
+ - Errores posibles documentados (qué regresa en 400, 401, 403, 404, 422, 500).
187
+
188
+ ---
189
+
190
+ ## Sin documentación vacía o genérica
191
+
192
+ Documentación que no ayuda es ruido que hay que mantener:
193
+
194
+ Señales de documentación vacía a eliminar:
195
+ - `"""Constructor de la clase Factura"""` — obvio del nombre.
196
+ - `"""Parámetros: id (int): el id"""` — sin información nueva.
197
+ - Secciones del README copiadas de un template sin personalizar.
198
+ - Comentarios `# TODO` sin número de ticket y fecha.
199
+ - ADRs con "Contexto: se necesitaba una solución" sin detalles reales.
200
+
201
+ Si no se tiene tiempo de documentar bien: es mejor no poner documentación vacía.
202
+ Marcar explícitamente con `# NODOC: pendiente de documentar (ticket #NNN)`.
203
+
204
+ ---
205
+
206
+ ## Docstrings — cuándo y cómo
207
+
208
+ Python:
209
+ - Docstring obligatorio en módulos, clases públicas y funciones públicas no triviales.
210
+ - Funciones privadas (`_nombre`) y triviales (getters simples): docstring opcional.
211
+ - Formato Google Style:
212
+ ```python
213
+ def calcular_iva(precio: Decimal, tasa: float) -> Decimal:
214
+ """Calcula el IVA sobre el precio dado.
215
+
216
+ No incluye IEPS ni retenciones. Para cálculo completo usar
217
+ `calcular_impuestos_completos()`.
218
+
219
+ Args:
220
+ precio: Precio base sin impuestos.
221
+ tasa: Tasa como decimal (0.16 para 16%).
222
+
223
+ Returns:
224
+ Monto del IVA redondeado a 2 decimales.
225
+
226
+ Raises:
227
+ ValueError: Si la tasa es negativa o mayor que 1.
228
+ """
229
+ ```
230
+
231
+ TypeScript:
232
+ - JSDoc en funciones públicas de services y utilities.
233
+ - Componentes Angular: comentario en el selector explicando el propósito del componente.
234
+
235
+ ---
236
+
237
+ ## Checklist de documentación antes de merge
238
+
239
+ - [ ] README refleja los cambios del PR
240
+ - [ ] CHANGELOG actualizado si hay cambio observable por el usuario
241
+ - [ ] ADR creado si hubo decisión arquitectural significativa
242
+ - [ ] Endpoints nuevos con descripción en el schema OpenAPI
243
+ - [ ] Sin comentarios que explican el qué (solo el por qué)
244
+ - [ ] Sin secciones TODO vacías sin ticket asociado
245
+ - [ ] Runbook creado si se agregó proceso operativo nuevo
@@ -0,0 +1,201 @@
1
+ # Regla: Estilo de Código
2
+
3
+ El código se lee muchas más veces de las que se escribe. Estas reglas maximizan
4
+ la legibilidad y reducen la carga cognitiva de quien mantiene el código después.
5
+ Aplican a todos los lenguajes del stack salvo indicación contraria.
6
+
7
+ ---
8
+
9
+ ## Nombres descriptivos
10
+
11
+ - Los nombres son documentación. Un nombre que requiere un comentario para
12
+ entenderse es un nombre malo — renombrar.
13
+ - Variables, funciones y clases: nombrar por lo que SON o lo que HACEN,
14
+ no por su tipo ni su implementación.
15
+ - Mal: `d`, `tmp`, `data`, `obj`, `flag`, `result`
16
+ - Bien: `fecha_entrega`, `usuario_autenticado`, `calcular_impuesto()`
17
+ - Booleanos: prefijo `es_`, `tiene_`, `puede_`, `esta_`.
18
+ - Mal: `activo`, `valido`, `habilitado`
19
+ - Bien: `es_activo`, `tiene_permisos`, `puede_editar`
20
+ - Funciones: verbo + sustantivo. Describe la acción y el objeto.
21
+ - Mal: `proceso()`, `handler()`, `manage()`
22
+ - Bien: `procesar_pago()`, `manejar_solicitud_reembolso()`
23
+ - Colecciones: plural del elemento.
24
+ - Mal: `lista`, `items`, `data`
25
+ - Bien: `facturas`, `usuarios_activos`, `errores_validacion`
26
+ - No abreviaciones salvo las universalmente conocidas (`id`, `url`, `http`, `api`).
27
+ Siempre en el contexto del proyecto — si hay duda, escribir completo.
28
+
29
+ ---
30
+
31
+ ## Funciones cortas — límite estricto de 30 líneas
32
+
33
+ - Una función hace UNA sola cosa. Si se necesita "y" para describir lo que hace,
34
+ es candidata a dividirse.
35
+ - Límite de 30 líneas de código efectivo (sin contar comentarios, líneas en blanco
36
+ ni firmas de función).
37
+ - Si una función supera 30 líneas: extraer subfunciones con nombres descriptivos.
38
+ El cuerpo de la función original queda como un sumario legible de pasos.
39
+ - Parámetros: máximo 4. Si se necesitan más, agrupar en un objeto/dataclass.
40
+ - Complejidad ciclomática máxima: 5. Más de 5 ramas → refactorizar.
41
+
42
+ ---
43
+
44
+ ## Un solo nivel de abstracción por función
45
+
46
+ - Cada función opera en un único nivel de abstracción. No mezclar operaciones
47
+ de alto nivel (lógica de negocio) con detalles de bajo nivel (parsing, formateo).
48
+
49
+ Mal — mezcla niveles:
50
+ ```python
51
+ def procesar_pedido(pedido_id):
52
+ pedido = db.execute("SELECT * FROM pedidos WHERE id = %s", (pedido_id,))
53
+ if pedido["estatus"] == "pendiente":
54
+ total = sum(item["precio"] * item["cantidad"] for item in pedido["items"])
55
+ db.execute("UPDATE pedidos SET total = %s WHERE id = %s", (total, pedido_id))
56
+ ```
57
+
58
+ Bien — nivel uniforme:
59
+ ```python
60
+ def procesar_pedido(pedido_id):
61
+ pedido = obtener_pedido(pedido_id)
62
+ if esta_pendiente(pedido):
63
+ actualizar_total(pedido)
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Early return — evitar anidamiento profundo
69
+
70
+ - Validar precondiciones al inicio y retornar inmediatamente si no se cumplen.
71
+ Nunca anidar la lógica principal dentro de múltiples `if`.
72
+ - Máximo 2 niveles de anidamiento dentro de una función (sin contar el cuerpo
73
+ de la función en sí). Si se llega a 3: early return o extracción de función.
74
+
75
+ Mal:
76
+ ```python
77
+ def crear_factura(usuario, items):
78
+ if usuario:
79
+ if items:
80
+ if len(items) > 0:
81
+ # lógica principal aquí, muy adentro
82
+ ```
83
+
84
+ Bien:
85
+ ```python
86
+ def crear_factura(usuario, items):
87
+ if not usuario:
88
+ raise ValueError("Usuario requerido")
89
+ if not items:
90
+ raise ValueError("La factura debe tener al menos un ítem")
91
+ # lógica principal al nivel superior
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Sin código muerto
97
+
98
+ - Eliminar código comentado antes de hacer merge. Si se necesita recuperar algo,
99
+ existe git. El código comentado genera confusión sobre si está activo o no.
100
+ - Eliminar variables declaradas y nunca usadas.
101
+ - Eliminar imports no utilizados.
102
+ - Eliminar funciones que ya no tienen llamadores (verificar con búsqueda global).
103
+ - Eliminar flags de feature que ya no tienen sentido (limpiar deuda técnica).
104
+ - Los linters (flake8, ESLint, Pylance) deben pasar en CI sin warnings de código muerto.
105
+
106
+ ---
107
+
108
+ ## Principio DRY — no duplicar conocimiento
109
+
110
+ - DRY no es solo "no duplicar texto". Es no duplicar conocimiento. Si una regla
111
+ de negocio, una validación, una query o una transformación existe en un lugar,
112
+ no debe existir en otro. Cuando el conocimiento cambia, debe cambiar en un solo sitio.
113
+ - Antes de crear una función, clase o módulo nuevo: buscar si ya existe algo que
114
+ haga lo mismo con Grep o Glob. Si existe, reutilizar o extender — no duplicar.
115
+ - Señales de violación DRY que deben corregirse:
116
+ - Misma query SQL en 2+ lugares → extraer a un método del repositorio
117
+ - Misma validación de input en 2+ endpoints → extraer a un schema/validator compartido
118
+ - Misma transformación de datos en 2+ puntos → extraer a una función helper
119
+ - Misma constante definida en múltiples archivos → mover a un módulo de constantes
120
+ - Mismo bloque try/except en 2+ funciones → extraer a un decorator o context manager
121
+ - Dos funciones que hacen lo mismo pero por razones de negocio distintas NO son
122
+ violaciones DRY. DRY aplica cuando el conocimiento duplicado cambiaría junto:
123
+ si un cambio en un lugar obliga a cambiar el otro, es duplicación.
124
+ - Tres líneas de código similares son mejor que una abstracción prematura. DRY no
125
+ justifica crear helpers de una sola línea que se usan dos veces.
126
+
127
+ ---
128
+
129
+ ## Sin console.log / print en producción
130
+
131
+ - `console.log()`, `print()`, `console.debug()`, `System.out.println()` y
132
+ equivalentes están prohibidos en código que se mergea a main.
133
+ - Usar el logger configurado del proyecto:
134
+ - Python: `import logging; logger = logging.getLogger(__name__)`
135
+ - TypeScript/Angular: servicio de logging centralizado o `LoggingService`
136
+ - Nivel de log apropiado: `DEBUG` para desarrollo, `INFO` para flujos importantes,
137
+ `WARNING` para situaciones inesperadas recuperables, `ERROR` para fallos.
138
+ - Los logs de nivel DEBUG no aparecen en producción — configurar por entorno.
139
+ - CI debe fallar si encuentra `console.log` o `print(` fuera de archivos de test.
140
+
141
+ ---
142
+
143
+ ## Organización de imports
144
+
145
+ Python — orden PEP 8, separados por línea en blanco:
146
+ 1. Standard library (`os`, `sys`, `datetime`, etc.)
147
+ 2. Dependencias de terceros (`fastapi`, `sqlalchemy`, `pydantic`, etc.)
148
+ 3. Módulos propios del proyecto (con rutas absolutas desde la raíz del proyecto)
149
+
150
+ TypeScript/Angular — orden ESLint import/order:
151
+ 1. Angular core y common (`@angular/core`, `@angular/common`)
152
+ 2. Angular material y otras librerías (`@angular/material/*`)
153
+ 3. RxJS (`rxjs`, `rxjs/operators`)
154
+ 4. Librerías de terceros
155
+ 5. Módulos propios (paths con alias `@app/`, `@core/`, `@shared/`)
156
+
157
+ Reglas adicionales:
158
+ - Sin imports con wildcard (`from module import *`) salvo `__init__.py` explícito.
159
+ - Un import por línea en TypeScript.
160
+ - Usar paths absolutos en imports propios — nunca `../../../../../../modulo`.
161
+
162
+ ---
163
+
164
+ ## Constantes con SCREAMING_CASE
165
+
166
+ - Toda constante con valor literal que se usa en múltiples lugares:
167
+ definir una sola vez con nombre en SCREAMING_CASE.
168
+ - Agrupa constantes relacionadas en un módulo o clase de constantes.
169
+ ```python
170
+ # constants.py
171
+ MAX_INTENTOS_LOGIN = 5
172
+ TIEMPO_EXPIRACION_TOKEN_MINUTOS = 60
173
+ ROLES_ADMINISTRADORES = ["ADMIN", "SUPERADMIN"]
174
+ ```
175
+ - En TypeScript, usar `const` con SCREAMING_CASE o `enum` con PascalCase.
176
+ - NUNCA magic numbers o magic strings dispersos en el código.
177
+ Si aparece un literal numérico o string no trivial: extraerlo a constante.
178
+
179
+ ---
180
+
181
+ ## Reglas adicionales de legibilidad
182
+
183
+ - Longitud máxima de línea: 100 caracteres (Python), 120 caracteres (TypeScript).
184
+ - Un solo nivel de ternario. Ternarios anidados: prohibidos.
185
+ - No usar `else` después de `return` o `raise` — es redundante y añade anidamiento.
186
+ - Agrupar código relacionado. Separar grupos con una línea en blanco.
187
+ - Comentarios en español (idioma del proyecto). Gramática y ortografía correctas.
188
+ - Comentarios explican el POR QUÉ, no el QUÉ. El código explica el qué.
189
+
190
+ ---
191
+
192
+ ## Checklist de estilo antes de abrir PR
193
+
194
+ - [ ] Sin variables, imports o funciones sin usar
195
+ - [ ] Sin código comentado
196
+ - [ ] Sin console.log/print de debug
197
+ - [ ] Nombres descriptivos en todo el código nuevo
198
+ - [ ] Funciones <= 30 líneas
199
+ - [ ] Sin magic numbers ni magic strings
200
+ - [ ] Sin duplicación de lógica de negocio entre módulos (DRY)
201
+ - [ ] Linter y type-checker pasan sin warnings