@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.
- package/CLAUDE.md +238 -0
- package/README.md +560 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/.evolved.json +9 -0
- package/agentes/accesibilidad-wcag-swl.md +692 -0
- package/agentes/arquitecto-swl.md +238 -0
- package/agentes/auto-evolucion-swl.md +854 -0
- package/agentes/backend-api-swl.md +470 -0
- package/agentes/backend-csharp-swl.md +418 -0
- package/agentes/backend-go-swl.md +388 -0
- package/agentes/backend-java-swl.md +279 -0
- package/agentes/backend-node-swl.md +477 -0
- package/agentes/backend-python-swl.md +608 -0
- package/agentes/backend-rust-swl.md +362 -0
- package/agentes/backend-workers-swl.md +480 -0
- package/agentes/cloud-infra-swl.md +485 -0
- package/agentes/consolidador-swl.md +539 -0
- package/agentes/datos-swl.md +584 -0
- package/agentes/depurador-swl.md +349 -0
- package/agentes/devops-ci-swl.md +374 -0
- package/agentes/disenador-ui-swl.md +558 -0
- package/agentes/documentador-swl.md +343 -0
- package/agentes/evals/arquitecto-swl.evals.json +56 -0
- package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
- package/agentes/evals/implementador-swl.evals.json +56 -0
- package/agentes/evals/orquestador-swl.evals.json +60 -0
- package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
- package/agentes/evals/red-team-swl.evals.json +59 -0
- package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
- package/agentes/frontend-angular-swl.md +627 -0
- package/agentes/frontend-css-swl.md +720 -0
- package/agentes/frontend-react-swl.md +696 -0
- package/agentes/frontend-swl.md +500 -0
- package/agentes/frontend-tailwind-swl.md +830 -0
- package/agentes/implementador-swl.md +328 -0
- package/agentes/investigador-swl.md +430 -0
- package/agentes/investigador-ux-swl.md +500 -0
- package/agentes/llm-apps-swl.md +276 -0
- package/agentes/migrador-swl.md +417 -0
- package/agentes/mobile-android-swl.md +509 -0
- package/agentes/mobile-cross-swl.md +539 -0
- package/agentes/mobile-ios-swl.md +500 -0
- package/agentes/mobile-testing-swl.md +300 -0
- package/agentes/notificador-swl.md +916 -0
- package/agentes/observabilidad-swl.md +436 -0
- package/agentes/orquestador-swl.md +884 -0
- package/agentes/pagos-swl.md +283 -0
- package/agentes/perfilador-usuario-swl.md +306 -0
- package/agentes/planificador-swl.md +402 -0
- package/agentes/producto-prd-swl.md +587 -0
- package/agentes/red-team-swl.md +216 -0
- package/agentes/release-manager-swl.md +568 -0
- package/agentes/rendimiento-swl.md +714 -0
- package/agentes/resolutor-build-swl.md +243 -0
- package/agentes/revisor-angular-swl.md +276 -0
- package/agentes/revisor-codigo-swl.md +348 -0
- package/agentes/revisor-csharp-swl.md +262 -0
- package/agentes/revisor-go-swl.md +257 -0
- package/agentes/revisor-java-swl.md +255 -0
- package/agentes/revisor-kotlin-swl.md +271 -0
- package/agentes/revisor-nextjs-swl.md +279 -0
- package/agentes/revisor-php-swl.md +269 -0
- package/agentes/revisor-react-swl.md +276 -0
- package/agentes/revisor-rust-swl.md +344 -0
- package/agentes/revisor-seguridad-swl.md +390 -0
- package/agentes/revisor-swift-swl.md +266 -0
- package/agentes/revisor-typescript-swl.md +344 -0
- package/agentes/sre-swl.md +265 -0
- package/agentes/tdd-qa-swl.md +354 -0
- package/agentes/ux-disenador-swl.md +501 -0
- package/bin/lib/bot-comandos.js +1030 -0
- package/bin/lib/bot-discovery.js +182 -0
- package/bin/lib/bot-git.js +142 -0
- package/bin/swl-ses.js +325 -0
- package/bin/swl-telegram-bot.js +442 -0
- package/bin/swl-telegram-bot.plist +21 -0
- package/bin/swl-telegram-bot.service +14 -0
- package/comandos/swl/.evolved.json +23 -0
- package/comandos/swl/actualizar.md +174 -0
- package/comandos/swl/adoptar-proyecto.md +207 -0
- package/comandos/swl/aprender.md +701 -0
- package/comandos/swl/auditar-deps.md +134 -0
- package/comandos/swl/autoresearch.md +170 -0
- package/comandos/swl/ayuda.md +224 -0
- package/comandos/swl/brainstorm.md +50 -0
- package/comandos/swl/checkpoint.md +330 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/configurar-ci.md +227 -0
- package/comandos/swl/contexto.md +112 -0
- package/comandos/swl/contribuir.md +233 -0
- package/comandos/swl/crear-skill.md +292 -0
- package/comandos/swl/cron.md +196 -0
- package/comandos/swl/dashboard.md +146 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +135 -0
- package/comandos/swl/evaluar-skill.md +487 -0
- package/comandos/swl/evolucion-estado.md +142 -0
- package/comandos/swl/evolucionar.md +259 -0
- package/comandos/swl/exportar-vault.md +189 -0
- package/comandos/swl/gateway.md +158 -0
- package/comandos/swl/inbox.md +116 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/instintos.md +86 -0
- package/comandos/swl/mapear-codebase.md +312 -0
- package/comandos/swl/mcp-status.md +175 -0
- package/comandos/swl/metricas.md +270 -0
- package/comandos/swl/modelo.md +102 -0
- package/comandos/swl/notificaciones.md +396 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/plugins.md +256 -0
- package/comandos/swl/reflect-skills.md +125 -0
- package/comandos/swl/release.md +217 -0
- package/comandos/swl/revisar-impacto.md +206 -0
- package/comandos/swl/revisar.md +330 -0
- package/comandos/swl/salud.md +363 -0
- package/comandos/swl/sesiones.md +200 -0
- package/comandos/swl/skill-search.md +113 -0
- package/comandos/swl/verificar.md +585 -0
- package/comandos/swl/wiki.md +620 -0
- package/contextos/dev.md +32 -0
- package/contextos/research.md +30 -0
- package/contextos/review.md +31 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
- package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
- package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
- package/habilidades/agent-browser/SKILL.md +218 -0
- package/habilidades/agentes-como-servicio/SKILL.md +218 -0
- package/habilidades/ai-runtime-security/SKILL.md +273 -0
- package/habilidades/angular-avanzado/SKILL.md +164 -0
- package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
- package/habilidades/angular-moderno/SKILL.md +186 -0
- package/habilidades/angular-moderno/evals/evals.json +45 -0
- package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
- package/habilidades/api-rest-diseno/SKILL.md +191 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
- package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
- package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
- package/habilidades/async-python/SKILL.md +149 -0
- package/habilidades/async-python/evals/evals.json +47 -0
- package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
- package/habilidades/auth-patrones/.evolved.json +9 -0
- package/habilidades/auth-patrones/SKILL.md +413 -0
- package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
- package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
- package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
- package/habilidades/autoresearch/SKILL.md +268 -0
- package/habilidades/autoresearch/evals/evals.json +41 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/azure-cloud/SKILL.md +308 -0
- package/habilidades/azure-cloud/recursos/aks.md +327 -0
- package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
- package/habilidades/backend-production-resilience/SKILL.md +288 -0
- package/habilidades/brainstorming/SKILL.md +295 -0
- package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
- package/habilidades/build-errors-cpp/SKILL.md +270 -0
- package/habilidades/build-errors-csharp/SKILL.md +265 -0
- package/habilidades/build-errors-go/SKILL.md +306 -0
- package/habilidades/build-errors-java/SKILL.md +278 -0
- package/habilidades/build-errors-kotlin/SKILL.md +303 -0
- package/habilidades/build-errors-nextjs/SKILL.md +312 -0
- package/habilidades/build-errors-php/SKILL.md +270 -0
- package/habilidades/build-errors-python/SKILL.md +292 -0
- package/habilidades/build-errors-rust/SKILL.md +284 -0
- package/habilidades/build-errors-swift/SKILL.md +272 -0
- package/habilidades/build-errors-typescript/SKILL.md +369 -0
- package/habilidades/checklist-calidad/SKILL.md +271 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +285 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
- package/habilidades/cloud-aws/SKILL.md +142 -0
- package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
- package/habilidades/compactacion-contexto/SKILL.md +247 -0
- package/habilidades/contenedores-docker/SKILL.md +137 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
- package/habilidades/context-builder/SKILL.md +170 -0
- package/habilidades/control-profundidad/SKILL.md +128 -0
- package/habilidades/csharp-experto/SKILL.md +322 -0
- package/habilidades/csharp-patrones/SKILL.md +316 -0
- package/habilidades/csharp-testing/SKILL.md +286 -0
- package/habilidades/css-moderno/SKILL.md +166 -0
- package/habilidades/css-moderno/evals/evals.json +43 -0
- package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
- package/habilidades/datos-etl/SKILL.md +129 -0
- package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
- package/habilidades/dbml-experto/SKILL.md +339 -0
- package/habilidades/dbml-experto/evals/evals.json +56 -0
- package/habilidades/dependencias-auditoria/SKILL.md +320 -0
- package/habilidades/deprecacion-migracion/SKILL.md +169 -0
- package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
- package/habilidades/design-tokens/SKILL.md +158 -0
- package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
- package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
- package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
- package/habilidades/discutir-fase/SKILL.md +188 -0
- package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
- package/habilidades/diseno-responsivo/SKILL.md +186 -0
- package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
- package/habilidades/django-experto/SKILL.md +205 -0
- package/habilidades/django-experto/recursos/async-django.md +390 -0
- package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
- package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
- package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
- package/habilidades/django-experto/recursos/testing-django.md +415 -0
- package/habilidades/doc-sync/SKILL.md +280 -0
- package/habilidades/drift-detection/SKILL.md +179 -0
- package/habilidades/ejecutar-fase/SKILL.md +468 -0
- package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
- package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
- package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/evaluacion-agentes/SKILL.md +314 -0
- package/habilidades/event-driven/SKILL.md +153 -0
- package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
- package/habilidades/extraccion-documentos/SKILL.md +221 -0
- package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
- package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
- package/habilidades/fastapi-experto/SKILL.md +221 -0
- package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
- package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
- package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
- package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
- package/habilidades/filament-admin/SKILL.md +290 -0
- package/habilidades/frontend-avanzado/SKILL.md +257 -0
- package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
- package/habilidades/gcp-cloud/SKILL.md +260 -0
- package/habilidades/gcp-cloud/recursos/gke.md +234 -0
- package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
- package/habilidades/generacion-mermaid/SKILL.md +229 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
- package/habilidades/go-experto/SKILL.md +305 -0
- package/habilidades/go-patrones/SKILL.md +299 -0
- package/habilidades/go-testing/SKILL.md +291 -0
- package/habilidades/graphql-experto/SKILL.md +323 -0
- package/habilidades/guardrail-semantico/SKILL.md +282 -0
- package/habilidades/harness-claude-code/SKILL.md +299 -0
- package/habilidades/iam-secretos/SKILL.md +265 -0
- package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
- package/habilidades/infra-github-actions/SKILL.md +166 -0
- package/habilidades/instalar-sistema/.evolved.json +9 -0
- package/habilidades/instalar-sistema/SKILL.md +221 -0
- package/habilidades/java-experto/SKILL.md +290 -0
- package/habilidades/java-patrones/SKILL.md +275 -0
- package/habilidades/java-testing/SKILL.md +288 -0
- package/habilidades/kotlin-compose/SKILL.md +278 -0
- package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
- package/habilidades/kotlin-experto/SKILL.md +318 -0
- package/habilidades/kotlin-testing/SKILL.md +267 -0
- package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
- package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
- package/habilidades/langchain-langraph/SKILL.md +386 -0
- package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
- package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
- package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
- package/habilidades/legacy-code-rescue/SKILL.md +267 -0
- package/habilidades/likec4-experto/SKILL.md +412 -0
- package/habilidades/likec4-experto/evals/evals.json +69 -0
- package/habilidades/manejo-errores/.evolved.json +9 -0
- package/habilidades/manejo-errores/SKILL.md +407 -0
- package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
- package/habilidades/mapear-codebase/SKILL.md +275 -0
- package/habilidades/memoria-busqueda/SKILL.md +194 -0
- package/habilidades/memoria-busqueda/evals/evals.json +44 -0
- package/habilidades/meta-skills-estandar/SKILL.md +298 -0
- package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
- package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
- package/habilidades/microservicios/SKILL.md +155 -0
- package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
- package/habilidades/mobile-flutter/SKILL.md +199 -0
- package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
- package/habilidades/mobile-react-native/SKILL.md +176 -0
- package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
- package/habilidades/mongodb-experto/SKILL.md +302 -0
- package/habilidades/monitoring-alertas/SKILL.md +201 -0
- package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
- package/habilidades/nestjs-experto/SKILL.md +307 -0
- package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
- package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
- package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
- package/habilidades/nextjs-experto/SKILL.md +335 -0
- package/habilidades/nextjs-patrones/SKILL.md +303 -0
- package/habilidades/nextjs-testing/SKILL.md +331 -0
- package/habilidades/node-experto/.evolved.json +9 -0
- package/habilidades/node-experto/SKILL.md +266 -0
- package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
- package/habilidades/nuevo-proyecto/SKILL.md +204 -0
- package/habilidades/orquestacion-async/SKILL.md +303 -0
- package/habilidades/paid-media-tracking/SKILL.md +269 -0
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
- package/habilidades/patrones-python/SKILL.md +228 -0
- package/habilidades/patrones-python/evals/evals.json +56 -0
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
- package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
- package/habilidades/perfil-usuario/SKILL.md +200 -0
- package/habilidades/perfil-usuario/evals/evals.json +55 -0
- package/habilidades/performance-baseline/SKILL.md +297 -0
- package/habilidades/php-experto/SKILL.md +291 -0
- package/habilidades/php-patrones/SKILL.md +306 -0
- package/habilidades/php-testing/SKILL.md +280 -0
- package/habilidades/planear-fase/SKILL.md +269 -0
- package/habilidades/postgresql-experto/SKILL.md +151 -0
- package/habilidades/postgresql-experto/evals/evals.json +53 -0
- package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
- package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
- package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
- package/habilidades/privacy-memoria/SKILL.md +141 -0
- package/habilidades/privacy-memoria/evals/evals.json +43 -0
- package/habilidades/prompt-engineering/SKILL.md +518 -0
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
- package/habilidades/rag-arquitectura/SKILL.md +338 -0
- package/habilidades/rails-experto/SKILL.md +237 -0
- package/habilidades/rails-experto/recursos/active-record.md +260 -0
- package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
- package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
- package/habilidades/react-experto/SKILL.md +209 -0
- package/habilidades/react-experto/evals/evals.json +55 -0
- package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
- package/habilidades/react-optimizacion/SKILL.md +174 -0
- package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
- package/habilidades/redis-experto/SKILL.md +305 -0
- package/habilidades/release-semver/.evolved.json +9 -0
- package/habilidades/release-semver/SKILL.md +248 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/rust-experto/SKILL.md +400 -0
- package/habilidades/rust-patrones/SKILL.md +296 -0
- package/habilidades/rust-testing/SKILL.md +311 -0
- package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
- package/habilidades/sql-optimizacion/SKILL.md +200 -0
- package/habilidades/sql-optimizacion/evals/evals.json +54 -0
- package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
- package/habilidades/sre-patrones/SKILL.md +333 -0
- package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
- package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
- package/habilidades/stripe-pagos/SKILL.md +550 -0
- package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
- package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
- package/habilidades/structured-outputs/SKILL.md +343 -0
- package/habilidades/swift-experto/SKILL.md +320 -0
- package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
- package/habilidades/swift-patrones/SKILL.md +313 -0
- package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
- package/habilidades/swift-testing/SKILL.md +254 -0
- package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
- package/habilidades/swl-dashboard/SKILL.md +370 -0
- package/habilidades/swl-markitdown/SKILL.md +285 -0
- package/habilidades/swl-markitdown/evals/evals.json +52 -0
- package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
- package/habilidades/tailwind-experto/SKILL.md +240 -0
- package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
- package/habilidades/tdd-workflow/SKILL.md +293 -0
- package/habilidades/terraform-experto/SKILL.md +321 -0
- package/habilidades/testing-python/SKILL.md +340 -0
- package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
- package/habilidades/threat-model-lite/SKILL.md +246 -0
- package/habilidades/tracing-processor/SKILL.md +212 -0
- package/habilidades/tracking-measurement/SKILL.md +239 -0
- package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
- package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
- package/habilidades/typescript-avanzado/SKILL.md +144 -0
- package/habilidades/typescript-avanzado/evals/evals.json +55 -0
- package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
- package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
- package/habilidades/ux-diseno/SKILL.md +116 -0
- package/habilidades/ux-diseno/evals/evals.json +43 -0
- package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificacion-evidencia/SKILL.md +160 -0
- package/habilidades/verificar-trabajo/SKILL.md +303 -0
- package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
- package/habilidades/wiki-conocimiento/SKILL.md +276 -0
- package/habilidades/wireframes-flujos/SKILL.md +212 -0
- package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
- package/habilidades/workflow-claude-code/SKILL.md +260 -0
- package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
- package/hooks/_run-hook.sh +57 -0
- package/hooks/actualizar-perfil-usuario.js +364 -0
- package/hooks/agente-lifecycle.js +71 -0
- package/hooks/aiisms-detector.js +173 -0
- package/hooks/audit-trail.js +204 -0
- package/hooks/auto-background.js +97 -0
- package/hooks/auto-consolidacion.js +178 -0
- package/hooks/auto-evolucion.js +666 -0
- package/hooks/auto-restaurar-settings.js +360 -0
- package/hooks/calidad-pre-commit.js +929 -0
- package/hooks/calidad-typescript.js +511 -0
- package/hooks/captura-feedback-usuario.js +148 -0
- package/hooks/check-update.js +211 -0
- package/hooks/clasificador-mensajes.js +271 -0
- package/hooks/degradacion-instintos.js +272 -0
- package/hooks/escaneo-secretos.js +389 -0
- package/hooks/extraccion-aprendizajes.js +763 -0
- package/hooks/grafo-contexto.js +129 -0
- package/hooks/graph-update.js +67 -0
- package/hooks/guardrail-modelo.js +247 -0
- package/hooks/inbox-aviso.js +75 -0
- package/hooks/inyeccion-contexto.js +246 -0
- package/hooks/lib/abort-registry.js +214 -0
- package/hooks/lib/agent-backend.js +210 -0
- package/hooks/lib/agent-comms.js +263 -0
- package/hooks/lib/agent-issue-codes.js +284 -0
- package/hooks/lib/agent-matcher.js +189 -0
- package/hooks/lib/async-hook-registry.js +252 -0
- package/hooks/lib/atomic-write.js +130 -0
- package/hooks/lib/auto-consolidator.js +335 -0
- package/hooks/lib/canary-skills.js +187 -0
- package/hooks/lib/consolidation-lock.js +291 -0
- package/hooks/lib/context-builder.js +430 -0
- package/hooks/lib/context-compressor.js +657 -0
- package/hooks/lib/convergence-detector.js +105 -0
- package/hooks/lib/delegation-tracker.js +198 -0
- package/hooks/lib/detectar-package-manager.js +423 -0
- package/hooks/lib/edit-accumulator.js +171 -0
- package/hooks/lib/error-classifier.js +308 -0
- package/hooks/lib/event-bus.js +112 -0
- package/hooks/lib/evolution-tracker.js +442 -0
- package/hooks/lib/execution-state.js +316 -0
- package/hooks/lib/fingerprint-id.js +135 -0
- package/hooks/lib/gateway-notify.js +116 -0
- package/hooks/lib/graph-security.js +75 -0
- package/hooks/lib/guardrail-metrics.js +202 -0
- package/hooks/lib/hook-circuit-breaker.js +206 -0
- package/hooks/lib/loop-detector.js +267 -0
- package/hooks/lib/mcp-health.js +184 -0
- package/hooks/lib/mcp-pool.js +436 -0
- package/hooks/lib/memory-search.js +506 -0
- package/hooks/lib/merkle-audit.js +96 -0
- package/hooks/lib/model-router.js +222 -0
- package/hooks/lib/normalize-error.js +324 -0
- package/hooks/lib/normalize-input.js +65 -0
- package/hooks/lib/nudge-tracker.js +306 -0
- package/hooks/lib/otlp-exporter.js +365 -0
- package/hooks/lib/performance-marks.js +239 -0
- package/hooks/lib/privacy-filter.js +128 -0
- package/hooks/lib/prompt-injection-scanner.js +209 -0
- package/hooks/lib/provenance-tracker.js +183 -0
- package/hooks/lib/rate-limit-tracker.js +253 -0
- package/hooks/lib/reflect-classifier.js +164 -0
- package/hooks/lib/resource-quota.js +122 -0
- package/hooks/lib/retry-jitter.js +165 -0
- package/hooks/lib/risk-engine.js +368 -0
- package/hooks/lib/run-log.js +408 -0
- package/hooks/lib/session-fts.js +379 -0
- package/hooks/lib/session-store.js +293 -0
- package/hooks/lib/singleton-guard.js +159 -0
- package/hooks/lib/skill-auditor.js +588 -0
- package/hooks/lib/sync-status.js +228 -0
- package/hooks/lib/taint-tracker.js +107 -0
- package/hooks/lib/task-service.js +295 -0
- package/hooks/lib/tech-skills-map.js +146 -0
- package/hooks/lib/telegram-cliente.js +159 -0
- package/hooks/lib/telegram-config.js +170 -0
- package/hooks/lib/token-budget.js +156 -0
- package/hooks/lib/token-estimator.js +420 -0
- package/hooks/lib/toon-compressor.js +245 -0
- package/hooks/lib/usage-model.js +183 -0
- package/hooks/lib/variable-resolver.js +230 -0
- package/hooks/linea-estado.js +324 -0
- package/hooks/metricas-evolucion.js +209 -0
- package/hooks/monitor-contexto.js +325 -0
- package/hooks/notificacion-sesion-stop.js +198 -0
- package/hooks/notificacion-telegram-notification.js +4 -0
- package/hooks/notificacion-telegram-subagent.js +4 -0
- package/hooks/notificacion-telegram.js +267 -0
- package/hooks/preservar-estado-pre-compact.js +150 -0
- package/hooks/proteccion-rutas.js +366 -0
- package/hooks/registro-turnos.js +209 -0
- package/hooks/resumen-sesion.js +249 -0
- package/hooks/risk-scoring.js +323 -0
- package/hooks/rotar-audit-auto.js +122 -0
- package/hooks/sugerir-regenerar-inventario.js +170 -0
- package/hooks/telemetria-agentes.js +167 -0
- package/hooks/tracking-costos.js +688 -0
- package/instintos/global.yaml +8 -0
- package/instintos/perfil-usuario.yaml +53 -0
- package/instintos/prompt-appendices.yaml +57 -0
- package/instintos/proyecto.yaml +372 -0
- package/manifiestos/gateway-config.json +77 -0
- package/manifiestos/handoff-context.json +223 -0
- package/manifiestos/hook-profiles.json +44 -0
- package/manifiestos/hooks-config.json +360 -0
- package/manifiestos/modulos.json +1173 -0
- package/manifiestos/perfiles.json +404 -0
- package/package.json +86 -0
- package/plantillas/ESTADO.md +109 -0
- package/plantillas/HOJA-RUTA.md +143 -0
- package/plantillas/PROYECTO.md +122 -0
- package/plantillas/REQUISITOS.md +132 -0
- package/plantillas/auditor-veto-template.md +105 -0
- package/plantillas/github-workflows/README.md +47 -0
- package/plantillas/github-workflows/release-please.yml +44 -0
- package/plantillas/github-workflows/swl-ci.yml +107 -0
- package/plantillas/github-workflows/swl-security.yml +51 -0
- package/plantillas/mcp-mineru.json +13 -0
- package/plantillas/research/ARQUITECTURA.md +220 -0
- package/plantillas/research/FUNCIONALIDADES.md +175 -0
- package/plantillas/research/RESUMEN.md +165 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/TRAMPAS.md +299 -0
- package/plantillas/skill-evals-template.json +44 -0
- package/plugin.json +343 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +352 -0
- package/reglas/brevedad-output.md +124 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +201 -0
- package/reglas/git-workflow.md +245 -0
- package/reglas/gobernanza.md +271 -0
- package/reglas/harness-claude-code.md +213 -0
- package/reglas/hooks.md +186 -0
- package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
- package/reglas/lenguajes/csharp/hooks.md +281 -0
- package/reglas/lenguajes/csharp/patrones.md +226 -0
- package/reglas/lenguajes/csharp/seguridad.md +258 -0
- package/reglas/lenguajes/csharp/testing.md +176 -0
- package/reglas/lenguajes/go/estilo-codigo.md +195 -0
- package/reglas/lenguajes/go/hooks.md +249 -0
- package/reglas/lenguajes/go/patrones.md +249 -0
- package/reglas/lenguajes/go/seguridad.md +225 -0
- package/reglas/lenguajes/go/testing.md +272 -0
- package/reglas/lenguajes/java/estilo-codigo.md +217 -0
- package/reglas/lenguajes/java/hooks.md +251 -0
- package/reglas/lenguajes/java/patrones.md +226 -0
- package/reglas/lenguajes/java/seguridad.md +233 -0
- package/reglas/lenguajes/java/testing.md +238 -0
- package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
- package/reglas/lenguajes/kotlin/hooks.md +245 -0
- package/reglas/lenguajes/kotlin/patrones.md +201 -0
- package/reglas/lenguajes/kotlin/seguridad.md +202 -0
- package/reglas/lenguajes/kotlin/testing.md +236 -0
- package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
- package/reglas/lenguajes/nextjs/hooks.md +186 -0
- package/reglas/lenguajes/nextjs/patrones.md +225 -0
- package/reglas/lenguajes/nextjs/seguridad.md +216 -0
- package/reglas/lenguajes/nextjs/testing.md +193 -0
- package/reglas/lenguajes/php/estilo-codigo.md +228 -0
- package/reglas/lenguajes/php/hooks.md +165 -0
- package/reglas/lenguajes/php/patrones.md +233 -0
- package/reglas/lenguajes/php/seguridad.md +186 -0
- package/reglas/lenguajes/php/testing.md +205 -0
- package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
- package/reglas/lenguajes/rust/hooks.md +240 -0
- package/reglas/lenguajes/rust/patrones.md +250 -0
- package/reglas/lenguajes/rust/seguridad.md +221 -0
- package/reglas/lenguajes/rust/testing.md +194 -0
- package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
- package/reglas/lenguajes/swift/hooks.md +257 -0
- package/reglas/lenguajes/swift/patrones.md +235 -0
- package/reglas/lenguajes/swift/seguridad.md +248 -0
- package/reglas/lenguajes/swift/testing.md +242 -0
- package/reglas/markitdown.md +60 -0
- package/reglas/memoria-consolidada.md +209 -0
- package/reglas/patrones.md +225 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad-agentes.md +351 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +373 -0
- package/reglas/testing.md +193 -0
- package/schemas/agent-contract.json +176 -0
- package/schemas/agent-frontmatter.schema.json +149 -0
- package/schemas/agent-message.schema.json +53 -0
- package/schemas/agent-output-implementacion.schema.json +85 -0
- package/schemas/agent-output-planificacion.schema.json +113 -0
- package/schemas/agent-output-review.schema.json +78 -0
- package/schemas/diary-entry.schema.json +80 -0
- package/schemas/hook-profiles.schema.json +39 -0
- package/schemas/hooks-config.schema.json +74 -0
- package/schemas/instinct.schema.json +115 -0
- package/schemas/modulos.schema.json +29 -0
- package/schemas/perfiles.schema.json +28 -0
- package/schemas/plugin.schema.json +64 -0
- package/schemas/skill-evals.schema.json +95 -0
- package/schemas/skill-frontmatter.schema.json +170 -0
- package/scripts/actualizar.js +145 -0
- package/scripts/audit-skills.sh +78 -0
- package/scripts/auditar-agentes-gaps.js +149 -0
- package/scripts/auditar-cobertura-frameworks.js +241 -0
- package/scripts/auditar-skills-gaps.js +206 -0
- package/scripts/bootstrap-instintos.js +259 -0
- package/scripts/check-update.js +109 -0
- package/scripts/comandos/agents.js +105 -0
- package/scripts/comandos/info.js +108 -0
- package/scripts/comandos/install-asistido.js +186 -0
- package/scripts/comandos/skills.js +211 -0
- package/scripts/configurar-branch-protection.js +418 -0
- package/scripts/daemon-swl.py +388 -0
- package/scripts/desinstalar.js +130 -0
- package/scripts/doctor.js +559 -0
- package/scripts/field-report.js +199 -0
- package/scripts/generar-inventario.js +317 -0
- package/scripts/inbox-tmux-inject.js +161 -0
- package/scripts/inferir-herramientas-permitidas.js +586 -0
- package/scripts/inicializar.js +133 -0
- package/scripts/instalador.js +1031 -0
- package/scripts/instalar-git-hook.js +122 -0
- package/scripts/lib/agp-frontmatter.js +222 -0
- package/scripts/lib/append-con-marcadores.js +199 -0
- package/scripts/lib/artefactos-python.js +43 -0
- package/scripts/lib/audit-query.js +221 -0
- package/scripts/lib/autostart-linux.js +347 -0
- package/scripts/lib/autostart-macos.js +360 -0
- package/scripts/lib/autostart-windows.js +307 -0
- package/scripts/lib/budget-enforcer.js +252 -0
- package/scripts/lib/claude-sessions.js +285 -0
- package/scripts/lib/configurar-ci.js +380 -0
- package/scripts/lib/console-span-exporter.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -0
- package/scripts/lib/dashboard-widgets.js +290 -0
- package/scripts/lib/detectar-runtime.js +279 -0
- package/scripts/lib/detectar-stack.js +187 -0
- package/scripts/lib/diary-entry.js +234 -0
- package/scripts/lib/drift-detector.js +545 -0
- package/scripts/lib/estado.js +124 -0
- package/scripts/lib/gestor-componentes.js +243 -0
- package/scripts/lib/gitignore-manifest.js +305 -0
- package/scripts/lib/graph-analyze.py +556 -0
- package/scripts/lib/graph-builder.py +485 -0
- package/scripts/lib/graph-cluster.py +259 -0
- package/scripts/lib/health-row.js +168 -0
- package/scripts/lib/hooks-settings.js +789 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/mc-client.js +137 -0
- package/scripts/lib/notificaciones-telegram.js +1107 -0
- package/scripts/lib/npm-version.js +261 -0
- package/scripts/lib/paquetes-conocidos.js +50 -0
- package/scripts/lib/preservar-usuario.js +586 -0
- package/scripts/lib/prompt-builder.js +264 -0
- package/scripts/lib/resolver-externo.js +332 -0
- package/scripts/lib/schedule-parser.js +305 -0
- package/scripts/lib/scoring-instintos.js +240 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/lib/selector-interactivo.js +152 -0
- package/scripts/lib/semantic-search.js +242 -0
- package/scripts/lib/skill-discovery.js +234 -0
- package/scripts/lib/skill-metrics.js +246 -0
- package/scripts/lib/skill-normalizer.js +112 -0
- package/scripts/lib/skills-hub.js +340 -0
- package/scripts/lib/span-schema.js +134 -0
- package/scripts/lib/tool-cost-analyzer.js +255 -0
- package/scripts/lib/tracing-processor-interface.js +286 -0
- package/scripts/lib/transformadores/base.js +80 -0
- package/scripts/lib/transformadores/claude.js +124 -0
- package/scripts/lib/transformadores/codex.js +115 -0
- package/scripts/lib/transformadores/copilot.js +106 -0
- package/scripts/lib/transformadores/gemini.js +74 -0
- package/scripts/lib/transformadores/index.js +35 -0
- package/scripts/lib/transformadores/opencode.js +75 -0
- package/scripts/lib/ui.js +259 -0
- package/scripts/limpiar-artefactos-python.js +131 -0
- package/scripts/mcp-orchestrator.py +386 -0
- package/scripts/mcp-pool-manager.py +352 -0
- package/scripts/mcp-telemetry.py +378 -0
- package/scripts/poblar-evolvable.js +226 -0
- package/scripts/publicar.js +287 -0
- package/scripts/reflect-skills.js +403 -0
- package/scripts/rotar-audit-logs.js +185 -0
- package/scripts/run-skill-evals.js +242 -0
- package/scripts/smoke-test.js +374 -0
- package/scripts/token-analysis.py +471 -0
- package/scripts/validar-manifest.js +195 -0
- package/scripts/validar-memoria.js +321 -0
- package/scripts/validar-tests-aislamiento.js +184 -0
- package/scripts/validar-tokens-test.js +208 -0
- package/scripts/validar.js +147 -0
- package/scripts/validate-markdown.py +339 -0
- package/scripts/validate-skills.py +385 -0
- package/scripts/vendor/claude-usage/README.md +116 -0
- package/scripts/vendor/claude-usage/cli.py +334 -0
- package/scripts/vendor/claude-usage/dashboard.py +795 -0
- package/scripts/vendor/claude-usage/scanner.py +467 -0
- package/scripts/vendor/markitdown/cli.py +194 -0
- package/scripts/verificar-evolucion.js +289 -0
- package/scripts/verificar-release.js +494 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# QUALITY-REPORT.md — [Fase/Feature]
|
|
2
|
+
|
|
3
|
+
**Fecha**: [YYYY-MM-DD]
|
|
4
|
+
**Evaluador**: [agente o persona responsable]
|
|
5
|
+
**Proyecto**: [nombre-del-proyecto]
|
|
6
|
+
**Commit/PR**: [hash corto o número de PR]
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Score Final: [X.X / 10.0] — [VEREDICTO]
|
|
11
|
+
|
|
12
|
+
> Umbrales: **9.0-10.0** = APROBADO | **7.0-8.9** = APROBADO CON OBSERVACIONES | **5.0-6.9** = RECHAZADO | **<5.0** = RECHAZADO CRÍTICO
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Desglose de métricas
|
|
17
|
+
|
|
18
|
+
| # | Métrica | Peso | Puntuación | Score ponderado |
|
|
19
|
+
|---|---------|------|-----------|----------------|
|
|
20
|
+
| 1 | Bugs encontrados | 25% | [X.X]/10 | [X.X × 0.25 = Y.Y] |
|
|
21
|
+
| 2 | Cobertura de tests | 20% | [X.X]/10 | [X.X × 0.20 = Y.Y] |
|
|
22
|
+
| 3 | Conformidad con spec | 20% | [X.X]/10 | [X.X × 0.20 = Y.Y] |
|
|
23
|
+
| 4 | Alucinaciones de código | 15% | [X.X]/10 | [X.X × 0.15 = Y.Y] |
|
|
24
|
+
| 5 | Principio DRY | 10% | [X.X]/10 | [X.X × 0.10 = Y.Y] |
|
|
25
|
+
| 6 | Seguridad SIGAF | 5% | [X.X]/10 | [X.X × 0.05 = Y.Y] |
|
|
26
|
+
| 7 | Arquitectura | 5% | [X.X]/10 | [X.X × 0.05 = Y.Y] |
|
|
27
|
+
| **TOTAL** | | **100%** | | **[SCORE FINAL]** |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Hallazgos por métrica
|
|
32
|
+
|
|
33
|
+
### M1 — Bugs encontrados ([X.X]/10)
|
|
34
|
+
|
|
35
|
+
**Método**: `pytest -v` / `npm test` / `mypy .` / `ruff check .`
|
|
36
|
+
|
|
37
|
+
| Severidad | Descripción | Archivo / línea |
|
|
38
|
+
|-----------|-------------|----------------|
|
|
39
|
+
| Mayor | [descripción] | [ruta:línea] |
|
|
40
|
+
| Menor | [descripción] | [ruta:línea] |
|
|
41
|
+
|
|
42
|
+
> Si no hay bugs: _Sin bugs encontrados._
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### M2 — Cobertura de tests ([X.X]/10)
|
|
47
|
+
|
|
48
|
+
**Comando ejecutado**: `pytest --cov=. --cov-report=term-missing`
|
|
49
|
+
|
|
50
|
+
| Módulo | Cobertura |
|
|
51
|
+
|--------|-----------|
|
|
52
|
+
| [módulo] | [X]% |
|
|
53
|
+
| **Total** | **[X]%** |
|
|
54
|
+
|
|
55
|
+
**Observaciones**: [notas sobre branches sin cubrir, tests sin assertions, etc.]
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### M3 — Conformidad con spec ([X.X]/10)
|
|
60
|
+
|
|
61
|
+
**Criterios de aceptación revisados**:
|
|
62
|
+
|
|
63
|
+
| # | Criterio | Estado | Nota |
|
|
64
|
+
|---|----------|--------|------|
|
|
65
|
+
| 1 | [criterio del CONTEXT.md / PLAN.md] | PASS / FAIL | [nota] |
|
|
66
|
+
| 2 | [criterio] | PASS / FAIL | |
|
|
67
|
+
|
|
68
|
+
**Penalizaciones aplicadas**:
|
|
69
|
+
- [ ] -1.0: Feature implementada diferente a la spec sin notificación
|
|
70
|
+
- [ ] -0.5: Feature parcialmente implementada sin documentar qué falta
|
|
71
|
+
- [ ] -1.5: Feature de seguridad omitida
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### M4 — Alucinaciones de código ([X.X]/10)
|
|
76
|
+
|
|
77
|
+
| Tipo | Descripción | Severidad |
|
|
78
|
+
|------|-------------|-----------|
|
|
79
|
+
| [Import inexistente / Firma incorrecta / Lógica falsa] | [descripción] | Mayor / Menor |
|
|
80
|
+
|
|
81
|
+
> Si no hay alucinaciones: _Sin alucinaciones detectadas._
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### M5 — Principio DRY ([X.X]/10)
|
|
86
|
+
|
|
87
|
+
**Violaciones encontradas**:
|
|
88
|
+
|
|
89
|
+
| Tipo | Ubicación | Descripción |
|
|
90
|
+
|------|-----------|-------------|
|
|
91
|
+
| Función duplicada | [ruta] | [descripción] |
|
|
92
|
+
| Lógica repetida | [ruta] | [descripción] |
|
|
93
|
+
|
|
94
|
+
> Si no hay violaciones: _Sin violaciones DRY encontradas._
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### M6 — Seguridad SIGAF ([X.X]/10)
|
|
99
|
+
|
|
100
|
+
| Item | Estado |
|
|
101
|
+
|------|--------|
|
|
102
|
+
| `selectinload` en todas las relaciones serializadas | PASS / FAIL |
|
|
103
|
+
| `lazy="selectin"` en relaciones a `Usuario` | PASS / FAIL |
|
|
104
|
+
| Services no hacen `db.commit()` | PASS / FAIL |
|
|
105
|
+
| `Literal[]` en campos enum en schemas Pydantic | PASS / FAIL |
|
|
106
|
+
| RBAC en todos los `POST`/`PUT`/`DELETE` | PASS / FAIL |
|
|
107
|
+
| `get_current_user` explícito en todos los endpoints | PASS / FAIL |
|
|
108
|
+
| Filtros de datos del JWT, no de query params | PASS / FAIL |
|
|
109
|
+
| `@if`/`@for` en Angular (no `*ngIf`/`*ngFor`) | PASS / FAIL / N/A |
|
|
110
|
+
| `computed()` para derivaciones en templates Angular | PASS / FAIL / N/A |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### M7 — Arquitectura ([X.X]/10)
|
|
115
|
+
|
|
116
|
+
| Item | Estado |
|
|
117
|
+
|------|--------|
|
|
118
|
+
| Services no importan modelos de otros dominios directamente | PASS / FAIL |
|
|
119
|
+
| Endpoints sin lógica de negocio incrustada | PASS / FAIL |
|
|
120
|
+
| Componentes Angular usan services para HTTP | PASS / FAIL / N/A |
|
|
121
|
+
| Modelos ORM sin lógica de negocio compleja | PASS / FAIL |
|
|
122
|
+
| Nuevas dependencias justificadas y documentadas | PASS / FAIL |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Plan de mejora
|
|
127
|
+
|
|
128
|
+
> Rellenar solo si el score es menor a 9.0.
|
|
129
|
+
|
|
130
|
+
| Acción correctiva | Métrica afectada | Impacto estimado en score | Tiempo estimado | Prioridad |
|
|
131
|
+
|-------------------|-----------------|--------------------------|----------------|-----------|
|
|
132
|
+
| [descripción de la acción] | M[N] | +[X.X] | [Xh / Xd] | Alta / Media / Baja |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Decisión
|
|
137
|
+
|
|
138
|
+
- [ ] **Aprobar** — Score ≥ 9.0, continuar con siguiente fase
|
|
139
|
+
- [ ] **Aprobar con compromisos** — Score 7.0-8.9, mejoras antes de siguiente fase
|
|
140
|
+
- [ ] **Rechazar** — Score < 7.0, requiere iteración con plan de mejora
|
|
141
|
+
|
|
142
|
+
**Observaciones del evaluador**:
|
|
143
|
+
|
|
144
|
+
> [Texto libre con contexto adicional, riesgos identificados o recomendaciones.]
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
_Generado con la habilidad `checklist-calidad` del sistema SWL._
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: checklist-seguridad
|
|
3
|
+
description: Checklist de seguridad basado en OWASP Top 10 + seguridad de agentes autónomos (A11). Cubre inyección, autenticación, exposición de datos, control de acceso, configuración insegura, XSS, deserialización, componentes vulnerables, logging y agencia excesiva de IA. Produce reporte con hallazgos y remediaciones.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
herramientasPermitidas: [Read, Grep]
|
|
6
|
+
evolvable: true # default para skill estandar
|
|
7
|
+
nist_csf: [PR.PS-01, PR.DS-02, PR.DS-10, DE.CM-09, RS.MI-01]
|
|
8
|
+
attack_techniques: [T1190, T1059, T1556]
|
|
9
|
+
exclusiones:
|
|
10
|
+
- "No cargar para auditoría de dependencias (CVEs en paquetes npm/pip, licencias) — para dependencias cargar `dependencias-auditoria`."
|
|
11
|
+
- "No cargar para revisión de calidad general (cobertura, DRY, arquitectura) — para calidad general cargar `checklist-calidad`."
|
|
12
|
+
- "No cargar para configuración de certificados TLS, WAF o firewalls de red — este skill es revisión de código, no de infraestructura de red."
|
|
13
|
+
- "No cargar para penetration testing o red teaming — este skill es análisis estático de código, no explotación activa."
|
|
14
|
+
---
|
|
15
|
+
# Habilidad: Checklist de Seguridad OWASP Top 10
|
|
16
|
+
|
|
17
|
+
## Cuándo NO cargar
|
|
18
|
+
|
|
19
|
+
- La auditoría es de CVEs en paquetes pip/npm o licencias: cargar `dependencias-auditoria`.
|
|
20
|
+
- La revisión es de calidad general (cobertura, DRY, conformidad con spec): cargar `checklist-calidad`.
|
|
21
|
+
- La tarea es configurar TLS, WAF o reglas de firewall: este skill es análisis de código, no de infraestructura de red.
|
|
22
|
+
- La tarea es penetration testing o explotación activa: este skill cubre análisis estático, no red teaming.
|
|
23
|
+
|
|
24
|
+
## Propósito
|
|
25
|
+
|
|
26
|
+
La seguridad no es una fase final — es una revisión que ocurre en cada merge
|
|
27
|
+
relevante. Esta habilidad aplica el OWASP Top 10 de forma estructurada al
|
|
28
|
+
código del proyecto, identificando vulnerabilidades concretas con evidencia
|
|
29
|
+
y proponiendo remediaciones específicas (no genéricas).
|
|
30
|
+
|
|
31
|
+
## Cuándo activar
|
|
32
|
+
|
|
33
|
+
- Antes de hacer deploy a producción
|
|
34
|
+
- Al revisar código que maneja autenticación, datos sensibles o inputs de usuario
|
|
35
|
+
- Como parte del proceso de revisión de PRs en módulos críticos
|
|
36
|
+
- Después de añadir integraciones con sistemas externos
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## A01 — Broken Access Control
|
|
41
|
+
|
|
42
|
+
**Verificar**:
|
|
43
|
+
- [ ] Todos los endpoints con datos sensibles validan el rol del usuario
|
|
44
|
+
- [ ] Los filtros de datos usan el ID del JWT, no el ID del query param
|
|
45
|
+
- [ ] No existe escalación de privilegios: usuario normal no puede acceder a rutas de admin
|
|
46
|
+
- [ ] Las rutas de administración tienen middleware de autorización diferenciado
|
|
47
|
+
- [ ] Los recursos de un usuario no son accesibles con el ID de otro usuario (IDOR)
|
|
48
|
+
|
|
49
|
+
**Búsquedas de código**:
|
|
50
|
+
```bash
|
|
51
|
+
# Endpoints sin autenticación (FastAPI)
|
|
52
|
+
grep -rn "def [a-z_]*(" --include="*.py" -A3 | grep -v "Depends\|current_user" | head -30
|
|
53
|
+
|
|
54
|
+
# Parámetros de usuario en query sin validación de JWT
|
|
55
|
+
grep -rn "user_id.*Query\|owner_id.*Query" --include="*.py" | head -20
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Señal de vulnerabilidad**: endpoint que filtra por `user_id` recibido como
|
|
59
|
+
parámetro de URL sin compararlo con el `user_id` del token JWT.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## A02 — Cryptographic Failures (Exposición de datos sensibles)
|
|
64
|
+
|
|
65
|
+
**Verificar**:
|
|
66
|
+
- [ ] Contraseñas almacenadas con bcrypt/argon2 (NUNCA MD5, SHA1, SHA256 simple)
|
|
67
|
+
- [ ] Datos sensibles en tránsito solo sobre HTTPS/TLS
|
|
68
|
+
- [ ] Tokens JWT con expiración corta y firmados con clave segura
|
|
69
|
+
- [ ] Claves API, secretos y contraseñas SOLO en variables de entorno o vault
|
|
70
|
+
- [ ] No hay datos sensibles en logs (tarjetas, contraseñas, tokens)
|
|
71
|
+
- [ ] Campos sensibles en BD están cifrados si la regulación lo exige
|
|
72
|
+
|
|
73
|
+
**Búsquedas de código**:
|
|
74
|
+
```bash
|
|
75
|
+
# Secretos hardcodeados
|
|
76
|
+
grep -rn "password\s*=\s*['\"][^'\"]\|secret\s*=\s*['\"][^'\"]" --include="*.py" \
|
|
77
|
+
--include="*.ts" --include="*.env" | grep -v "test\|example\|placeholder"
|
|
78
|
+
|
|
79
|
+
# MD5 o SHA1 para contraseñas
|
|
80
|
+
grep -rn "md5\|sha1\|hashlib.sha" --include="*.py" | grep -v "test\|checksum\|etag"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## A03 — Injection (SQL, OS, LDAP, NoSQL)
|
|
86
|
+
|
|
87
|
+
**Verificar**:
|
|
88
|
+
- [ ] NUNCA concatenación de strings para construir queries SQL
|
|
89
|
+
- [ ] ORM con parámetros bind en todas las queries dinámicas
|
|
90
|
+
- [ ] Inputs de usuario NO se pasan a `os.system`, `subprocess`, `eval`, `exec`
|
|
91
|
+
- [ ] Queries NoSQL no aceptan objetos sin sanitizar
|
|
92
|
+
- [ ] Plantillas de templates engine escapan outputs por defecto
|
|
93
|
+
|
|
94
|
+
**Búsquedas de código**:
|
|
95
|
+
```bash
|
|
96
|
+
# Concatenación en SQL
|
|
97
|
+
grep -rn "f\".*SELECT\|f\".*INSERT\|f\".*UPDATE\|f\".*DELETE\|f\".*WHERE" \
|
|
98
|
+
--include="*.py" | head -20
|
|
99
|
+
|
|
100
|
+
# Ejecución de comandos con input del usuario
|
|
101
|
+
grep -rn "os\.system\|subprocess\.call\|subprocess\.run\|eval(" \
|
|
102
|
+
--include="*.py" | head -20
|
|
103
|
+
|
|
104
|
+
# ORM con texto raw sin parámetros
|
|
105
|
+
grep -rn "text(f\"\|execute(f\"" --include="*.py" | head -20
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## A04 — Insecure Design
|
|
111
|
+
|
|
112
|
+
**Verificar**:
|
|
113
|
+
- [ ] Flujos críticos (pago, reset de contraseña, cambio de email) tienen pasos
|
|
114
|
+
de confirmación y no pueden completarse en un solo request sin validación
|
|
115
|
+
- [ ] Rate limiting en endpoints de autenticación y acciones sensibles
|
|
116
|
+
- [ ] Lógica de negocio no asume que el orden de los pasos se respeta del lado del cliente
|
|
117
|
+
- [ ] Tokens de un solo uso son invalidados después de usarse (password reset)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## A05 — Security Misconfiguration
|
|
122
|
+
|
|
123
|
+
**Verificar**:
|
|
124
|
+
- [ ] DEBUG=False en producción (Django/FastAPI)
|
|
125
|
+
- [ ] Stack traces no expuestos al cliente en producción
|
|
126
|
+
- [ ] Headers de seguridad configurados: `X-Content-Type-Options`, `X-Frame-Options`,
|
|
127
|
+
`Content-Security-Policy`, `Strict-Transport-Security`
|
|
128
|
+
- [ ] CORS configurado con lista blanca explícita (NUNCA `*` en producción)
|
|
129
|
+
- [ ] Directorios de archivos sensibles (`.env`, `.git`, `admin`) no accesibles vía HTTP
|
|
130
|
+
- [ ] Dependencias sin versiones pinned en producción
|
|
131
|
+
|
|
132
|
+
**Búsquedas de código**:
|
|
133
|
+
```bash
|
|
134
|
+
# CORS abierto
|
|
135
|
+
grep -rn "allow_origins.*\*\|CORS.*\*" --include="*.py" --include="*.ts" | head -10
|
|
136
|
+
|
|
137
|
+
# DEBUG en config
|
|
138
|
+
grep -rn "DEBUG\s*=\s*True\|debug\s*=\s*true" --include="*.py" \
|
|
139
|
+
--include="*.env" | grep -v test | head -10
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## A06 — Vulnerable and Outdated Components
|
|
145
|
+
|
|
146
|
+
Ver habilidad `dependencias-auditoria` para el análisis completo. En este checklist:
|
|
147
|
+
|
|
148
|
+
- [ ] `pip audit` o `safety check` corrió sin críticos sin resolver
|
|
149
|
+
- [ ] `npm audit` sin vulnerabilidades High o Critical sin resolver
|
|
150
|
+
- [ ] Imagen base de Docker no tiene CVEs críticos (`trivy image [imagen]`)
|
|
151
|
+
- [ ] No hay dependencias abandonadas (sin commits en 2+ años) en ruta crítica
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## A07 — Identification and Authentication Failures
|
|
156
|
+
|
|
157
|
+
**Verificar**:
|
|
158
|
+
- [ ] Contraseñas tienen política de complejidad mínima aplicada en el servidor
|
|
159
|
+
- [ ] Intentos de login fallidos generan bloqueo temporal o CAPTCHA
|
|
160
|
+
- [ ] Sesiones invalidadas correctamente en logout
|
|
161
|
+
- [ ] Tokens de sesión no se transmiten en URLs
|
|
162
|
+
- [ ] MFA disponible para cuentas privilegiadas
|
|
163
|
+
- [ ] Mensajes de error de login son genéricos (no revelan si el email existe)
|
|
164
|
+
|
|
165
|
+
**Búsquedas de código**:
|
|
166
|
+
```bash
|
|
167
|
+
# Mensajes de error que revelan existencia de usuario
|
|
168
|
+
grep -rn '"Usuario no encontrado"\|"Email not found"\|"user does not exist"' \
|
|
169
|
+
--include="*.py" --include="*.ts" | head -10
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## A08 — Software and Data Integrity Failures
|
|
175
|
+
|
|
176
|
+
**Verificar**:
|
|
177
|
+
- [ ] Descargas de archivos externos verifican hash/firma
|
|
178
|
+
- [ ] Pipelines CI/CD no pueden ser modificados por código del repositorio sin revisión
|
|
179
|
+
- [ ] Deserialización de objetos Python (pickle) NUNCA con datos del usuario
|
|
180
|
+
- [ ] Updates automáticos de dependencias pasan por pipeline de tests
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## A09 — Security Logging and Monitoring Failures
|
|
185
|
+
|
|
186
|
+
**Verificar**:
|
|
187
|
+
- [ ] Todos los logins (exitosos y fallidos) se registran con timestamp e IP
|
|
188
|
+
- [ ] Cambios en datos sensibles (contraseña, email, roles) quedan en audit log
|
|
189
|
+
- [ ] Accesos denegados se registran
|
|
190
|
+
- [ ] Los logs NO contienen datos sensibles (ver A02)
|
|
191
|
+
- [ ] Alertas configuradas para patrones de ataque (múltiples 401, 403)
|
|
192
|
+
|
|
193
|
+
**Búsqueda de código**:
|
|
194
|
+
```bash
|
|
195
|
+
# Endpoints de auth sin logging
|
|
196
|
+
grep -rn "def login\|def authenticate" --include="*.py" -A 15 | grep -c "logger\|log\."
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## A10 — Server-Side Request Forgery (SSRF)
|
|
202
|
+
|
|
203
|
+
**Verificar**:
|
|
204
|
+
- [ ] URLs proporcionadas por el usuario no se usan directamente en requests del servidor
|
|
205
|
+
- [ ] Si se permiten webhooks o callbacks, hay lista blanca de dominios permitidos
|
|
206
|
+
- [ ] Metadata de cloud (169.254.169.254) está bloqueada en el firewall de red
|
|
207
|
+
- [ ] Redirects no siguen URLs arbitrarias proporcionadas por el usuario
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## A11 — Seguridad de Agentes Autónomos (OWASP Excessive Agency)
|
|
212
|
+
|
|
213
|
+
Cuando el proyecto usa agentes de IA con acceso operativo (lectura, escritura,
|
|
214
|
+
ejecución, herramientas MCP), la superficie de ataque incluye al agente como
|
|
215
|
+
actor privilegiado. Ver también `reglas/seguridad-agentes.md`.
|
|
216
|
+
|
|
217
|
+
**Verificar**:
|
|
218
|
+
- [ ] Los agentes tienen permisos mínimos en frontmatter (permisosRed, permisosEscritura, permisosComandos)
|
|
219
|
+
- [ ] La cadena de delegación no escala privilegios (agente hijo ≤ agente padre)
|
|
220
|
+
- [ ] Los MCP servers con escritura NO tienen auto-aprobación global
|
|
221
|
+
- [ ] Las credenciales usadas por agentes son de corta duración, no API keys permanentes
|
|
222
|
+
- [ ] El hook `risk-scoring` cubre operaciones destructivas (--force, rm, push)
|
|
223
|
+
- [ ] Los agentes que procesan código externo tratan el contenido como datos, no instrucciones
|
|
224
|
+
- [ ] Las acciones irreversibles (push, delete, deploy) requieren confirmación humana
|
|
225
|
+
- [ ] El audit trail registra operaciones de agentes con nivelRiesgo ALTO
|
|
226
|
+
|
|
227
|
+
**Búsquedas de código** (aplicables al sistema SWL):
|
|
228
|
+
```bash
|
|
229
|
+
# Agentes con permisos amplios sin justificación
|
|
230
|
+
grep -rn "permisosRed: true" --include="*.md" agentes/ | head -20
|
|
231
|
+
|
|
232
|
+
# MCP servers con auto-allow en escritura
|
|
233
|
+
grep -rn "alwaysAllow\|autoApprove" .claude/settings.json | head -10
|
|
234
|
+
|
|
235
|
+
# Secretos accesibles desde contexto de agentes
|
|
236
|
+
grep -rn "\.env\|credentials\|secret" --include="*.md" agentes/ | head -10
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Señal de vulnerabilidad**: agente con `permisosComandos: true` y `nivelRiesgo: BAJO`
|
|
240
|
+
— el riesgo declarado no refleja la capacidad real.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Gotchas / Errores comunes no obvios
|
|
245
|
+
|
|
246
|
+
**El grep de búsqueda de secrets hardcodeados devuelve cero resultados pero hay credenciales en archivos de configuración YAML**: el patrón de búsqueda usa `password\s*=` (sintaxis Python), pero los archivos YAML usan `password:` (sin signo igual). Causa: las búsquedas de código están optimizadas para un lenguaje y pierden variantes de otro formato. Fix: expandir el patrón de búsqueda a `password[\s=:]+['\"][^'\"]{4,}` para capturar asignaciones en Python, YAML y JSON simultáneamente. Verificar también `docker-compose.yml`, `.env.example` y archivos de configuración de CI.
|
|
247
|
+
|
|
248
|
+
**A01 (Control de acceso) pasa porque todos los endpoints tienen `Depends(get_current_user)` pero falta la verificación de rol**: `get_current_user` solo verifica autenticación (que el token es válido), no autorización (que el usuario tiene permiso para esa operación). Causa: en FastAPI es fácil confundir `get_current_user` con RBAC — el nombre sugiere verificación completa cuando solo hace autenticación. Fix: para endpoints de mutación, buscar `require_role` o equivalente además de `get_current_user`. Un endpoint sin `require_role` es accesible por cualquier usuario autenticado, independientemente de su rol.
|
|
249
|
+
|
|
250
|
+
**A05 (Misconfiguration) pasa en revisión manual pero `DEBUG=True` está activo en producción vía variable de entorno no documentada**: el grep busca `DEBUG = True` en el código fuente, pero el valor real viene de `os.getenv("DEBUG", "true")` con un default inseguro. Causa: los defaults de variables de entorno en el código son tan peligrosos como los valores hardcodeados. Fix: buscar también `getenv.*DEBUG` y `environ.*DEBUG` en el código fuente. El default de cualquier variable de seguridad debe ser el valor más restrictivo, no el más conveniente para desarrollo.
|
|
251
|
+
|
|
252
|
+
**A09 (Logging) parece completo porque hay logs en los endpoints de login, pero los cambios de privilegios no se registran**: el checklist verifica que "logins se registran" pero no cubre cambios de rol, asignación de permisos elevados o modificaciones de otros usuarios por un admin. Causa: el A09 se interpreta como "loguear intentos de autenticación" en lugar de "loguear todas las acciones con impacto de seguridad". Fix: el audit log debe cubrir: login/logout, cambios de contraseña/email, cambios de rol, accesos denegados, y cualquier operación que modifique permisos de otro usuario.
|
|
253
|
+
|
|
254
|
+
**HTML recibido de editores ricos (TipTap, Quill, Lexical, Slate) se persiste sin sanitizar server-side — vulnerabilidad A03 (Injection/XSS) latente**: los editores ricos del frontend envían HTML al backend (tags `<p>`, `<a href>`, `<img>`, `<iframe>`, `<script>` si no se filtra). Validar solo client-side es insuficiente — un atacante puede enviar HTML malicioso directamente al endpoint bypasseando el editor. Causa: se confía en que el editor "limpia" antes de enviar, pero el sanitization es siempre responsabilidad del servidor — la validación client-side es UX, no seguridad. Fix obligatorio: sanitizar server-side con whitelist estricta antes de persistir. En Python: `bleach.clean(html, tags=['p','br','strong','em','ul','ol','li','a'], attributes={'a': ['href','title']}, strip=True)`. En Node: `DOMPurify` via `jsdom`. Además, **forzar atributos de seguridad en links**: todo `<a href>` debe recibir `rel="noopener noreferrer"` y `target="_blank"` agregados por el sanitizer (no confiar en el valor que llegó del cliente). Bloquear tags `<script>`, `<iframe>`, `<object>`, `<embed>`, `<style>`, y atributos `on*` (onclick, onerror, etc.). El whitelist debe ser mínimo — solo lo que el producto realmente necesita renderizar.
|
|
255
|
+
|
|
256
|
+
## Plantilla de reporte: `SECURITY-REPORT.md`
|
|
257
|
+
|
|
258
|
+
```markdown
|
|
259
|
+
# SECURITY-REPORT.md
|
|
260
|
+
**Fecha**: [fecha] **Revisado por**: [agente/persona]
|
|
261
|
+
**Alcance**: [módulos/archivos revisados]
|
|
262
|
+
|
|
263
|
+
## Resumen ejecutivo
|
|
264
|
+
- Vulnerabilidades Críticas: N
|
|
265
|
+
- Vulnerabilidades Altas: N
|
|
266
|
+
- Vulnerabilidades Medias: N
|
|
267
|
+
- Informativas: N
|
|
268
|
+
|
|
269
|
+
## Hallazgos
|
|
270
|
+
|
|
271
|
+
### [CRÍTICO/ALTO/MEDIO/BAJO] — [Nombre de la vulnerabilidad]
|
|
272
|
+
- **OWASP**: A0X
|
|
273
|
+
- **Archivo**: [ruta:línea]
|
|
274
|
+
- **Descripción**: [qué hace el código vulnerable y por qué]
|
|
275
|
+
- **Evidencia**: [snippet de código]
|
|
276
|
+
- **Remediación**: [solución específica para este código]
|
|
277
|
+
- **Prioridad de fix**: Inmediata / Próximo sprint / Backlog
|
|
278
|
+
|
|
279
|
+
## Items sin vulnerabilidades (confirmados)
|
|
280
|
+
- A01 Control de acceso: verificado ✓
|
|
281
|
+
- ...
|
|
282
|
+
|
|
283
|
+
## Acciones requeridas antes de deploy
|
|
284
|
+
- [ ] [acción con responsable]
|
|
285
|
+
```
|