@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,165 @@
1
+ # Regla: Hooks de Pre-commit y CI — PHP / Laravel
2
+
3
+ Los hooks automatizan la detección de errores antes de que lleguen al repositorio.
4
+ Esta regla define qué verificaciones correr en qué momento y qué debe bloquear
5
+ el commit o el merge.
6
+
7
+ ---
8
+
9
+ ## PHP-CS-Fixer / Pint — verificación de formato
10
+
11
+ Ejecutar antes de cada commit como verificación sin modificar:
12
+
13
+ ```bash
14
+ # Laravel Pint
15
+ ./vendor/bin/pint --test
16
+
17
+ # PHP-CS-Fixer
18
+ ./vendor/bin/php-cs-fixer fix --dry-run --diff
19
+ ```
20
+
21
+ - Si produce diferencias: **bloquear el commit**.
22
+ - El desarrollador aplica el fix y vuelve a commitear:
23
+ ```bash
24
+ ./vendor/bin/pint # aplica correcciones
25
+ git add -u && git commit
26
+ ```
27
+ - CI también lo ejecuta como verificación. No se auto-corrige en CI.
28
+
29
+ ---
30
+
31
+ ## PHPStan — análisis estático antes de merge
32
+
33
+ ```bash
34
+ ./vendor/bin/phpstan analyse --level=6 app/ --error-format=github
35
+ ```
36
+
37
+ - Ejecutar en CI en cada push a una rama con PR abierto.
38
+ - Bloquear el merge si hay errores de nivel 6 o superior.
39
+ - Los warnings se tratan como errores: `--no-progress --error-format=github`.
40
+ - El flag `--error-format=github` genera anotaciones en la UI de GitHub Actions.
41
+
42
+ ---
43
+
44
+ ## Detección de debug output en código no-test
45
+
46
+ Detectar `var_dump`, `dd`, `dump`, `print_r`, `var_export` fuera de `tests/`:
47
+
48
+ ```bash
49
+ # En hook pre-commit o CI
50
+ git diff --cached --name-only | grep '\.php$' | xargs grep -n \
51
+ '\bvar_dump\b\|\bdd\b\|\bdump\b\|\bprint_r\b\|\bvar_export\b' \
52
+ 2>/dev/null | grep -v '^tests/' | grep -v '^vendor/'
53
+ ```
54
+
55
+ Si encuentra coincidencias en código fuera de `tests/`: **bloquear el commit**.
56
+ Los desarrolladores deben eliminar el debug output antes de commitear.
57
+
58
+ ---
59
+
60
+ ## Detección de env() fuera de config/
61
+
62
+ En Laravel, llamar `env()` directamente en código de aplicación (fuera de `config/`)
63
+ rompe el caché de configuración (`php artisan config:cache`):
64
+
65
+ ```bash
66
+ # Detectar env() fuera de config/
67
+ grep -rn "env(" app/ bootstrap/ routes/ 2>/dev/null \
68
+ | grep -v "config(" \
69
+ | grep -v "^.*#"
70
+ ```
71
+
72
+ - Si encuentra `env()` en `app/` o `routes/`: **bloquear el merge** con mensaje:
73
+ "Usar `config('seccion.clave')` en lugar de `env()` fuera de `config/`."
74
+
75
+ ---
76
+
77
+ ## composer audit — vulnerabilidades en dependencias
78
+
79
+ ```bash
80
+ composer audit --no-dev --format=json
81
+ ```
82
+
83
+ - Ejecutar en CI en cada push.
84
+ - Bloquear el merge si reporta vulnerabilidades de severidad **HIGH** o **CRITICAL**.
85
+ - Vulnerabilidades **MEDIUM** generan warning pero no bloquean (registrar en JIRA).
86
+ - Ejecutar también semanalmente de forma programada para detectar CVEs nuevos
87
+ en dependencias que no cambiaron recientemente.
88
+
89
+ ---
90
+
91
+ ## Verificación de rutas con artisan
92
+
93
+ En CI, después de cada cambio en `routes/`:
94
+
95
+ ```bash
96
+ php artisan route:list --json > /dev/null
97
+ ```
98
+
99
+ - Si falla: hay una ruta con controller o middleware inexistente. **Bloquear el merge**.
100
+ - Verificación adicional que el middleware de autenticación está presente en rutas de API:
101
+
102
+ ```bash
103
+ php artisan route:list --path=api --columns=method,uri,middleware \
104
+ | grep -v "api/auth" \
105
+ | grep -v "sanctum\|auth"
106
+ ```
107
+
108
+ Cualquier ruta de API sin middleware de autenticación es una alerta que debe
109
+ revisarse manualmente antes de aprobar el PR.
110
+
111
+ ---
112
+
113
+ ## Script de pre-commit completo (referencia)
114
+
115
+ Guardar como `.git/hooks/pre-commit` o con `husky`/`captain-hook`:
116
+
117
+ ```bash
118
+ #!/usr/bin/env bash
119
+ set -e
120
+
121
+ echo "==> Verificando formato (Pint)..."
122
+ ./vendor/bin/pint --test || {
123
+ echo "ERROR: Hay errores de formato. Ejecuta ./vendor/bin/pint para corregir."
124
+ exit 1
125
+ }
126
+
127
+ echo "==> Detectando debug output..."
128
+ ARCHIVOS_PHP=$(git diff --cached --name-only | grep '\.php$' | grep -v '^tests/' || true)
129
+ if [ -n "$ARCHIVOS_PHP" ]; then
130
+ if echo "$ARCHIVOS_PHP" | xargs grep -ln '\bvar_dump\b\|\bdd(\b\|\bdump(\b' 2>/dev/null; then
131
+ echo "ERROR: Eliminar var_dump/dd/dump antes de commitear."
132
+ exit 1
133
+ fi
134
+ fi
135
+
136
+ echo "==> Verificando env() fuera de config/..."
137
+ if grep -rn "env(" app/ routes/ 2>/dev/null | grep -qv "config("; then
138
+ echo "ADVERTENCIA: Se encontró env() fuera de config/. Verificar manualmente."
139
+ fi
140
+
141
+ echo "==> Pre-commit: OK"
142
+ ```
143
+
144
+ ---
145
+
146
+ ## Resumen de qué bloquea qué
147
+
148
+ | Verificación | Pre-commit | CI / PR | Severidad |
149
+ |-------------|-----------|---------|-----------|
150
+ | Formato (Pint) | Bloquea | Bloquea | Error |
151
+ | PHPStan nivel 6 | No | Bloquea merge | Error |
152
+ | var_dump / dd / dump | Bloquea | Bloquea | Error |
153
+ | `env()` fuera de config/ | Advertencia | Bloquea merge | Error |
154
+ | `composer audit` HIGH/CRITICAL | No | Bloquea merge | Error |
155
+ | Rutas inválidas | No | Bloquea merge | Error |
156
+
157
+ ---
158
+
159
+ ## Checklist de hooks antes de activar en un proyecto nuevo
160
+
161
+ - [ ] `pint.json` o `.php-cs-fixer.php` versionado en el repositorio
162
+ - [ ] `phpstan.neon` con nivel 6 versionado
163
+ - [ ] Hook pre-commit instalado (`./vendor/bin/captain-hook install` o `husky`)
164
+ - [ ] Pipeline de CI tiene los pasos: pint, phpstan, audit, route:list
165
+ - [ ] El equipo conoce cómo ejecutar cada verificación localmente
@@ -0,0 +1,233 @@
1
+ # Regla: Patrones de Arquitectura — PHP / Laravel
2
+
3
+ Aplica a todo código PHP en proyectos Laravel. Estos patrones separan las
4
+ responsabilidades entre capas, facilitan el testing y reducen el acoplamiento.
5
+ Un controller gordo que contiene lógica de negocio y queries es deuda técnica
6
+ inmediata — esta regla establece cómo evitarla.
7
+
8
+ ---
9
+
10
+ ## Service Container y Dependency Injection
11
+
12
+ - Registrar toda clase de negocio en el Service Container de Laravel.
13
+ - Inyectar dependencias por constructor, nunca instanciarlas dentro de la clase.
14
+ - Bind interfaces a implementaciones concretas en `AppServiceProvider`:
15
+
16
+ ```php
17
+ // AppServiceProvider::register()
18
+ $this->app->bind(FacturaRepositoryInterface::class, EloquentFacturaRepository::class);
19
+ ```
20
+
21
+ - En producción, usar `$this->app->singleton()` para servicios sin estado.
22
+
23
+ ---
24
+
25
+ ## Facades: con criterio
26
+
27
+ - Las Facades de Laravel son cómodas pero dificultan el testing cuando se usan
28
+ en lógica de negocio profunda.
29
+ - Facades **aceptables** en controllers y middleware (capa de entrada):
30
+ `Auth::user()`, `Cache::get()`, `Log::error()`.
31
+ - Facades **prohibidas** en Services, Repositories y Jobs: inyectar la interfaz
32
+ correspondiente para que sea mockeable en tests.
33
+
34
+ ```php
35
+ // MAL — Facade en service, imposible de testear sin mock estático
36
+ class FacturaService
37
+ {
38
+ public function emitir(int $facturaId): void
39
+ {
40
+ $factura = Factura::find($facturaId); // Facade implícita de Eloquent
41
+ Mail::send(...); // Facade de Mail no inyectada
42
+ }
43
+ }
44
+
45
+ // BIEN — dependencias inyectadas
46
+ class FacturaService
47
+ {
48
+ public function __construct(
49
+ private readonly FacturaRepositoryInterface $facturas,
50
+ private readonly MailerInterface $mailer,
51
+ ) {}
52
+
53
+ public function emitir(int $facturaId): void
54
+ {
55
+ $factura = $this->facturas->findOrFail($facturaId);
56
+ $this->mailer->enviarFactura($factura);
57
+ }
58
+ }
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Repository Pattern sobre Eloquent directo en controllers
64
+
65
+ - Los controllers no deben contener queries Eloquent.
66
+ - Definir una interfaz del repositorio y una implementación Eloquent:
67
+
68
+ ```php
69
+ // Interfaz
70
+ interface FacturaRepositoryInterface
71
+ {
72
+ public function findOrFail(int $id): Factura;
73
+ /** @return Collection<int, Factura> */
74
+ public function listarPorEmpresa(int $empresaId, EstatusFactura $estatus): Collection;
75
+ }
76
+
77
+ // Implementación
78
+ class EloquentFacturaRepository implements FacturaRepositoryInterface
79
+ {
80
+ public function findOrFail(int $id): Factura
81
+ {
82
+ return Factura::with(['items', 'cliente'])->findOrFail($id);
83
+ }
84
+
85
+ public function listarPorEmpresa(int $empresaId, EstatusFactura $estatus): Collection
86
+ {
87
+ return Factura::where('empresa_id', $empresaId)
88
+ ->where('estatus', $estatus)
89
+ ->with('cliente')
90
+ ->orderByDesc('fecha_emision')
91
+ ->get();
92
+ }
93
+ }
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Form Requests para validación
99
+
100
+ - Toda validación de entrada HTTP va en una clase `FormRequest`, nunca en el controller.
101
+ - Las reglas de autorización también van en el `FormRequest`:
102
+
103
+ ```php
104
+ class EmitirFacturaRequest extends FormRequest
105
+ {
106
+ public function authorize(): bool
107
+ {
108
+ return $this->user()->can('emitir-facturas');
109
+ }
110
+
111
+ public function rules(): array
112
+ {
113
+ return [
114
+ 'cliente_id' => ['required', 'integer', 'exists:clientes,id'],
115
+ 'items' => ['required', 'array', 'min:1'],
116
+ 'items.*.sku' => ['required', 'string', 'max:50'],
117
+ 'items.*.qty' => ['required', 'integer', 'min:1'],
118
+ ];
119
+ }
120
+ }
121
+ ```
122
+
123
+ ---
124
+
125
+ ## Events y Listeners para desacoplamiento
126
+
127
+ - Acciones con efectos secundarios múltiples (enviar email, actualizar reporte,
128
+ notificar terceros) se publican como eventos, no se llaman directamente:
129
+
130
+ ```php
131
+ // En el service — solo dispara el evento
132
+ event(new FacturaEmitida($factura));
133
+
134
+ // Listeners separados, registrados en EventServiceProvider
135
+ FacturaEmitida::class => [
136
+ EnviarEmailFacturaListener::class,
137
+ GenerarPdfFacturaListener::class,
138
+ NotificarSatListener::class,
139
+ ],
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Jobs y Queues para procesamiento asíncrono
145
+
146
+ - Todo proceso que tarde más de 500ms o que pueda fallar y reintentarse va en un Job:
147
+
148
+ ```php
149
+ class GenerarReporteFacturacionJob implements ShouldQueue
150
+ {
151
+ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
152
+
153
+ public int $tries = 3;
154
+ public int $backoff = 60; // segundos entre reintentos
155
+
156
+ public function __construct(private readonly int $empresaId) {}
157
+
158
+ public function handle(ReporteService $reportes): void
159
+ {
160
+ $reportes->generarFacturacionMensual($this->empresaId);
161
+ }
162
+ }
163
+
164
+ // Despachar desde el controller
165
+ GenerarReporteFacturacionJob::dispatch($empresaId)->onQueue('reportes');
166
+ ```
167
+
168
+ ---
169
+
170
+ ## Policies para autorización
171
+
172
+ - Las reglas de quién puede hacer qué sobre un modelo van en una Policy, no en el controller:
173
+
174
+ ```php
175
+ class FacturaPolicy
176
+ {
177
+ public function cancelar(User $user, Factura $factura): bool
178
+ {
179
+ return $user->empresa_id === $factura->empresa_id
180
+ && $user->hasRole('admin')
181
+ && ! $factura->estatus->esTerminal();
182
+ }
183
+ }
184
+
185
+ // En el controller
186
+ $this->authorize('cancelar', $factura);
187
+ ```
188
+
189
+ ---
190
+
191
+ ## API Resources para transformación de respuestas
192
+
193
+ - NUNCA devolver modelos Eloquent directamente en respuestas JSON.
194
+ Un `->toArray()` de Eloquent expone todos los campos incluyendo timestamps internos.
195
+ - Usar `JsonResource` para controlar exactamente qué se expone:
196
+
197
+ ```php
198
+ class FacturaResource extends JsonResource
199
+ {
200
+ public function toArray(Request $request): array
201
+ {
202
+ return [
203
+ 'id' => $this->id,
204
+ 'folio' => $this->folio,
205
+ 'total' => $this->total,
206
+ 'estatus' => $this->estatus,
207
+ 'fecha_emision' => $this->fecha_emision->toISOString(),
208
+ 'cliente' => new ClienteResource($this->whenLoaded('cliente')),
209
+ 'items' => FacturaItemResource::collection($this->whenLoaded('items')),
210
+ ];
211
+ }
212
+ }
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Middleware para cross-cutting concerns
218
+
219
+ - Lógica que aplica a múltiples rutas (autenticación, rate limiting, logging de auditoría,
220
+ verificación de suscripción) va en middleware, no en cada controller.
221
+ - Nunca duplicar lógica de middleware dentro de métodos de controller.
222
+
223
+ ---
224
+
225
+ ## Checklist de patrones antes de merge
226
+
227
+ - [ ] Ningun controller contiene queries Eloquent directas
228
+ - [ ] Toda validación HTTP en FormRequest, no en controller
229
+ - [ ] Efectos secundarios múltiples publicados como eventos
230
+ - [ ] Procesos lentos o con reintentos en Jobs con `ShouldQueue`
231
+ - [ ] Reglas de autorización en Policies, no en controllers ni services
232
+ - [ ] Respuestas JSON devueltas con JsonResource, no con `->toArray()`
233
+ - [ ] Interfaces definidas para repositorios y servicios externos
@@ -0,0 +1,186 @@
1
+ # Regla: Seguridad — PHP / Laravel
2
+
3
+ PHP es históricamente el lenguaje con más vectores de ataque web documentados.
4
+ Laravel mitiga la mayoría de ellos por defecto, pero solo si se usan sus
5
+ mecanismos correctamente. Esta regla es OBLIGATORIA sin excepciones.
6
+
7
+ ---
8
+
9
+ ## SQL Injection: Eloquent y Query Builder siempre
10
+
11
+ - NUNCA construir queries con interpolación de strings o concatenación:
12
+
13
+ ```php
14
+ // MAL — vulnerable a SQL injection
15
+ $facturas = DB::select("SELECT * FROM facturas WHERE empresa_id = $empresaId");
16
+
17
+ // MAL — DB::raw sin binding
18
+ $facturas = Factura::whereRaw("empresa_id = $empresaId")->get();
19
+
20
+ // BIEN — Eloquent con binding automático
21
+ $facturas = Factura::where('empresa_id', $empresaId)->get();
22
+
23
+ // BIEN — DB::raw con bindings separados cuando es necesario
24
+ $facturas = Factura::whereRaw('empresa_id = ? AND total > ?', [$empresaId, $minimo])->get();
25
+ ```
26
+
27
+ - Cada aparición de `DB::statement(` o `DB::unprepared(` requiere revisión de seguridad
28
+ explícita con comentario documentando por qué es seguro.
29
+
30
+ ---
31
+
32
+ ## XSS: Blade escapa por defecto
33
+
34
+ - `{{ $variable }}` en Blade escapa HTML automáticamente. Usar siempre.
35
+ - `{!! $variable !!}` NO escapa. Prohibido salvo en casos específicos documentados:
36
+
37
+ ```blade
38
+ {{-- MAL — XSS si $contenido viene del usuario --}}
39
+ {!! $contenido !!}
40
+
41
+ {{-- BIEN — escapado por defecto --}}
42
+ {{ $contenido }}
43
+
44
+ {{-- BIEN — HTML permitido solo de fuente confiable (CMS interno, no usuario) --}}
45
+ {{-- NOTA: $plantilla proviene de CMS interno administrado por el equipo, no de input de usuario --}}
46
+ {!! $plantilla->html_cuerpo !!}
47
+ ```
48
+
49
+ - Si se necesita renderizar HTML de usuario (editor WYSIWYG), sanitizar con
50
+ `HTMLPurifier` o `League\HTMLToMarkdown` antes de almacenar, nunca al mostrar.
51
+
52
+ ---
53
+
54
+ ## CSRF: middleware activo en todas las rutas web
55
+
56
+ - El middleware `VerifyCsrfToken` debe estar activo en el grupo `web`.
57
+ - No agregar rutas a `$except` en `VerifyCsrfToken` sin documentar explícitamente por qué.
58
+ - Las rutas de API que usan tokens de portador (Bearer) son inmunes a CSRF por diseño.
59
+ Documentar esto en el controller si se desactiva el middleware para esa ruta.
60
+
61
+ ---
62
+
63
+ ## Mass Assignment: $fillable en todos los modelos
64
+
65
+ - Todo modelo Eloquent DEBE declarar `$fillable` o `$guarded`.
66
+ - Preferir `$fillable` (lista de permitidos) sobre `$guarded` (lista de bloqueados).
67
+ - NUNCA `protected $guarded = []` — permite asignación masiva sin restricción:
68
+
69
+ ```php
70
+ // MAL — permite asignar cualquier campo incluyendo is_admin, empresa_id
71
+ class Usuario extends Model
72
+ {
73
+ protected $guarded = [];
74
+ }
75
+
76
+ // BIEN — solo los campos que el usuario puede enviar
77
+ class Usuario extends Model
78
+ {
79
+ protected $fillable = [
80
+ 'nombre',
81
+ 'email',
82
+ 'password',
83
+ ];
84
+ // empresa_id, is_admin, etc. solo se asignan explícitamente en el service
85
+ }
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Autenticación: Laravel Sanctum o Passport
91
+
92
+ - NUNCA implementar autenticación custom con hashing manual y generación de tokens.
93
+ - APIs de primera parte (SPA, mobile): **Laravel Sanctum**.
94
+ - OAuth2 para terceros: **Laravel Passport**.
95
+ - Configuración mínima de Sanctum para seguridad:
96
+
97
+ ```php
98
+ // config/sanctum.php
99
+ 'expiration' => 60 * 24, // tokens expiran en 24 horas
100
+ 'token_prefix' => env('APP_ENV'), // prefijo diferente por ambiente
101
+ ```
102
+
103
+ - Los tokens de refresh van en cookies `httpOnly`, nunca en `localStorage`.
104
+
105
+ ---
106
+
107
+ ## Secretos en .env, nunca en config/
108
+
109
+ - Las credenciales se leen desde variables de entorno, nunca hardcodeadas:
110
+
111
+ ```php
112
+ // MAL — credencial en código
113
+ class StripeService
114
+ {
115
+ private string $apiKey = 'sk_live_abc123...';
116
+ }
117
+
118
+ // MAL — en archivo de config versionado
119
+ // config/servicios.php
120
+ return ['stripe' => ['key' => 'sk_live_abc123...']];
121
+
122
+ // BIEN — desde variable de entorno
123
+ return ['stripe' => ['key' => env('STRIPE_SECRET_KEY')]];
124
+ ```
125
+
126
+ - Ejecutar `php artisan config:cache` antes de deploy para que `.env` no sea
127
+ necesario en producción (las variables se inyectan por el sistema de deployment).
128
+
129
+ ---
130
+
131
+ ## PHPStan/Psalm en CI
132
+
133
+ - Nivel mínimo de análisis estático: **nivel 6** (PHPStan) o **nivel 3** (Psalm).
134
+ - Configurar en `phpstan.neon`:
135
+ ```yaml
136
+ parameters:
137
+ level: 6
138
+ paths:
139
+ - app
140
+ excludePaths:
141
+ - app/Http/Middleware/TrustProxies.php
142
+ ```
143
+ - CI falla si PHPStan reporta errores. Los errores ignorados se documentan
144
+ con `// @phpstan-ignore-next-line` y comentario explicativo.
145
+
146
+ ---
147
+
148
+ ## Rate limiting en rutas de autenticación
149
+
150
+ ```php
151
+ // routes/api.php
152
+ Route::middleware('throttle:5,1')->group(function () {
153
+ Route::post('/login', [AuthController::class, 'login']);
154
+ Route::post('/registro', [AuthController::class, 'registrar']);
155
+ Route::post('/contrasena/recuperar', [AuthController::class, 'recuperarContrasena']);
156
+ });
157
+ ```
158
+
159
+ - Máximo 5 intentos por minuto por IP en rutas de autenticación.
160
+ - Bloqueo temporal de 15 minutos al superar el límite.
161
+
162
+ ---
163
+
164
+ ## Headers de seguridad
165
+
166
+ - Agregar middleware con headers de seguridad en el grupo `web` y `api`:
167
+
168
+ ```php
169
+ // Middleware SecurityHeaders::handle()
170
+ $response->headers->set('X-Frame-Options', 'DENY');
171
+ $response->headers->set('X-Content-Type-Options', 'nosniff');
172
+ $response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin');
173
+ $response->headers->set('Permissions-Policy', 'camera=(), microphone=(), geolocation=()');
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Checklist de seguridad antes de merge
179
+
180
+ - [ ] Sin interpolación de strings en queries SQL
181
+ - [ ] Sin `{!! !!}` en Blade sin comentario que justifique la fuente confiable
182
+ - [ ] `$fillable` declarado en todos los modelos nuevos
183
+ - [ ] Sin credenciales hardcodeadas (verificar con `git grep -rn "sk_live\|password.*=.*'[^']"`)
184
+ - [ ] Rutas de auth con `throttle` configurado
185
+ - [ ] PHPStan nivel 6 pasa sin errores en `app/`
186
+ - [ ] `composer audit` sin vulnerabilidades HIGH o CRITICAL