@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,242 @@
|
|
|
1
|
+
# Regla: Testing en Swift / iOS
|
|
2
|
+
|
|
3
|
+
Esta regla es OBLIGATORIA para todo código Swift nuevo o modificado.
|
|
4
|
+
La orientación a protocolos de Swift permite mocks sin frameworks de generación.
|
|
5
|
+
Swift Testing (Swift 6) es el estándar para código nuevo.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Stack de testing obligatorio
|
|
10
|
+
|
|
11
|
+
| Herramienta | Propósito |
|
|
12
|
+
|------------|----------|
|
|
13
|
+
| XCTest | Framework base (compatible con todas las versiones) |
|
|
14
|
+
| swift-testing | Framework moderno para código Swift 6+ |
|
|
15
|
+
| swift-snapshot-testing | Tests de regresión visual para vistas |
|
|
16
|
+
| XCUITest | Tests de UI end-to-end |
|
|
17
|
+
| Xcode Coverage | Reporte de cobertura integrado en Xcode |
|
|
18
|
+
|
|
19
|
+
```swift
|
|
20
|
+
// Package.swift — dependencias de test
|
|
21
|
+
.package(url: "https://github.com/pointfreeco/swift-snapshot-testing", from: "1.16.0"),
|
|
22
|
+
.package(url: "https://github.com/apple/swift-testing", from: "0.10.0"),
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## swift-testing para código Swift 6 nuevo
|
|
28
|
+
|
|
29
|
+
`swift-testing` usa macros (`@Test`, `@Suite`) y es más expresivo que XCTest.
|
|
30
|
+
Para proyectos que soportan iOS 16 o anterior, usar XCTest.
|
|
31
|
+
|
|
32
|
+
```swift
|
|
33
|
+
import Testing
|
|
34
|
+
|
|
35
|
+
// BIEN — swift-testing con macros
|
|
36
|
+
@Suite("PedidoViewModel")
|
|
37
|
+
struct PedidoViewModelTests {
|
|
38
|
+
|
|
39
|
+
@Test("Carga pedidos correctamente")
|
|
40
|
+
func cargarPedidosExitoso() async throws {
|
|
41
|
+
// Given
|
|
42
|
+
let repositorioMock = MockPedidoRepository(pedidos: [.ejemplo])
|
|
43
|
+
let viewModel = PedidoViewModel(repositorio: repositorioMock)
|
|
44
|
+
|
|
45
|
+
// When
|
|
46
|
+
await viewModel.cargar()
|
|
47
|
+
|
|
48
|
+
// Then
|
|
49
|
+
#expect(viewModel.pedidos.count == 1)
|
|
50
|
+
#expect(!viewModel.isLoading)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@Test("Maneja error de red")
|
|
54
|
+
func cargarPedidosConError() async throws {
|
|
55
|
+
// Given
|
|
56
|
+
let repositorioMock = MockPedidoRepository(error: URLError(.notConnectedToInternet))
|
|
57
|
+
let viewModel = PedidoViewModel(repositorio: repositorioMock)
|
|
58
|
+
|
|
59
|
+
// When
|
|
60
|
+
await viewModel.cargar()
|
|
61
|
+
|
|
62
|
+
// Then
|
|
63
|
+
#expect(viewModel.error != nil)
|
|
64
|
+
#expect(viewModel.pedidos.isEmpty)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Mocks basados en protocolos (sin frameworks de generación)
|
|
72
|
+
|
|
73
|
+
La orientación a protocolos de Swift hace innecesarios los frameworks de mocking.
|
|
74
|
+
Implementar mocks manualmente: son simples, legibles y sin dependencias.
|
|
75
|
+
|
|
76
|
+
```swift
|
|
77
|
+
// Protocolo de produccion
|
|
78
|
+
protocol PedidoRepository {
|
|
79
|
+
func obtenerTodos() async throws -> [Pedido]
|
|
80
|
+
func guardar(_ pedido: Pedido) async throws
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Mock manual — simple y declarativo
|
|
84
|
+
final class MockPedidoRepository: PedidoRepository {
|
|
85
|
+
var pedidos: [Pedido] = []
|
|
86
|
+
var errorALanzar: Error?
|
|
87
|
+
private(set) var guardarLlamado = false
|
|
88
|
+
private(set) var pedidoGuardado: Pedido?
|
|
89
|
+
|
|
90
|
+
func obtenerTodos() async throws -> [Pedido] {
|
|
91
|
+
if let error = errorALanzar { throw error }
|
|
92
|
+
return pedidos
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
func guardar(_ pedido: Pedido) async throws {
|
|
96
|
+
guardarLlamado = true
|
|
97
|
+
pedidoGuardado = pedido
|
|
98
|
+
if let error = errorALanzar { throw error }
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Uso en test
|
|
103
|
+
let mock = MockPedidoRepository()
|
|
104
|
+
mock.pedidos = [Pedido(id: UUID(), total: 150)]
|
|
105
|
+
let vm = PedidoViewModel(repositorio: mock)
|
|
106
|
+
await vm.cargar()
|
|
107
|
+
XCTAssertEqual(vm.pedidos.count, 1)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Patrón Given-When-Then en XCTest
|
|
113
|
+
|
|
114
|
+
```swift
|
|
115
|
+
import XCTest
|
|
116
|
+
|
|
117
|
+
final class CrearPedidoUseCaseTests: XCTestCase {
|
|
118
|
+
|
|
119
|
+
private var repositorioMock: MockPedidoRepository!
|
|
120
|
+
private var useCase: CrearPedidoUseCase!
|
|
121
|
+
|
|
122
|
+
override func setUp() {
|
|
123
|
+
super.setUp()
|
|
124
|
+
repositorioMock = MockPedidoRepository()
|
|
125
|
+
useCase = CrearPedidoUseCase(repositorio: repositorioMock)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
override func tearDown() {
|
|
129
|
+
repositorioMock = nil
|
|
130
|
+
useCase = nil
|
|
131
|
+
super.tearDown()
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
func test_crearPedido_conItemsValidos_guardaYRetornaPedido() async throws {
|
|
135
|
+
// Given
|
|
136
|
+
let items = [ItemPedido(productoId: UUID(), cantidad: 2)]
|
|
137
|
+
|
|
138
|
+
// When
|
|
139
|
+
let pedido = try await useCase.ejecutar(items: items)
|
|
140
|
+
|
|
141
|
+
// Then
|
|
142
|
+
XCTAssertEqual(pedido.items.count, 1)
|
|
143
|
+
XCTAssertTrue(repositorioMock.guardarLlamado)
|
|
144
|
+
XCTAssertEqual(repositorioMock.pedidoGuardado?.id, pedido.id)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
func test_crearPedido_sinItems_lanzaError() async {
|
|
148
|
+
// Given
|
|
149
|
+
let itemsVacios: [ItemPedido] = []
|
|
150
|
+
|
|
151
|
+
// When / Then
|
|
152
|
+
await XCTAssertThrowsError(
|
|
153
|
+
try await useCase.ejecutar(items: itemsVacios)
|
|
154
|
+
) { error in
|
|
155
|
+
XCTAssertTrue(error is PedidoError)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Snapshot testing para regresión visual
|
|
164
|
+
|
|
165
|
+
```swift
|
|
166
|
+
import SnapshotTesting
|
|
167
|
+
|
|
168
|
+
final class PantallaPedidosSnapshotTests: XCTestCase {
|
|
169
|
+
|
|
170
|
+
func test_pantallaPedidos_estadoSuccess() {
|
|
171
|
+
// Given
|
|
172
|
+
let vm = PedidoViewModel(repositorio: MockPedidoRepository(pedidos: [.ejemplo]))
|
|
173
|
+
let vista = PantallaPedidos(viewModel: vm)
|
|
174
|
+
let vc = UIHostingController(rootView: vista)
|
|
175
|
+
|
|
176
|
+
// Then — genera o compara snapshot
|
|
177
|
+
assertSnapshot(of: vc, as: .image(on: .iPhone13Pro))
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Los archivos de snapshot se versionan en git bajo `__Snapshots__/`.
|
|
183
|
+
Un snapshot que falla indica un cambio visual inesperado — revisar antes de actualizar.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Tests de UI con XCUITest
|
|
188
|
+
|
|
189
|
+
```swift
|
|
190
|
+
final class FlujoCrearPedidoUITests: XCTestCase {
|
|
191
|
+
|
|
192
|
+
var app: XCUIApplication!
|
|
193
|
+
|
|
194
|
+
override func setUp() {
|
|
195
|
+
super.setUp()
|
|
196
|
+
continueAfterFailure = false
|
|
197
|
+
app = XCUIApplication()
|
|
198
|
+
app.launchArguments = ["--uitesting"] // modo de test con datos mock
|
|
199
|
+
app.launch()
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
func test_crearPedido_flujoCompleto() {
|
|
203
|
+
// Given — pantalla de lista de pedidos
|
|
204
|
+
let botonNuevo = app.buttons["nuevo_pedido"]
|
|
205
|
+
XCTAssertTrue(botonNuevo.waitForExistence(timeout: 3))
|
|
206
|
+
|
|
207
|
+
// When — crear pedido
|
|
208
|
+
botonNuevo.tap()
|
|
209
|
+
app.textFields["campo_descripcion"].typeText("Pedido de prueba")
|
|
210
|
+
app.buttons["confirmar_pedido"].tap()
|
|
211
|
+
|
|
212
|
+
// Then — verificar que aparece en la lista
|
|
213
|
+
let textoPedido = app.staticTexts["Pedido de prueba"]
|
|
214
|
+
XCTAssertTrue(textoPedido.waitForExistence(timeout: 5))
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Cobertura con Xcode Coverage
|
|
222
|
+
|
|
223
|
+
Habilitar en el esquema de Xcode: `Edit Scheme → Test → Code Coverage → Gather coverage`.
|
|
224
|
+
|
|
225
|
+
Objetivo de cobertura por capa:
|
|
226
|
+
- Capa de dominio (use cases, modelos): >= 90%
|
|
227
|
+
- Capa de datos (repositorios, mappers): >= 80%
|
|
228
|
+
- Capa de presentación (ViewModels): >= 80%
|
|
229
|
+
- Vistas SwiftUI: snapshot tests cubren regresión visual
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Checklist de testing Swift antes de abrir PR
|
|
234
|
+
|
|
235
|
+
- [ ] Tests usan `swift-testing` (Swift 6) o `XCTest` según target de deployment
|
|
236
|
+
- [ ] Mocks implementados manualmente vía protocolos (sin frameworks)
|
|
237
|
+
- [ ] Patrón Given-When-Then con comentarios explícitos
|
|
238
|
+
- [ ] Cobertura de dominio y ViewModels >= 80%
|
|
239
|
+
- [ ] Snapshots generados y versionados para vistas críticas
|
|
240
|
+
- [ ] Tests de UI para flujos críticos con XCUITest
|
|
241
|
+
- [ ] Sin `Thread.sleep()` ni delays fijos: usar `Task` y `await`
|
|
242
|
+
- [ ] `setUp`/`tearDown` limpian estado entre tests
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Regla: Lectura de documentos Office y Jupyter con MarkItDown
|
|
2
|
+
|
|
3
|
+
Esta regla aplica cuando un agente necesita **leer el contenido** de un archivo
|
|
4
|
+
en formato Office o Jupyter. No aplica a operaciones de escritura, copia o listado.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Cuándo aplica
|
|
9
|
+
|
|
10
|
+
Cuando el agente necesita acceder al contenido de archivos con estas extensiones:
|
|
11
|
+
|
|
12
|
+
| Extensión | Formato |
|
|
13
|
+
|-----------|---------|
|
|
14
|
+
| `.docx` | Word — documentos, especificaciones, ADRs |
|
|
15
|
+
| `.xlsx` `.xls` | Excel — datos, métricas, matrices |
|
|
16
|
+
| `.pptx` | PowerPoint — presentaciones, roadmaps |
|
|
17
|
+
| `.ipynb` | Jupyter Notebook — análisis, experimentos |
|
|
18
|
+
|
|
19
|
+
## Regla obligatoria
|
|
20
|
+
|
|
21
|
+
NUNCA usar el Read tool directamente para estos formatos — no los soporta y
|
|
22
|
+
devuelve contenido binario ilegible. Usar en su lugar:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Opción 1: markitdown instalado globalmente (pip install markitdown)
|
|
26
|
+
markitdown <ruta-al-archivo>
|
|
27
|
+
|
|
28
|
+
# Opción 2: wrapper del vendor de swl-ses (si está disponible)
|
|
29
|
+
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
|
30
|
+
python "$PROJECT_ROOT/scripts/vendor/markitdown/cli.py" <ruta-al-archivo>
|
|
31
|
+
|
|
32
|
+
# Opción 3: módulo Python directamente
|
|
33
|
+
python -m markitdown <ruta-al-archivo>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Verificar disponibilidad antes de usar**:
|
|
37
|
+
```bash
|
|
38
|
+
markitdown --version 2>/dev/null && echo "CLI_OK" || echo "NO_DISPONIBLE"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Si no está disponible:
|
|
42
|
+
```
|
|
43
|
+
markitdown no está instalado. Para habilitarlo:
|
|
44
|
+
pip install markitdown[pdf,docx,pptx,xlsx]
|
|
45
|
+
|
|
46
|
+
Mientras tanto, pedir al usuario que proporcione el contenido en texto plano.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Lo que sí usa el Read tool
|
|
50
|
+
|
|
51
|
+
El Read tool sigue siendo correcto para:
|
|
52
|
+
- `.pdf` (hasta 20 páginas con parámetro `pages:`)
|
|
53
|
+
- `.md`, `.txt`, `.markdown`
|
|
54
|
+
- Código fuente (`.py`, `.js`, `.ts`, `.java`, etc.)
|
|
55
|
+
- Cualquier archivo de texto plano
|
|
56
|
+
|
|
57
|
+
## Referencia completa
|
|
58
|
+
|
|
59
|
+
Para casos avanzados (ingest masivo, URLs YouTube, ZIP con documentos mixtos,
|
|
60
|
+
árbol de decisión completo): `Skill("swl-markitdown")`.
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Regla: Consolidación de memoria — dónde va cada dato
|
|
2
|
+
|
|
3
|
+
Esta regla es **OBLIGATORIA** para todos los agentes, skills y comandos que
|
|
4
|
+
escriben conocimiento persistente del sistema. Resuelve el problema de
|
|
5
|
+
memoria fragmentada: SWL tiene 5 mecanismos de almacenamiento y sin una
|
|
6
|
+
regla clara, un mismo dato puede terminar en el lugar incorrecto o duplicado.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Los 5 canales de memoria
|
|
11
|
+
|
|
12
|
+
| # | Canal | Formato | Fuente de verdad de |
|
|
13
|
+
|---|-------|---------|---------------------|
|
|
14
|
+
| 1 | **Memoria nativa de Claude Code** (`~/.claude/projects/.../memory/`) | Archivos `.md` con frontmatter `user`/`feedback`/`project`/`reference` | Perfil general del usuario y del proyecto, auto-gestionado por el harness |
|
|
15
|
+
| 2 | **`.planning/APRENDIZAJES.md`** | Markdown con entradas `### [YYYY-MM-DD] Título` agrupadas por sección | Conocimiento del dominio (anti-patrones, patrones, decisiones, gotchas) |
|
|
16
|
+
| 3 | **`instintos/proyecto.yaml` / `global.yaml` / `perfil-usuario.yaml`** | YAML estructurado con confidence, scope, evidence_count | Patrones aprendidos inductivamente, con promoción/degradación |
|
|
17
|
+
| 4 | **`.planning/sessions/search-index.json`** | Índice FTS de sesiones pasadas | Búsqueda histórica de trabajo (qué se hizo, cuándo) |
|
|
18
|
+
| 5 | **`.planning/evolucion/*`** | JSONL (nudges, agentes) + JSON (métricas, alertas, evoluciones) | Estado del ciclo de auto-evolución |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Regla de asignación — dónde va CADA tipo de dato
|
|
23
|
+
|
|
24
|
+
### A. Información del usuario
|
|
25
|
+
|
|
26
|
+
| Tipo de dato | Canal correcto | NO va a |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| Rol profesional, años de experiencia | 1 (memoria `user`) + 3 (perfil-usuario.yaml) | APRENDIZAJES, sessions, proyecto.yaml |
|
|
29
|
+
| Stack preferido del usuario | 3 (perfil-usuario.yaml) | APRENDIZAJES |
|
|
30
|
+
| Corrección explícita del usuario ("prefiero X", "nunca Y") | 1 (memoria `feedback`) + 3 (perfil-usuario.yaml vía perfilador-usuario-swl) | APRENDIZAJES |
|
|
31
|
+
| Preferencia de idioma, formalidad, longitud | 3 (perfil-usuario.yaml) | — |
|
|
32
|
+
| Límites explícitos ("no guardes X") | 3 (perfil-usuario.yaml `limites_explicitos`) | — |
|
|
33
|
+
|
|
34
|
+
### B. Conocimiento del dominio (aplicable al proyecto o transversal)
|
|
35
|
+
|
|
36
|
+
| Tipo de dato | Canal correcto | NO va a |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Anti-patrón descubierto (ej: bug recurrente) | 2 (APRENDIZAJES.md sección "Anti-patrones") | perfil-usuario, instintos directamente |
|
|
39
|
+
| Patrón exitoso reutilizable | 2 (APRENDIZAJES.md) → eventual skill nuevo (tipo C) | perfil-usuario |
|
|
40
|
+
| Decisión de arquitectura tomada | 2 (APRENDIZAJES.md sección "Decisiones") + eventualmente CLAUDE.md | perfil-usuario, instintos sin consolidar primero |
|
|
41
|
+
| Gotcha específico de una librería | 2 (APRENDIZAJES.md) o skill existente | perfil-usuario |
|
|
42
|
+
|
|
43
|
+
### C. Estado del sistema y observabilidad
|
|
44
|
+
|
|
45
|
+
| Tipo de dato | Canal correcto |
|
|
46
|
+
|---|---|
|
|
47
|
+
| Nudge emitido por un hook | 5 (`.planning/evolucion/nudges.jsonl`) |
|
|
48
|
+
| Evento de subagente terminado | 5 (`.planning/auto-evolucion/agentes.jsonl`) |
|
|
49
|
+
| Evolución aplicada/revertida a skill | 5 (`.planning/evolucion/evoluciones.jsonl`) |
|
|
50
|
+
| Alerta persistente (nudges ignorados) | 5 (`.planning/evolucion/alertas-persistentes.json`) |
|
|
51
|
+
| Métricas agregadas (health score) | 5 (`.planning/evolucion/metricas.json`) |
|
|
52
|
+
| Traza de ejecución de agente | `.planning/traces/` (OTLP-lite) |
|
|
53
|
+
| Audit trail inmutable | `.planning/audit.jsonl` + Merkle |
|
|
54
|
+
|
|
55
|
+
### D. Patrones consolidados (inductivos, con confidence)
|
|
56
|
+
|
|
57
|
+
| Tipo de dato | Canal correcto |
|
|
58
|
+
|---|---|
|
|
59
|
+
| Patrón observado ≥1 vez con confidence < 0.5 | 3 (instintos/proyecto.yaml como draft) |
|
|
60
|
+
| Patrón consolidado (confidence ≥ 0.5, evidence_count ≥ 3) | 3 (instintos/proyecto.yaml activo) |
|
|
61
|
+
| Patrón validado cross-proyecto (confidence > 0.8) | 3 (instintos/global.yaml tras promoción) |
|
|
62
|
+
| Patrón contradicho (degradado ≥3 veces) | 3 (instintos/proyecto.yaml status `degraded`) o borrado |
|
|
63
|
+
|
|
64
|
+
### E. Búsqueda histórica
|
|
65
|
+
|
|
66
|
+
| Tipo de dato | Canal correcto |
|
|
67
|
+
|---|---|
|
|
68
|
+
| "¿Qué hicimos la semana pasada en X?" | 4 (sessions/search-index.json) — vía `habilidades/memoria-busqueda` |
|
|
69
|
+
| Sesión completa archivada | `.planning/sessions/*.json` |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Precedencia en caso de conflicto
|
|
74
|
+
|
|
75
|
+
Si un mismo dato aparece en múltiples canales, la prioridad de verdad es:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
CLAUDE.md (regla explícita)
|
|
79
|
+
> Memoria nativa tipo feedback del usuario (corrección explícita)
|
|
80
|
+
> instintos con confidence ≥ 0.9
|
|
81
|
+
> APRENDIZAJES.md (si es tipo Decisión)
|
|
82
|
+
> perfil-usuario.yaml
|
|
83
|
+
> instintos con confidence < 0.9
|
|
84
|
+
> sesiones pasadas
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Reglas de no-duplicación
|
|
90
|
+
|
|
91
|
+
1. **Un dato vive en exactamente un canal** (salvo referencias explícitas).
|
|
92
|
+
Si necesitas citarlo desde otro, usa un puntero/path, no copies el contenido.
|
|
93
|
+
|
|
94
|
+
2. **perfil-usuario.yaml NUNCA duplica APRENDIZAJES.md.** Una corrección del
|
|
95
|
+
usuario va al perfil; un anti-patrón técnico va a APRENDIZAJES.
|
|
96
|
+
|
|
97
|
+
3. **instintos/proyecto.yaml bootstrap desde APRENDIZAJES.md** es válido
|
|
98
|
+
(hace `scripts/bootstrap-instintos.js`), pero la fuente de verdad post-bootstrap
|
|
99
|
+
es `instintos/proyecto.yaml`. Nuevos APRENDIZAJES no deben entrar a instintos
|
|
100
|
+
automáticamente — primero se promueven con `/swl:aprender` (tipo C).
|
|
101
|
+
|
|
102
|
+
4. **La memoria nativa del harness no se sobreescribe** con contenido de SWL.
|
|
103
|
+
El flujo es al revés: señales del usuario pueden alimentar ambos canales
|
|
104
|
+
(native + perfil SWL), pero ninguno es copia del otro.
|
|
105
|
+
|
|
106
|
+
5. **Cuando detectes duplicación cross-canal**, registrarla como anti-patrón
|
|
107
|
+
en APRENDIZAJES.md y corregir con `scripts/validar-memoria.js`.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Validación automática
|
|
112
|
+
|
|
113
|
+
El script `scripts/validar-memoria.js` detecta duplicaciones y violaciones
|
|
114
|
+
de esta regla. Se ejecuta:
|
|
115
|
+
|
|
116
|
+
- Manualmente: `node scripts/validar-memoria.js`
|
|
117
|
+
- Automáticamente dentro de `scripts/validar.js` (parte del pipeline CI)
|
|
118
|
+
|
|
119
|
+
Reporta: duplicación cross-canal, canal incorrecto para un tipo de dato
|
|
120
|
+
conocido, datos en canales deprecados.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Anti-patrones a detectar
|
|
125
|
+
|
|
126
|
+
- **Corrección del usuario escrita a APRENDIZAJES.md** → debe ir al perfil
|
|
127
|
+
- **Anti-patrón técnico escrito al perfil del usuario** → debe ir a APRENDIZAJES
|
|
128
|
+
- **Métrica persistida en APRENDIZAJES.md** → debe ir a `.planning/evolucion/`
|
|
129
|
+
- **Secreto/credencial en cualquier canal** → bloqueo inmediato (`privacy-memoria`)
|
|
130
|
+
- **Dato duplicado en proyecto.yaml y global.yaml** → uno debe borrarse
|
|
131
|
+
(promover a global SOLO cuando confidence > 0.8 Y validado cross-proyecto)
|
|
132
|
+
- **Instinto activo con `last_validated` antiguo (>180 días) sin feedback**
|
|
133
|
+
→ el `effective_confidence` ya está bajo `0.25`. Re-validar manualmente o
|
|
134
|
+
marcar `status: archived`.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Scoring de instintos: decay exponencial + maturity
|
|
139
|
+
|
|
140
|
+
El campo `confidence` en instintos es **estático** (asignado al crear). El valor
|
|
141
|
+
**efectivo** se computa dinámicamente con dos factores:
|
|
142
|
+
|
|
143
|
+
1. **Decay temporal**: la confianza decae exponencialmente desde `last_validated_at`.
|
|
144
|
+
Half-life por defecto: 90 días. Tras 1 half-life → confianza × 0.5; tras 2 → × 0.25.
|
|
145
|
+
2. **Penalización por feedback dañino**: si `harmful_count / (helpful_count + harmful_count) > 0.3`
|
|
146
|
+
con al menos 3 eventos, el instinto se propone para `status: degraded`.
|
|
147
|
+
|
|
148
|
+
Implementación pura en `scripts/lib/scoring-instintos.js`:
|
|
149
|
+
|
|
150
|
+
```js
|
|
151
|
+
const { effectiveConfidence, maturityState, applyFeedback } = require('./scoring-instintos');
|
|
152
|
+
|
|
153
|
+
// Lectura
|
|
154
|
+
const eff = effectiveConfidence(instinto, new Date());
|
|
155
|
+
const maturity = maturityState(instinto, new Date());
|
|
156
|
+
// → 'candidate' | 'established' | 'proven' | 'deprecated'
|
|
157
|
+
|
|
158
|
+
// Escritura (pure)
|
|
159
|
+
const conFeedback = applyFeedback(instinto, 'helpful');
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Cuándo recomputar**:
|
|
163
|
+
- `/swl:salud` reporta instintos con `effective_confidence < 0.3` para revisión.
|
|
164
|
+
- `hooks/degradacion-instintos.js` puede marcar `status_proposed: degraded`
|
|
165
|
+
cuando `shouldAutoDeprecate(instinto)` devuelve `true`.
|
|
166
|
+
- `bootstrap-instintos.js` emite los nuevos instintos con `decay_half_life_days: 90`,
|
|
167
|
+
`helpful_count: 0`, `harmful_count: 0` por defecto.
|
|
168
|
+
|
|
169
|
+
**Backward compat**: instintos antiguos sin los campos nuevos siguen siendo
|
|
170
|
+
válidos. `effectiveConfidence` cae a `confidence * decay` cuando no hay feedback,
|
|
171
|
+
y `last_validated` (sin `_at`) se usa como fallback.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Source tracing en instintos y APRENDIZAJES
|
|
176
|
+
|
|
177
|
+
Cada instinto puede declarar la **evidencia que lo respalda** mediante:
|
|
178
|
+
|
|
179
|
+
- `source_sessions: ["sess-abc", "sess-def"]` — sesiones que lo generaron o validaron
|
|
180
|
+
- `source_agents: ["orquestador-swl", "implementador-swl"]` — agentes que lo aplicaron exitosamente
|
|
181
|
+
- `evidence_count: N` — total numérico (compatibilidad legacy)
|
|
182
|
+
|
|
183
|
+
**Reglas**:
|
|
184
|
+
|
|
185
|
+
1. Un instinto con `confidence ≥ 0.7` debe tener al menos 1 entrada en
|
|
186
|
+
`source_sessions` o `source_agents` para justificar la confianza.
|
|
187
|
+
2. Para promover de `instintos/proyecto.yaml` a `instintos/global.yaml`, el
|
|
188
|
+
instinto debe tener `source_agents.length ≥ 2` o `source_sessions.length ≥ 3`
|
|
189
|
+
— un solo punto de evidencia no es suficiente para impacto cross-proyecto.
|
|
190
|
+
3. El campo `source_sessions` referencia IDs de `.planning/sessions/`. No copiar
|
|
191
|
+
el contenido — usar el ID como puntero.
|
|
192
|
+
4. `addSource()` en `scripts/lib/scoring-instintos.js` mantiene unicidad
|
|
193
|
+
automática. NUNCA editar manualmente con duplicados.
|
|
194
|
+
|
|
195
|
+
**Anti-patrón**: instinto con `evidence_count: 10` pero `source_sessions: []` y
|
|
196
|
+
`source_agents: []` — la cifra es opaca, no se puede auditar de dónde viene.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Checklist antes de escribir a memoria
|
|
201
|
+
|
|
202
|
+
Antes de que cualquier agente, skill o hook persista un dato, debe responder:
|
|
203
|
+
|
|
204
|
+
1. ¿Es información del **usuario**, del **dominio**, de **estado del sistema**,
|
|
205
|
+
un **patrón inductivo**, o **búsqueda histórica**? → identifica canal A-E.
|
|
206
|
+
2. ¿El canal elegido es el correcto según la tabla de asignación?
|
|
207
|
+
3. ¿El dato ya existe en otro canal? Si sí, actualiza ese, no dupliques.
|
|
208
|
+
4. ¿El dato contiene PII, secretos o contenido sensible? → cargar `privacy-memoria`.
|
|
209
|
+
5. ¿El dato viene de texto del usuario? → escanear con `prompt-injection-scanner`.
|