@saulwade/swl-ses 2.6.0 → 2.8.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 +209 -197
- package/README.md +647 -600
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +932 -932
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +218 -218
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/tdd-qa-swl.md +393 -393
- package/bin/swl-ses.js +10 -0
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -836
- package/comandos/swl/aprobar-plan.md +146 -146
- package/comandos/swl/auditar-deps.md +134 -134
- package/comandos/swl/autoresearch.md +264 -264
- package/comandos/swl/ayuda.md +224 -224
- package/comandos/swl/brainstorm.md +52 -51
- package/comandos/swl/checkpoint.md +325 -325
- package/comandos/swl/claudemd.md +234 -234
- package/comandos/swl/compactar.md +310 -310
- package/comandos/swl/configurar-ci.md +235 -235
- package/comandos/swl/contexto.md +110 -110
- package/comandos/swl/crear-skill.md +292 -292
- package/comandos/swl/cron.md +194 -194
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -520
- package/comandos/swl/evolucion-continua.md +73 -73
- package/comandos/swl/evolucionar.md +267 -267
- package/comandos/swl/exportar-vault.md +583 -583
- package/comandos/swl/fix.md +118 -118
- package/comandos/swl/gateway.md +158 -158
- package/comandos/swl/inbox.md +116 -116
- package/comandos/swl/instalar.md +220 -220
- package/comandos/swl/instintos.md +86 -86
- package/comandos/swl/mapear-codebase.md +312 -312
- package/comandos/swl/mcp-status.md +176 -175
- package/comandos/swl/modelo.md +100 -100
- package/comandos/swl/nemesis.md +433 -433
- package/comandos/swl/notificaciones.md +299 -299
- package/comandos/swl/nuevo-proyecto.md +251 -251
- package/comandos/swl/planear-fase.md +263 -263
- package/comandos/swl/plugins.md +256 -256
- package/comandos/swl/predecir.md +169 -169
- package/comandos/swl/reflect-skills.md +125 -125
- package/comandos/swl/release.md +450 -450
- package/comandos/swl/revisar-impacto.md +201 -201
- package/comandos/swl/revisar.md +330 -330
- package/comandos/swl/seguridad.md +189 -189
- package/comandos/swl/sesiones.md +200 -200
- package/comandos/swl/skill-search.md +113 -113
- package/comandos/swl/status.md +345 -345
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -12
- package/gateway/lib/event-channel.js +191 -191
- package/habilidades/agent-deep-links/SKILL.md +148 -148
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
- package/habilidades/backend-async-postgres-testing/SKILL.md +216 -215
- package/habilidades/backend-error-design/SKILL.md +221 -221
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/calidad-anti-patrones-universales/SKILL.md +105 -1
- package/habilidades/calidad-contract-testing/SKILL.md +165 -165
- package/habilidades/calidad-mutation-testing/SKILL.md +25 -1
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
- package/habilidades/ci-cd-pipelines/SKILL.md +5 -1
- package/habilidades/compactacion-contexto/SKILL.md +2 -1
- package/habilidades/contenedores-docker/SKILL.md +4 -2
- package/habilidades/css-moderno/SKILL.md +7 -1
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +207 -207
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/drift-detection/SKILL.md +1 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
- package/habilidades/extractor-de-aprendizajes/SKILL.md +12 -2
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
- package/habilidades/harness-claude-code/SKILL.md +315 -314
- package/habilidades/instalar-sistema/SKILL.md +227 -227
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +358 -358
- package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
- package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
- package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
- package/habilidades/proceso-dynamic-workflows/SKILL.md +60 -0
- package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
- package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
- package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
- package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
- package/habilidades/proceso-modular-split/SKILL.md +256 -256
- package/habilidades/release-semver/SKILL.md +2 -2
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
- package/habilidades/tdd-workflow/SKILL.md +749 -749
- package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
- package/hooks/agente-lifecycle.js +1 -1
- package/hooks/audit-trail.js +1 -1
- package/hooks/auto-consolidacion.js +1 -1
- package/hooks/calidad-pre-commit.js +159 -10
- package/hooks/captura-acciones-post.js +1 -1
- package/hooks/captura-acciones-session.js +1 -1
- package/hooks/captura-feedback-usuario.js +1 -1
- package/hooks/ciclo-evolucion-subagente.js +26 -26
- package/hooks/ciclo-evolucion.js +26 -26
- package/hooks/contexto-iteracion.js +1 -1
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/grafo-contexto.js +1 -1
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/inbox-aviso.js +1 -1
- package/hooks/inyeccion-contexto.js +1 -1
- package/hooks/lib/agent-matcher.js +1 -1
- package/hooks/lib/agent-routing.js +1 -1
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/captura-acciones.js +1 -1
- package/hooks/lib/ciclo-evolucion.js +47 -47
- package/hooks/lib/deep-links.js +185 -185
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/etapa-metricas.js +1 -1
- package/hooks/lib/evolution-tracker.js +1 -1
- package/hooks/lib/gateway-notify.js +193 -193
- package/hooks/lib/mcp-health.js +1 -1
- package/hooks/lib/notificacion-formato.js +92 -0
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/propose-step.js +1 -1
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/raiz-proyecto.js +158 -102
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/run-log.js +1 -1
- package/hooks/lib/security-net.js +201 -201
- package/hooks/lib/singleton-guard.js +20 -13
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/telegram-cliente.js +11 -3
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/notificacion-telegram.js +17 -13
- package/hooks/preservar-estado-pre-compact.js +1 -1
- package/hooks/registro-turnos.js +1 -1
- package/hooks/resumen-sesion.js +1 -1
- package/hooks/risk-scoring.js +1 -1
- package/hooks/session-briefing.js +13 -5
- package/hooks/spec-gate.js +1 -1
- package/hooks/sugerir-regenerar-inventario.js +1 -1
- package/hooks/tdd-gate.js +1 -1
- package/hooks/telemetria-agentes.js +1 -1
- package/hooks/telemetria-skill-routing.js +1 -1
- package/hooks/tracking-costos.js +1 -1
- package/hooks/validar-formato-post-subagente.js +1 -1
- package/hooks/validar-intent-spec.js +1 -1
- package/hooks/validar-planning-paths.js +1 -1
- package/instintos/autonomia.yaml +27 -27
- package/instintos/prompt-appendices.yaml +57 -57
- package/llms.txt +29 -29
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/canonical-hashes.json +6250 -5257
- package/manifiestos/harness-ir.json +47536 -0
- package/manifiestos/modulos.json +1429 -1428
- package/manifiestos/policy-bundle.json +2065 -0
- package/manifiestos/policy-corpus-w2.json +3926 -0
- package/manifiestos/runtime-adapters-core3.json +208 -0
- package/manifiestos/runtime-conformance.json +139 -0
- package/manifiestos/skills-lock.json +1275 -1275
- package/package.json +94 -94
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +369 -369
- package/reglas/accesibilidad.md +10 -10
- package/reglas/auditorias-documentales-estructurales.md +7 -7
- package/reglas/cloud-infra.md +8 -8
- package/reglas/consultar-vault-primero.md +195 -195
- package/reglas/git-workflow.md +1 -0
- package/reglas/hooks.md +6 -6
- package/reglas/intent-engineering.md +218 -218
- package/reglas/markitdown.md +8 -8
- package/reglas/monitor-ci.md +12 -0
- package/reglas/patrones.md +6 -6
- package/reglas/testing.md +7 -7
- package/reglas/tests-cleanup.md +224 -224
- package/schemas/agent-message.schema.json +73 -73
- package/schemas/agent-output-implementacion.schema.json +114 -114
- package/schemas/agent-output-planificacion.schema.json +150 -150
- package/schemas/agent-output-review.schema.json +98 -98
- package/schemas/diary-entry.schema.json +112 -112
- package/schemas/gate-state.schema.json +76 -0
- package/schemas/harness-ir.schema.json +369 -0
- package/schemas/hook-profiles.schema.json +54 -54
- package/schemas/hooks-config.schema.json +89 -89
- package/schemas/legacy-gates.schema.json +45 -0
- package/schemas/modulos.schema.json +38 -38
- package/schemas/perfiles.schema.json +36 -36
- package/schemas/plugin.schema.json +77 -77
- package/schemas/policy-bundle.schema.json +140 -0
- package/schemas/policy-enforcement.schema.json +117 -0
- package/schemas/policy-operation.schema.json +261 -0
- package/schemas/runtime-adapter.schema.json +176 -0
- package/schemas/runtime-build-attestation.schema.json +100 -0
- package/schemas/runtime-conformance.schema.json +239 -0
- package/schemas/runtime-diagnostic.schema.json +395 -0
- package/schemas/skill-evals.schema.json +119 -119
- package/schemas/skill-frontmatter.schema.json +245 -245
- package/schemas/w4-certification-request.schema.json +72 -0
- package/schemas/w4-certification-verdict.schema.json +224 -0
- package/schemas/w4-corpus.schema.json +172 -0
- package/schemas/w4-mutation-report.schema.json +116 -0
- package/schemas/w4-replay-result.schema.json +164 -0
- package/schemas/w4-scoring-report.schema.json +89 -0
- package/scripts/audit-tools/audit-history.js +330 -330
- package/scripts/audit-tools/bundle-tracker.js +290 -290
- package/scripts/audit-tools/canary-monitor.js +352 -352
- package/scripts/audit-tools/code-profiler.js +605 -605
- package/scripts/audit-tools/dep-doctor.js +320 -320
- package/scripts/audit-tools/env-validator.js +206 -206
- package/scripts/audit-tools/lib/fs-walk.js +48 -48
- package/scripts/audit-tools/lib/output.js +23 -23
- package/scripts/audit-tools/migration-checker.js +392 -392
- package/scripts/audit-tools/pentest-scanner.js +1436 -1436
- package/scripts/auditar-clases-conocidas.js +134 -134
- package/scripts/bootstrap-instintos.js +88 -14
- package/scripts/canario-hooks.js +166 -166
- package/scripts/cli/aprobar-plan.js +73 -73
- package/scripts/cli/autonomia.js +23 -23
- package/scripts/cli/benchmark-memoria.js +37 -37
- package/scripts/cli/briefing.js +23 -23
- package/scripts/cli/ciclo-autonomo.js +73 -73
- package/scripts/cli/ciclo-evolucion.js +26 -26
- package/scripts/cli/ciclo-fase-b.js +102 -102
- package/scripts/cli/derivar-feature-list.js +25 -25
- package/scripts/cli/detectar-host.js +27 -27
- package/scripts/cli/diary-entry.js +69 -69
- package/scripts/cli/execution-state.js +18 -18
- package/scripts/cli/gateway-notify.js +41 -41
- package/scripts/cli/guardrail-metrics.js +39 -39
- package/scripts/cli/liberar-fase.js +42 -42
- package/scripts/cli/mark-evolved.js +56 -56
- package/scripts/cli/memoria-search.js +69 -69
- package/scripts/cli/metricas-dora.js +26 -26
- package/scripts/cli/near-duplicate.js +55 -55
- package/scripts/cli/notificaciones.js +123 -123
- package/scripts/cli/nudge-accionar.js +39 -39
- package/scripts/cli/propose-step.js +29 -29
- package/scripts/cli/run-eval.js +38 -38
- package/scripts/cli/schedule-parse.js +19 -19
- package/scripts/cli/sugerir-modelo.js +20 -20
- package/scripts/cli/verificar-plan.js +36 -36
- package/scripts/cli/verificar-trazabilidad.js +35 -35
- package/scripts/comandos/install-asistido.js +8 -7
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +61 -13
- package/scripts/evidencia-valor.js +101 -101
- package/scripts/field-report.js +16 -16
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-claims-runtime.js +1342 -0
- package/scripts/generar-harness-ir.js +257 -0
- package/scripts/generar-inventario.js +52 -54
- package/scripts/generar-policy-bundle.js +202 -0
- package/scripts/instalador.js +39 -7
- package/scripts/lib/activar-hooks-proyecto.js +116 -116
- package/scripts/lib/approval-receipts.js +190 -0
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/certificacion-loop-state.js +421 -0
- package/scripts/lib/ci-reader.js +193 -193
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
- package/scripts/lib/ciclo-autonomo/config.js +165 -165
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
- package/scripts/lib/ciclo-autonomo/index.js +301 -301
- package/scripts/lib/ciclo-autonomo/lock.js +124 -124
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +591 -535
- package/scripts/lib/clasificar-directorio.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-host-swl.js +175 -175
- package/scripts/lib/detectar-runtime.js +29 -20
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
- package/scripts/lib/detector-reglas-duplicadas.js +220 -220
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/evidence-verifier.js +192 -0
- package/scripts/lib/evidencia-release.js +322 -322
- package/scripts/lib/evidencia-valor.js +228 -228
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/frontmatter-canonico.js +509 -0
- package/scripts/lib/gate-engine.js +871 -0
- package/scripts/lib/gate-hooks-requires.js +249 -249
- package/scripts/lib/gate-licencias.js +212 -212
- package/scripts/lib/git-config-preflight.js +48 -0
- package/scripts/lib/git-metricas.js +257 -257
- package/scripts/lib/harness-ir.js +778 -0
- package/scripts/lib/harness-source-snapshot.js +309 -0
- package/scripts/lib/integrity-ledger.js +1147 -0
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/legacy-gate-migration.js +324 -0
- package/scripts/lib/limpiar-basura-global.js +204 -0
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/metricas-dora.js +204 -204
- package/scripts/lib/notificaciones-telegram.js +1 -0
- package/scripts/lib/npm-version.js +1 -0
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/plan-lock.js +61 -13
- package/scripts/lib/policy-broker.js +338 -0
- package/scripts/lib/policy-bundle.js +342 -0
- package/scripts/lib/policy-context-provider.js +310 -0
- package/scripts/lib/policy-contract.js +479 -0
- package/scripts/lib/policy-verifier-utils.js +65 -0
- package/scripts/lib/pr-analyzer.js +399 -399
- package/scripts/lib/principal-verifier.js +178 -0
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/resolver-plan-fase.js +37 -37
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/runtime-adapter-contract.js +267 -0
- package/scripts/lib/runtime-artifact-verifier.js +426 -0
- package/scripts/lib/runtime-build-attestation.js +127 -0
- package/scripts/lib/runtime-bundle-installer.js +586 -0
- package/scripts/lib/runtime-compiler.js +327 -0
- package/scripts/lib/runtime-conformance.js +202 -0
- package/scripts/lib/runtime-doctor-core3.js +567 -0
- package/scripts/lib/runtime-doctor-input.js +59 -0
- package/scripts/lib/runtime-operation-adapter.js +267 -0
- package/scripts/lib/schema-version.js +164 -164
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/signed-envelope.js +545 -0
- package/scripts/lib/single-use-store.js +359 -0
- package/scripts/lib/skills-externas.js +31 -0
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/transformadores/codex.js +15 -8
- package/scripts/lib/transformadores/gemini.js +79 -5
- package/scripts/lib/w4-attestation-adapter.js +158 -0
- package/scripts/lib/w4-canario.js +337 -0
- package/scripts/lib/w4-claims.js +182 -0
- package/scripts/lib/w4-corpus-generador.js +542 -0
- package/scripts/lib/w4-gate-c5.js +115 -0
- package/scripts/lib/w4-harness-bajo-prueba.js +155 -0
- package/scripts/lib/w4-matriz-combos.js +55 -0
- package/scripts/lib/w4-motor-mutacion.js +1348 -0
- package/scripts/lib/w4-motor-replay.js +735 -0
- package/scripts/lib/w4-pin-origen.js +54 -0
- package/scripts/lib/w4-publicar-request.js +132 -0
- package/scripts/lib/w4-revocacion.js +62 -0
- package/scripts/lib/w4-runtimes-core3.js +38 -0
- package/scripts/lib/w4-scorer-certificacion.js +692 -0
- package/scripts/lib/w4-superficie-candidato.js +49 -0
- package/scripts/lib/w4-veredicto.js +452 -0
- package/scripts/lib/w4-verificar-veredicto.js +302 -0
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +200 -200
- package/scripts/migrar-gates-legacy.js +108 -0
- package/scripts/publicar-certification-request.js +115 -0
- package/scripts/runtime-doctor.js +107 -0
- package/scripts/tui/componentes/selector-multi.js +189 -189
- package/scripts/tui/componentes/selector-unico.js +158 -158
- package/scripts/tui/ejecutores.js +375 -375
- package/scripts/tui/lib/colores.js +129 -129
- package/scripts/tui/lib/render.js +264 -264
- package/scripts/tui/lib/teclas.js +113 -113
- package/scripts/tui/pantallas/install-wizard.js +408 -403
- package/scripts/tui/pantallas/menu-principal.js +52 -52
- package/scripts/tui/pantallas/progreso.js +274 -274
- package/scripts/tui/pantallas/resumen.js +132 -132
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-aislamiento-swl-eval.js +87 -0
- package/scripts/verificar-empaquetado-downstream.js +375 -0
- package/scripts/verificar-loop-constructor.js +215 -0
- package/scripts/verificar-trazabilidad.js +13 -6
- package/scripts/verificar-veredicto-real.js +84 -0
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
- package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_comentario": "Template de .mcp.json para proyectos Claude-ready. Eliminar los servidores que no se usen. Las variables de entorno con valor vacío deben completarse en .env o exportarse antes de correr claude.",
|
|
3
|
-
"_instrucciones": [
|
|
4
|
-
"1. Copiar este archivo a la raíz del proyecto como .mcp.json",
|
|
5
|
-
"2. Eliminar el bloque _comentario y _instrucciones (no son JSON válido en producción)",
|
|
6
|
-
"3. Configurar las variables de entorno requeridas por cada servidor activo",
|
|
7
|
-
"4. Agregar .mcp.json al repositorio (no contiene secretos — los secretos van en env vars)",
|
|
8
|
-
"5. Agregar a .gitignore cualquier archivo .mcp.local.json con credenciales"
|
|
9
|
-
],
|
|
10
|
-
"_nota_archivados": "Los reference servers @modelcontextprotocol/server-github, server-postgres, server-sqlite, server-brave-search y server-puppeteer fueron ARCHIVADOS por el proyecto MCP. No usarlos en proyectos nuevos — los reemplazos vigentes están abajo (GitHub remoto oficial, Playwright oficial de Microsoft).",
|
|
11
|
-
"mcpServers": {
|
|
12
|
-
"context7": {
|
|
13
|
-
"_descripcion": "Documentación actualizada de librerías. Uso: 'use context7' en el prompt.",
|
|
14
|
-
"command": "npx",
|
|
15
|
-
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
16
|
-
},
|
|
17
|
-
"github": {
|
|
18
|
-
"_descripcion": "GitHub MCP server oficial (remoto): issues, PRs, repos, commits. Reemplaza al archivado @modelcontextprotocol/server-github. Autenticación OAuth al conectar, o PAT vía header.",
|
|
19
|
-
"type": "http",
|
|
20
|
-
"url": "https://api.githubcopilot.com/mcp/"
|
|
21
|
-
},
|
|
22
|
-
"playwright": {
|
|
23
|
-
"_descripcion": "Control de navegador con Playwright (oficial de Microsoft). Testing E2E, scraping, automatización web. Reemplaza al archivado server-puppeteer.",
|
|
24
|
-
"_activar": "Requiere Node 18+ — descarga browsers en el primer uso",
|
|
25
|
-
"command": "npx",
|
|
26
|
-
"args": ["-y", "@playwright/mcp@latest"]
|
|
27
|
-
},
|
|
28
|
-
"filesystem": {
|
|
29
|
-
"_descripcion": "Acceso a sistema de archivos fuera del directorio de trabajo. Usar con cuidado.",
|
|
30
|
-
"_activar": "Descomentar solo si se necesita acceso a paths fuera del proyecto",
|
|
31
|
-
"command": "npx",
|
|
32
|
-
"args": [
|
|
33
|
-
"-y",
|
|
34
|
-
"@modelcontextprotocol/server-filesystem",
|
|
35
|
-
"/ruta/al/directorio/permitido"
|
|
36
|
-
]
|
|
37
|
-
},
|
|
38
|
-
"fetch": {
|
|
39
|
-
"_descripcion": "Extracción y conversión de contenido web a markdown.",
|
|
40
|
-
"_activar": "Útil cuando WebFetch nativo no basta (contenido que requiere conversión estructurada)",
|
|
41
|
-
"command": "npx",
|
|
42
|
-
"args": ["-y", "@modelcontextprotocol/server-fetch"]
|
|
43
|
-
},
|
|
44
|
-
"memory": {
|
|
45
|
-
"_descripcion": "Memoria persistente entre sesiones. Almacena entidades y relaciones en grafo.",
|
|
46
|
-
"_activar": "Útil para proyectos largos donde se quiere persistir contexto entre sesiones",
|
|
47
|
-
"command": "npx",
|
|
48
|
-
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
|
49
|
-
},
|
|
50
|
-
"sequential-thinking": {
|
|
51
|
-
"_descripcion": "Herramienta de razonamiento estructurado para problemas complejos.",
|
|
52
|
-
"_activar": "Útil para arquitectura, debugging complejo, decisiones de diseño",
|
|
53
|
-
"command": "npx",
|
|
54
|
-
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"_comentario": "Template de .mcp.json para proyectos Claude-ready. Eliminar los servidores que no se usen. Las variables de entorno con valor vacío deben completarse en .env o exportarse antes de correr claude.",
|
|
3
|
+
"_instrucciones": [
|
|
4
|
+
"1. Copiar este archivo a la raíz del proyecto como .mcp.json",
|
|
5
|
+
"2. Eliminar el bloque _comentario y _instrucciones (no son JSON válido en producción)",
|
|
6
|
+
"3. Configurar las variables de entorno requeridas por cada servidor activo",
|
|
7
|
+
"4. Agregar .mcp.json al repositorio (no contiene secretos — los secretos van en env vars)",
|
|
8
|
+
"5. Agregar a .gitignore cualquier archivo .mcp.local.json con credenciales"
|
|
9
|
+
],
|
|
10
|
+
"_nota_archivados": "Los reference servers @modelcontextprotocol/server-github, server-postgres, server-sqlite, server-brave-search y server-puppeteer fueron ARCHIVADOS por el proyecto MCP. No usarlos en proyectos nuevos — los reemplazos vigentes están abajo (GitHub remoto oficial, Playwright oficial de Microsoft).",
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"context7": {
|
|
13
|
+
"_descripcion": "Documentación actualizada de librerías. Uso: 'use context7' en el prompt.",
|
|
14
|
+
"command": "npx",
|
|
15
|
+
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
16
|
+
},
|
|
17
|
+
"github": {
|
|
18
|
+
"_descripcion": "GitHub MCP server oficial (remoto): issues, PRs, repos, commits. Reemplaza al archivado @modelcontextprotocol/server-github. Autenticación OAuth al conectar, o PAT vía header.",
|
|
19
|
+
"type": "http",
|
|
20
|
+
"url": "https://api.githubcopilot.com/mcp/"
|
|
21
|
+
},
|
|
22
|
+
"playwright": {
|
|
23
|
+
"_descripcion": "Control de navegador con Playwright (oficial de Microsoft). Testing E2E, scraping, automatización web. Reemplaza al archivado server-puppeteer.",
|
|
24
|
+
"_activar": "Requiere Node 18+ — descarga browsers en el primer uso",
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
27
|
+
},
|
|
28
|
+
"filesystem": {
|
|
29
|
+
"_descripcion": "Acceso a sistema de archivos fuera del directorio de trabajo. Usar con cuidado.",
|
|
30
|
+
"_activar": "Descomentar solo si se necesita acceso a paths fuera del proyecto",
|
|
31
|
+
"command": "npx",
|
|
32
|
+
"args": [
|
|
33
|
+
"-y",
|
|
34
|
+
"@modelcontextprotocol/server-filesystem",
|
|
35
|
+
"/ruta/al/directorio/permitido"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"fetch": {
|
|
39
|
+
"_descripcion": "Extracción y conversión de contenido web a markdown.",
|
|
40
|
+
"_activar": "Útil cuando WebFetch nativo no basta (contenido que requiere conversión estructurada)",
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["-y", "@modelcontextprotocol/server-fetch"]
|
|
43
|
+
},
|
|
44
|
+
"memory": {
|
|
45
|
+
"_descripcion": "Memoria persistente entre sesiones. Almacena entidades y relaciones en grafo.",
|
|
46
|
+
"_activar": "Útil para proyectos largos donde se quiere persistir contexto entre sesiones",
|
|
47
|
+
"command": "npx",
|
|
48
|
+
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
|
49
|
+
},
|
|
50
|
+
"sequential-thinking": {
|
|
51
|
+
"_descripcion": "Herramienta de razonamiento estructurado para problemas complejos.",
|
|
52
|
+
"_activar": "Útil para arquitectura, debugging complejo, decisiones de diseño",
|
|
53
|
+
"command": "npx",
|
|
54
|
+
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: extractor-de-aprendizajes
|
|
3
3
|
description: Convertir errores y patrones descubiertos durante la implementación en nuevas habilidades o reglas. Ciclo de mejora continua del sistema SWL.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.9"
|
|
5
5
|
herramientasPermitidas: [Read]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para actualizar el perfil del usuario — las correcciones explícitas del usuario van a `instintos/perfil-usuario.yaml` vía `perfilador-usuario-swl`, no a APRENDIZAJES.md."
|
|
@@ -291,7 +291,7 @@ Durante `/swl:aprender`, aplicar estas reglas:
|
|
|
291
291
|
- **`rating: HIGH` asignado sin verificar criterio de irreversibilidad**: el agente promueve a CLAUDE.md un aprendizaje "MEDIUM" por el entusiasmo del momento. Causa: no se aplicó el criterio de "decisión irreversible o bug crítico". Solución: antes de asignar HIGH, verificar: ¿cambiar esto en el futuro requeriría refactorizar múltiples archivos o migrar datos? Si no, mantener MEDIUM.
|
|
292
292
|
- **Regla incompleta sobre registro de hooks**: una entrada en memoria dice "registrar en modulos.json" pero omite `hooks-config.json`, y en la siguiente iteración se repite el fallo en CI porque ambos manifiestos son obligatorios. Causa: la regla de la lección anterior no cubrió todos los manifiestos afectados. Solución: al documentar una regla sobre registro en manifiestos, listar EXPLÍCITAMENTE cada manifiesto con su responsabilidad distinta (`modulos.json` = qué copiar; `hooks-config.json` = cómo registrar evento). Evidencia: tres incidentes históricos del mismo patrón incompleto (v5.7.1, v5.7.2/3, v5.11.0).
|
|
293
293
|
- **Inventario estimado a mano en vez de regenerar**: el agente cuenta "28 hooks" visualmente y propaga la cifra a 5 archivos (CLAUDE/README/package/plugin/SALUD); al regenerar con `scripts/generar-inventario.js` el número real es 30. Causa: confiar en la observación directa en vez de la fuente de verdad determinista. Solución: antes de modificar cualquier contador en documentación oficial, ejecutar el script de inventario y usar su salida como ground truth.
|
|
294
|
-
- **Sub-agentes (Explore + revisores + agentes de documentación) reportan afirmaciones factuales no verificadas** [CONFIRMADO
|
|
294
|
+
- **Sub-agentes (Explore + revisores + agentes de documentación + agentes de implementación) reportan afirmaciones factuales no verificadas** [CONFIRMADO x9]: aplica a `Explore`, `revisor-codigo-swl`, `revisor-seguridad-swl`, `investigador-swl`, `planificador-swl`, `claude-code-guide`, agentes de implementación en `Agent(isolation:"worktree")`, y en general a cualquier sub-agente que reporte hallazgos sobre código o capacidades de herramientas. **Seis modos de falla observados**:
|
|
295
295
|
|
|
296
296
|
**Modo A — papers académicos** (sesión 2026-04-25): sub-agente Explore propuso 50h+ para implementar SPRT + Lyapunov + compositionality theorem del paper Bhardwaj 2026; costo real validado fue ~5h (solo Drift Score + Recovery Catalog). Causa: el Explore evalúa portabilidad técnica sin aplicar filtro de "datos disponibles" ni "infraestructura zero-deps". Evidencia: 3 papers analizados (evolver, Bhardwaj 2026, Zhang et al. 2026) con descarte sistemático ~70-90% del contenido propuesto.
|
|
297
297
|
|
|
@@ -301,6 +301,12 @@ Durante `/swl:aprender`, aplicar estas reglas:
|
|
|
301
301
|
|
|
302
302
|
**Modo D — agentes de documentación responden por inferencia del contexto local sin consultar la fuente oficial** (sesión 2026-06-11 swl-ses Fase 09; precedente 2026-05-15 con runtimes Cursor/Codex): `claude-code-guide` emitió veredicto categórico "Claude Code NO soporta carga condicional por `paths:` en rules; el frontmatter sería inerte" basándose en que la config local del usuario no usaba ese campo (declinó el WebFetch a docs). Un WebFetch directo a `code.claude.com/docs/en/memory` demostró lo contrario: `paths:` es feature nativa documentada con sintaxis exacta, brace expansion y soporte user-level. Aceptar el veredicto habría descartado un slice completo de la fase. Causa: "ausencia de evidencia en el contexto local" tratada como "evidencia de ausencia en el producto" — mismo patrón del precedente 2026-05-15 ("Cursor no soporta hooks" — falso). Las features recientes nunca aparecen en configs existentes precisamente por ser recientes.
|
|
303
303
|
|
|
304
|
+
**Modo E — agentes de implementación en worktree declaran honestamente una limitación de entorno, pero eso no exime de re-verificar** (caso real 2026-07-11): un agente de implementación en `Agent(isolation:"worktree")` reportó explícitamente "pytest no pudo ejecutarse localmente porque el worktree no tiene el intérprete requerido por `pyproject.toml`; solo verifiqué con `ruff check`/`ruff format`" — a diferencia de los Modos A-D, aquí el agente NO mintió ni infirió mal: describió su limitación con precisión. El riesgo no es la honestidad del agente sino tratar "declaró su limitación" como equivalente a "está verificado". Al re-ejecutar la suite real con el entorno correcto del proyecto principal tras integrar el trabajo, aparecieron 7 fallas reales (mocks con `side_effect` desactualizados por cambios de firma que el agente sí hizo pero no pudo ejercitar). Causa: un worktree nuevo no hereda automáticamente el `.venv`/entorno del checkout principal — puede resolver un intérprete distinto vía el PATH del sistema. Patrón: cualquier declaración de "no pude verificar X" en el reporte de un sub-agente es una BANDERA para verificar X manualmente con la máxima prioridad, nunca una nota informativa a ignorar.
|
|
305
|
+
|
|
306
|
+
**Modo F — sub-agente con mandato explícito de SOLO LECTURA ejecuta un comando destructivo** (caso real 2026-07-11): un agente de auditoría lanzado con "PROHIBIDO modificar cualquier archivo o la BD; solo Read/Grep/Glob y SELECT" ejecutó (vía un sub-agente anidado propio) un `rm -f` que borró un PNG de evidencia en la raíz del repo. El archivo estaba SIN TRACKEAR en git → irrecuperable (los tracked se restauran con `git checkout --`; los untracked no tienen red de seguridad). El agente REPORTÓ el incidente con honestidad en su resultado final — pero el daño ya estaba hecho. Causa: el mandato en el prompt es una instrucción, no una contención; los agentes anidados heredan herramientas, no disciplina. Diferencia con el Modo E: allí el riesgo era aceptar un reporte incompleto; aquí es daño colateral directo al workspace. Patrón doble: (1) `git status` comparativo tras CADA agente; (2) ANTES de lanzar agentes sobre un working tree con archivos untracked valiosos, protegerlos primero — commitearlos, moverlos fuera del repo o copiarlos (el trabajo sin commitear es la única víctima sin recuperación posible).
|
|
307
|
+
|
|
308
|
+
**Modo G — revisores adversariales en paralelo verifican la LÓGICA de un módulo pero nunca RE-DERIVAN el número que reporta** (caso real 2026-07-17, swl-ses F32-T07): 4 revisores adversariales corriendo en paralelo (incluido un agente `abogado-diablo-swl` con mandato explícito de refutar) auditaron un motor de mutation testing que reportaba mutation score 100% en 7 de 20 módulos críticos. Los 4 revisaron la lógica del clasificador, el manejo de errores y la cobertura de casos — ninguno detectó que esos 7 módulos "100%" nunca corrían un solo mutante real: todos morían por `MODULE_NOT_FOUND` de un entorno mal aislado, y el clasificador contaba esos fallos como kills. El bug solo apareció cuando el orquestador (no un revisor) reprodujo el cómputo en aislamiento (`ejecutarMutationTesting({modulos:[unicoModulo]})`) para cada módulo "100%" y confirmó que fallaban los 7. Causa: revisar código verifica que la LÓGICA sea razonable; no verifica que la CIFRA agregada que esa lógica produjo sea real — son preguntas distintas, y un panel de revisores de código, por más adversarial que sea, responde la primera, no la segunda. Diferencia con el Modo C (ubicaciones/severidades incorrectas): ahí el revisor mira código y se equivoca sobre el código; aquí el revisor mira código, tiene razón sobre el código, y el bug vive en la intersección entre el código y el entorno de ejecución — invisible sin ejecutar.
|
|
309
|
+
|
|
304
310
|
**Solución unificada — protocolo de verificación de afirmaciones factuales antes de aceptar propuesta de CUALQUIER sub-agente**:
|
|
305
311
|
|
|
306
312
|
*Patrón obligatorio aplicable a TODOS los modos*: extraer 2-3 afirmaciones factuales del reporte del sub-agente y verificar cada una con primitivas baratas (`Grep`/`Read`/`wc -l`/`ls`/`git log`) ANTES de aceptar el plan o acción. Tipos de afirmaciones a verificar:
|
|
@@ -316,6 +322,10 @@ Durante `/swl:aprender`, aplicar estas reglas:
|
|
|
316
322
|
*Para revisores de código (Modo C)*: además del patrón obligatorio, **re-clasificar severidad cuando el revisor solo miró parte del flujo**. Si el revisor marca MAYOR un bug del Response, verificar si el Request también está afectado — los happy paths típicamente involucran ambos lados.
|
|
317
323
|
|
|
318
324
|
*Para agentes de documentación (Modo D)*: todo veredicto **NO-EXISTE / NO-SOPORTADO** sobre una feature de un producto externo exige cita a la doc oficial consultada EN ese turno (URL + extracto). Si el agente "verifica" solo contra el contexto local (configs del usuario, código del repo), su veredicto es inferencia, no verificación — re-verificar con 1 WebFetch a la doc oficial antes de tomar decisiones de diseño sobre él. Regla mnemónica: *ausencia en mi config ≠ ausencia en el producto*.
|
|
325
|
+
|
|
326
|
+
*Para agentes de implementación en worktree (Modo E)*: cualquier frase tipo "no pude correr X", "el entorno no tenía Y", "solo verifiqué con Z" en el reporte final es una señal de PRIORIDAD MÁXIMA — re-ejecutar exactamente lo que el agente no pudo ejecutar (suite de tests completa, no solo el archivo que tocó) con el entorno correcto del checkout principal ANTES de dar el trabajo por terminado. Nunca degradar esa frase a "nota informativa" solo porque el resto del reporte suena confiado.
|
|
327
|
+
|
|
328
|
+
*Para paneles de revisores adversariales sobre un claim NUMÉRICO/AGREGADO (Modo G)*: cuando el artefacto bajo revisión reporta un score, porcentaje o conteo derivado de una corrida (mutation score, cobertura, latencia p95, tasa de éxito), el patrón obligatorio de "verificar 2-3 afirmaciones con Grep/Read" NO alcanza — hay que re-derivar la cifra en un subconjunto aislado y mínimo (un solo módulo, un solo caso) ANTES de aceptar el agregado. Un panel de revisores que solo lee el código del cómputo, sin ejecutar ni un fragmento, no puede detectar bugs que viven en la intersección código↔entorno.
|
|
319
329
|
- **Hooks de calidad pre-commit bloquean fixtures de tests como falsos positivos**: el hook `calidad-pre-commit.js` aplica regex `\b(api_key|password|token|secret)\s*[=:]\s*["'][^"'\s]{4,}["']` que matchea fixtures legítimos en archivos de test. Caso real: test que valida que la función `sanitizar()` redacta `api_key="abc12345xyz"` se bloquea. Causa: el hook no distingue contexto de test vs producción. Solución: en archivos de test, construir fixtures con concatenación de strings (`'api' + '_key'`, `'pass' + 'word'`) o agregar marcador placeholder reconocido por el hook (`fake_`, `dummy_`, `placeholder`, `example`, `os.environ`). NUNCA bypassear el hook con `--no-verify` — el detector cumple su función; ajustar el fixture es lo correcto.
|
|
320
330
|
- **Regex de path-matching `/[\\/]<dir>[\\/]/` falla con paths relativos sin slash inicial** [CONFIRMADO x4]: hooks que filtran archivos por directorio (ej: `hooks/extraccion-aprendizajes.js` con `PATRONES_ARCHIVO_SWL_EXCLUIDO`) usan patrones que requieren un separator ANTES del nombre. Caso real: path `scripts/lib/foo.js` (sin slash inicial) eludía el filtro de exclusión y generaba placeholders espurios en APRENDIZAJES.md cada vez que se hacía `Edit` o `Write` sobre archivos del sistema SWL. Causa: el regex `[\\/]` requiere un caracter slash/backslash previo; cuando el path empieza con el nombre del directorio directamente, no matchea. Solución: usar `/(?:^|[\\/])<dir>[\\/]/` para aceptar tanto el inicio del string como un separator previo. Evidencia: 4 placeholders eliminados manualmente entre v1.3.3-v1.3.5 antes de identificar la causa raíz; fix endurecido aplicado en v1.3.5 (Fix I).
|
|
321
331
|
- **`git ls-files` es preferible a `fs.readdir` recursivo para tests anti-regresión que escanean el repo**: usar `execSync('git ls-files')` limita el escaneo a archivos versionados — evita `node_modules/`, `.git/`, `_userland/`, archivos temporales y backups sin enumerar exclusiones. Caso real: `tests/scripts/no-legacy-npx-pattern.test.js` v1.3.6 escanea 1000+ archivos versionados en <200ms; el equivalente con `fs.readdir` recursivo más exclusiones manuales sería más lento y propenso a olvidar paths. Cuando el test es de "calidad del repo" (no de comportamiento), `git ls-files` es la primitiva correcta.
|
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
# Preguntas Feynman — Language-Agnostic
|
|
2
|
-
|
|
3
|
-
28 preguntas organizadas en 7 categorías. Aplicar a cada función no trivial del módulo bajo auditoría.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Q1 — Propósito
|
|
8
|
-
|
|
9
|
-
**Q1.1** ¿Qué hace exactamente esta función y solo esta función? Si no puedo describirla en una oración sin usar "y", ¿tiene demasiadas responsabilidades?
|
|
10
|
-
|
|
11
|
-
**Q1.2** ¿Cuál es el invariante que esta función garantiza al terminar? ¿El código lo garantiza de verdad o solo en el camino feliz?
|
|
12
|
-
|
|
13
|
-
**Q1.3** ¿Hay alguna condición en que esta función debería rechazar la operación pero no lo hace? ¿Qué pasa si se la llama dos veces seguidas con los mismos argumentos?
|
|
14
|
-
|
|
15
|
-
**Q1.4** ¿Esta función asume que el estado del sistema está en alguna condición particular antes de ejecutarse? ¿Dónde se verifica esa condición?
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Q2 — Orden de operaciones
|
|
20
|
-
|
|
21
|
-
**Q2.1** ¿Importa el orden en que estas líneas se ejecutan? Si cambio el orden de dos líneas adyacentes, ¿el resultado es el mismo?
|
|
22
|
-
|
|
23
|
-
**Q2.2** ¿Esta función lee un valor y luego lo modifica? Si algo cambia el valor entre la lectura y la escritura, ¿qué pasa?
|
|
24
|
-
|
|
25
|
-
**Q2.3** ¿El cálculo de recompensa, crédito, o resultado se hace ANTES o DESPUÉS de actualizar el estado base? ¿Debería ser al revés?
|
|
26
|
-
|
|
27
|
-
**Q2.4** ¿Si esta función llama a un sistema externo (BD, API, caché), el estado local ya está actualizado en ese momento? ¿El sistema externo puede ver un estado inconsistente?
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Q3 — Consistencia cross-función
|
|
32
|
-
|
|
33
|
-
**Q3.1** ¿Qué tienen en común esta función y otra que hace algo similar? ¿Una tiene un guard o una actualización que la otra no tiene?
|
|
34
|
-
|
|
35
|
-
**Q3.2** ¿Existe una función de "camino normal" y una de "camino de emergencia/admin"? ¿Ambas actualizan exactamente el mismo conjunto de estado?
|
|
36
|
-
|
|
37
|
-
**Q3.3** ¿Esta función inicializa todos los campos que otras funciones esperan encontrar inicializados? ¿Hay algún campo que se lee antes de ser escrito?
|
|
38
|
-
|
|
39
|
-
**Q3.4** ¿El path que crea un recurso y el path que lo elimina dejan el sistema en un estado simétrico? ¿O el delete deja huérfanos?
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Q4 — Asunciones implícitas
|
|
44
|
-
|
|
45
|
-
**Q4.1** ¿Qué asume este código sobre el tipo o el rango del argumento que recibe? ¿Hay alguna validación que debería existir pero no existe?
|
|
46
|
-
|
|
47
|
-
**Q4.2** ¿El código asume que el actor que llama esta función tiene permiso para hacerlo? ¿Dónde se verifica ese permiso exactamente?
|
|
48
|
-
|
|
49
|
-
**Q4.3** ¿El código asume que algún recurso externo (BD, archivo, servicio) está disponible y en un estado consistente? ¿Qué pasa si no lo está?
|
|
50
|
-
|
|
51
|
-
**Q4.4** ¿El código asume que nunca se llamará con valor cero, lista vacía, o string vacío? ¿Se validó eso?
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Q5 — Límites y casos de borde
|
|
56
|
-
|
|
57
|
-
**Q5.1** ¿Qué pasa si el valor es exactamente cero? ¿Y si es el máximo representable? ¿Y si es negativo?
|
|
58
|
-
|
|
59
|
-
**Q5.2** ¿Qué pasa si la lista o colección está vacía? ¿Y si tiene exactamente un elemento? ¿Y si tiene millones?
|
|
60
|
-
|
|
61
|
-
**Q5.3** ¿Qué pasa si el recurso ya existe cuando se intenta crear? ¿Y si no existe cuando se intenta modificar o eliminar?
|
|
62
|
-
|
|
63
|
-
**Q5.4** ¿Qué pasa si dos actores ejecutan esta función al mismo tiempo? ¿Hay condición de carrera? ¿El resultado es determinista?
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## Q6 — Returns y manejo de errores
|
|
68
|
-
|
|
69
|
-
**Q6.1** ¿Qué devuelve esta función cuando el input es inválido? ¿Lanza excepción, devuelve null, devuelve un error tipado, o silencia el problema?
|
|
70
|
-
|
|
71
|
-
**Q6.2** ¿Si una operación parcial falla a mitad de camino, el estado queda consistente? ¿Hay rollback? ¿O el sistema queda a medias?
|
|
72
|
-
|
|
73
|
-
**Q6.3** ¿El caller de esta función verifica el valor de retorno? ¿Un error no verificado puede causar daño silencioso más adelante?
|
|
74
|
-
|
|
75
|
-
**Q6.4** ¿El código captura excepciones de forma demasiado amplia (`except Exception`, `catch (e)` vacío)? ¿Qué errores legítimos podría estar silenciando?
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Q7 — Interacciones externas
|
|
80
|
-
|
|
81
|
-
**Q7.1** ¿Esta función llama a un sistema externo (BD, API, caché, cola)? ¿La llamada puede fallar? ¿Qué pasa con el estado local si falla?
|
|
82
|
-
|
|
83
|
-
**Q7.2** ¿Esta función persiste datos en más de un lugar (ej: BD + caché + índice)? ¿Qué pasa si la segunda escritura falla después de que la primera tuvo éxito?
|
|
84
|
-
|
|
85
|
-
**Q7.3** ¿El acumulador o índice que esta función usa se actualiza ANTES de modificar el valor base, o DESPUÉS? ¿El orden importa para la correctitud del cálculo?
|
|
86
|
-
|
|
87
|
-
**Q7.4** ¿Esta función envía una notificación, evento, o mensaje a otro sistema? ¿Lo hace antes o después de confirmar la operación? ¿El receptor puede actuar sobre un estado que aún no se confirmó?
|
|
88
|
-
|
|
89
|
-
**Q7.5** ¿Esta función lee un valor de caché y lo trata como fresco? ¿Hay algún path donde la caché puede estar desactualizada respecto a la fuente de verdad?
|
|
90
|
-
|
|
91
|
-
**Q7.6** ¿Esta función modifica datos de otro actor además de los del actor que la llama? ¿Tiene permiso para hacerlo en todos los casos?
|
|
92
|
-
|
|
93
|
-
**Q7.7** ¿Existe un patrón de acumulador donde el total acumulado se calcula con base en el estado anterior? Si el estado base cambia (insert/update/delete de otro registro), ¿el acumulador refleja el cambio correctamente?
|
|
94
|
-
|
|
95
|
-
**Q7.8** ¿Esta función delega a otra función que tiene sus propios efectos secundarios? ¿El caller sabe qué estado modifica el callee internamente?
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## Cómo usar estas preguntas
|
|
100
|
-
|
|
101
|
-
1. Leer la función completa una vez para entender el propósito.
|
|
102
|
-
2. Para cada pregunta de las categorías Q1–Q7, marcar:
|
|
103
|
-
- ✓ Respondida claramente por el código
|
|
104
|
-
- ? Requiere rastrear el caller o el sistema externo para responder
|
|
105
|
-
- ✗ El código no la responde — sospechoso de bug
|
|
106
|
-
3. Todo `✗` o `?` sin resolver es un **sospechoso** para Fase 3 de síntesis.
|
|
107
|
-
|
|
108
|
-
<!-- Adaptado de nemesis-auditor-main bajo MIT License (https://github.com/0xiehnnkta/nemesis-auditor) -->
|
|
1
|
+
# Preguntas Feynman — Language-Agnostic
|
|
2
|
+
|
|
3
|
+
28 preguntas organizadas en 7 categorías. Aplicar a cada función no trivial del módulo bajo auditoría.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Q1 — Propósito
|
|
8
|
+
|
|
9
|
+
**Q1.1** ¿Qué hace exactamente esta función y solo esta función? Si no puedo describirla en una oración sin usar "y", ¿tiene demasiadas responsabilidades?
|
|
10
|
+
|
|
11
|
+
**Q1.2** ¿Cuál es el invariante que esta función garantiza al terminar? ¿El código lo garantiza de verdad o solo en el camino feliz?
|
|
12
|
+
|
|
13
|
+
**Q1.3** ¿Hay alguna condición en que esta función debería rechazar la operación pero no lo hace? ¿Qué pasa si se la llama dos veces seguidas con los mismos argumentos?
|
|
14
|
+
|
|
15
|
+
**Q1.4** ¿Esta función asume que el estado del sistema está en alguna condición particular antes de ejecutarse? ¿Dónde se verifica esa condición?
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Q2 — Orden de operaciones
|
|
20
|
+
|
|
21
|
+
**Q2.1** ¿Importa el orden en que estas líneas se ejecutan? Si cambio el orden de dos líneas adyacentes, ¿el resultado es el mismo?
|
|
22
|
+
|
|
23
|
+
**Q2.2** ¿Esta función lee un valor y luego lo modifica? Si algo cambia el valor entre la lectura y la escritura, ¿qué pasa?
|
|
24
|
+
|
|
25
|
+
**Q2.3** ¿El cálculo de recompensa, crédito, o resultado se hace ANTES o DESPUÉS de actualizar el estado base? ¿Debería ser al revés?
|
|
26
|
+
|
|
27
|
+
**Q2.4** ¿Si esta función llama a un sistema externo (BD, API, caché), el estado local ya está actualizado en ese momento? ¿El sistema externo puede ver un estado inconsistente?
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Q3 — Consistencia cross-función
|
|
32
|
+
|
|
33
|
+
**Q3.1** ¿Qué tienen en común esta función y otra que hace algo similar? ¿Una tiene un guard o una actualización que la otra no tiene?
|
|
34
|
+
|
|
35
|
+
**Q3.2** ¿Existe una función de "camino normal" y una de "camino de emergencia/admin"? ¿Ambas actualizan exactamente el mismo conjunto de estado?
|
|
36
|
+
|
|
37
|
+
**Q3.3** ¿Esta función inicializa todos los campos que otras funciones esperan encontrar inicializados? ¿Hay algún campo que se lee antes de ser escrito?
|
|
38
|
+
|
|
39
|
+
**Q3.4** ¿El path que crea un recurso y el path que lo elimina dejan el sistema en un estado simétrico? ¿O el delete deja huérfanos?
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Q4 — Asunciones implícitas
|
|
44
|
+
|
|
45
|
+
**Q4.1** ¿Qué asume este código sobre el tipo o el rango del argumento que recibe? ¿Hay alguna validación que debería existir pero no existe?
|
|
46
|
+
|
|
47
|
+
**Q4.2** ¿El código asume que el actor que llama esta función tiene permiso para hacerlo? ¿Dónde se verifica ese permiso exactamente?
|
|
48
|
+
|
|
49
|
+
**Q4.3** ¿El código asume que algún recurso externo (BD, archivo, servicio) está disponible y en un estado consistente? ¿Qué pasa si no lo está?
|
|
50
|
+
|
|
51
|
+
**Q4.4** ¿El código asume que nunca se llamará con valor cero, lista vacía, o string vacío? ¿Se validó eso?
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Q5 — Límites y casos de borde
|
|
56
|
+
|
|
57
|
+
**Q5.1** ¿Qué pasa si el valor es exactamente cero? ¿Y si es el máximo representable? ¿Y si es negativo?
|
|
58
|
+
|
|
59
|
+
**Q5.2** ¿Qué pasa si la lista o colección está vacía? ¿Y si tiene exactamente un elemento? ¿Y si tiene millones?
|
|
60
|
+
|
|
61
|
+
**Q5.3** ¿Qué pasa si el recurso ya existe cuando se intenta crear? ¿Y si no existe cuando se intenta modificar o eliminar?
|
|
62
|
+
|
|
63
|
+
**Q5.4** ¿Qué pasa si dos actores ejecutan esta función al mismo tiempo? ¿Hay condición de carrera? ¿El resultado es determinista?
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Q6 — Returns y manejo de errores
|
|
68
|
+
|
|
69
|
+
**Q6.1** ¿Qué devuelve esta función cuando el input es inválido? ¿Lanza excepción, devuelve null, devuelve un error tipado, o silencia el problema?
|
|
70
|
+
|
|
71
|
+
**Q6.2** ¿Si una operación parcial falla a mitad de camino, el estado queda consistente? ¿Hay rollback? ¿O el sistema queda a medias?
|
|
72
|
+
|
|
73
|
+
**Q6.3** ¿El caller de esta función verifica el valor de retorno? ¿Un error no verificado puede causar daño silencioso más adelante?
|
|
74
|
+
|
|
75
|
+
**Q6.4** ¿El código captura excepciones de forma demasiado amplia (`except Exception`, `catch (e)` vacío)? ¿Qué errores legítimos podría estar silenciando?
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Q7 — Interacciones externas
|
|
80
|
+
|
|
81
|
+
**Q7.1** ¿Esta función llama a un sistema externo (BD, API, caché, cola)? ¿La llamada puede fallar? ¿Qué pasa con el estado local si falla?
|
|
82
|
+
|
|
83
|
+
**Q7.2** ¿Esta función persiste datos en más de un lugar (ej: BD + caché + índice)? ¿Qué pasa si la segunda escritura falla después de que la primera tuvo éxito?
|
|
84
|
+
|
|
85
|
+
**Q7.3** ¿El acumulador o índice que esta función usa se actualiza ANTES de modificar el valor base, o DESPUÉS? ¿El orden importa para la correctitud del cálculo?
|
|
86
|
+
|
|
87
|
+
**Q7.4** ¿Esta función envía una notificación, evento, o mensaje a otro sistema? ¿Lo hace antes o después de confirmar la operación? ¿El receptor puede actuar sobre un estado que aún no se confirmó?
|
|
88
|
+
|
|
89
|
+
**Q7.5** ¿Esta función lee un valor de caché y lo trata como fresco? ¿Hay algún path donde la caché puede estar desactualizada respecto a la fuente de verdad?
|
|
90
|
+
|
|
91
|
+
**Q7.6** ¿Esta función modifica datos de otro actor además de los del actor que la llama? ¿Tiene permiso para hacerlo en todos los casos?
|
|
92
|
+
|
|
93
|
+
**Q7.7** ¿Existe un patrón de acumulador donde el total acumulado se calcula con base en el estado anterior? Si el estado base cambia (insert/update/delete de otro registro), ¿el acumulador refleja el cambio correctamente?
|
|
94
|
+
|
|
95
|
+
**Q7.8** ¿Esta función delega a otra función que tiene sus propios efectos secundarios? ¿El caller sabe qué estado modifica el callee internamente?
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Cómo usar estas preguntas
|
|
100
|
+
|
|
101
|
+
1. Leer la función completa una vez para entender el propósito.
|
|
102
|
+
2. Para cada pregunta de las categorías Q1–Q7, marcar:
|
|
103
|
+
- ✓ Respondida claramente por el código
|
|
104
|
+
- ? Requiere rastrear el caller o el sistema externo para responder
|
|
105
|
+
- ✗ El código no la responde — sospechoso de bug
|
|
106
|
+
3. Todo `✗` o `?` sin resolver es un **sospechoso** para Fase 3 de síntesis.
|
|
107
|
+
|
|
108
|
+
<!-- Adaptado de nemesis-auditor-main bajo MIT License (https://github.com/0xiehnnkta/nemesis-auditor) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-worktrees-paralelo
|
|
3
3
|
description: Uso de git worktrees para ejecución paralela de agentes. Crear, usar y limpiar worktrees de forma segura para que múltiples agentes trabajen sin conflictos.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.1"
|
|
5
5
|
herramientasPermitidas: [Read, Bash]
|
|
6
6
|
evolvable: true # default para skill estandar
|
|
7
7
|
exclusiones:
|
|
@@ -268,3 +268,21 @@ git worktree remove --force ../mi-app-agente-1
|
|
|
268
268
|
**`git stash` en un worktree guarda el stash en el stash global del repositorio compartido, no en el worktree**: si el Agente 1 hace `git stash` en `mi-app-agente-1/` y luego el Agente 2 hace `git stash pop` en `mi-app-agente-2/`, aplica el stash del Agente 1 en la rama incorrecta. Causa: el stash de Git es una referencia global en `.git/refs/stash`, no por worktree. Fix: NUNCA usar `git stash` en flujos con múltiples worktrees. En su lugar, hacer un commit temporal con mensaje `WIP:` y usar `git reset HEAD~1` para deshacer cuando se necesite.
|
|
269
269
|
|
|
270
270
|
**Eliminar un worktree con `git worktree remove --force` mientras hay un agente activo escribiendo archivos en ese directorio produce corrupción del objeto store de Git**: si el agente tiene archivos en proceso de escritura (commit parcial, `git add` pendiente) y otro proceso ejecuta `remove --force`, Git puede quedar con objetos huérfanos o referencias rotas. Causa: `--force` no verifica si hay procesos con file handles abiertos en el worktree. Fix: el orquestador debe verificar que cada agente emitió su commit final antes de ejecutar `git worktree remove`. Usar `git worktree list --porcelain` para confirmar que la rama del worktree tiene el commit esperado.
|
|
271
|
+
|
|
272
|
+
**Un worktree creado con `isolation: "worktree"` (Agent tool) puede branchear desde una base desactualizada — no la rama de trabajo activa — si pasó tiempo o hubo compactación de contexto entre sesiones** [CONFIRMADO]: si el mecanismo que crea el worktree resuelve el punto de partida contra una referencia que quedó "congelada" (ej. `main` publicado, 100+ commits detrás de la rama de feature real en la que se trabaja), el agente produce commits legítimos, pero al intentar fusionarlos aparecen decenas de conflictos espurios en archivos que el agente ni siquiera tocó — el diff real es contra una base vieja, no contra el trabajo del agente. Caso real (sesión de 4 agentes en paralelo): 2 de 4 worktrees branchearon desde `main` (un PR ya squash-mergeado, 182 commits detrás de la rama de trabajo activa) en vez de la rama de feature; el merge directo habría arrastrado cientos de líneas de diffs no relacionados, y de hecho generó colisión real de números consecutivos de migración. Causa raíz: el punto de partida del worktree se fijó en un momento donde apuntaba a la rama correcta, pero la rama activa siguió avanzando mientras el worktree quedó anclado a su snapshot original — cuanto más dura la sesión (o si hay compactación de por medio), mayor la ventana de divergencia. Diagnóstico ANTES de fusionar (barato, dos comandos):
|
|
273
|
+
```bash
|
|
274
|
+
git merge-base --is-ancestor <rama-actual> <rama-worktree> && echo "base correcta" || echo "requiere investigar"
|
|
275
|
+
git merge-base <rama-actual> <rama-worktree> # compara contra el HEAD conocido de cuando se lanzó el agente
|
|
276
|
+
```
|
|
277
|
+
Si la base real está muy por detrás de lo esperado: **no usar `git merge` directo** (arrastraría el diff completo vs. la base vieja) — usar `git cherry-pick` de los commits propios del agente, uno por uno, sobre la punta actual de la rama de trabajo (`git log --reverse --oneline <base-vieja>..<rama-worktree>` para la lista en orden). Los conflictos del cherry-pick son reales y acotados al cambio de ESE commit, no ruido de la divergencia de base.
|
|
278
|
+
|
|
279
|
+
**Un conflicto de merge/cherry-pick en un archivo SQL con múltiples `CREATE PROCEDURE`/`CREATE FUNCTION` consecutivos y boilerplate similar (`LANGUAGE plpgsql SECURITY INVOKER AS $$ DECLARE ... END; $$;`) puede hacer que el diff de línea de Git "interleave" el contenido de dos objetos distintos** [CONFIRMADO x2]: cuando ambos lados de un conflicto agregan objetos PL/pgSQL nuevos en la misma posición del archivo, git empareja las líneas de cierre genéricas (`)`, `LANGUAGE plpgsql`, `SECURITY INVOKER`, `AS $$`, `DECLARE`) como si fueran contexto compartido sin cambios — el bloque `<<<<<<< / ======= / >>>>>>>` alterna entre la firma de un objeto de un lado y el cuerpo de OTRO objeto del otro lado. Resolver aceptando los hunks tal cual (o con merge automático) borra o duplica el cuerpo de uno de los dos procedimientos/funciones. Diagnóstico antes de resolver: contar cuántos `CREATE OR REPLACE (PROCEDURE|FUNCTION)` hay en cada lado del rango conflictuado (`grep -n "CREATE OR REPLACE"` entre las líneas del `<<<<<<<` y `>>>>>>>`) — si el conteo no cuadra con objetos completos y autocontenidos, hay interleaving. Fix: NO editar los hunks en el sitio; reconstruir manualmente objeto-por-objeto, concatenando cada `CREATE ... COMMENT ON ...` completo de un lado seguido del completo del otro lado, en cualquier orden (son independientes). Verificar al final: `grep -c '\$\$' archivo.sql` debe dar un número PAR, y el conteo de `CREATE OR REPLACE PROCEDURE/FUNCTION` debe coincidir con la suma real esperada de ambos lados sin duplicados.
|
|
280
|
+
|
|
281
|
+
**Una rama que sigue recibiendo commits DESPUÉS de que su propio PR se squash-mergeó a `main` genera un conflicto espurio de 20+ archivos en el SIGUIENTE PR de esa misma rama** [CONFIRMADO — variante del gotcha anterior]: el caso de "worktree con base desactualizada" cubre una rama que *branchea desde* una base squasheada; este es el caso hermano donde la MISMA rama continúa avanzando tras su propio squash-merge. El historial de commits de la rama nunca queda como descendiente del commit squash en `main` — git no tiene ancestro común que refleje el squash, así que el siguiente PR desde esa rama muestra `mergeStateStatus: CONFLICTING` aunque semánticamente nada choque. Diagnóstico y resolución seguros — **barrido "ours vs theirs" por shortstat ANTES de elegir estrategia**, nunca a ciegas:
|
|
282
|
+
```bash
|
|
283
|
+
git log --oneline -3 main # confirmar que main NO avanzó desde el squash
|
|
284
|
+
git diff --name-only <rama-local> main # lista de archivos en conflicto
|
|
285
|
+
# Para CADA archivo conflictuado, comparar tamaño de cambio de cada lado:
|
|
286
|
+
git diff --shortstat :2:<archivo> :3:<archivo> # :2 = ours/HEAD, :3 = theirs/main
|
|
287
|
+
```
|
|
288
|
+
Si TODOS los archivos muestran que "theirs" (main, congelado en el punto del squash) es subconjunto estricto de líneas de "ours" (la rama que sigue avanzando), y `main` no avanzó desde el squash (paso 1), `git checkout --ours <archivo>` para cada uno es seguro — no se pierde contenido independiente de main. Si algún archivo muestra líneas exclusivas del lado "theirs" que "ours" no tiene, DETENERSE y resolver ese archivo manualmente (no aplica el atajo). Referencia cruzada: `~/.claude/rules/sesiones-paralelas.md`.
|