@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,233 @@
|
|
|
1
|
+
# STACK: Evaluación Tecnológica — [Nombre del Proyecto]
|
|
2
|
+
|
|
3
|
+
> Investigación del stack tecnológico con análisis de alternativas.
|
|
4
|
+
> Esta evaluación sustenta las decisiones en PROYECTO.md y los ADRs correspondientes.
|
|
5
|
+
> Autor: [nombre] | Fecha: YYYY-MM-DD
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Criterios de evaluación
|
|
10
|
+
|
|
11
|
+
Los criterios con los que se evalúa cada tecnología, ordenados por importancia:
|
|
12
|
+
|
|
13
|
+
1. **Madurez y estabilidad**: ¿Tiene historial de producción? ¿Comunidad activa?
|
|
14
|
+
2. **Conocimiento del equipo**: ¿El equipo lo conoce o hay curva de aprendizaje?
|
|
15
|
+
3. **Ajuste al problema**: ¿La tecnología resuelve bien el tipo de problema del proyecto?
|
|
16
|
+
4. **Mantenibilidad**: ¿Será mantenible en 3 años? ¿Hay actualizaciones frecuentes?
|
|
17
|
+
5. **Performance**: ¿Cumple los requisitos no funcionales definidos?
|
|
18
|
+
6. **Ecosistema**: ¿Tiene las librerías/plugins necesarios disponibles?
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Lenguaje de backend
|
|
23
|
+
|
|
24
|
+
### Opción A: [ej. Python 3.12]
|
|
25
|
+
|
|
26
|
+
**Pros**:
|
|
27
|
+
- [Pro específico al proyecto, no genérico]
|
|
28
|
+
- [Pro]
|
|
29
|
+
- [Pro]
|
|
30
|
+
|
|
31
|
+
**Contras**:
|
|
32
|
+
- [Contra específico, con impacto estimado]
|
|
33
|
+
- [Contra]
|
|
34
|
+
|
|
35
|
+
**Veredicto**: [Seleccionado / Descartado]
|
|
36
|
+
**Razón del veredicto**: [Justificación concisa]
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### Opción B: [ej. Node.js 20 / TypeScript]
|
|
41
|
+
|
|
42
|
+
**Pros**:
|
|
43
|
+
-
|
|
44
|
+
-
|
|
45
|
+
|
|
46
|
+
**Contras**:
|
|
47
|
+
-
|
|
48
|
+
-
|
|
49
|
+
|
|
50
|
+
**Veredicto**: Descartado
|
|
51
|
+
**Razón**: [Por qué se prefirió la opción A]
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
**DECISIÓN**: [Opción elegida] — ADR: `docs/adr/NNN-lenguaje-backend.md`
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Framework de backend
|
|
60
|
+
|
|
61
|
+
### Opción A: [ej. FastAPI 0.111]
|
|
62
|
+
|
|
63
|
+
**Pros**:
|
|
64
|
+
- Tipado nativo con Pydantic — validación automática de inputs
|
|
65
|
+
- OpenAPI/Swagger generado automáticamente
|
|
66
|
+
- Async nativo — ideal para I/O bound (BD, APIs externas)
|
|
67
|
+
- [Pro específico al proyecto]
|
|
68
|
+
|
|
69
|
+
**Contras**:
|
|
70
|
+
- [Contra — ej. ecosistema más pequeño que Django para admin/cms]
|
|
71
|
+
- [Contra]
|
|
72
|
+
|
|
73
|
+
**Veredicto**: Seleccionado
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### Opción B: [ej. Django + DRF]
|
|
78
|
+
|
|
79
|
+
**Pros**:
|
|
80
|
+
- ORM maduro con migraciones robustas
|
|
81
|
+
- Admin integrado listo para usar
|
|
82
|
+
|
|
83
|
+
**Contras**:
|
|
84
|
+
- Async más complejo de implementar correctamente
|
|
85
|
+
- Más overhead para API-only (sin templates)
|
|
86
|
+
|
|
87
|
+
**Veredicto**: Descartado
|
|
88
|
+
**Razón**: [Justificación]
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
**DECISIÓN**: [Opción elegida] — ADR: `docs/adr/NNN-framework-backend.md`
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Base de datos
|
|
97
|
+
|
|
98
|
+
### Opción A: [ej. PostgreSQL 16]
|
|
99
|
+
|
|
100
|
+
**Pros**:
|
|
101
|
+
- ACID completo
|
|
102
|
+
- JSONB para datos semi-estructurados
|
|
103
|
+
- Full-text search nativo
|
|
104
|
+
- [Pro]
|
|
105
|
+
|
|
106
|
+
**Contras**:
|
|
107
|
+
- [Contra]
|
|
108
|
+
|
|
109
|
+
**Veredicto**: Seleccionado
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### Opción B: [ej. MySQL 8]
|
|
114
|
+
|
|
115
|
+
**Pros**:
|
|
116
|
+
-
|
|
117
|
+
|
|
118
|
+
**Contras**:
|
|
119
|
+
-
|
|
120
|
+
|
|
121
|
+
**Veredicto**: Descartado
|
|
122
|
+
**Razón**:
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### Opción C: [ej. MongoDB] (solo si aplica)
|
|
127
|
+
|
|
128
|
+
**Pros**:
|
|
129
|
+
-
|
|
130
|
+
|
|
131
|
+
**Contras**:
|
|
132
|
+
-
|
|
133
|
+
|
|
134
|
+
**Veredicto**: Descartado
|
|
135
|
+
**Razón**:
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
**DECISIÓN**: [Opción elegida] — ADR: `docs/adr/NNN-base-de-datos.md`
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Framework de frontend
|
|
144
|
+
|
|
145
|
+
### Opción A: [ej. Angular 18]
|
|
146
|
+
|
|
147
|
+
**Pros**:
|
|
148
|
+
- Framework completo con DI, router, forms, HttpClient
|
|
149
|
+
- TypeScript first — tipado end-to-end
|
|
150
|
+
- Signals para estado reactivo sin RxJS complejo
|
|
151
|
+
- [Pro]
|
|
152
|
+
|
|
153
|
+
**Contras**:
|
|
154
|
+
- [Contra — ej. bundle inicial más pesado que React]
|
|
155
|
+
- [Contra]
|
|
156
|
+
|
|
157
|
+
**Veredicto**: Seleccionado
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### Opción B: [ej. React + Next.js]
|
|
162
|
+
|
|
163
|
+
**Pros**:
|
|
164
|
+
-
|
|
165
|
+
|
|
166
|
+
**Contras**:
|
|
167
|
+
-
|
|
168
|
+
|
|
169
|
+
**Veredicto**: Descartado
|
|
170
|
+
**Razón**:
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
**DECISIÓN**: [Opción elegida] — ADR: `docs/adr/NNN-framework-frontend.md`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Infraestructura y deployment
|
|
179
|
+
|
|
180
|
+
### Opción A: [ej. Docker + Kubernetes en GCP]
|
|
181
|
+
|
|
182
|
+
**Pros**:
|
|
183
|
+
-
|
|
184
|
+
-
|
|
185
|
+
|
|
186
|
+
**Contras**:
|
|
187
|
+
-
|
|
188
|
+
-
|
|
189
|
+
|
|
190
|
+
**Veredicto**: Seleccionado
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### Opción B: [ej. VMs en Azure con Ansible]
|
|
195
|
+
|
|
196
|
+
**Pros**:
|
|
197
|
+
-
|
|
198
|
+
|
|
199
|
+
**Contras**:
|
|
200
|
+
-
|
|
201
|
+
|
|
202
|
+
**Veredicto**: Descartado
|
|
203
|
+
**Razón**:
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
**DECISIÓN**: [Opción elegida] — ADR: `docs/adr/NNN-infraestructura.md`
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Herramientas complementarias
|
|
212
|
+
|
|
213
|
+
| Herramienta | Propósito | Alternativa considerada | Razón de elección |
|
|
214
|
+
|-------------|-----------|------------------------|-------------------|
|
|
215
|
+
| [ej. Redis] | Cache + sesiones | [Memcached] | [TTL con estructuras de datos complejas] |
|
|
216
|
+
| [ej. Celery] | Tareas async | [RQ, ARQ] | [Madurez, integración con Django/FastAPI] |
|
|
217
|
+
| [ej. Alembic] | Migraciones BD | [Django migrations] | [Necesario con FastAPI] |
|
|
218
|
+
| [ej. Pytest] | Testing Python | [unittest] | [Fixtures, plugins, ecosistema] |
|
|
219
|
+
| [ej. Sentry] | Error tracking | [Datadog, Rollbar] | [Plan gratuito suficiente, integración fácil] |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Resumen de decisiones
|
|
224
|
+
|
|
225
|
+
| Capa | Decisión | Confianza | ADR |
|
|
226
|
+
|------|----------|-----------|-----|
|
|
227
|
+
| Lenguaje backend | [tecnología] | Alta/Media/Baja | ADR-NNN |
|
|
228
|
+
| Framework backend | [tecnología] | | ADR-NNN |
|
|
229
|
+
| Base de datos | [tecnología] | | ADR-NNN |
|
|
230
|
+
| Frontend | [tecnología] | | ADR-NNN |
|
|
231
|
+
| Infraestructura | [tecnología] | | ADR-NNN |
|
|
232
|
+
|
|
233
|
+
**Confianza global en el stack**: [Alta/Media] — [justificación de una línea]
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# PITFALLS: Trampas y Anti-patrones — [Nombre del Proyecto]
|
|
2
|
+
|
|
3
|
+
> Catálogo de errores comunes, anti-patrones del stack elegido y lecciones
|
|
4
|
+
> aprendidas de proyectos anteriores. Leer ANTES de escribir código.
|
|
5
|
+
> El objetivo es no repetir errores conocidos.
|
|
6
|
+
> Autor: [nombre] | Fecha: YYYY-MM-DD
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Cómo usar este documento
|
|
11
|
+
|
|
12
|
+
Antes de implementar cualquier feature, revisar si alguna trampa aplica
|
|
13
|
+
a lo que se va a construir. Si se descubre una trampa nueva durante el desarrollo:
|
|
14
|
+
documentarla aquí para que el siguiente desarrollador (o el agente) no caiga.
|
|
15
|
+
|
|
16
|
+
Severidad:
|
|
17
|
+
- CRÍTICO: Causa bugs silenciosos, pérdida de datos o vulnerabilidades de seguridad
|
|
18
|
+
- ALTO: Causa errores en producción o degradación de performance
|
|
19
|
+
- MEDIO: Causa deuda técnica o dificulta el mantenimiento
|
|
20
|
+
- BAJO: Mejora de calidad o legibilidad
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Trampas de SQLAlchemy + Async
|
|
25
|
+
|
|
26
|
+
### [CRÍTICO] MissingGreenlet: acceder a relaciones sin eager loading
|
|
27
|
+
|
|
28
|
+
**Trampa**:
|
|
29
|
+
```python
|
|
30
|
+
# MALO — lanza MissingGreenlet en async
|
|
31
|
+
facturas = await db.execute(select(Factura))
|
|
32
|
+
for factura in facturas.scalars():
|
|
33
|
+
print(factura.cliente.nombre) # acceso lazy en contexto async = error
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Solución**:
|
|
37
|
+
```python
|
|
38
|
+
# BIEN — eager loading explícito
|
|
39
|
+
stmt = select(Factura).options(selectinload(Factura.cliente))
|
|
40
|
+
facturas = await db.execute(stmt)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Regla**: Todo atributo de relación accedido fuera del contexto de la query
|
|
44
|
+
necesita `selectinload()` o `lazy="selectin"` en el modelo.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### [ALTO] N+1 queries en endpoints de listado
|
|
49
|
+
|
|
50
|
+
**Trampa**: Un endpoint que devuelve 100 facturas con sus clientes genera
|
|
51
|
+
101 queries: 1 para las facturas + 1 por cada cliente.
|
|
52
|
+
|
|
53
|
+
**Cómo detectarlo**: Activar logging SQL y contar queries:
|
|
54
|
+
```python
|
|
55
|
+
# En desarrollo, en alembic.ini o en la config de SQLAlchemy:
|
|
56
|
+
echo=True
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Solución**: `selectinload()` para todas las relaciones que se serializan.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### [CRÍTICO] db.commit() en services (no en endpoints)
|
|
64
|
+
|
|
65
|
+
**Trampa**: El service hace `db.commit()` internamente. Si el endpoint necesita
|
|
66
|
+
hacer dos operaciones en la misma transacción, la primera se commitea antes
|
|
67
|
+
de que la segunda complete, dejando datos inconsistentes.
|
|
68
|
+
|
|
69
|
+
**Regla**: Los services solo hacen `db.add()`, `db.flush()`, `db.refresh()`.
|
|
70
|
+
El `db.commit()` SIEMPRE en el endpoint, después de que todas las operaciones
|
|
71
|
+
del service completaron correctamente.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Trampas de FastAPI
|
|
76
|
+
|
|
77
|
+
### [ALTO] Rutas paramétricas antes de rutas estáticas
|
|
78
|
+
|
|
79
|
+
**Trampa**:
|
|
80
|
+
```python
|
|
81
|
+
router.get("/{factura_id}") # Esta ruta captura CUALQUIER string
|
|
82
|
+
router.get("/exportar") # NUNCA se alcanza — capturada por la anterior
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Solución**: Declarar rutas estáticas ANTES de las paramétricas:
|
|
86
|
+
```python
|
|
87
|
+
router.get("/exportar") # Primero las específicas
|
|
88
|
+
router.get("/{factura_id}") # Luego las paramétricas
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### [CRÍTICO] IDOR: filtrar datos solo por query params sin verificar ownership
|
|
94
|
+
|
|
95
|
+
**Trampa**:
|
|
96
|
+
```python
|
|
97
|
+
@router.get("/facturas")
|
|
98
|
+
async def listar_facturas(empresa_id: UUID, db: AsyncSession = Depends(get_db)):
|
|
99
|
+
# PELIGRO: cualquier usuario puede ver facturas de cualquier empresa
|
|
100
|
+
return await db.execute(select(Factura).where(Factura.empresa_id == empresa_id))
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Solución**: El filtro de ownership SIEMPRE viene del JWT, nunca del cliente:
|
|
104
|
+
```python
|
|
105
|
+
@router.get("/facturas")
|
|
106
|
+
async def listar_facturas(
|
|
107
|
+
db: AsyncSession = Depends(get_db),
|
|
108
|
+
usuario: Usuario = Depends(get_current_user) # del JWT
|
|
109
|
+
):
|
|
110
|
+
return await db.execute(
|
|
111
|
+
select(Factura).where(Factura.empresa_id == usuario.empresa_id)
|
|
112
|
+
)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### [MEDIO] GET endpoints que modifican estado
|
|
118
|
+
|
|
119
|
+
**Trampa**: Lógica de negocio que muta datos dentro de un handler GET.
|
|
120
|
+
Viola el principio HTTP de idempotencia. Puede ejecutarse múltiples veces
|
|
121
|
+
por bots, prefetch del navegador, etc.
|
|
122
|
+
|
|
123
|
+
**Regla**: GET endpoints son read-only. Cualquier mutación va en POST/PUT/PATCH.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Trampas de Pydantic v2
|
|
128
|
+
|
|
129
|
+
### [ALTO] Usar `str` sin restricciones para campos con dominio cerrado
|
|
130
|
+
|
|
131
|
+
**Trampa**:
|
|
132
|
+
```python
|
|
133
|
+
class FacturaCreate(BaseModel):
|
|
134
|
+
estatus: str # Acepta cualquier string — "activo", "ACTIVO", "Activo", "xyz"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Solución**: `Literal[]` o `Enum`:
|
|
138
|
+
```python
|
|
139
|
+
from typing import Literal
|
|
140
|
+
class FacturaCreate(BaseModel):
|
|
141
|
+
estatus: Literal["borrador", "timbrada", "cancelada"]
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Los valores DEBEN coincidir exactamente con el CheckConstraint en el modelo ORM.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### [ALTO] Optional[datetime] para columnas Time
|
|
149
|
+
|
|
150
|
+
**Trampa**:
|
|
151
|
+
```python
|
|
152
|
+
hora_inicio: Optional[datetime] # Incorrecto para columna Time de PostgreSQL
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Solución**:
|
|
156
|
+
```python
|
|
157
|
+
from datetime import time
|
|
158
|
+
hora_inicio: Optional[time]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Trampas de Angular
|
|
164
|
+
|
|
165
|
+
### [ALTO] No parsear PaginatedResponse — spinner infinito
|
|
166
|
+
|
|
167
|
+
**Trampa**: El service Angular devuelve el objeto completo del endpoint paginado.
|
|
168
|
+
El componente intenta hacer `.filter()` sobre el objeto en lugar del array.
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// MALO — getFacturas() devuelve Observable<PaginatedResponse<Factura>>
|
|
172
|
+
this.facturas = this.facturasService.getFacturas();
|
|
173
|
+
// El template hace @for (f of facturas) — pero facturas es un objeto, no array
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Solución**:
|
|
177
|
+
```typescript
|
|
178
|
+
// BIEN — el service extrae el array
|
|
179
|
+
getFacturas(): Observable<Factura[]> {
|
|
180
|
+
return this.http.get<PaginatedResponse<Factura>>('/api/facturas')
|
|
181
|
+
.pipe(map(resp => resp.items));
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### [MEDIO] Usar *ngIf / *ngFor en lugar de @if / @for
|
|
188
|
+
|
|
189
|
+
**Trampa**: Angular 17+ usa la nueva sintaxis de control flow. Mezclar sintaxis
|
|
190
|
+
genera inconsistencias y confusión.
|
|
191
|
+
|
|
192
|
+
**Regla**: SIEMPRE `@if`, `@for`, `@switch`. NUNCA `*ngIf`, `*ngFor`, `*ngSwitch`.
|
|
193
|
+
`@for` requiere `track`: `@for (item of items; track item.id)`.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### [ALTO] Funciones en templates que se evalúan en cada change detection cycle
|
|
198
|
+
|
|
199
|
+
**Trampa**:
|
|
200
|
+
```html
|
|
201
|
+
<!-- MALO: calcularTotal() se llama en CADA ciclo de change detection -->
|
|
202
|
+
<span>{{ calcularTotal(items) }}</span>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Solución**:
|
|
206
|
+
```typescript
|
|
207
|
+
// BIEN: computed() se recalcula solo cuando cambian sus dependencias
|
|
208
|
+
total = computed(() => this.items().reduce((s, i) => s + i.precio, 0));
|
|
209
|
+
```
|
|
210
|
+
```html
|
|
211
|
+
<span>{{ total() }}</span>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Trampas de PostgreSQL
|
|
217
|
+
|
|
218
|
+
### [CRÍTICO] NULL en cláusulas IN
|
|
219
|
+
|
|
220
|
+
**Trampa**:
|
|
221
|
+
```python
|
|
222
|
+
# MALO: column.in_([valor, None]) NO matchea filas donde column IS NULL
|
|
223
|
+
stmt.where(Factura.aprobador_id.in_([usuario_id, None]))
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Solución**:
|
|
227
|
+
```python
|
|
228
|
+
from sqlalchemy import or_
|
|
229
|
+
stmt.where(or_(
|
|
230
|
+
Factura.aprobador_id == usuario_id,
|
|
231
|
+
Factura.aprobador_id.is_(None)
|
|
232
|
+
))
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### [ALTO] Índices no usados por diferencia de tipos
|
|
238
|
+
|
|
239
|
+
**Trampa**: Un índice en columna `VARCHAR` no se usa si la query compara con
|
|
240
|
+
un valor `TEXT` o viceversa. PostgreSQL necesita hacer cast implícito.
|
|
241
|
+
|
|
242
|
+
**Solución**: Asegurarse de que el tipo del valor en la query coincida con el
|
|
243
|
+
tipo de la columna indexada. Verificar con `EXPLAIN ANALYZE`.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Trampas de seguridad
|
|
248
|
+
|
|
249
|
+
### [CRÍTICO] eval() o exec() con input del usuario
|
|
250
|
+
|
|
251
|
+
Ya documentado en `reglas/seguridad.md`. La trampa más común:
|
|
252
|
+
```python
|
|
253
|
+
# CRÍTICO — permite ejecución arbitraria de código
|
|
254
|
+
formula = request.json["formula"]
|
|
255
|
+
resultado = eval(formula) # XSS / RCE
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### [CRÍTICO] Logging de datos sensibles
|
|
259
|
+
|
|
260
|
+
**Trampa**:
|
|
261
|
+
```python
|
|
262
|
+
logger.info(f"Login exitoso para usuario {usuario.email}, token: {token}")
|
|
263
|
+
# El token aparece en los logs — cualquiera con acceso a logs puede impersonar
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**Regla**: NUNCA loggear tokens, passwords, números de tarjeta, CURP, RFC completo.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Trampas de testing
|
|
271
|
+
|
|
272
|
+
### [ALTO] Tests que dependen del orden de ejecución
|
|
273
|
+
|
|
274
|
+
**Trampa**: Un test modifica estado global (BD, archivo, variable de módulo)
|
|
275
|
+
y el siguiente test asume ese estado. Funciona en secuencia, falla en paralelo
|
|
276
|
+
o cuando pytest cambia el orden.
|
|
277
|
+
|
|
278
|
+
**Solución**: Cada test limpia su propio estado. Usar transacciones que se
|
|
279
|
+
revierten en el teardown o fixtures aislados.
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Trampas descubiertas durante el desarrollo de ESTE proyecto
|
|
284
|
+
|
|
285
|
+
[Sección vacía al inicio. Agregar aquí cualquier trampa específica que se
|
|
286
|
+
descubra durante el desarrollo de este proyecto que no esté cubierta arriba.]
|
|
287
|
+
|
|
288
|
+
### [SEVERIDAD] Título de la trampa descubierta
|
|
289
|
+
|
|
290
|
+
**Contexto**: Dónde y cuándo se encontró.
|
|
291
|
+
**Trampa**:
|
|
292
|
+
```
|
|
293
|
+
código que causó el problema
|
|
294
|
+
```
|
|
295
|
+
**Solución**:
|
|
296
|
+
```
|
|
297
|
+
código correcto
|
|
298
|
+
```
|
|
299
|
+
**Fecha**: YYYY-MM-DD | Descubierta por: [nombre]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../schemas/skill-evals.schema.json",
|
|
3
|
+
"skill_name": "NOMBRE-DEL-SKILL",
|
|
4
|
+
"artifact_type": "skill",
|
|
5
|
+
"schema_version": 1,
|
|
6
|
+
"description": "Evals para NOMBRE-DEL-SKILL — cubre casos normales, edge cases y anti-patrones.",
|
|
7
|
+
"evals": [
|
|
8
|
+
{
|
|
9
|
+
"id": 0,
|
|
10
|
+
"prompt": "Pregunta representativa del caso principal que esta skill resuelve. Debe ser autocontenida: el evaluador no debería necesitar contexto adicional más allá del skill cargado.",
|
|
11
|
+
"files": [],
|
|
12
|
+
"expected_output": "Descripción narrativa breve de cómo debería verse una respuesta correcta.",
|
|
13
|
+
"expectations": [
|
|
14
|
+
"La respuesta incluye la herramienta/comando canónico del skill (ej: usar `X` y no `Y`).",
|
|
15
|
+
"La respuesta menciona el flag/parámetro crítico que suele omitirse.",
|
|
16
|
+
"La respuesta explica la razón principal por la que se eligió esa ruta."
|
|
17
|
+
],
|
|
18
|
+
"grading_guidance": "Aceptar variantes de comando equivalentes. Rechazar sustituciones (ej: si la skill prescribe `validate`, rechazar `check` o `lint`). No requerir redirecciones específicas de plataforma.",
|
|
19
|
+
"tags": ["primary-flow"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": 1,
|
|
23
|
+
"prompt": "Caso de edge case — una configuración menos común o un input que suele confundir.",
|
|
24
|
+
"files": [],
|
|
25
|
+
"expectations": [
|
|
26
|
+
"La respuesta distingue entre los dos casos relevantes sin mezclarlos.",
|
|
27
|
+
"La respuesta cita el mecanismo específico que resuelve el edge case."
|
|
28
|
+
],
|
|
29
|
+
"tags": ["edge-case"]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "anti-pattern-substitution",
|
|
33
|
+
"prompt": "Prompt diseñado para inducir una sustitución común e incorrecta. El skill debe resistirla.",
|
|
34
|
+
"files": [],
|
|
35
|
+
"expectations": [
|
|
36
|
+
"La respuesta NO usa la herramienta/comando incorrecto [ESPECIFICAR].",
|
|
37
|
+
"La respuesta explica brevemente por qué esa sustitución no aplica."
|
|
38
|
+
],
|
|
39
|
+
"grading_guidance": "Failure si aparece el patrón prohibido, aunque el resto de la respuesta sea correcto.",
|
|
40
|
+
"tags": ["anti-pattern", "regression"],
|
|
41
|
+
"weight": 1.5
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|