@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,369 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-errors-typescript
|
|
3
|
+
description: >
|
|
4
|
+
Resolución de errores de compilación TypeScript: tsc, tsconfig.json, errores de
|
|
5
|
+
tipos, generics, declaration files y bundlers (Vite, esbuild, webpack). Cargar
|
|
6
|
+
cuando un build TypeScript falle, tsc reporte errores de tipos, o haya problemas
|
|
7
|
+
con la configuración del compilador o del bundler.
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
herramientasPermitidas: [Read, Bash, Grep]
|
|
10
|
+
exclusiones:
|
|
11
|
+
- "No cargar para errores de lógica o comportamiento en runtime JavaScript — si el código compila pero falla en ejecución (undefined is not a function, Promise sin await), no es un error de compilación TypeScript."
|
|
12
|
+
- "No cargar para errores específicos de frameworks sobre TypeScript (Angular TS2xxx en templates, NestJS decorators) — esos tienen contexto adicional de framework; cargar `angular-moderno`, `nestjs-experto` o `build-errors-nextjs`."
|
|
13
|
+
- "No cargar para decidir la configuración óptima de tsconfig desde cero en un proyecto nuevo — eso es diseño de stack; cargar `typescript-avanzado` para configuración y patrones generales."
|
|
14
|
+
- "No cargar cuando el error es de ESLint o Prettier (no de tsc) — los errores de style/lint no son errores de compilación TypeScript."
|
|
15
|
+
evolvable: true # default para skill estandar
|
|
16
|
+
---
|
|
17
|
+
# Build Errors TypeScript — Diagnóstico y Solución
|
|
18
|
+
|
|
19
|
+
## Cuándo NO cargar
|
|
20
|
+
|
|
21
|
+
- El error ocurre en runtime JavaScript (no en `tsc`) — si el build pasa pero el navegador/Node lanza errores, no es un problema de TypeScript.
|
|
22
|
+
- El error viene de un framework encima de TypeScript (Angular, NestJS) — cargar el skill específico del framework porque el error puede tener semántica adicional.
|
|
23
|
+
- La pregunta es cómo configurar tsconfig para un proyecto nuevo — para diseño de configuración cargar `typescript-avanzado`.
|
|
24
|
+
|
|
25
|
+
## Cuándo cargar
|
|
26
|
+
|
|
27
|
+
- `tsc` falla con errores de tipos, generics o declaration files
|
|
28
|
+
- `npm run build` o `yarn build` falla en la etapa de type-checking
|
|
29
|
+
- Errores de `tsconfig.json` (paths, module resolution, strict mode)
|
|
30
|
+
- Problemas con `@types/*` (conflictos, tipos faltantes, versiones incompatibles)
|
|
31
|
+
- Errores de bundlers (Vite, esbuild, webpack) relacionados con TypeScript
|
|
32
|
+
- Errores de ESM vs CommonJS en proyectos TypeScript
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Errores de tsc — tipos y asignación
|
|
37
|
+
|
|
38
|
+
### `TS2322: Type 'X' is not assignable to type 'Y'`
|
|
39
|
+
|
|
40
|
+
**Causa**: asignación de un valor cuyo tipo no coincide con el esperado.
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// MAL
|
|
44
|
+
const edad: number = "25"; // string no es number
|
|
45
|
+
|
|
46
|
+
// BIEN — verificar el tipo real del valor
|
|
47
|
+
const edad: number = parseInt("25", 10);
|
|
48
|
+
|
|
49
|
+
// Caso frecuente: respuestas de API
|
|
50
|
+
interface Usuario { id: number; nombre: string }
|
|
51
|
+
// La API puede devolver id como string — validar en runtime
|
|
52
|
+
const usuario: Usuario = await api.get("/users/1"); // puede fallar si id viene como "1"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Gotcha con unions y narrowing**:
|
|
56
|
+
```typescript
|
|
57
|
+
// MAL — TS no sabe cuál es el tipo dentro de la union
|
|
58
|
+
function procesar(valor: string | number) {
|
|
59
|
+
return valor.toFixed(2); // TS2339: toFixed no existe en string
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// BIEN — narrowing con typeof
|
|
63
|
+
function procesar(valor: string | number) {
|
|
64
|
+
if (typeof valor === "number") {
|
|
65
|
+
return valor.toFixed(2);
|
|
66
|
+
}
|
|
67
|
+
return parseFloat(valor).toFixed(2);
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### `TS2345: Argument of type 'X' is not assignable to parameter of type 'Y'`
|
|
72
|
+
|
|
73
|
+
**Causa frecuente**: pasar `null` o `undefined` donde se espera un tipo definido.
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
// MAL — strictNullChecks detecta que find() puede retornar undefined
|
|
77
|
+
const usuarios: Usuario[] = [];
|
|
78
|
+
const admin: Usuario = usuarios.find(u => u.rol === "admin");
|
|
79
|
+
// TS2322: Type 'Usuario | undefined' is not assignable to type 'Usuario'
|
|
80
|
+
|
|
81
|
+
// BIEN — manejar el caso undefined
|
|
82
|
+
const admin = usuarios.find(u => u.rol === "admin");
|
|
83
|
+
if (!admin) throw new Error("Admin no encontrado");
|
|
84
|
+
// Después de la guarda, TS sabe que admin es Usuario
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### `TS2339: Property 'X' does not exist on type 'Y'`
|
|
88
|
+
|
|
89
|
+
**Causas comunes**:
|
|
90
|
+
1. Typo en el nombre de la propiedad
|
|
91
|
+
2. El tipo no tiene esa propiedad (usar `interface` correcta)
|
|
92
|
+
3. Acceso a propiedad opcional sin optional chaining
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// MAL
|
|
96
|
+
const nombre = usuario.nombe; // typo: "nombe" vs "nombre"
|
|
97
|
+
|
|
98
|
+
// Caso con tipos de API externa
|
|
99
|
+
const data: unknown = await fetch("/api").then(r => r.json());
|
|
100
|
+
console.log(data.nombre); // TS2339: unknown no tiene propiedades
|
|
101
|
+
|
|
102
|
+
// BIEN — validar con type guard o Zod
|
|
103
|
+
import { z } from "zod";
|
|
104
|
+
const UsuarioSchema = z.object({ nombre: z.string() });
|
|
105
|
+
const usuario = UsuarioSchema.parse(data);
|
|
106
|
+
console.log(usuario.nombre); // ok: tipo inferido por Zod
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Errores de tsconfig.json
|
|
112
|
+
|
|
113
|
+
### `Cannot find module 'X' or its corresponding type declarations` (TS2307)
|
|
114
|
+
|
|
115
|
+
**Diagnóstico**:
|
|
116
|
+
```bash
|
|
117
|
+
# ¿Existe el paquete?
|
|
118
|
+
npm ls nombre-paquete
|
|
119
|
+
|
|
120
|
+
# ¿Existen los tipos?
|
|
121
|
+
npm ls @types/nombre-paquete
|
|
122
|
+
|
|
123
|
+
# ¿moduleResolution es correcto?
|
|
124
|
+
grep moduleResolution tsconfig.json
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Soluciones**:
|
|
128
|
+
1. Instalar tipos: `npm install -D @types/nombre-paquete`
|
|
129
|
+
2. Si no hay `@types/*`, crear declaración local:
|
|
130
|
+
```typescript
|
|
131
|
+
// src/types/nombre-paquete.d.ts
|
|
132
|
+
declare module "nombre-paquete" {
|
|
133
|
+
export function metodo(): void;
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
3. Verificar `moduleResolution` en tsconfig:
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"compilerOptions": {
|
|
140
|
+
"moduleResolution": "bundler" // para Vite/esbuild
|
|
141
|
+
// o "node16" para Node.js puro
|
|
142
|
+
// NUNCA "node" en proyectos nuevos (legacy)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Path aliases no resuelven (`@app/`, `@shared/`)
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"compilerOptions": {
|
|
152
|
+
"baseUrl": ".",
|
|
153
|
+
"paths": {
|
|
154
|
+
"@app/*": ["src/app/*"],
|
|
155
|
+
"@shared/*": ["src/shared/*"]
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Gotcha**: `tsc` resuelve los paths pero NO los transforma en el output.
|
|
162
|
+
El bundler (Vite, webpack) o `tsc-alias` deben resolver los paths en runtime.
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Para Vite — agregar resolve.alias en vite.config.ts
|
|
166
|
+
# Para Jest — agregar moduleNameMapper en jest.config.ts
|
|
167
|
+
# Para Node.js — usar tsc-alias como post-build step
|
|
168
|
+
npx tsc && npx tsc-alias
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### `TS5023: Unknown compiler option 'X'`
|
|
172
|
+
|
|
173
|
+
**Causa**: opción de una versión más nueva de TypeScript en tsconfig.
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Verificar versión de TypeScript
|
|
177
|
+
npx tsc --version
|
|
178
|
+
|
|
179
|
+
# Opciones por versión:
|
|
180
|
+
# verbatimModuleSyntax — TS 5.0+
|
|
181
|
+
# moduleResolution: "bundler" — TS 5.0+
|
|
182
|
+
# resolvePackageJsonExports — TS 5.0+
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Solución**: actualizar TypeScript o quitar la opción incompatible.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Errores de generics
|
|
190
|
+
|
|
191
|
+
### `TS2344: Type 'X' does not satisfy the constraint 'Y'`
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// MAL — el generic está restringido pero el tipo pasado no cumple
|
|
195
|
+
function primero<T extends { id: number }>(items: T[]): T {
|
|
196
|
+
return items[0];
|
|
197
|
+
}
|
|
198
|
+
primero([{ nombre: "Ana" }]); // error: falta 'id'
|
|
199
|
+
|
|
200
|
+
// BIEN
|
|
201
|
+
primero([{ id: 1, nombre: "Ana" }]);
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### `TS2558: Expected 0 type arguments, but got 1`
|
|
205
|
+
|
|
206
|
+
**Causa**: pasar generics a una función que no los acepta.
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
// MAL — useState ya infiere el tipo del valor inicial
|
|
210
|
+
const [count, setCount] = useState<number>(0); // redundante pero válido
|
|
211
|
+
|
|
212
|
+
// Esto falla si la función no tiene parámetro de tipo:
|
|
213
|
+
fetch<Response>("/api"); // TS2558: fetch no acepta type arguments
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Errores de ESM vs CommonJS
|
|
219
|
+
|
|
220
|
+
### `ERR_REQUIRE_ESM: require() of ES Module not supported`
|
|
221
|
+
|
|
222
|
+
**Causa**: importar un paquete ESM-only desde un proyecto CommonJS.
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# Diagnóstico: ver si el paquete es ESM-only
|
|
226
|
+
node -e "console.log(require.resolve('nombre-paquete'))"
|
|
227
|
+
# Si falla con ERR_REQUIRE_ESM, el paquete es ESM-only
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Soluciones**:
|
|
231
|
+
1. Migrar el proyecto a ESM (`"type": "module"` en package.json)
|
|
232
|
+
2. Usar `import()` dinámico en vez de `require()`:
|
|
233
|
+
```typescript
|
|
234
|
+
const modulo = await import("paquete-esm");
|
|
235
|
+
```
|
|
236
|
+
3. Usar una versión anterior del paquete que soporte CJS (último recurso)
|
|
237
|
+
|
|
238
|
+
### `TS1479: ... resolves to an ESM-only module` con `moduleResolution: "node16"`
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"compilerOptions": {
|
|
243
|
+
"module": "node16",
|
|
244
|
+
"moduleResolution": "node16"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Solución**: cambiar a `"moduleResolution": "bundler"` si usas Vite/esbuild,
|
|
250
|
+
o usar `import()` dinámico para paquetes ESM-only.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Errores de bundlers (Vite, esbuild, webpack)
|
|
255
|
+
|
|
256
|
+
### Vite: `[plugin:vite:import-analysis] Failed to resolve import`
|
|
257
|
+
|
|
258
|
+
**Causas**:
|
|
259
|
+
1. Path alias no configurado en `vite.config.ts`
|
|
260
|
+
2. Extensión faltante en el import (Vite requiere extensión para CSS/assets)
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
// vite.config.ts
|
|
264
|
+
import { defineConfig } from "vite";
|
|
265
|
+
import { resolve } from "path";
|
|
266
|
+
|
|
267
|
+
export default defineConfig({
|
|
268
|
+
resolve: {
|
|
269
|
+
alias: {
|
|
270
|
+
"@": resolve(__dirname, "./src"),
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### webpack: `Module not found: Error: Can't resolve 'X'`
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# Diagnóstico
|
|
280
|
+
npx webpack --stats-error-details
|
|
281
|
+
|
|
282
|
+
# Soluciones comunes:
|
|
283
|
+
# 1. Agregar extensión a resolve.extensions en webpack.config
|
|
284
|
+
# 2. Agregar alias a resolve.alias
|
|
285
|
+
# 3. Instalar el loader correspondiente (ts-loader, babel-loader)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### esbuild: `No loader is configured for ".X" files`
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
// esbuild necesita loaders explícitos para extensiones no estándar
|
|
292
|
+
import * as esbuild from "esbuild";
|
|
293
|
+
await esbuild.build({
|
|
294
|
+
loader: {
|
|
295
|
+
".svg": "file",
|
|
296
|
+
".css": "css",
|
|
297
|
+
".png": "file",
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## Errores de declaration files (.d.ts)
|
|
305
|
+
|
|
306
|
+
### `TS7016: Could not find a declaration file for module 'X'`
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# Opción 1: instalar tipos del DefinitelyTyped
|
|
310
|
+
npm install -D @types/nombre-paquete
|
|
311
|
+
|
|
312
|
+
# Opción 2: declaración local mínima
|
|
313
|
+
# src/types/nombre-paquete.d.ts
|
|
314
|
+
declare module "nombre-paquete"; # tipado como any — último recurso
|
|
315
|
+
|
|
316
|
+
# Opción 3: skipLibCheck (oculta errores, no los resuelve)
|
|
317
|
+
# tsconfig.json → "skipLibCheck": true
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Conflictos entre versiones de `@types/*`
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
# Diagnóstico
|
|
324
|
+
npm ls @types/react # ver si hay múltiples versiones
|
|
325
|
+
|
|
326
|
+
# Solución: forzar una sola versión con overrides
|
|
327
|
+
# package.json
|
|
328
|
+
{
|
|
329
|
+
"overrides": {
|
|
330
|
+
"@types/react": "^18.2.0"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## strict mode — errores al activar
|
|
338
|
+
|
|
339
|
+
Al migrar un proyecto a `"strict": true`, los errores más comunes:
|
|
340
|
+
|
|
341
|
+
| Error | Flag específico | Solución rápida |
|
|
342
|
+
|-------|----------------|-----------------|
|
|
343
|
+
| `TS7006: Parameter implicitly has 'any'` | `noImplicitAny` | Agregar tipo al parámetro |
|
|
344
|
+
| `TS2532: Object is possibly 'undefined'` | `strictNullChecks` | Optional chaining `?.` o guarda `if` |
|
|
345
|
+
| `TS2564: Property has no initializer` | `strictPropertyInitialization` | Inicializar o marcar con `!` (non-null assertion) |
|
|
346
|
+
| `TS7053: Element implicitly has 'any'` | `noImplicitAny` | Usar `Record<string, T>` o index signature |
|
|
347
|
+
|
|
348
|
+
**Estrategia de migración incremental**: activar flags uno a uno en vez de `strict: true`
|
|
349
|
+
de golpe. Empezar con `noImplicitAny`, luego `strictNullChecks`, luego el resto.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Gotchas / Errores comunes no obvios
|
|
354
|
+
|
|
355
|
+
- **`tsc --noEmit` pasa localmente pero CI falla con TS2307 en el mismo archivo**: la versión de TypeScript en node_modules local difiere de la versión en CI. Causa: `typescript` está en `devDependencies` con rango `^5.0.0` y npm resolvió versiones distintas en los dos entornos. Solución: fijar la versión exacta en devDependencies (`"typescript": "5.3.3"` sin `^`) o usar `npm ci` con lockfile en CI.
|
|
356
|
+
- **Path alias `@app/*` resuelve en `tsc` pero falla en Jest con `Cannot find module '@app/...'`**: `tsc` maneja los aliases del tsconfig pero el runner de Jest no los conoce por defecto. Causa: Jest no lee `tsconfig.json` para resolución de módulos; necesita `moduleNameMapper` equivalente en `jest.config.ts`. Solución: agregar `moduleNameMapper: {"^@app/(.*)$": "<rootDir>/src/app/$1"}` al jest config, idéntico al paths del tsconfig.
|
|
357
|
+
- **`skipLibCheck: true` oculta errores que rompen el build en el servidor de CI del cliente**: el desarrollador activó `skipLibCheck` para silenciar errores de `@types/*` conflictivos sin resolver el conflicto real. Causa: múltiples versiones del mismo `@types/` paquete en el árbol de dependencias. Solución: usar `npm ls @types/react` para detectar duplicados y resolver con `overrides` en package.json — `skipLibCheck` debe ser temporal, no permanente.
|
|
358
|
+
- **`TS1259: Module can only be default-imported using 'esModuleInterop'`**: importar un módulo CommonJS con `import X from 'x'` cuando `esModuleInterop: false`. Causa: ausencia de `"esModuleInterop": true` en tsconfig. El gotcha es que activarlo solo resuelve el error de tsc pero no garantiza que el bundler produzca el import correcto. Solución: activar `esModuleInterop: true` junto con `allowSyntheticDefaultImports: true` y verificar que el bundler también tiene su equivalente configurado.
|
|
359
|
+
|
|
360
|
+
## Checklist de diagnóstico
|
|
361
|
+
|
|
362
|
+
- [ ] `npx tsc --version` — ¿versión compatible con las opciones de tsconfig?
|
|
363
|
+
- [ ] `npx tsc --noEmit` — ¿type-check pasa sin emitir?
|
|
364
|
+
- [ ] ¿`moduleResolution` es `bundler` (Vite/esbuild) o `node16` (Node.js)?
|
|
365
|
+
- [ ] ¿Los `@types/*` están instalados para paquetes sin tipos propios?
|
|
366
|
+
- [ ] ¿Path aliases configurados en tsconfig Y en el bundler/runner?
|
|
367
|
+
- [ ] ¿El proyecto es ESM (`"type": "module"`) o CJS? ¿Consistente con tsconfig?
|
|
368
|
+
- [ ] `npm ls --all | grep "deduped"` — ¿conflictos de versiones de tipos?
|
|
369
|
+
- [ ] Para errores de strict: ¿el flag específico que causa el error está identificado?
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: checklist-calidad
|
|
3
|
+
description: Evaluación de calidad del trabajo entregado con 7 métricas ponderadas — bugs encontrados, cobertura de tests, conformidad con spec, alucinaciones de código, DRY, seguridad SIGAF y arquitectura. Score ponderado mínimo de 9.0 sobre 10 para aprobar. Produce un reporte con score y plan de mejora.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
herramientasPermitidas: [Read, Grep]
|
|
6
|
+
evolvable: true # default para skill estandar
|
|
7
|
+
exclusiones:
|
|
8
|
+
- "No cargar para revisión de seguridad en profundidad (OWASP, CVEs, vulnerabilidades) — para seguridad cargar `checklist-seguridad`."
|
|
9
|
+
- "No cargar para auditoría de dependencias (licencias, CVEs en paquetes) — para dependencias cargar `dependencias-auditoria`."
|
|
10
|
+
- "No cargar para revisión de código por lenguaje específico (Python, TypeScript, SQL) — para revisión por stack cargar el skill del lenguaje correspondiente."
|
|
11
|
+
- "No cargar durante la implementación — se activa AL TERMINAR una fase, no durante el desarrollo."
|
|
12
|
+
---
|
|
13
|
+
# Habilidad: Checklist de Calidad del Trabajo
|
|
14
|
+
|
|
15
|
+
## Cuándo NO cargar
|
|
16
|
+
|
|
17
|
+
- La revisión es de seguridad (OWASP, inyección, auth): cargar `checklist-seguridad`.
|
|
18
|
+
- La auditoría es de dependencias (CVEs en paquetes, licencias): cargar `dependencias-auditoria`.
|
|
19
|
+
- La revisión es de código fuente por stack específico: cargar el skill del lenguaje (`patrones-python`, `angular-moderno`, etc.).
|
|
20
|
+
- Se está en medio de la implementación: este skill se activa al terminar una fase, no durante el desarrollo.
|
|
21
|
+
|
|
22
|
+
## Propósito
|
|
23
|
+
|
|
24
|
+
La calidad no es subjetiva — es medible. Esta habilidad aplica 7 métricas
|
|
25
|
+
concretas al trabajo entregado y produce un score numérico. Un score menor
|
|
26
|
+
a 9.0 bloquea el avance a producción y requiere un plan de mejora explícito.
|
|
27
|
+
|
|
28
|
+
## Cuándo activar
|
|
29
|
+
|
|
30
|
+
- Al terminar una fase antes de marcar como "completada"
|
|
31
|
+
- Como parte del proceso de revisión de PRs críticos
|
|
32
|
+
- Cuando el usuario pide evaluación de calidad del trabajo
|
|
33
|
+
- Después de correcciones del verificador para re-evaluar
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Métrica 1 — Bugs Encontrados (peso: 25%)
|
|
38
|
+
|
|
39
|
+
**Definición**: Número de defectos funcionales encontrados durante la verificación.
|
|
40
|
+
|
|
41
|
+
**Cómo medir**:
|
|
42
|
+
1. Ejecutar todos los tests: `pytest -v` / `npm test`
|
|
43
|
+
2. Ejecutar el tipo-checker: `mypy .` / `tsc --noEmit`
|
|
44
|
+
3. Ejecutar el linter: `ruff check .` / `eslint .`
|
|
45
|
+
4. Revisión manual de flujos críticos (happy path + edge cases)
|
|
46
|
+
|
|
47
|
+
**Escala de puntuación**:
|
|
48
|
+
| Bugs encontrados | Puntuación |
|
|
49
|
+
|-----------------|-----------|
|
|
50
|
+
| 0 bugs | 10.0 |
|
|
51
|
+
| 1-2 bugs menores | 8.5 |
|
|
52
|
+
| 3-5 bugs menores | 7.0 |
|
|
53
|
+
| 1 bug mayor | 5.0 |
|
|
54
|
+
| 2+ bugs mayores | 0.0 |
|
|
55
|
+
|
|
56
|
+
**Bug menor**: no bloquea flujo principal, workaround disponible.
|
|
57
|
+
**Bug mayor**: bloquea flujo principal o corrompe datos.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Métrica 2 — Cobertura de Tests (peso: 20%)
|
|
62
|
+
|
|
63
|
+
**Definición**: Porcentaje de líneas/branches cubiertos por tests automáticos.
|
|
64
|
+
|
|
65
|
+
**Cómo medir**:
|
|
66
|
+
```bash
|
|
67
|
+
# Python
|
|
68
|
+
pytest --cov=. --cov-report=term-missing --cov-report=html
|
|
69
|
+
|
|
70
|
+
# TypeScript/Angular
|
|
71
|
+
npx jest --coverage
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Escala de puntuación**:
|
|
75
|
+
| Cobertura | Puntuación |
|
|
76
|
+
|-----------|-----------|
|
|
77
|
+
| ≥90% | 10.0 |
|
|
78
|
+
| 80-89% | 8.5 |
|
|
79
|
+
| 70-79% | 7.0 |
|
|
80
|
+
| 60-69% | 5.0 |
|
|
81
|
+
| <60% | 3.0 |
|
|
82
|
+
| Sin tests | 0.0 |
|
|
83
|
+
|
|
84
|
+
**Nota**: La cobertura de líneas es necesaria pero no suficiente. Verificar
|
|
85
|
+
también que los tests tienen assertions reales (ver habilidad `verificar-trabajo`
|
|
86
|
+
nivel SUSTANTIVO para tests).
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Métrica 3 — Conformidad con Spec (peso: 20%)
|
|
91
|
+
|
|
92
|
+
**Definición**: Porcentaje de requerimientos del PLAN.md / CONTEXT.md implementados
|
|
93
|
+
correctamente.
|
|
94
|
+
|
|
95
|
+
**Cómo medir**:
|
|
96
|
+
1. Listar todos los criterios de aceptación del CONTEXT.md
|
|
97
|
+
2. Para cada uno, verificar si está implementado (PASS/FAIL)
|
|
98
|
+
3. Score = (criterios PASS / total criterios) * 10
|
|
99
|
+
|
|
100
|
+
**Puntos de penalización adicional**:
|
|
101
|
+
- -1.0: Feature implementada de forma diferente a la spec sin notificación
|
|
102
|
+
- -0.5: Feature parcialmente implementada sin documentar qué falta
|
|
103
|
+
- -1.5: Feature de seguridad omitida (RBAC, validación, etc.)
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Métrica 4 — Alucinaciones de Código (peso: 15%)
|
|
108
|
+
|
|
109
|
+
**Definición**: Código que parece correcto pero introduce lógica incorrecta,
|
|
110
|
+
usa APIs inexistentes o hace suposiciones falsas sobre el sistema.
|
|
111
|
+
|
|
112
|
+
**Señales a buscar**:
|
|
113
|
+
- [ ] Imports de módulos que no existen en el proyecto
|
|
114
|
+
- [ ] Llamadas a métodos con firmas incorrectas
|
|
115
|
+
- [ ] Variables de entorno asumidas que no están en `.env.example`
|
|
116
|
+
- [ ] Endpoints referenciados que no existen en el router
|
|
117
|
+
- [ ] Lógica de negocio que contradice los requerimientos documentados
|
|
118
|
+
- [ ] Valores hardcodeados que deberían venir de configuración
|
|
119
|
+
- [ ] Schemas Pydantic con campos que no existen en el modelo ORM
|
|
120
|
+
|
|
121
|
+
**Cómo detectar**:
|
|
122
|
+
```bash
|
|
123
|
+
# Importaciones que no resuelven
|
|
124
|
+
mypy . 2>&1 | grep "Cannot find\|Module.*has no attribute"
|
|
125
|
+
|
|
126
|
+
# Variables de entorno sin documentar
|
|
127
|
+
grep -rn "os\.getenv\|os\.environ" --include="*.py" | \
|
|
128
|
+
awk '{print $2}' | sort | uniq > env_usados.txt
|
|
129
|
+
grep -rn "^[A-Z_]*=" .env.example | awk -F= '{print $1}' | sort > env_documentados.txt
|
|
130
|
+
diff env_usados.txt env_documentados.txt
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Escala de puntuación**:
|
|
134
|
+
| Alucinaciones | Puntuación |
|
|
135
|
+
|--------------|-----------|
|
|
136
|
+
| 0 | 10.0 |
|
|
137
|
+
| 1-2 menores (import inexistente, typo) | 7.0 |
|
|
138
|
+
| 1 mayor (lógica incorrecta) | 4.0 |
|
|
139
|
+
| 2+ mayores | 0.0 |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Métrica 5 — Principio DRY (peso: 10%)
|
|
144
|
+
|
|
145
|
+
**Definición**: No repetición innecesaria de lógica o código.
|
|
146
|
+
|
|
147
|
+
**Cómo medir** — buscar duplicación:
|
|
148
|
+
```bash
|
|
149
|
+
# Funciones similares (Python)
|
|
150
|
+
# Herramienta: pylint, sonarqube o revisión manual
|
|
151
|
+
grep -rn "def " --include="*.py" | awk -F: '{print $3}' | sort | uniq -d | head -20
|
|
152
|
+
|
|
153
|
+
# Bloques de código > 10 líneas idénticos
|
|
154
|
+
# Revisión manual de services y utils
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Items a verificar**:
|
|
158
|
+
- [ ] Sin funciones duplicadas entre módulos
|
|
159
|
+
- [ ] Sin queries SQL duplicadas que deberían ser un helper
|
|
160
|
+
- [ ] Sin lógica de validación repetida que debería estar en un validator
|
|
161
|
+
- [ ] Sin constantes definidas en múltiples lugares
|
|
162
|
+
- [ ] Sin componentes Angular que hacen lo mismo con diferente nombre
|
|
163
|
+
|
|
164
|
+
**Escala**:
|
|
165
|
+
| DRY violations | Puntuación |
|
|
166
|
+
|---------------|-----------|
|
|
167
|
+
| 0 | 10.0 |
|
|
168
|
+
| 1-2 menores | 8.0 |
|
|
169
|
+
| 3-5 | 6.0 |
|
|
170
|
+
| 5+ o duplicación de lógica crítica | 3.0 |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Métrica 6 — Seguridad SIGAF (peso: 5%)
|
|
175
|
+
|
|
176
|
+
**Definición**: Cumplimiento de las reglas anti-error SIGAF documentadas en el
|
|
177
|
+
sistema. Esta métrica es binaria por categoría.
|
|
178
|
+
|
|
179
|
+
**Checklist SIGAF**:
|
|
180
|
+
- [ ] selectinload en todas las relaciones accedidas en serialización
|
|
181
|
+
- [ ] lazy="selectin" en relaciones a Usuario
|
|
182
|
+
- [ ] Services no hacen db.commit()
|
|
183
|
+
- [ ] Literal[] en campos enum en schemas Pydantic
|
|
184
|
+
- [ ] RBAC en todos los POST/PUT/DELETE
|
|
185
|
+
- [ ] get_current_user explícito en todos los endpoints
|
|
186
|
+
- [ ] Filtros de datos del JWT, no de query params
|
|
187
|
+
- [ ] @if/@for en Angular (no *ngIf/*ngFor)
|
|
188
|
+
- [ ] computed() para derivaciones en templates
|
|
189
|
+
|
|
190
|
+
**Escala**:
|
|
191
|
+
| Items fallidos | Puntuación |
|
|
192
|
+
|---------------|-----------|
|
|
193
|
+
| 0 | 10.0 |
|
|
194
|
+
| 1 | 7.0 |
|
|
195
|
+
| 2 | 4.0 |
|
|
196
|
+
| 3+ | 0.0 |
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Métrica 7 — Arquitectura (peso: 5%)
|
|
201
|
+
|
|
202
|
+
**Definición**: El código nuevo respeta las capas y convenciones del proyecto.
|
|
203
|
+
|
|
204
|
+
**Items a verificar**:
|
|
205
|
+
- [ ] Services no importan directamente modelos de otros dominios (bypassing capas)
|
|
206
|
+
- [ ] Endpoints no tienen lógica de negocio incrustada (lógica en services)
|
|
207
|
+
- [ ] Componentes Angular no hacen llamadas HTTP directamente (usan services)
|
|
208
|
+
- [ ] Modelos ORM no tienen lógica de negocio compleja (en services)
|
|
209
|
+
- [ ] No se introdujeron nuevas dependencias sin justificación documentada
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Gotchas / Errores comunes no obvios
|
|
214
|
+
|
|
215
|
+
**La Métrica 2 (cobertura) pasa al 85% pero todos los tests son de happy path**: la cobertura de líneas no detecta que los tests omiten los casos de error, los inputs nulos y los edge cases. Causa: es más fácil alcanzar 80% cubriendo el flujo principal que cubriendo los branches de validación. Fix: complementar el porcentaje de cobertura con revisión manual de qué branches están sin cubrir — `pytest --cov-branch` reporta cobertura de branches, no solo de líneas. Un 80% de branch coverage es más significativo que un 90% de line coverage.
|
|
216
|
+
|
|
217
|
+
**La Métrica 4 (alucinaciones) pasa porque `mypy` no detecta errores, pero hay lógica incorrecta**: `mypy` verifica tipos, no semántica de negocio. Un endpoint que siempre devuelve `200 OK` aunque la operación falle, o una función que suma precios en lugar de multiplicar, pasa todos los type checks. Causa: las alucinaciones semánticas son invisibles para el análisis estático. Fix: la Métrica 4 requiere revisión manual del flujo de negocio crítico, no solo ejecutar herramientas automáticas. Verificar que la lógica implementada coincide con los criterios de aceptación del PLAN.md.
|
|
218
|
+
|
|
219
|
+
**El score final es 9.2 pero hay un item de seguridad SIGAF fallido con "penalización mínima"**: la Métrica 6 tiene peso solo del 5%, por lo que un RBAC faltante baja el score de 10 a 9.5 — por encima del umbral de 9.0. Causa: el sistema de pesos numéricos permite que un defecto de seguridad crítico quede diluido por buenas métricas en otras categorías. Fix: los ítems de la Métrica 6 son veto independiente del score: si algún ítem de RBAC, selectinload o get_current_user falla, el veredicto es RECHAZADO independientemente del score ponderado.
|
|
220
|
+
|
|
221
|
+
**La Métrica 3 (conformidad con spec) puntúa 10/10 porque el implementador revisó su propia spec**: el agente que implementó el código también evalúa si cumple los criterios que él mismo escribió. Causa: la Métrica 3 requiere contrastar el código contra criterios externos, no autoevaluación. Fix: la conformidad con spec debe verificarse contra el PLAN.md aprobado, no contra la memoria del implementador. Leer el PLAN.md antes de puntuar la Métrica 3 y citar el número de criterio de aceptación que cada ítem satisface.
|
|
222
|
+
|
|
223
|
+
## Cálculo del score final
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
Score = (M1 * 0.25) + (M2 * 0.20) + (M3 * 0.20) + (M4 * 0.15)
|
|
227
|
+
+ (M5 * 0.10) + (M6 * 0.05) + (M7 * 0.05)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
| Score | Veredicto |
|
|
231
|
+
|-------|-----------|
|
|
232
|
+
| 9.0 - 10.0 | APROBADO |
|
|
233
|
+
| 7.0 - 8.9 | APROBADO CON OBSERVACIONES (debe mejorarse antes de siguiente fase) |
|
|
234
|
+
| 5.0 - 6.9 | RECHAZADO — requiere trabajo de corrección |
|
|
235
|
+
| < 5.0 | RECHAZADO CRÍTICO — requiere reescritura parcial |
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Plantilla de reporte: `QUALITY-REPORT.md`
|
|
240
|
+
|
|
241
|
+
```markdown
|
|
242
|
+
# QUALITY-REPORT.md — Fase [N]
|
|
243
|
+
**Fecha**: [fecha] **Evaluador**: [agente/persona]
|
|
244
|
+
|
|
245
|
+
## Score Final: [X.X / 10.0] — [VEREDICTO]
|
|
246
|
+
|
|
247
|
+
## Desglose de métricas
|
|
248
|
+
| # | Métrica | Peso | Puntuación | Score ponderado |
|
|
249
|
+
|---|---------|------|-----------|----------------|
|
|
250
|
+
| 1 | Bugs encontrados | 25% | [X]/10 | [X*0.25] |
|
|
251
|
+
| 2 | Cobertura de tests | 20% | [X]/10 | [X*0.20] |
|
|
252
|
+
| 3 | Conformidad con spec | 20% | [X]/10 | [X*0.20] |
|
|
253
|
+
| 4 | Alucinaciones | 15% | [X]/10 | [X*0.15] |
|
|
254
|
+
| 5 | DRY | 10% | [X]/10 | [X*0.10] |
|
|
255
|
+
| 6 | Seguridad SIGAF | 5% | [X]/10 | [X*0.05] |
|
|
256
|
+
| 7 | Arquitectura | 5% | [X]/10 | [X*0.05] |
|
|
257
|
+
| **TOTAL** | | **100%** | | **[SCORE]** |
|
|
258
|
+
|
|
259
|
+
## Hallazgos por métrica
|
|
260
|
+
[Para cada métrica con puntuación < 9.0, listar los hallazgos específicos]
|
|
261
|
+
|
|
262
|
+
## Plan de mejora (si score < 9.0)
|
|
263
|
+
| Acción | Impacto en score | Tiempo estimado | Prioridad |
|
|
264
|
+
|--------|----------------|----------------|----------|
|
|
265
|
+
| | | | |
|
|
266
|
+
|
|
267
|
+
## Decisión
|
|
268
|
+
[ ] Aprobar para siguiente fase
|
|
269
|
+
[ ] Aprobar con compromisos de mejora
|
|
270
|
+
[ ] Rechazar — requiere iteración
|
|
271
|
+
```
|