@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,213 @@
1
+ # Regla: Harness de Claude Code — disciplina operacional
2
+
3
+ Esta regla aplica al uso operativo de Claude Code (CLI / Desktop / IDE).
4
+ Define las prácticas que protegen la economía de tokens, el cache de prompt y
5
+ la calidad de las respuestas. Origen: artículo "Claude Code's Limits Are
6
+ Generous. The Problem Is Your Harness." más experiencia operativa SWL.
7
+
8
+ El harness es el conjunto de configuración + sesión + tools + modelo que
9
+ rodea a Claude. Anthropic provee el modelo; el harness lo provees tú. Una
10
+ mala disciplina del harness convierte una suscripción Max generosa en
11
+ "se acabó la cuota en 2 días".
12
+
13
+ ---
14
+
15
+ ## Disciplina del cache de prompt
16
+
17
+ El prompt cache es la palanca económica más grande de Claude Code:
18
+
19
+ - **Cache read**: 0.1× del precio de input (90% de descuento).
20
+ - **Cache write 5min TTL**: 1.25×.
21
+ - **Cache write 1h TTL**: 2× (solo API, no incluido en Pro/Max/Team).
22
+ - **Cache refresh on hit**: gratis (se cobra al precio read).
23
+
24
+ Cada hit en un prefijo cacheado resetea su TTL sin costo. Una sesión larga
25
+ con uso constante de tools mantiene el prefijo caliente indefinidamente
26
+ **siempre que el prefijo no cambie**.
27
+
28
+ ### Reglas de cache discipline
29
+
30
+ - **NUNCA agregues o quites MCP servers a mitad de sesión.** Modifica
31
+ `.claude/settings.json` antes de iniciar Claude Code, no durante.
32
+ - **NUNCA uses `/model` a mitad de sesión.** Cambiar de modelo invalida
33
+ el prefijo cacheado y fuerza una re-lectura completa.
34
+ - **NUNCA modifiques la lista de tools permitidos a mitad de sesión.**
35
+ Agregar o quitar tools cambia el prefijo del system prompt.
36
+ - **Lock-at-session-start**: define configuración, modelo, MCP servers y
37
+ tools permitidos antes de iniciar. Si necesitas cambiar algo, abre una
38
+ sesión nueva con `/clear` o cierra y reinicia.
39
+ - **Hit rate sano**: ~90% en el TTL de 5 minutos por defecto. Si el hit
40
+ rate cae por debajo del 80%, hay algo en el harness que invalida el
41
+ prefijo entre turnos.
42
+
43
+ ### Cuándo SÍ es OK abrir nueva sesión
44
+
45
+ - Cambio de proyecto / repo.
46
+ - Cambio entre tareas no relacionadas (frontend vs. backend).
47
+ - Tras un turno que salió mal y quiere descartarse (`/rewind` o `/clear`).
48
+ - Cada 30+ turnos en sesiones de exploración para evitar context-rot.
49
+
50
+ ---
51
+
52
+ ## Manejo de contexto
53
+
54
+ ### Variables de entorno opt-in (recomendadas para sesiones largas)
55
+
56
+ ```jsonc
57
+ // .claude/settings.json (sección env)
58
+ {
59
+ "env": {
60
+ "CLAUDE_CODE_DISABLE_1M_CONTEXT": "1", // forzar 200K en lugar de 1M
61
+ "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80" // disparar auto-compact al 80%
62
+ }
63
+ }
64
+ ```
65
+
66
+ - **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`** desactiva la variante 1M de Opus
67
+ 4.7 y vuelve al techo histórico de 200K. Útil cuando el codebase del
68
+ usuario no requiere 1M y se quiere reducir costo de tokens. **NO se
69
+ recomienda como default universal** — solo si el usuario detecta
70
+ context bloat real.
71
+ - **`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=80`** ajusta el umbral del
72
+ auto-compact. Disparar al 80% en lugar del default permite que la
73
+ compactación ocurra antes de que el contexto sature.
74
+
75
+ ### Cinco movimientos de sesión
76
+
77
+ - **`/compact` al 50% de uso o tras cada tarea grande.** No esperes al
78
+ auto. La compactación tardía empuja el contexto encima del threshold y
79
+ obliga a recargar prefijo.
80
+ - **`/clear` entre tareas no relacionadas.** Sesión nueva = prefijo
81
+ fresco, sin lastre acumulado.
82
+ - **`/rewind` cuando un turno salió mal.** Más barato que pelear con
83
+ contexto contaminado.
84
+ - **Sub-agentes** para trabajo bulk-mecánico, búsqueda en codebase, o
85
+ procesamiento de archivos grandes (PDF→TLDR). El padre conserva
86
+ contexto limpio.
87
+ - **Tag files con `@`**: en lugar de pedirle a Claude que busque, pásale
88
+ la ruta directamente. `@docs/diseno.md` evita un round-trip de grep.
89
+
90
+ ---
91
+
92
+ ## Routing de modelos y effort
93
+
94
+ ### Escoger el modelo al inicio (no a media sesión)
95
+
96
+ - **Sonnet session**: más barato, sin acceso a Opus en el padre. Bueno
97
+ cuando se sabe que el trabajo cabe en Sonnet.
98
+ - **Opus session + delegate**: pagar Opus solo en el padre (planning,
99
+ tradeoffs); delegar trabajo táctico a sub-agentes Sonnet/Haiku. Default
100
+ para trabajo mixto.
101
+ - Cambiar de modelo a media sesión invalida el cache (regla de cache
102
+ discipline arriba). Si necesitas otro modelo, abre nueva sesión.
103
+
104
+ ### `/effort` per-prompt (no per-session)
105
+
106
+ ```
107
+ /effort low # fixes rápidos, tareas mecánicas
108
+ /effort medium # la mayoría de prompts (gran ahorro vs default)
109
+ /effort high # razonamiento exigente
110
+ /effort xhigh # default para coding agéntico (4.7)
111
+ /effort max # diminishing returns, raramente vale el ~2× costo extra
112
+ ```
113
+
114
+ El effort se aplica al **prompt** que lo necesita, no al resto de la
115
+ sesión. Subir a `max` por reflejo en cada turno duplica el costo sin
116
+ mejora observable.
117
+
118
+ ---
119
+
120
+ ## Disciplina de input format
121
+
122
+ Algunos formatos consumen muchos más tokens de los necesarios:
123
+
124
+ - **PDFs**: usar `pdftotext` o `markitdown` ANTES, no el Read tool con
125
+ PDF directo (Read carga PDF como imágenes). Ver `reglas/markitdown.md`.
126
+ - **Páginas web dinámicas**: `agent-browser` (vía accessibility tree)
127
+ reduce ~82% tokens vs Playwright MCP / screenshots.
128
+ - **Repos grandes (>500 archivos)**: considerar `code-review-graph` pip
129
+ (opt-in) que reduce 6.8-49× tokens por review al leer solo blast
130
+ radius. Documentado en `MANUAL_USO.md` sección "Dependencias externas".
131
+ - **Spec prompts > vague prompts**: incluir rutas de archivo, componentes
132
+ esperados, I/O y restricciones. Vago = más turnos = más tokens.
133
+
134
+ ---
135
+
136
+ ## Carga lean de componentes
137
+
138
+ - Desactivar MCP servers no usados en `.claude/settings.json`.
139
+ - Mover reglas largas de CLAUDE.md a skills cargados bajo demanda
140
+ (progressive disclosure SWL ya hace esto).
141
+ - Comandos slash `/swl:*` que no usas no cuestan tokens si no se invocan.
142
+ - Skills oficiales de Anthropic: solo agregar los que aplican al
143
+ proyecto (Office docs solo si trabajas con Office, etc.).
144
+
145
+ ---
146
+
147
+ ## Anti-patrones
148
+
149
+ - **Invocar Claude Code y luego decidir el modelo**: invalida cache cada
150
+ vez que cambias de opinión.
151
+ - **Agregar un MCP server "temporal" durante la sesión**: el costo de
152
+ invalidar el prefijo cacheado supera lo que el server agrega.
153
+ - **Re-leer manualmente archivos que ya están en contexto**: si Claude
154
+ ya leyó X, pedirle que lo lea de nuevo es token waste.
155
+ - **No usar `/compact` y esperar al auto-compact**: el auto dispara
156
+ TARDE. Compactar proactivamente al 50% es siempre más eficiente.
157
+ - **`/effort max` por reflejo**: 2× costo de xhigh con mejora marginal
158
+ fuera de tareas que requieran razonamiento profundo.
159
+ - **PDFs vía Read tool sin extraer texto antes**: 10× más tokens que
160
+ pasar por `markitdown` o `pdftotext`.
161
+
162
+ ---
163
+
164
+ ## Observabilidad — watch the number
165
+
166
+ SWL incluye:
167
+
168
+ - **`/swl:dashboard`** — dashboard histórico de uso (basado en
169
+ `phuryn/claude-usage`).
170
+ - **`/swl:metricas`** — métricas de la sesión actual (tokens, costo
171
+ estimado, modelos usados).
172
+ - **`hooks/linea-estado.js`** — barra de estado con porcentaje de
173
+ contexto consumido (con detección dinámica del techo según modelo —
174
+ ver fix v5.12.4).
175
+ - **`hooks/monitor-contexto.js`** — alertas WARNING (≥65%) y CRITICAL
176
+ (≥75%) cuando el contexto se llena.
177
+
178
+ Si no ves el hit rate de cache, no puedes optimizarlo. Para uso intenso
179
+ considera dashboard externo en `platform.claude.com/usage/cache` (solo
180
+ API users).
181
+
182
+ ---
183
+
184
+ ## Checklist de harness antes de empezar una sesión larga
185
+
186
+ - [ ] `.claude/settings.json` con MCP servers necesarios YA configurado
187
+ - [ ] Modelo elegido y bloqueado (no se cambiará durante la sesión)
188
+ - [ ] Tools permitidos definidos en `.claude/settings.json`, no se
189
+ modificarán mid-session
190
+ - [ ] Variables de entorno (`CLAUDE_CODE_DISABLE_1M_CONTEXT`,
191
+ `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`) configuradas si es sesión larga
192
+ - [ ] CLAUDE.md del proyecto referencia archivos clave para que Claude
193
+ no haga grep innecesario
194
+ - [ ] Para repos grandes: `code-review-graph` instalado (opt-in)
195
+ - [ ] Estrategia de delegación clara: qué se manda a sub-agente y qué
196
+ se mantiene en el padre
197
+ - [ ] PDFs / Office docs serán pre-procesados con `markitdown` antes de
198
+ Read
199
+
200
+ ---
201
+
202
+ ## Cómo cargar esta regla
203
+
204
+ Esta regla no es de carga obligatoria global. Cargar cuando:
205
+
206
+ - El usuario reporta "se acabó la cuota antes de tiempo".
207
+ - Se diagnostica context-rot u alertas críticas falsas/persistentes.
208
+ - Se prepara una sesión de trabajo larga (>2h) con Opus.
209
+ - Se planifica adopción de MCP servers nuevos en un proyecto.
210
+
211
+ Para detalles operacionales adicionales (workflow de las 5 session moves,
212
+ cuándo usar cada effort level, integración con SWL), cargar también
213
+ `Skill("harness-claude-code")`.
@@ -0,0 +1,186 @@
1
+ # Regla: Hooks de Pre-commit y CI — Next.js
2
+
3
+ Los hooks de pre-commit y las verificaciones de CI detectan los errores más
4
+ comunes en Next.js App Router: código cliente innecesario, fetch sin caché
5
+ configurado, imágenes sin optimizar y errores de compilación.
6
+
7
+ ---
8
+
9
+ ## next lint — verificación de linting
10
+
11
+ Ejecutar antes de cada commit:
12
+
13
+ ```bash
14
+ next lint
15
+ ```
16
+
17
+ - Si reporta errores o warnings: **bloquear el commit**.
18
+ - La configuración de ESLint debe incluir `next/core-web-vitals` que cubre
19
+ reglas específicas de Next.js sobre Image, Link y rendimiento.
20
+ - En proyectos con monorepo: `next lint --dir apps/web`.
21
+
22
+ ---
23
+
24
+ ## next build — verificación de compilación
25
+
26
+ En CI, en cada PR:
27
+
28
+ ```bash
29
+ next build
30
+ ```
31
+
32
+ - Si el build falla: **bloquear el merge**.
33
+ - Los errores de TypeScript con `strict: true` también fallan el build.
34
+ El flag `ignoreBuildErrors: true` en `next.config.js` está prohibido en producción.
35
+ - El build también valida que todos los Server Components son correctamente `async`
36
+ y que los `"use client"` no intentan importar módulos solo del servidor.
37
+
38
+ ---
39
+
40
+ ## Detección de console.log en código no-test
41
+
42
+ ```bash
43
+ # En hook pre-commit o CI
44
+ git diff --cached --name-only \
45
+ | grep -E '\.(ts|tsx)$' \
46
+ | grep -v '\.test\.' \
47
+ | grep -v '\.spec\.' \
48
+ | grep -v '__tests__' \
49
+ | xargs grep -n 'console\.log\|console\.debug\|console\.warn' 2>/dev/null
50
+ ```
51
+
52
+ - Si encuentra `console.log` fuera de archivos de test: **bloquear el commit**.
53
+ - `console.error` en catch de errores inesperados es aceptable si viene acompañado
54
+ de un comentario y va a ser reemplazado por el logger del proyecto.
55
+
56
+ ---
57
+
58
+ ## Verificación de "use client" potencialmente innecesario
59
+
60
+ Detectar archivos con `"use client"` que no contienen hooks de estado ni eventos:
61
+
62
+ ```bash
63
+ # Script de verificación — reporta como advertencia, no bloquea
64
+ git diff --cached --name-only | grep '\.tsx$' | while read archivo; do
65
+ if grep -q '"use client"' "$archivo"; then
66
+ if ! grep -qE 'useState|useReducer|useEffect|useRef|onClick|onChange|onSubmit|useContext' "$archivo"; then
67
+ echo "ADVERTENCIA: $archivo tiene \"use client\" pero no usa hooks ni eventos. Verificar si es necesario."
68
+ fi
69
+ fi
70
+ done
71
+ ```
72
+
73
+ - Este check genera **advertencia**, no bloquea. El desarrollador revisa y decide.
74
+ - El revisor del PR verifica la justificación antes de aprobar.
75
+
76
+ ---
77
+
78
+ ## Verificación de fetch() sin configuración de caché
79
+
80
+ En Next.js App Router, un `fetch()` sin configuración de caché usa el valor por
81
+ defecto que puede cambiar entre versiones. Configurar explícitamente:
82
+
83
+ ```bash
84
+ # Detectar fetch sin next: o cache: configurado
85
+ grep -rn "fetch(" app/ lib/ --include='*.ts' --include='*.tsx' \
86
+ | grep -v '\.test\.' \
87
+ | grep -v 'next:\|cache:' \
88
+ | grep -v '// no-cache-ok'
89
+ ```
90
+
91
+ - Si encuentra `fetch(` sin `{ next: { revalidate: N } }` ni `{ cache: 'no-store' }`:
92
+ **reportar como advertencia en el PR**.
93
+ - El desarrollador agrega la configuración correcta o el comentario `// no-cache-ok`
94
+ con justificación.
95
+
96
+ **Referencia rápida de cuándo usar qué:**
97
+
98
+ | Situación | Configuración |
99
+ |-----------|--------------|
100
+ | Datos que cambian frecuentemente | `{ cache: 'no-store' }` |
101
+ | Datos semi-estáticos (catálogos) | `{ next: { revalidate: 3600 } }` |
102
+ | Datos que cambian por evento | `{ next: { tags: ['nombre-tag'] } }` |
103
+ | Datos completamente estáticos | Sin config (caché indefinido en build) |
104
+
105
+ ---
106
+
107
+ ## Verificación de imágenes sin Image component
108
+
109
+ ```bash
110
+ # Detectar <img> nativo en archivos TSX (excluir comentarios y strings)
111
+ git diff --cached --name-only | grep '\.tsx$' | xargs grep -n '<img ' 2>/dev/null \
112
+ | grep -v '^\s*//' \
113
+ | grep -v 'data-testid'
114
+ ```
115
+
116
+ - Si encuentra `<img` en archivos `.tsx`: **bloquear el commit**.
117
+ - Excepción: imágenes dentro de `dangerouslySetInnerHTML` (ya tienen su propio problema).
118
+ - El componente `<Image>` de `next/image` optimiza automáticamente el formato,
119
+ el tamaño y la carga lazy. Usar siempre.
120
+
121
+ ---
122
+
123
+ ## Script de pre-commit completo (referencia)
124
+
125
+ ```bash
126
+ #!/usr/bin/env bash
127
+ set -e
128
+
129
+ echo "==> Verificando linting (next lint)..."
130
+ npx next lint --quiet || {
131
+ echo "ERROR: Errores de ESLint. Corregir antes de commitear."
132
+ exit 1
133
+ }
134
+
135
+ echo "==> Verificando formato (Prettier)..."
136
+ npx prettier --check . || {
137
+ echo "ERROR: Hay archivos sin formatear. Ejecutar: npx prettier --write ."
138
+ exit 1
139
+ }
140
+
141
+ echo "==> Verificando console.log fuera de tests..."
142
+ ARCHIVOS=$(git diff --cached --name-only | grep -E '\.(ts|tsx)$' | grep -v '\.test\.\|\.spec\.\|__tests__' || true)
143
+ if [ -n "$ARCHIVOS" ]; then
144
+ if echo "$ARCHIVOS" | xargs grep -ln 'console\.log\|console\.debug' 2>/dev/null; then
145
+ echo "ERROR: Eliminar console.log/debug antes de commitear."
146
+ exit 1
147
+ fi
148
+ fi
149
+
150
+ echo "==> Verificando <img> sin next/image..."
151
+ ARCHIVOS_TSX=$(git diff --cached --name-only | grep '\.tsx$' || true)
152
+ if [ -n "$ARCHIVOS_TSX" ]; then
153
+ if echo "$ARCHIVOS_TSX" | xargs grep -ln '<img ' 2>/dev/null; then
154
+ echo "ERROR: Usar <Image> de next/image en lugar de <img>."
155
+ exit 1
156
+ fi
157
+ fi
158
+
159
+ echo "==> Pre-commit: OK"
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Resumen de qué bloquea qué
165
+
166
+ | Verificación | Pre-commit | CI / PR | Severidad |
167
+ |-------------|-----------|---------|-----------|
168
+ | `next lint` | Bloquea | Bloquea | Error |
169
+ | Prettier | Bloquea | Bloquea | Error |
170
+ | `console.log` | Bloquea | Bloquea | Error |
171
+ | `<img>` nativo | Bloquea | Bloquea | Error |
172
+ | `next build` | No | Bloquea merge | Error |
173
+ | `"use client"` sin hooks | Advertencia | Advertencia | Warning |
174
+ | `fetch()` sin caché config | Advertencia | Advertencia | Warning |
175
+ | `npm audit` HIGH/CRITICAL | No | Bloquea merge | Error |
176
+
177
+ ---
178
+
179
+ ## Checklist de hooks antes de activar en un proyecto nuevo
180
+
181
+ - [ ] `next lint` configurado y ejecutado en pre-commit
182
+ - [ ] Prettier configurado con `.prettierrc` versionado
183
+ - [ ] Script de pre-commit instalado con `husky` o similar
184
+ - [ ] Pipeline de CI tiene los pasos: lint, prettier, build, test, audit
185
+ - [ ] `strict: true` en `tsconfig.json` para que el build detecte errores de tipos
186
+ - [ ] `ignoreBuildErrors` NO está en `next.config.js`
@@ -0,0 +1,231 @@
1
+ # Regla: Estilo de Código — C# / .NET
2
+
3
+ Aplica a todo código C# del proyecto. Estas reglas aprovechan las características
4
+ modernas de C# (10+) y .NET 6+ para escribir código más expresivo, seguro y con
5
+ menos ruido sintáctico. El objetivo es código que el IDE y el compilador puedan
6
+ analizar estáticamente con la mayor cobertura posible.
7
+
8
+ ---
9
+
10
+ ## dotnet format (obligatorio)
11
+
12
+ - `dotnet format` es el formateador oficial y su uso es obligatorio.
13
+ - Verificar sin modificar: `dotnet format --verify-no-changes`
14
+ - CI falla si `dotnet format --verify-no-changes` detecta diferencias.
15
+ - El archivo `.editorconfig` en la raíz del proyecto define las reglas de formato.
16
+ Versionar `.editorconfig` junto con el código.
17
+ - NUNCA editar manualmente el indentado — dejar que `dotnet format` decida.
18
+
19
+ ---
20
+
21
+ ## Nullable reference types (obligatorio)
22
+
23
+ - Habilitar nullable reference types en todos los proyectos nuevos:
24
+ ```xml
25
+ <!-- En el .csproj -->
26
+ <Nullable>enable</Nullable>
27
+ ```
28
+ - O a nivel de archivo: `#nullable enable` al inicio del archivo.
29
+ - El compilador emite warnings cuando un nullable puede ser null sin verificación.
30
+ Tratar estos warnings como errores en CI:
31
+ ```xml
32
+ <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
33
+ ```
34
+ - No usar `!` (null-forgiving operator) para suprimir el warning sin verificar:
35
+ ```csharp
36
+ // MAL — suprime el warning sin garantizar que no es null
37
+ string nombre = usuario.Nombre!;
38
+
39
+ // BIEN — verificar antes de usar
40
+ string nombre = usuario.Nombre ?? throw new InvalidOperationException("Nombre requerido");
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Records para DTOs inmutables
46
+
47
+ ```csharp
48
+ // MAL — clase mutable con boilerplate
49
+ public class FacturaDto
50
+ {
51
+ public Guid Id { get; set; }
52
+ public decimal Total { get; set; }
53
+ public string ClienteEmail { get; set; } = string.Empty;
54
+ }
55
+
56
+ // BIEN — record inmutable, con/without para crear variantes
57
+ public record FacturaDto(
58
+ Guid Id,
59
+ decimal Total,
60
+ string ClienteEmail
61
+ );
62
+
63
+ // Crear variante modificada sin mutar el original
64
+ var actualizada = factura with { Total = 1500.0m };
65
+
66
+ // record struct para tipos de valor pequeños (sin heap allocation)
67
+ public record struct Coordenadas(double Latitud, double Longitud);
68
+ ```
69
+
70
+ - Usar `record class` (o simplemente `record`) para DTOs de respuesta y eventos.
71
+ - Usar `record struct` para tipos de valor pequeños e inmutables.
72
+ - Los records implementan `Equals`, `GetHashCode` y `ToString` automáticamente.
73
+
74
+ ---
75
+
76
+ ## Pattern matching con switch expressions
77
+
78
+ ```csharp
79
+ // MAL — switch statement verboso
80
+ string DescribirEstatus(EstadoPedido estado)
81
+ {
82
+ switch (estado)
83
+ {
84
+ case EstadoPedido.Pendiente: return "En espera de confirmación";
85
+ case EstadoPedido.Confirmado: return "Confirmado, preparando envío";
86
+ case EstadoPedido.Enviado: return "En camino";
87
+ default: return "Estado desconocido";
88
+ }
89
+ }
90
+
91
+ // BIEN — switch expression conciso
92
+ string DescribirEstatus(EstadoPedido estado) => estado switch
93
+ {
94
+ EstadoPedido.Pendiente => "En espera de confirmación",
95
+ EstadoPedido.Confirmado => "Confirmado, preparando envío",
96
+ EstadoPedido.Enviado => "En camino",
97
+ _ => throw new ArgumentOutOfRangeException(nameof(estado))
98
+ };
99
+ ```
100
+
101
+ - Usar switch expressions para mapeos exhaustivos — el compilador detecta casos no cubiertos.
102
+ - Usar `_` como default solo cuando hay un caso genuinamente inesperado (y lanzar excepción).
103
+ - Pattern matching con `is`, `when` y destructuring para condiciones complejas.
104
+
105
+ ---
106
+
107
+ ## async/await: siempre propagar CancellationToken
108
+
109
+ ```csharp
110
+ // MAL — no soporta cancelación
111
+ public async Task<Factura> ObtenerAsync(Guid id)
112
+ {
113
+ return await _repo.ObtenerAsync(id);
114
+ }
115
+
116
+ // BIEN — permite al llamador cancelar la operación
117
+ public async Task<Factura> ObtenerAsync(Guid id, CancellationToken ct = default)
118
+ {
119
+ return await _repo.ObtenerAsync(id, ct);
120
+ }
121
+ ```
122
+
123
+ - `CancellationToken` en todos los métodos `async` públicos — siempre como último parámetro.
124
+ - Parámetro con valor por defecto `= default` para no romper llamadores existentes.
125
+ - NUNCA usar `Task.Result` ni `Task.Wait()` — bloquean el hilo y causan deadlocks en ASP.NET.
126
+ - NUNCA usar `async void` — solo `async Task` o `async Task<T>`.
127
+ Excepción: event handlers de UI (WinForms/WPF) donde el tipo está forzado.
128
+
129
+ ---
130
+
131
+ ## Convenciones de nombres
132
+
133
+ | Elemento | Convención | Ejemplo |
134
+ |----------|-----------|---------|
135
+ | Clases, records, interfaces | `PascalCase` | `FacturaService`, `IRepositorio` |
136
+ | Métodos y propiedades públicas | `PascalCase` | `ObtenerFactura()`, `TotalImpuestos` |
137
+ | Parámetros y variables locales | `camelCase` | `facturaId`, `totalCalculado` |
138
+ | Campos privados | `_camelCase` (prefijo guion bajo) | `_repositorio`, `_logger` |
139
+ | Constantes | `PascalCase` (no SCREAMING) | `MaxReintentos`, `TiempoEsperaMs` |
140
+ | Interfaces | `I` + `PascalCase` | `IFacturaRepository`, `IEmailService` |
141
+ | Parámetros genéricos | `T`, `TKey`, `TValue`, o nombre descriptivo | `TEntidad`, `TResultado` |
142
+
143
+ - NUNCA prefijo `m_` ni `s_` para campos — son convenciones de C++ que no aplican.
144
+ - Las interfaces siempre empiezan con `I` — es una convención universal en C#.
145
+
146
+ ---
147
+
148
+ ## Using declarations para IDisposable
149
+
150
+ ```csharp
151
+ // MAL — bloque using con llaves innecesarias
152
+ using (var conexion = new SqlConnection(connectionString))
153
+ {
154
+ using (var comando = conexion.CreateCommand())
155
+ {
156
+ // ... código ...
157
+ }
158
+ }
159
+
160
+ // BIEN — using declaration sin llaves (C# 8+)
161
+ using var conexion = new SqlConnection(connectionString);
162
+ using var comando = conexion.CreateCommand();
163
+ // ... código ...
164
+ // Dispose se llama automáticamente al final del scope del método
165
+ ```
166
+
167
+ - `using var` para todos los `IDisposable` — el compilador inserta el `Dispose()`.
168
+ - El scope es el método completo — si se necesita scope más corto, usar el bloque `using { }`.
169
+
170
+ ---
171
+
172
+ ## File-scoped namespaces y top-level statements
173
+
174
+ ```csharp
175
+ // MAL — namespace con bloque (C# antiguo)
176
+ namespace MiProyecto.Facturacion
177
+ {
178
+ public class FacturaService { ... }
179
+ }
180
+
181
+ // BIEN — file-scoped namespace (C# 10+, reduce un nivel de indentación)
182
+ namespace MiProyecto.Facturacion;
183
+
184
+ public class FacturaService { ... }
185
+ ```
186
+
187
+ - File-scoped namespaces en todos los archivos nuevos.
188
+ - Top-level statements solo en `Program.cs` — no en clases de negocio.
189
+
190
+ ---
191
+
192
+ ## LINQ: method syntax preferido
193
+
194
+ ```csharp
195
+ // MAL — query syntax (más verboso, mezcla SQL con C#)
196
+ var facturasPagadas = from f in facturas
197
+ where f.Estatus == EstadoFactura.Pagada
198
+ orderby f.FechaPago descending
199
+ select f;
200
+
201
+ // BIEN — method syntax (consistente con el resto de C# moderno)
202
+ var facturasPagadas = facturas
203
+ .Where(f => f.Estatus == EstadoFactura.Pagada)
204
+ .OrderByDescending(f => f.FechaPago);
205
+ ```
206
+
207
+ - Method syntax en todo el código nuevo — es más consistente con el estilo moderno.
208
+ - Query syntax solo cuando mejora la legibilidad en joins complejos (caso raro).
209
+ - NUNCA LINQ en bucles críticos de performance — medir antes de optimizar.
210
+
211
+ ---
212
+
213
+ ## Longitud máxima de método: 40 líneas
214
+
215
+ - Los métodos no deben exceder 40 líneas de código efectivo.
216
+ - Si un método supera 40 líneas: extraer métodos privados con nombres descriptivos.
217
+ - Constructores con mucha inicialización: considerar el patrón Factory.
218
+
219
+ ---
220
+
221
+ ## Checklist de estilo antes de abrir PR
222
+
223
+ - [ ] `dotnet format --verify-no-changes` pasa sin diferencias
224
+ - [ ] Nullable reference types habilitados y sin `!` sin justificación
225
+ - [ ] DTOs inmutables definidos como `record`
226
+ - [ ] Todos los métodos `async` reciben `CancellationToken`
227
+ - [ ] Sin `Task.Result` ni `Task.Wait()` en código async
228
+ - [ ] Sin `async void` fuera de event handlers
229
+ - [ ] File-scoped namespaces en archivos nuevos
230
+ - [ ] LINQ en method syntax
231
+ - [ ] Métodos <= 40 líneas