@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,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-errors-cpp
|
|
3
|
+
description: >
|
|
4
|
+
Resolución de errores de compilación C++: g++/clang++, CMake, linker y
|
|
5
|
+
templates. Incluye errores de ODR, ABI compatibility, headers no encontrados
|
|
6
|
+
y mensajes de instanciación de templates.
|
|
7
|
+
Cargar cuando un build C++ falle o haya errores de compilación o linkeo.
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
herramientasPermitidas: [Read, Bash, Grep]
|
|
10
|
+
exclusiones:
|
|
11
|
+
- "No cargar para errores de runtime C++ (segfaults, memory leaks detectados en ejecución) — esos requieren herramientas como Valgrind, AddressSanitizer o GDB; no son errores de compilación."
|
|
12
|
+
- "No cargar para diseñar la arquitectura del sistema de build CMake desde cero — si la pregunta es cómo estructurar un proyecto C++ multi-módulo con CMake, eso es diseño de proyecto, no diagnóstico de error."
|
|
13
|
+
- "No cargar para errores de tests unitarios C++ (GoogleTest, Catch2 fallando) cuando el código ya compila — si `cmake --build` pasa pero los tests fallan en lógica, es un error de lógica, no de build."
|
|
14
|
+
- "No cargar para configurar cross-compilation desde cero — elegir el toolchain file de CMake para ARM/WASM es configuración de entorno, no diagnóstico de error de compilación."
|
|
15
|
+
evolvable: true # default para skill estandar
|
|
16
|
+
---
|
|
17
|
+
# Build Errors C++ — Diagnóstico y Solución
|
|
18
|
+
|
|
19
|
+
## Cuándo NO cargar
|
|
20
|
+
|
|
21
|
+
- El programa compila pero falla en ejecución (segfault, UB, leak) — esos son errores de runtime; usar Valgrind, ASAN o GDB.
|
|
22
|
+
- La pregunta es cómo estructurar un proyecto CMake con múltiples módulos — eso es diseño de proyecto, no diagnóstico.
|
|
23
|
+
- Los tests fallan en lógica (assertion failure) aunque el build pasa — no es un error de compilación.
|
|
24
|
+
|
|
25
|
+
## Cuándo cargar
|
|
26
|
+
|
|
27
|
+
- `g++`, `clang++` o `cmake --build` falla con errores del compilador
|
|
28
|
+
- Errores de linker (`undefined reference`, `multiple definition`)
|
|
29
|
+
- Mensajes de error de instanciación de templates (ilegibles por defecto)
|
|
30
|
+
- CMake no encuentra paquetes (`find_package` falla) o targets
|
|
31
|
+
- Errores de ODR (One Definition Rule) o incompatibilidad de ABI
|
|
32
|
+
- Headers no encontrados (`No such file or directory`)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Compilador — Errores Más Frecuentes
|
|
37
|
+
|
|
38
|
+
### `undefined reference to X` (linker, no compilador)
|
|
39
|
+
|
|
40
|
+
**Causa**: el símbolo existe en la declaración (header) pero no se linka la librería
|
|
41
|
+
que contiene la implementación.
|
|
42
|
+
|
|
43
|
+
```cmake
|
|
44
|
+
# MAL — compilar sin linkear la libreria
|
|
45
|
+
add_executable(mi_app main.cpp)
|
|
46
|
+
# Si main.cpp usa pthread, math.h, etc.: falta linkear
|
|
47
|
+
|
|
48
|
+
# BIEN — linkear las librerias necesarias
|
|
49
|
+
add_executable(mi_app main.cpp)
|
|
50
|
+
target_link_libraries(mi_app PRIVATE pthread m)
|
|
51
|
+
|
|
52
|
+
# Para librerias del sistema encontradas con find_package:
|
|
53
|
+
find_package(OpenSSL REQUIRED)
|
|
54
|
+
target_link_libraries(mi_app PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### `no matching function for call to X`
|
|
58
|
+
|
|
59
|
+
**Causa**: no existe ninguna sobrecarga de la función que coincida con los argumentos.
|
|
60
|
+
|
|
61
|
+
```cpp
|
|
62
|
+
// MAL
|
|
63
|
+
void procesar(int valor) { }
|
|
64
|
+
void procesar(std::string texto) { }
|
|
65
|
+
|
|
66
|
+
procesar(3.14); // error: double no convierte a int ni string sin conversión explícita
|
|
67
|
+
|
|
68
|
+
// BIEN — conversión explícita o nueva sobrecarga
|
|
69
|
+
procesar(static_cast<int>(3.14));
|
|
70
|
+
procesar(std::to_string(3.14));
|
|
71
|
+
|
|
72
|
+
// MAL — pasar const ref donde se espera referencia mutable
|
|
73
|
+
void modificar(std::vector<int>& v) { v.push_back(1); }
|
|
74
|
+
const std::vector<int> datos = {1, 2, 3};
|
|
75
|
+
modificar(datos); // error: no puede pasar const como non-const ref
|
|
76
|
+
|
|
77
|
+
// BIEN — revisar si la función debe ser const o los datos no deben serlo
|
|
78
|
+
void modificar(const std::vector<int>& v); // si no modifica
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `use of undeclared identifier X`
|
|
82
|
+
|
|
83
|
+
**Causa**: header no incluido, nombre en namespace no calificado, o error tipográfico.
|
|
84
|
+
|
|
85
|
+
```cpp
|
|
86
|
+
// MAL
|
|
87
|
+
int main() {
|
|
88
|
+
cout << "hola" << endl; // error: cout no declarado sin using o std::
|
|
89
|
+
vector<int> v; // error: vector no declarado
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// BIEN
|
|
93
|
+
#include <iostream>
|
|
94
|
+
#include <vector>
|
|
95
|
+
|
|
96
|
+
int main() {
|
|
97
|
+
std::cout << "hola" << std::endl;
|
|
98
|
+
std::vector<int> v;
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Templates — Descifrar Mensajes de Error
|
|
105
|
+
|
|
106
|
+
Los errores de templates son notorios por su verbosidad. Estrategia de lectura:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
Regla: leer el ULTIMO bloque del error, no el primero.
|
|
110
|
+
El primer bloque es la cadena de instanciacion.
|
|
111
|
+
El ultimo bloque es el error real.
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```cpp
|
|
115
|
+
// MAL — pasar tipo incorrecto a template con requisito implicito
|
|
116
|
+
template<typename T>
|
|
117
|
+
void ordenar(T& contenedor) {
|
|
118
|
+
std::sort(contenedor.begin(), contenedor.end());
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
std::list<int> lista = {3, 1, 2};
|
|
122
|
+
ordenar(lista); // error gigante: list no tiene random access iterators
|
|
123
|
+
|
|
124
|
+
// BIEN — agregar concepto/constraint en C++20
|
|
125
|
+
#include <concepts>
|
|
126
|
+
template<std::ranges::random_access_range T>
|
|
127
|
+
void ordenar(T& contenedor) {
|
|
128
|
+
std::sort(contenedor.begin(), contenedor.end());
|
|
129
|
+
}
|
|
130
|
+
// Ahora el error es claro: "std::list does not satisfy random_access_range"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Errores de implementación de templates en headers
|
|
134
|
+
|
|
135
|
+
```cpp
|
|
136
|
+
// MAL — implementación de template en .cpp (no se instancia en otros .cpp)
|
|
137
|
+
// mi_template.h
|
|
138
|
+
template<typename T>
|
|
139
|
+
class Contenedor {
|
|
140
|
+
T valor;
|
|
141
|
+
public:
|
|
142
|
+
T obtener();
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
// mi_template.cpp — PROBLEMA: nadie mas puede instanciar esto
|
|
146
|
+
template<typename T>
|
|
147
|
+
T Contenedor<T>::obtener() { return valor; }
|
|
148
|
+
|
|
149
|
+
// BIEN — implementación de templates SIEMPRE en el header o en .hpp incluido al final
|
|
150
|
+
// mi_template.h
|
|
151
|
+
template<typename T>
|
|
152
|
+
class Contenedor {
|
|
153
|
+
T valor;
|
|
154
|
+
public:
|
|
155
|
+
T obtener() { return valor; } // definicion en el header
|
|
156
|
+
};
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## CMake — Errores de Configuración
|
|
162
|
+
|
|
163
|
+
### `find_package(X REQUIRED) could not find X`
|
|
164
|
+
|
|
165
|
+
**Causa**: la librería no está instalada o CMake no sabe dónde buscarla.
|
|
166
|
+
|
|
167
|
+
```cmake
|
|
168
|
+
# Diagnostico: agregar HINTS o CMAKE_PREFIX_PATH
|
|
169
|
+
find_package(Boost REQUIRED COMPONENTS filesystem)
|
|
170
|
+
# Si falla, buscar con:
|
|
171
|
+
# cmake --find-package -DNAME=Boost -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST
|
|
172
|
+
|
|
173
|
+
# SOLUCION: indicar el prefijo de instalacion
|
|
174
|
+
cmake -DCMAKE_PREFIX_PATH=/usr/local/boost ..
|
|
175
|
+
|
|
176
|
+
# O en CMakeLists.txt para librerias no estandar:
|
|
177
|
+
list(APPEND CMAKE_PREFIX_PATH "/opt/custom_lib")
|
|
178
|
+
find_package(CustomLib REQUIRED)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### `target X not found`
|
|
182
|
+
|
|
183
|
+
**Causa**: `target_link_libraries` referencia un target que no existe con ese nombre exacto.
|
|
184
|
+
|
|
185
|
+
```cmake
|
|
186
|
+
# MAL — nombre de target incorrecto
|
|
187
|
+
find_package(OpenCV REQUIRED)
|
|
188
|
+
target_link_libraries(mi_app PRIVATE opencv) # no existe
|
|
189
|
+
target_link_libraries(mi_app PRIVATE OpenCV) # no existe
|
|
190
|
+
target_link_libraries(mi_app PRIVATE OpenCV_LIBS) # no existe
|
|
191
|
+
|
|
192
|
+
# BIEN — usar el target namespace correcto del paquete
|
|
193
|
+
target_link_libraries(mi_app PRIVATE ${OpenCV_LIBS})
|
|
194
|
+
# O con targets modernos de CMake:
|
|
195
|
+
target_link_libraries(mi_app PRIVATE opencv_core opencv_imgproc)
|
|
196
|
+
|
|
197
|
+
# Para ver los targets disponibles de un paquete:
|
|
198
|
+
# cmake --find-package -DNAME=OpenCV -DMODE=COMPILE -DLANGUAGE=CXX -DCOMPILER_ID=GNU
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Linker — Errores Avanzados
|
|
204
|
+
|
|
205
|
+
### `multiple definition of X`
|
|
206
|
+
|
|
207
|
+
**Causa**: ODR violation — un símbolo definido en un header incluido en múltiples .cpp.
|
|
208
|
+
|
|
209
|
+
```cpp
|
|
210
|
+
// MAL — definición (no solo declaración) en header incluido en múltiples TUs
|
|
211
|
+
// utils.h
|
|
212
|
+
int calcular(int x) { return x * 2; } // DEFINICION en header
|
|
213
|
+
|
|
214
|
+
// BIEN — opción 1: declarar en header, definir en .cpp
|
|
215
|
+
// utils.h
|
|
216
|
+
int calcular(int x); // solo declaración
|
|
217
|
+
|
|
218
|
+
// utils.cpp
|
|
219
|
+
int calcular(int x) { return x * 2; }
|
|
220
|
+
|
|
221
|
+
// BIEN — opción 2: inline para definiciones en headers
|
|
222
|
+
// utils.h
|
|
223
|
+
inline int calcular(int x) { return x * 2; }
|
|
224
|
+
|
|
225
|
+
// BIEN — opción 3: static para limitar a la TU (si es intencional)
|
|
226
|
+
// utils.h
|
|
227
|
+
static int calcular(int x) { return x * 2; }
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### ABI incompatibility — símbolos raros en errores de linker
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# Sintoma: undefined reference con nombres mangleados como:
|
|
234
|
+
# _ZN3Foo3barEv (C++ mangled name)
|
|
235
|
+
# vs
|
|
236
|
+
# _foo_bar (C mangled name)
|
|
237
|
+
|
|
238
|
+
# Causa: mezclar C y C++ sin extern "C"
|
|
239
|
+
# En el header de la libreria C:
|
|
240
|
+
#ifdef __cplusplus
|
|
241
|
+
extern "C" {
|
|
242
|
+
#endif
|
|
243
|
+
|
|
244
|
+
void funcion_c(int param);
|
|
245
|
+
|
|
246
|
+
#ifdef __cplusplus
|
|
247
|
+
}
|
|
248
|
+
#endif
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Gotchas / Errores comunes no obvios
|
|
254
|
+
|
|
255
|
+
- **El último bloque del error de template es lo relevante, pero los desarrolladores leen el primero**: con errores de instanciación de templates, g++ imprime una cadena de "required from" de decenas de líneas antes del error real. Causa: el error real está al final de la cadena de instanciación. Solución: ir directamente al último bloque del output del compilador — es el lugar exacto donde el constraint se viola, no las invocaciones intermedias.
|
|
256
|
+
- **`-fsanitize=address` no detecta la corrupción de memoria que rompe el build en CI**: el sanitizer detecta la corrupción en runtime pero el bug es un ODR que solo aparece al linkear múltiples TUs. Causa: `nm -C archivo.o | grep símbolo` en dos objetos muestra la misma función definida en ambos, causando `multiple definition`. Solución: compilar con `g++ -fsanitize=address` + `-fsanitize=undefined` en modo debug y buscar el símbolo duplicado con `nm`; la solución es `inline` o mover la implementación al .cpp.
|
|
257
|
+
- **`target_link_libraries(mi_app OpenCV)` falla pero el nombre del paquete es correcto**: CMake exporta targets con namespace (ej: `opencv_core`, no `OpenCV`). Causa: los paquetes modernos de CMake exportan targets como `PkgName::Component`, no el nombre del paquete en mayúsculas. Solución: después de `find_package(OpenCV REQUIRED)` ejecutar `cmake --find-package -DNAME=OpenCV -DMODE=COMPILE -DLANGUAGE=CXX -DCOMPILER_ID=GNU` para ver los targets reales exportados.
|
|
258
|
+
- **Headers en subdirectorio incluidos con path relativo compilan localmente pero fallan en CI**: el CI construye desde un directorio diferente y el path relativo en `#include "../../utils/helper.h"` apunta a otro lugar. Causa: paths relativos en `#include` dependen del directorio de trabajo y de la estructura de `include_directories`. Solución: usar `target_include_directories(mi_app PRIVATE ${CMAKE_SOURCE_DIR}/utils)` y en el .cpp incluir con `#include "helper.h"` sin paths relativos.
|
|
259
|
+
|
|
260
|
+
## Checklist de Diagnóstico
|
|
261
|
+
|
|
262
|
+
- [ ] Separar errores del compilador de errores del linker: compilador = fase de traducción, linker = fase de enlace.
|
|
263
|
+
- [ ] Para templates: leer el último bloque del error, ignorar la cadena de instanciación inicial.
|
|
264
|
+
- [ ] `g++ -v` o `clang++ -v` para ver flags exactos que se pasan al compilador.
|
|
265
|
+
- [ ] `nm -C archivo.o | grep simbolo` para verificar si un símbolo está en el objeto.
|
|
266
|
+
- [ ] `cmake --build . --verbose` para ver los comandos exactos de compilación.
|
|
267
|
+
- [ ] Usar `-fdiagnostics-color=always` para mensajes de error más legibles.
|
|
268
|
+
- [ ] Para ODR: compilar con `-fsanitize=address` y `-fno-inline` puede revelar violaciones.
|
|
269
|
+
- [ ] `c++filt _ZN3Foo3barEv` para demanglear símbolos de C++ en errores de linker.
|
|
270
|
+
- [ ] Verificar que todos los .cpp del proyecto están incluidos en `CMakeLists.txt`.
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-errors-csharp
|
|
3
|
+
description: >
|
|
4
|
+
Resolución de errores de compilación C#: dotnet build, MSBuild, NuGet y
|
|
5
|
+
Roslyn. Cubre errores CS comunes, conflictos de versiones NuGet, nullable
|
|
6
|
+
reference types y errores de publicación.
|
|
7
|
+
Cargar cuando un build .NET falle o haya errores de compilación C#.
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
herramientasPermitidas: [Read, Bash, Grep]
|
|
10
|
+
exclusiones:
|
|
11
|
+
- "No cargar para errores de ASP.NET Core en runtime (middleware, DI, startup) cuando el build compila — si `dotnet build` pasa pero `dotnet run` falla con excepciones de DI, es un error de configuración de la aplicación."
|
|
12
|
+
- "No cargar para fallos de tests MSTest/NUnit/xUnit en assertions aunque el build compile — si el build pasa pero los tests fallan por valores incorrectos, es un error de lógica de tests."
|
|
13
|
+
- "No cargar para diseñar la estructura de solución .NET multi-proyecto desde cero — si la pregunta es cómo organizar proyectos, capas y referencias en una solución, cargar `csharp-patrones` o `csharp-experto`."
|
|
14
|
+
- "No cargar para warnings de analyzer que son informativos y no bloquean el build — solo cargar cuando CS#### o NETSDK#### bloquea la compilación."
|
|
15
|
+
evolvable: true # default para skill estandar
|
|
16
|
+
---
|
|
17
|
+
# Build Errors C# — Diagnóstico y Solución
|
|
18
|
+
|
|
19
|
+
## Cuándo NO cargar
|
|
20
|
+
|
|
21
|
+
- `dotnet build` pasa pero `dotnet run` lanza excepciones de DI o startup — es un error de configuración de la aplicación, no de compilación.
|
|
22
|
+
- Los tests xUnit/NUnit fallan en assertions aunque compilan — es un error de lógica de tests.
|
|
23
|
+
- La pregunta es cómo organizar solución y proyectos — para diseño de solución cargar `csharp-patrones`.
|
|
24
|
+
|
|
25
|
+
## Cuándo cargar
|
|
26
|
+
|
|
27
|
+
- `dotnet build` o `dotnet publish` falla con errores CS o MSBuild
|
|
28
|
+
- Conflictos de versión de paquetes NuGet (NU1605, NU1701)
|
|
29
|
+
- Errores de nullable reference types (CS8600, CS8602, CS8603)
|
|
30
|
+
- Errores de restauración de paquetes en CI
|
|
31
|
+
- Problemas de multi-targeting o framework compatibility
|
|
32
|
+
- Warnings de Roslyn analyzers que bloquean el build
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Errores CS Frecuentes del Compilador Roslyn
|
|
37
|
+
|
|
38
|
+
### CS0103 — El nombre no existe en el contexto actual
|
|
39
|
+
|
|
40
|
+
**Causa**: variable, tipo o namespace no importado o mal escrito.
|
|
41
|
+
|
|
42
|
+
```csharp
|
|
43
|
+
// MAL
|
|
44
|
+
var lista = new List<string>();
|
|
45
|
+
lista.Add("uno");
|
|
46
|
+
Console.WriteLine(lista.Count()); // error: Count() no existe sin using System.Linq
|
|
47
|
+
|
|
48
|
+
// BIEN — agregar el using necesario
|
|
49
|
+
using System.Linq;
|
|
50
|
+
// ...
|
|
51
|
+
Console.WriteLine(lista.Count); // propiedad, no método, para ICollection
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### CS0029 — No se puede convertir implícitamente
|
|
55
|
+
|
|
56
|
+
**Causa**: asignación entre tipos incompatibles sin cast explícito.
|
|
57
|
+
|
|
58
|
+
```csharp
|
|
59
|
+
// MAL
|
|
60
|
+
int numero = "42"; // string no convierte a int implicitamente
|
|
61
|
+
double precio = 9.99m; // decimal no convierte a double implicitamente
|
|
62
|
+
|
|
63
|
+
// BIEN
|
|
64
|
+
int numero = int.Parse("42"); // conversión explícita
|
|
65
|
+
int numero2 = Convert.ToInt32("42"); // alternativa con manejo de null
|
|
66
|
+
double precio = (double)9.99m; // cast explícito decimal -> double
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### CS1061 — El tipo no contiene una definición para el miembro
|
|
70
|
+
|
|
71
|
+
**Causa**: el tipo no tiene esa propiedad o método, o falta un using de extensión.
|
|
72
|
+
|
|
73
|
+
```csharp
|
|
74
|
+
// MAL — falta using para metodos de extension LINQ
|
|
75
|
+
List<int> nums = new() { 1, 2, 3 };
|
|
76
|
+
var max = nums.Max(); // error CS1061 si falta using System.Linq
|
|
77
|
+
|
|
78
|
+
// MAL — typo en nombre de propiedad
|
|
79
|
+
var persona = new Persona();
|
|
80
|
+
Console.WriteLine(persona.Nombr); // error: debe ser Nombre
|
|
81
|
+
|
|
82
|
+
// BIEN
|
|
83
|
+
using System.Linq;
|
|
84
|
+
var max = nums.Max();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Nullable Reference Types (C# 8+)
|
|
90
|
+
|
|
91
|
+
### CS8600 — Asignando null a variable non-nullable
|
|
92
|
+
|
|
93
|
+
```csharp
|
|
94
|
+
// Habilitado en .csproj: <Nullable>enable</Nullable>
|
|
95
|
+
|
|
96
|
+
// MAL
|
|
97
|
+
string nombre = GetNombre(); // error si GetNombre() puede retornar null
|
|
98
|
+
|
|
99
|
+
// BIEN — opcion 1: declarar como nullable
|
|
100
|
+
string? nombre = GetNombre();
|
|
101
|
+
|
|
102
|
+
// BIEN — opción 2: garantizar no-null con operador de supresión (solo si se está seguro)
|
|
103
|
+
string nombre = GetNombre()!;
|
|
104
|
+
|
|
105
|
+
// BIEN — opción 3: valor por defecto
|
|
106
|
+
string nombre = GetNombre() ?? string.Empty;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### CS8602 — Dereference posible null
|
|
110
|
+
|
|
111
|
+
```csharp
|
|
112
|
+
// MAL
|
|
113
|
+
string? texto = ObtenerTexto();
|
|
114
|
+
int longitud = texto.Length; // error: texto puede ser null
|
|
115
|
+
|
|
116
|
+
// BIEN — null check antes de acceder
|
|
117
|
+
if (texto is not null)
|
|
118
|
+
{
|
|
119
|
+
int longitud = texto.Length;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// BIEN — operador null-conditional
|
|
123
|
+
int? longitud = texto?.Length;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### CS8603 — Retorno posible null desde función non-nullable
|
|
127
|
+
|
|
128
|
+
```csharp
|
|
129
|
+
// MAL
|
|
130
|
+
public string ObtenerNombre(int id)
|
|
131
|
+
{
|
|
132
|
+
return _db.Usuarios.Find(id)?.Nombre; // error: puede ser null
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// BIEN
|
|
136
|
+
public string? ObtenerNombre(int id)
|
|
137
|
+
{
|
|
138
|
+
return _db.Usuarios.Find(id)?.Nombre;
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## MSBuild — Errores NETSDK y de Proyecto
|
|
145
|
+
|
|
146
|
+
### NETSDK1045 — Target framework no soportado
|
|
147
|
+
|
|
148
|
+
**Causa**: el SDK instalado no soporta el TFM especificado en el proyecto.
|
|
149
|
+
|
|
150
|
+
```xml
|
|
151
|
+
<!-- Diagnóstico: dotnet --list-sdks -->
|
|
152
|
+
|
|
153
|
+
<!-- MAL — usar net9.0 con SDK 6 instalado -->
|
|
154
|
+
<TargetFramework>net9.0</TargetFramework>
|
|
155
|
+
|
|
156
|
+
<!-- BIEN — usar el TFM soportado por el SDK instalado, o actualizar el SDK -->
|
|
157
|
+
<TargetFramework>net8.0</TargetFramework>
|
|
158
|
+
|
|
159
|
+
<!-- Para multi-targeting -->
|
|
160
|
+
<TargetFrameworks>net8.0;net6.0</TargetFrameworks>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### NETSDK1138 — Paquete no compatible con target framework
|
|
164
|
+
|
|
165
|
+
```xml
|
|
166
|
+
<!-- Agregar supresión documentada si la compatibilidad es conocida -->
|
|
167
|
+
<PackageReference Include="SomeLegacyPackage" Version="1.0.0">
|
|
168
|
+
<NoWarn>NU1701</NoWarn>
|
|
169
|
+
</PackageReference>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## NuGet — Conflictos y Restauración
|
|
175
|
+
|
|
176
|
+
### NU1605 — Paquete degradado por transitive dependency
|
|
177
|
+
|
|
178
|
+
**Causa**: dos dependencias requieren versiones incompatibles del mismo paquete.
|
|
179
|
+
|
|
180
|
+
```xml
|
|
181
|
+
<!-- Diagnóstico: dotnet list package --include-transitive -->
|
|
182
|
+
|
|
183
|
+
<!-- SOLUCIÓN: pinear la versión ganadora explícitamente en el proyecto -->
|
|
184
|
+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
|
185
|
+
|
|
186
|
+
<!-- Si el conflicto es entre proyectos de la solución, agregar en Directory.Build.props -->
|
|
187
|
+
<Project>
|
|
188
|
+
<ItemGroup>
|
|
189
|
+
<PackageReference Update="Newtonsoft.Json" Version="13.0.3" />
|
|
190
|
+
</ItemGroup>
|
|
191
|
+
</Project>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Fallo de restauración en CI — paquetes no encontrados
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Causas comunes y diagnostico
|
|
198
|
+
dotnet restore --verbosity detailed 2>&1 | grep -i "error\|not found"
|
|
199
|
+
|
|
200
|
+
# Si el feed privado falla: verificar NuGet.Config con credenciales
|
|
201
|
+
# Nunca commitear credenciales en NuGet.Config — usar variables de entorno
|
|
202
|
+
dotnet restore --configfile ./NuGet.Config
|
|
203
|
+
|
|
204
|
+
# Forzar restauracion limpia
|
|
205
|
+
rm -rf ~/.nuget/packages # Linux/Mac
|
|
206
|
+
dotnet nuget locals all --clear
|
|
207
|
+
dotnet restore
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Roslyn Analyzers — Warnings como Errores
|
|
213
|
+
|
|
214
|
+
### Configuración correcta de TreatWarningsAsErrors
|
|
215
|
+
|
|
216
|
+
```xml
|
|
217
|
+
<!-- MAL: silenciar todos los warnings en lugar de resolver -->
|
|
218
|
+
<NoWarn>CS8600;CS8602;CS8603</NoWarn>
|
|
219
|
+
|
|
220
|
+
<!-- BIEN: resolver los warnings o suprimirlos con justificación -->
|
|
221
|
+
<!-- En el código, con razón documentada -->
|
|
222
|
+
#pragma warning disable CS8602 // El null check ocurre en el middleware anterior
|
|
223
|
+
var resultado = _servicio.Procesar();
|
|
224
|
+
#pragma warning restore CS8602
|
|
225
|
+
|
|
226
|
+
<!-- BIEN en .editorconfig para reglas de estilo (no de correctitud) -->
|
|
227
|
+
dotnet_diagnostic.IDE0028.severity = suggestion # coleccion init simplificable
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Errores de Publicación
|
|
233
|
+
|
|
234
|
+
### Error al publicar self-contained (RID no encontrado)
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# MAL — publicar sin especificar RID para self-contained
|
|
238
|
+
dotnet publish -c Release --self-contained
|
|
239
|
+
|
|
240
|
+
# BIEN — especificar el RID objetivo
|
|
241
|
+
dotnet publish -c Release -r linux-x64 --self-contained true
|
|
242
|
+
dotnet publish -c Release -r win-x64 --self-contained false # framework-dependent
|
|
243
|
+
|
|
244
|
+
# RIDs comunes: win-x64, win-x86, linux-x64, linux-arm64, osx-x64, osx-arm64
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Gotchas / Errores comunes no obvios
|
|
250
|
+
|
|
251
|
+
- **`<Nullable>enable</Nullable>` activado en el proyecto produce 300+ warnings que bloquean CI con TreatWarningsAsErrors**: la migración a nullable contexts no es atómica — activar `enable` en un codebase sin anotaciones existentes genera warnings masivos que se convierten en errores. Causa: C# 8+ nullable analysis requiere que todas las referencias que pueden ser null sean explícitamente anotadas como `T?`. Solución: activar `enable` progresivamente usando `#nullable enable` solo en archivos nuevos o migrados, y `#nullable disable` en archivos legados — no activar en todo el proyecto de golpe.
|
|
252
|
+
- **Conflicto NuGet NU1605 resuelto con `BindingRedirect` que no tiene efecto en .NET Core/5+**: las redirecciones de binding son una característica de .NET Framework; en .NET Core y superiores no aplican. Causa: el desarrollador copió la solución de StackOverflow para .NET Framework y la aplicó a un proyecto .NET 6. Solución: en .NET Core+, usar `<PackageReference Include="X" Version="Y" />` directo con la versión unificada en `Directory.Build.props`, o agregar `<VersionOverride>` en el proyecto hijo.
|
|
253
|
+
- **`dotnet restore` falla en CI con "Unable to load the service index for source"** pero funciona localmente: la URL del NuGet feed privado o el token de autenticación no están configurados en el entorno CI. Causa: localmente hay una credencial almacenada en `~/.nuget/NuGet/NuGet.Config` que no existe en el agente CI. Solución: configurar el feed en `nuget.config` del proyecto con la URL y usar `NUGET_PACKAGES` + credenciales como variables de entorno del CI — no almacenar credenciales en el archivo de config.
|
|
254
|
+
- **Roslyn analyzer genera error CA1416 (platform compatibility) para código que solo corre en Windows pero el target framework es `net8.0`**: sin `[SupportedOSPlatform("windows")]` en el método o clase que llama a la API, el analyzer reporta el error aunque el código esté en un `#if WINDOWS` block. Causa: el analyzer analiza el código sin evaluar las directivas de pre-procesador. Solución: anotar el método con `[SupportedOSPlatform("windows")]` o usar target framework específico de plataforma `net8.0-windows` para el proyecto que contiene ese código.
|
|
255
|
+
|
|
256
|
+
## Checklist de Diagnóstico
|
|
257
|
+
|
|
258
|
+
- [ ] Leer el código de error completo (CS#### o NETSDK####) antes de buscar solución.
|
|
259
|
+
- [ ] `dotnet build --verbosity diagnostic` para log completo de MSBuild.
|
|
260
|
+
- [ ] `dotnet list package --outdated` para identificar paquetes desactualizados.
|
|
261
|
+
- [ ] `dotnet list package --include-transitive` para ver árbol de dependencias.
|
|
262
|
+
- [ ] Verificar que `<Nullable>enable</Nullable>` es intencional y el código lo maneja.
|
|
263
|
+
- [ ] En CI: asegurar que la versión del SDK coincide con `global.json` del proyecto.
|
|
264
|
+
- [ ] Para conflictos NuGet: usar `Directory.Build.props` en la raíz de la solución.
|
|
265
|
+
- [ ] `dotnet nuget locals all --clear` si la caché local está corrompida.
|