@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,174 +1,174 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: changelog-generator
|
|
3
|
-
description: >
|
|
4
|
-
Generador automático de entradas CHANGELOG.md en formato Keep a Changelog
|
|
5
|
-
desde commits Conventional Commits. Parser determinista que clasifica feat/
|
|
6
|
-
fix/perf/refactor/docs/etc. en categorías user-facing en español, detecta
|
|
7
|
-
breaking changes (marca '!' o trailer 'BREAKING CHANGE:') y reporta nivel
|
|
8
|
-
de conformidad para decidir fallback manual. Cargar en /swl:release Paso 7
|
|
9
|
-
cuando hay commits Conventional, o manualmente para previsualizar el
|
|
10
|
-
changelog antes de un release.
|
|
11
|
-
version: 1.1.1
|
|
12
|
-
nivelRiesgo: BAJO
|
|
13
|
-
herramientasPermitidas: [Read, Bash]
|
|
14
|
-
skillsInvocables: [release-semver]
|
|
15
|
-
exclusiones:
|
|
16
|
-
- "No invocar para generar release notes con marketing copy o anuncios para usuarios finales — este skill produce listado técnico-legible, no narrativa."
|
|
17
|
-
- "No invocar si el repo no usa Conventional Commits — el parser detecta <80% conformidad y el caller debe abortar a flujo manual de release-semver."
|
|
18
|
-
- "No invocar para reescribir CHANGELOG histórico — solo agrega entrada de la próxima versión al inicio."
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# /habilidades/changelog-generator — CHANGELOG automático desde Conventional Commits
|
|
22
|
-
|
|
23
|
-
## Cuándo cargar
|
|
24
|
-
|
|
25
|
-
- Durante `/swl:release` Paso 7 (Generar CHANGELOG), cuando el flujo automático
|
|
26
|
-
está disponible y los commits del rango siguen Conventional Commits.
|
|
27
|
-
- Para previsualizar el changelog candidato antes de bumpear versión:
|
|
28
|
-
`node habilidades/changelog-generator/scripts/parse-commits.js --version X`
|
|
29
|
-
- Cuando un colaborador pide un resumen legible de cambios entre dos refs
|
|
30
|
-
arbitrarias del repo.
|
|
31
|
-
|
|
32
|
-
## Cuándo NO cargar
|
|
33
|
-
|
|
34
|
-
- Repo sin Conventional Commits (<80% de conformidad): el parser detecta y
|
|
35
|
-
reporta; el caller debe usar `Skill("release-semver")` flujo manual.
|
|
36
|
-
- Generación de **release notes** (texto narrativo con contexto de producto):
|
|
37
|
-
este skill produce CHANGELOG técnico-legible; las release notes con marketing
|
|
38
|
-
son tarea aparte (`documentador-swl` con plantilla específica).
|
|
39
|
-
- Reescritura histórica del CHANGELOG (squash de varias versiones, corrección
|
|
40
|
-
de entradas antiguas): solo se agrega entrada de la versión nueva al inicio.
|
|
41
|
-
|
|
42
|
-
## Qué hace el skill
|
|
43
|
-
|
|
44
|
-
1. **Lee commits** desde la última tag (o entre dos refs arbitrarias) con
|
|
45
|
-
`git log --format=...` usando un separador único para parsear subject + body
|
|
46
|
-
sin colisiones.
|
|
47
|
-
2. **Parsea con Conventional Commits 1.0.0**: regex que captura tipo, scope,
|
|
48
|
-
marca `!`, descripción. Soporta tipos extendidos del proyecto SWL:
|
|
49
|
-
`evolucion` (cambios de skills/agentes), además de `feat/fix/perf/refactor/
|
|
50
|
-
docs/style/test/ci/build/chore/revert`. Tolera el prefijo opcional de
|
|
51
|
-
trazabilidad `[T-NN]` / `[REQ-NN]` de la convención de `ejecutar-fase`
|
|
52
|
-
(no altera la semántica CC — el tipo+scope+descripción siguen presentes).
|
|
53
|
-
3. **Detecta breaking changes** por marca `!` después del tipo o trailer
|
|
54
|
-
`BREAKING CHANGE:` en el body. Los breaking siempre van al inicio del
|
|
55
|
-
release, sin importar el tipo original.
|
|
56
|
-
4. **Transforma descripción técnica → legible**:
|
|
57
|
-
- Elimina referencias a issues al final (`(#123)`, `Refs #456`).
|
|
58
|
-
- Capitaliza primera letra.
|
|
59
|
-
- Elimina punto final (Keep a Changelog usa bullets sin punto).
|
|
60
|
-
5. **Agrupa en categorías** con orden canónico:
|
|
61
|
-
1. Breaking changes
|
|
62
|
-
2. Nuevas funcionalidades (feat)
|
|
63
|
-
3. Correcciones (fix)
|
|
64
|
-
4. Mejoras de rendimiento (perf)
|
|
65
|
-
5. Cambios internos (refactor)
|
|
66
|
-
6. Reversiones (revert)
|
|
67
|
-
7. Evoluciones de skills/agentes (evolucion — SWL-specific)
|
|
68
|
-
8. Mantenimiento (docs/style/test/ci/build/chore — colapsadas)
|
|
69
|
-
9. Otros (commits sin prefijo CC válido)
|
|
70
|
-
6. **Reporta conformidad**: ratio commits conformes / total. Si <80%, el
|
|
71
|
-
caller debe decidir si abortar o seguir manualmente.
|
|
72
|
-
|
|
73
|
-
## Helper programático
|
|
74
|
-
|
|
75
|
-
```js
|
|
76
|
-
const {
|
|
77
|
-
parsearCommits,
|
|
78
|
-
leerCommitsGit,
|
|
79
|
-
generarChangelog,
|
|
80
|
-
} = require('./habilidades/changelog-generator/scripts/parse-commits');
|
|
81
|
-
|
|
82
|
-
// 1. Leer commits desde la última tag hasta HEAD
|
|
83
|
-
const commits = leerCommitsGit({ to: 'HEAD' });
|
|
84
|
-
|
|
85
|
-
// 2. Parsear y clasificar
|
|
86
|
-
const { categorias, conformidad, totalCommits, conformes } = parsearCommits(commits);
|
|
87
|
-
|
|
88
|
-
// 3. Si conformidad < 0.8, abortar o avisar al usuario
|
|
89
|
-
if (conformidad < 0.8) {
|
|
90
|
-
console.warn(`Conformidad CC: ${conformes}/${totalCommits}. Revisar "Otros".`);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// 4. Generar markdown listo para insertar en CHANGELOG.md
|
|
94
|
-
const md = generarChangelog(categorias, {
|
|
95
|
-
version: '1.6.5',
|
|
96
|
-
fecha: '2026-05-22', // opcional, default = hoy
|
|
97
|
-
incluirHash: true, // muestra hash corto al inicio de cada bullet
|
|
98
|
-
});
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Uso CLI
|
|
102
|
-
|
|
103
|
-
Previsualizar changelog candidato sin escribir nada:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
107
|
-
--version 1.6.5 \
|
|
108
|
-
--format markdown
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Filtrar por rango específico:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
115
|
-
--from v1.6.4 \
|
|
116
|
-
--to HEAD \
|
|
117
|
-
--version 1.6.5
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Salida JSON estructurado para post-procesamiento:
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
124
|
-
--from v1.6.4 \
|
|
125
|
-
--format json > /tmp/changelog-candidato.json
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## Reglas de uso desde /swl:release
|
|
129
|
-
|
|
130
|
-
1. Llamar a `leerCommitsGit` con la última tag detectada en el Paso 1 del
|
|
131
|
-
release.
|
|
132
|
-
2. Verificar `conformidad >= 0.8`. Si menor, presentar al usuario los commits
|
|
133
|
-
bajo "Otros" y pedir decisión: (a) continuar con el changelog, (b) abortar
|
|
134
|
-
y reescribir commits, (c) editar manualmente la categoría "Otros".
|
|
135
|
-
3. Si `--dry-run` está activo en `/swl:release`, mostrar el output de
|
|
136
|
-
`generarChangelog` sin escribir a disco.
|
|
137
|
-
4. Si conformidad OK: leer CHANGELOG.md actual, insertar el bloque generado
|
|
138
|
-
al inicio después del header `# Changelog`, escribir atómicamente.
|
|
139
|
-
5. NO hacer commit aquí — eso lo hace el Paso 8 de `/swl:release`.
|
|
140
|
-
|
|
141
|
-
## Gotchas observables
|
|
142
|
-
|
|
143
|
-
- **Conventional Commits sin scope son válidos**: `fix: corregir X` parsea
|
|
144
|
-
igual que `fix(modulo): corregir X`. El parser no exige scope.
|
|
145
|
-
- **El subject debe ir en una sola línea**: si un commit usa newline en el
|
|
146
|
-
subject, el parser lo trata como completo pero `git log %s` ya lo trunca.
|
|
147
|
-
- **Tipos no estándar van a "Otros"**: si un equipo usa `mejora:`, `cambio:`,
|
|
148
|
-
el parser los marca como no conformes. El usuario debe ajustar la lista
|
|
149
|
-
`CATEGORIAS` en `parse-commits.js` o adoptar tipos estándar.
|
|
150
|
-
- **El skill NO escribe a disco directamente**: solo retorna markdown. El
|
|
151
|
-
caller (`/swl:release` Paso 7) es responsable de leer el CHANGELOG actual,
|
|
152
|
-
insertar al inicio y escribir atómicamente.
|
|
153
|
-
- **Commits revert vienen del propio git**: `git revert` genera mensajes
|
|
154
|
-
`Revert "Subject original"` que el parser categoriza correctamente bajo
|
|
155
|
-
Reversiones (regex matchea `revert:` sin que el usuario lo escriba si usa
|
|
156
|
-
`git revert -e` para editar el mensaje al formato CC).
|
|
157
|
-
- **El hash corto se trunca a 7 chars**: alineado con el formato `git log
|
|
158
|
-
--oneline` estándar.
|
|
159
|
-
|
|
160
|
-
## Origen
|
|
161
|
-
|
|
162
|
-
Adaptado del skill `changelog-generator` de
|
|
163
|
-
`temp/awesome-codex-skills-master/changelog-generator/` (ComposioHQ, MIT) con:
|
|
164
|
-
|
|
165
|
-
- Frontmatter al estándar SWL (es-MX, `nivelRiesgo: BAJO`, `exclusiones`).
|
|
166
|
-
- Parser determinista en Node.js (`parse-commits.js`) — el origen es solo
|
|
167
|
-
documentación; este skill agrega la implementación ejecutable.
|
|
168
|
-
- Tipo `evolucion:` específico de SWL agregado al parser.
|
|
169
|
-
- Soporte para breaking changes `!` y trailer `BREAKING CHANGE:` (origen
|
|
170
|
-
solo menciona el segundo).
|
|
171
|
-
- Reporte de conformidad <80% como gate explícita para fallback manual.
|
|
172
|
-
- Integración con `/swl:release` Paso 7 documentada en `comandos/swl/release.md`.
|
|
173
|
-
|
|
174
|
-
Documentado en ADR-0029 (integración parcial awesome-codex-skills, Opción B).
|
|
1
|
+
---
|
|
2
|
+
name: changelog-generator
|
|
3
|
+
description: >
|
|
4
|
+
Generador automático de entradas CHANGELOG.md en formato Keep a Changelog
|
|
5
|
+
desde commits Conventional Commits. Parser determinista que clasifica feat/
|
|
6
|
+
fix/perf/refactor/docs/etc. en categorías user-facing en español, detecta
|
|
7
|
+
breaking changes (marca '!' o trailer 'BREAKING CHANGE:') y reporta nivel
|
|
8
|
+
de conformidad para decidir fallback manual. Cargar en /swl:release Paso 7
|
|
9
|
+
cuando hay commits Conventional, o manualmente para previsualizar el
|
|
10
|
+
changelog antes de un release.
|
|
11
|
+
version: 1.1.1
|
|
12
|
+
nivelRiesgo: BAJO
|
|
13
|
+
herramientasPermitidas: [Read, Bash]
|
|
14
|
+
skillsInvocables: [release-semver]
|
|
15
|
+
exclusiones:
|
|
16
|
+
- "No invocar para generar release notes con marketing copy o anuncios para usuarios finales — este skill produce listado técnico-legible, no narrativa."
|
|
17
|
+
- "No invocar si el repo no usa Conventional Commits — el parser detecta <80% conformidad y el caller debe abortar a flujo manual de release-semver."
|
|
18
|
+
- "No invocar para reescribir CHANGELOG histórico — solo agrega entrada de la próxima versión al inicio."
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# /habilidades/changelog-generator — CHANGELOG automático desde Conventional Commits
|
|
22
|
+
|
|
23
|
+
## Cuándo cargar
|
|
24
|
+
|
|
25
|
+
- Durante `/swl:release` Paso 7 (Generar CHANGELOG), cuando el flujo automático
|
|
26
|
+
está disponible y los commits del rango siguen Conventional Commits.
|
|
27
|
+
- Para previsualizar el changelog candidato antes de bumpear versión:
|
|
28
|
+
`node habilidades/changelog-generator/scripts/parse-commits.js --version X`
|
|
29
|
+
- Cuando un colaborador pide un resumen legible de cambios entre dos refs
|
|
30
|
+
arbitrarias del repo.
|
|
31
|
+
|
|
32
|
+
## Cuándo NO cargar
|
|
33
|
+
|
|
34
|
+
- Repo sin Conventional Commits (<80% de conformidad): el parser detecta y
|
|
35
|
+
reporta; el caller debe usar `Skill("release-semver")` flujo manual.
|
|
36
|
+
- Generación de **release notes** (texto narrativo con contexto de producto):
|
|
37
|
+
este skill produce CHANGELOG técnico-legible; las release notes con marketing
|
|
38
|
+
son tarea aparte (`documentador-swl` con plantilla específica).
|
|
39
|
+
- Reescritura histórica del CHANGELOG (squash de varias versiones, corrección
|
|
40
|
+
de entradas antiguas): solo se agrega entrada de la versión nueva al inicio.
|
|
41
|
+
|
|
42
|
+
## Qué hace el skill
|
|
43
|
+
|
|
44
|
+
1. **Lee commits** desde la última tag (o entre dos refs arbitrarias) con
|
|
45
|
+
`git log --format=...` usando un separador único para parsear subject + body
|
|
46
|
+
sin colisiones.
|
|
47
|
+
2. **Parsea con Conventional Commits 1.0.0**: regex que captura tipo, scope,
|
|
48
|
+
marca `!`, descripción. Soporta tipos extendidos del proyecto SWL:
|
|
49
|
+
`evolucion` (cambios de skills/agentes), además de `feat/fix/perf/refactor/
|
|
50
|
+
docs/style/test/ci/build/chore/revert`. Tolera el prefijo opcional de
|
|
51
|
+
trazabilidad `[T-NN]` / `[REQ-NN]` de la convención de `ejecutar-fase`
|
|
52
|
+
(no altera la semántica CC — el tipo+scope+descripción siguen presentes).
|
|
53
|
+
3. **Detecta breaking changes** por marca `!` después del tipo o trailer
|
|
54
|
+
`BREAKING CHANGE:` en el body. Los breaking siempre van al inicio del
|
|
55
|
+
release, sin importar el tipo original.
|
|
56
|
+
4. **Transforma descripción técnica → legible**:
|
|
57
|
+
- Elimina referencias a issues al final (`(#123)`, `Refs #456`).
|
|
58
|
+
- Capitaliza primera letra.
|
|
59
|
+
- Elimina punto final (Keep a Changelog usa bullets sin punto).
|
|
60
|
+
5. **Agrupa en categorías** con orden canónico:
|
|
61
|
+
1. Breaking changes
|
|
62
|
+
2. Nuevas funcionalidades (feat)
|
|
63
|
+
3. Correcciones (fix)
|
|
64
|
+
4. Mejoras de rendimiento (perf)
|
|
65
|
+
5. Cambios internos (refactor)
|
|
66
|
+
6. Reversiones (revert)
|
|
67
|
+
7. Evoluciones de skills/agentes (evolucion — SWL-specific)
|
|
68
|
+
8. Mantenimiento (docs/style/test/ci/build/chore — colapsadas)
|
|
69
|
+
9. Otros (commits sin prefijo CC válido)
|
|
70
|
+
6. **Reporta conformidad**: ratio commits conformes / total. Si <80%, el
|
|
71
|
+
caller debe decidir si abortar o seguir manualmente.
|
|
72
|
+
|
|
73
|
+
## Helper programático
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
const {
|
|
77
|
+
parsearCommits,
|
|
78
|
+
leerCommitsGit,
|
|
79
|
+
generarChangelog,
|
|
80
|
+
} = require('./habilidades/changelog-generator/scripts/parse-commits');
|
|
81
|
+
|
|
82
|
+
// 1. Leer commits desde la última tag hasta HEAD
|
|
83
|
+
const commits = leerCommitsGit({ to: 'HEAD' });
|
|
84
|
+
|
|
85
|
+
// 2. Parsear y clasificar
|
|
86
|
+
const { categorias, conformidad, totalCommits, conformes } = parsearCommits(commits);
|
|
87
|
+
|
|
88
|
+
// 3. Si conformidad < 0.8, abortar o avisar al usuario
|
|
89
|
+
if (conformidad < 0.8) {
|
|
90
|
+
console.warn(`Conformidad CC: ${conformes}/${totalCommits}. Revisar "Otros".`);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 4. Generar markdown listo para insertar en CHANGELOG.md
|
|
94
|
+
const md = generarChangelog(categorias, {
|
|
95
|
+
version: '1.6.5',
|
|
96
|
+
fecha: '2026-05-22', // opcional, default = hoy
|
|
97
|
+
incluirHash: true, // muestra hash corto al inicio de cada bullet
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Uso CLI
|
|
102
|
+
|
|
103
|
+
Previsualizar changelog candidato sin escribir nada:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
107
|
+
--version 1.6.5 \
|
|
108
|
+
--format markdown
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Filtrar por rango específico:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
115
|
+
--from v1.6.4 \
|
|
116
|
+
--to HEAD \
|
|
117
|
+
--version 1.6.5
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Salida JSON estructurado para post-procesamiento:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
124
|
+
--from v1.6.4 \
|
|
125
|
+
--format json > /tmp/changelog-candidato.json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Reglas de uso desde /swl:release
|
|
129
|
+
|
|
130
|
+
1. Llamar a `leerCommitsGit` con la última tag detectada en el Paso 1 del
|
|
131
|
+
release.
|
|
132
|
+
2. Verificar `conformidad >= 0.8`. Si menor, presentar al usuario los commits
|
|
133
|
+
bajo "Otros" y pedir decisión: (a) continuar con el changelog, (b) abortar
|
|
134
|
+
y reescribir commits, (c) editar manualmente la categoría "Otros".
|
|
135
|
+
3. Si `--dry-run` está activo en `/swl:release`, mostrar el output de
|
|
136
|
+
`generarChangelog` sin escribir a disco.
|
|
137
|
+
4. Si conformidad OK: leer CHANGELOG.md actual, insertar el bloque generado
|
|
138
|
+
al inicio después del header `# Changelog`, escribir atómicamente.
|
|
139
|
+
5. NO hacer commit aquí — eso lo hace el Paso 8 de `/swl:release`.
|
|
140
|
+
|
|
141
|
+
## Gotchas observables
|
|
142
|
+
|
|
143
|
+
- **Conventional Commits sin scope son válidos**: `fix: corregir X` parsea
|
|
144
|
+
igual que `fix(modulo): corregir X`. El parser no exige scope.
|
|
145
|
+
- **El subject debe ir en una sola línea**: si un commit usa newline en el
|
|
146
|
+
subject, el parser lo trata como completo pero `git log %s` ya lo trunca.
|
|
147
|
+
- **Tipos no estándar van a "Otros"**: si un equipo usa `mejora:`, `cambio:`,
|
|
148
|
+
el parser los marca como no conformes. El usuario debe ajustar la lista
|
|
149
|
+
`CATEGORIAS` en `parse-commits.js` o adoptar tipos estándar.
|
|
150
|
+
- **El skill NO escribe a disco directamente**: solo retorna markdown. El
|
|
151
|
+
caller (`/swl:release` Paso 7) es responsable de leer el CHANGELOG actual,
|
|
152
|
+
insertar al inicio y escribir atómicamente.
|
|
153
|
+
- **Commits revert vienen del propio git**: `git revert` genera mensajes
|
|
154
|
+
`Revert "Subject original"` que el parser categoriza correctamente bajo
|
|
155
|
+
Reversiones (regex matchea `revert:` sin que el usuario lo escriba si usa
|
|
156
|
+
`git revert -e` para editar el mensaje al formato CC).
|
|
157
|
+
- **El hash corto se trunca a 7 chars**: alineado con el formato `git log
|
|
158
|
+
--oneline` estándar.
|
|
159
|
+
|
|
160
|
+
## Origen
|
|
161
|
+
|
|
162
|
+
Adaptado del skill `changelog-generator` de
|
|
163
|
+
`temp/awesome-codex-skills-master/changelog-generator/` (ComposioHQ, MIT) con:
|
|
164
|
+
|
|
165
|
+
- Frontmatter al estándar SWL (es-MX, `nivelRiesgo: BAJO`, `exclusiones`).
|
|
166
|
+
- Parser determinista en Node.js (`parse-commits.js`) — el origen es solo
|
|
167
|
+
documentación; este skill agrega la implementación ejecutable.
|
|
168
|
+
- Tipo `evolucion:` específico de SWL agregado al parser.
|
|
169
|
+
- Soporte para breaking changes `!` y trailer `BREAKING CHANGE:` (origen
|
|
170
|
+
solo menciona el segundo).
|
|
171
|
+
- Reporte de conformidad <80% como gate explícita para fallback manual.
|
|
172
|
+
- Integración con `/swl:release` Paso 7 documentada en `comandos/swl/release.md`.
|
|
173
|
+
|
|
174
|
+
Documentado en ADR-0029 (integración parcial awesome-codex-skills, Opción B).
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
# STRIDE — modelo de amenazas para el modo cobertura
|
|
2
|
-
|
|
3
|
-
Complemento del checklist OWASP de `SKILL.md`. STRIDE clasifica por **tipo de
|
|
4
|
-
amenaza** (qué quiere lograr el atacante); OWASP por **tipo de debilidad**
|
|
5
|
-
(qué error del código lo permite). Auditar con ambas taxonomías cierra los
|
|
6
|
-
huecos que cada una deja sola: repudio y DoS casi no aparecen en OWASP Top 10;
|
|
7
|
-
componentes desactualizados (A06) no mapean limpio a STRIDE.
|
|
8
|
-
|
|
9
|
-
## Las 6 categorías
|
|
10
|
-
|
|
11
|
-
| Letra | Amenaza | Qué buscar | OWASP relacionadas |
|
|
12
|
-
|-------|---------|-----------|--------------------|
|
|
13
|
-
| **S**poofing | Suplantación de identidad | Auth débil, tokens predecibles, session fixation, falta de MFA | A07 |
|
|
14
|
-
| **T**ampering | Modificación de datos | Input sin validar, falta de checks de integridad, inyección SQL/NoSQL, deserialización insegura | A03, A08 |
|
|
15
|
-
| **R**epudiation | Acciones negables | Audit logs faltantes, transacciones sin firma, logs mutables, cambios de privilegio sin registro | A09 |
|
|
16
|
-
| **I**nformation Disclosure | Fuga de información | Stack traces al cliente, logging verboso con PII, env vars expuestas, mensajes de error que revelan existencia de recursos | A01, A02, A05 |
|
|
17
|
-
| **D**enial of Service | Ataques a disponibilidad | Queries sin cota ni paginación, rate limits faltantes, regex DoS (ReDoS), uploads sin límite de tamaño | A04 |
|
|
18
|
-
| **E**levation of Privilege | Acceso no autorizado | Checks de authz faltantes, IDOR, rutas de escalación admin, confusión autenticación/autorización | A01, A04 |
|
|
19
|
-
|
|
20
|
-
## Protocolo de auditoría iterativa con cobertura
|
|
21
|
-
|
|
22
|
-
1. **Reconocimiento (una vez)**: mapear superficie de ataque — manifest de
|
|
23
|
-
dependencias, `.env.example`, Dockerfile, rutas de API, módulos de auth,
|
|
24
|
-
schemas de BD, configuración de CI/CD. Producir threat model inicial:
|
|
25
|
-
qué activos, qué trust boundaries, qué entry points.
|
|
26
|
-
2. **Por iteración**: elegir el vector MENOS cubierto (OWASP sin auditar →
|
|
27
|
-
STRIDE sin auditar → profundizar en hallazgos existentes). Adoptar la
|
|
28
|
-
persona red-team que corresponde al vector (rotación: Adversario de
|
|
29
|
-
Seguridad → Supply Chain → Insider → Infraestructura — definiciones en
|
|
30
|
-
`habilidades/proceso-debate-adversarial/recursos/personas.md`).
|
|
31
|
-
3. **Validar cada hallazgo**: evidencia archivo:línea + escenario de ataque
|
|
32
|
-
concreto + reproducción. Sin escenario de ataque no es hallazgo, es
|
|
33
|
-
especulación (regla `verificar-citas-normativas.md § Familia 2`).
|
|
34
|
-
4. **Registrar**: fila en la corrida de `loop-telemetry` (columnas sugeridas:
|
|
35
|
-
`iteracion, timestamp, hallazgo, severidad, owasp, stride, archivo_linea`)
|
|
36
|
-
y recalcular el score compuesto.
|
|
37
|
-
5. **Salida**: OWASP 10/10 + STRIDE 6/6 cubiertos, o max iteraciones (default
|
|
38
|
-
15), o plateau de hallazgos (3 iteraciones sin hallazgo nuevo).
|
|
39
|
-
|
|
40
|
-
## Formato de hallazgo (obligatorio, 7 campos)
|
|
41
|
-
|
|
42
|
-
```markdown
|
|
43
|
-
### [Título de una línea]
|
|
44
|
-
- **Severidad**: Crítico | Alto | Medio | Bajo | Informativo
|
|
45
|
-
- **OWASP**: A01-A10
|
|
46
|
-
- **STRIDE**: S | T | R | I | D | E
|
|
47
|
-
- **Evidencia**: archivo:línea + escenario de ataque (sin especulación teórica)
|
|
48
|
-
- **Reproducción**: pasos para disparar el problema
|
|
49
|
-
- **Remediación**: fix concreto para ESTE código
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Severidad — criterios
|
|
53
|
-
|
|
54
|
-
| Severidad | Criterio | Ejemplos |
|
|
55
|
-
|-----------|----------|----------|
|
|
56
|
-
| Crítico | Explotable remoto, sin auth, brecha de datos | RCE, SQL injection, bypass de auth |
|
|
57
|
-
| Alto | Requiere algún acceso, impacto severo | XSS almacenado, IDOR, escalación de privilegios |
|
|
58
|
-
| Medio | Impacto limitado o requiere interacción | CSRF, XSS reflejado, divulgación de info |
|
|
59
|
-
| Bajo | Impacto mínimo | Headers faltantes, errores verbosos |
|
|
60
|
-
| Informativo | Recomendación de hardening | Defensa en profundidad |
|
|
1
|
+
# STRIDE — modelo de amenazas para el modo cobertura
|
|
2
|
+
|
|
3
|
+
Complemento del checklist OWASP de `SKILL.md`. STRIDE clasifica por **tipo de
|
|
4
|
+
amenaza** (qué quiere lograr el atacante); OWASP por **tipo de debilidad**
|
|
5
|
+
(qué error del código lo permite). Auditar con ambas taxonomías cierra los
|
|
6
|
+
huecos que cada una deja sola: repudio y DoS casi no aparecen en OWASP Top 10;
|
|
7
|
+
componentes desactualizados (A06) no mapean limpio a STRIDE.
|
|
8
|
+
|
|
9
|
+
## Las 6 categorías
|
|
10
|
+
|
|
11
|
+
| Letra | Amenaza | Qué buscar | OWASP relacionadas |
|
|
12
|
+
|-------|---------|-----------|--------------------|
|
|
13
|
+
| **S**poofing | Suplantación de identidad | Auth débil, tokens predecibles, session fixation, falta de MFA | A07 |
|
|
14
|
+
| **T**ampering | Modificación de datos | Input sin validar, falta de checks de integridad, inyección SQL/NoSQL, deserialización insegura | A03, A08 |
|
|
15
|
+
| **R**epudiation | Acciones negables | Audit logs faltantes, transacciones sin firma, logs mutables, cambios de privilegio sin registro | A09 |
|
|
16
|
+
| **I**nformation Disclosure | Fuga de información | Stack traces al cliente, logging verboso con PII, env vars expuestas, mensajes de error que revelan existencia de recursos | A01, A02, A05 |
|
|
17
|
+
| **D**enial of Service | Ataques a disponibilidad | Queries sin cota ni paginación, rate limits faltantes, regex DoS (ReDoS), uploads sin límite de tamaño | A04 |
|
|
18
|
+
| **E**levation of Privilege | Acceso no autorizado | Checks de authz faltantes, IDOR, rutas de escalación admin, confusión autenticación/autorización | A01, A04 |
|
|
19
|
+
|
|
20
|
+
## Protocolo de auditoría iterativa con cobertura
|
|
21
|
+
|
|
22
|
+
1. **Reconocimiento (una vez)**: mapear superficie de ataque — manifest de
|
|
23
|
+
dependencias, `.env.example`, Dockerfile, rutas de API, módulos de auth,
|
|
24
|
+
schemas de BD, configuración de CI/CD. Producir threat model inicial:
|
|
25
|
+
qué activos, qué trust boundaries, qué entry points.
|
|
26
|
+
2. **Por iteración**: elegir el vector MENOS cubierto (OWASP sin auditar →
|
|
27
|
+
STRIDE sin auditar → profundizar en hallazgos existentes). Adoptar la
|
|
28
|
+
persona red-team que corresponde al vector (rotación: Adversario de
|
|
29
|
+
Seguridad → Supply Chain → Insider → Infraestructura — definiciones en
|
|
30
|
+
`habilidades/proceso-debate-adversarial/recursos/personas.md`).
|
|
31
|
+
3. **Validar cada hallazgo**: evidencia archivo:línea + escenario de ataque
|
|
32
|
+
concreto + reproducción. Sin escenario de ataque no es hallazgo, es
|
|
33
|
+
especulación (regla `verificar-citas-normativas.md § Familia 2`).
|
|
34
|
+
4. **Registrar**: fila en la corrida de `loop-telemetry` (columnas sugeridas:
|
|
35
|
+
`iteracion, timestamp, hallazgo, severidad, owasp, stride, archivo_linea`)
|
|
36
|
+
y recalcular el score compuesto.
|
|
37
|
+
5. **Salida**: OWASP 10/10 + STRIDE 6/6 cubiertos, o max iteraciones (default
|
|
38
|
+
15), o plateau de hallazgos (3 iteraciones sin hallazgo nuevo).
|
|
39
|
+
|
|
40
|
+
## Formato de hallazgo (obligatorio, 7 campos)
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
### [Título de una línea]
|
|
44
|
+
- **Severidad**: Crítico | Alto | Medio | Bajo | Informativo
|
|
45
|
+
- **OWASP**: A01-A10
|
|
46
|
+
- **STRIDE**: S | T | R | I | D | E
|
|
47
|
+
- **Evidencia**: archivo:línea + escenario de ataque (sin especulación teórica)
|
|
48
|
+
- **Reproducción**: pasos para disparar el problema
|
|
49
|
+
- **Remediación**: fix concreto para ESTE código
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Severidad — criterios
|
|
53
|
+
|
|
54
|
+
| Severidad | Criterio | Ejemplos |
|
|
55
|
+
|-----------|----------|----------|
|
|
56
|
+
| Crítico | Explotable remoto, sin auth, brecha de datos | RCE, SQL injection, bypass de auth |
|
|
57
|
+
| Alto | Requiere algún acceso, impacto severo | XSS almacenado, IDOR, escalación de privilegios |
|
|
58
|
+
| Medio | Impacto limitado o requiere interacción | CSRF, XSS reflejado, divulgación de info |
|
|
59
|
+
| Bajo | Impacto mínimo | Headers faltantes, errores verbosos |
|
|
60
|
+
| Informativo | Recomendación de hardening | Defensa en profundidad |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ci-cd-pipelines
|
|
3
3
|
description: CI/CD con GitHub Actions y GitLab CI. Stages de lint, test, build, deploy. Caching, artifacts, matrix builds, secrets management, deployment strategies, monorepos y quality gates.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.2"
|
|
5
5
|
herramientasPermitidas: [Read, Bash]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para Kubernetes Deployments o Helm releases — para Kubernetes cargar `kubernetes-orquestacion`."
|
|
@@ -155,3 +155,7 @@ Para template de GitHub Actions reutilizable, ver [recursos/github-actions-templ
|
|
|
155
155
|
**Secrets definidos en GitHub Actions no están disponibles en workflows de forks en PRs externas**: los workflows disparados por un PR de un fork (contribuidor externo) no tienen acceso a los secrets del repositorio por seguridad. Causa: prevención de exfiltración de secrets a forks maliciosos. Fix: usar el evento `pull_request_target` con cuidado para acceder a secrets en PRs de forks, pero solo para jobs que no ejecutan código del PR — los jobs de lint/test pueden correr sin secrets; los de deploy sí necesitan el evento `push` al branch base.
|
|
156
156
|
|
|
157
157
|
**`docker/build-push-action` con `cache-from: type=gha` puede hacer el build más lento si el cache es muy grande**: el cache de GitHub Actions (10GB límite) se llena con layers de Docker — si se usan imágenes base grandes y muchos stages, el cache puede alcanzar el límite y las layers más antiguas se evictan, causando rebuilds completos. Causa: el cache de GHA tiene límite de 10GB por repositorio. Fix: usar `cache-from: type=registry,ref=ghcr.io/org/app:cache` con un registro de contenedores para cache ilimitado, o usar `mode=min` en el cache para solo guardar las layers finales en lugar de todas las intermedias.
|
|
158
|
+
|
|
159
|
+
**Un script que monitorea `gh pr checks`/`gh run list` canalizando su `--json` a `jq` externo puede fallar en silencio para siempre si `jq` no está instalado** [CONFIRMADO x2 — SIGM 2026-06-21 y 2026-07-18]: en Windows con Git Bash, `jq` frecuentemente NO está en el PATH (`which jq` → not found). Un loop de polling tipo `s=$(gh pr checks N --json ... 2>/dev/null); cur=$(echo "$s" | jq -r '...' 2>/dev/null)` con stderr suprimido en ambos comandos nunca produce error visible: `cur` queda siempre vacío, la condición de salida (`jq -e '...'`) siempre falla, y el loop de polling corre indefinidamente sin emitir NINGÚN evento — 0 bytes de output, indistinguible de "todavía no hay novedades". Causa: dos supresiones de error (`2>/dev/null`) apiladas ocultan que el binario no existe. Fix confirmado: usar el flag `--jq` PROPIO de `gh` (`gh pr checks N --json name,bucket --jq '.[] | select(...)'`) — es JSON processor vendored dentro del propio binario `gh`, no depende de `jq` externo, y acepta la misma sintaxis de filtro. Antes de confiar en que un monitor de CI sigue "esperando sin novedad", verificar con `TaskOutput(block:false)` que el output acumulado no sea 0 KB tras varios minutos — 0 KB sostenido es señal de este bug, no de que aún no hay nada que reportar.
|
|
160
|
+
|
|
161
|
+
**Suprimir un fingerprint específico de `gitleaks` en `.gitleaks.toml` bajo `[allowlist] fingerprints = [...]` no funciona en gitleaks ≥8.25** [CONFIRMADO, SIGM 2026-07-19]: desde esa versión gitleaks migró de `[allowlist]` (tabla singular) a `[[allowlists]]` (array de tablas), y el campo `fingerprints` NO existe en NINGUNA de las dos variantes del TOML — solo soporta `paths`/`regexes`/`commits`/`stopwords`/`condition`/`regexTarget`. Un `fingerprints = [...]` agregado al TOML se ignora en silencio (sin error de parseo, sin warning) y el hallazgo sigue reportándose sin cambio. Fix real: los fingerprints se suprimen en un archivo SEPARADO `.gitleaksignore` en la raíz del repo (una línea por fingerprint, texto EXACTO tal como lo imprime `gitleaks detect` en su campo `Fingerprint:`). Verificar el fix localmente ANTES de reintentar en CI: descargar el mismo binario/tag que usa el workflow (`curl -sSL -o gitleaks.zip https://github.com/gitleaks/gitleaks/releases/download/v<TAG>/gitleaks_<TAG>_windows_x64.zip` en Windows, o el tarball `linux_x64` si se prueba en WSL/Linux) y correr `gitleaks detect --source . --no-git --redact -v --config .gitleaks.toml` — el finding suprimido debe desaparecer del output antes de pushear, ahorrando una ronda completa de CI.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: compactacion-contexto
|
|
3
3
|
description: Anti-context-rot. Detectar cuándo compactar el contexto, guardar estado antes de compactar, técnicas de resumen progresivo y handoff limpio entre contextos. Recalibrado para el tokenizer de Opus 4.8 (+15-30% tokens vs 4.6).
|
|
4
|
-
version: "1.1.
|
|
4
|
+
version: "1.1.1"
|
|
5
5
|
herramientasPermitidas: [Read]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar si el contexto está por debajo del 50% y no hay señales cualitativas de degradación — compactar sin necesidad solo interrumpe el flujo."
|
|
@@ -235,6 +235,7 @@ instrucción más conservadora o compactar por secciones individuales.
|
|
|
235
235
|
- **Invariante de headings violada silenciosamente**: el contexto compactado pierde dos secciones `##` del original porque el modelo resumió párrafos en lugar de preservar la estructura. Causa: no se ejecutó la validación post-compactación. Solución: antes de descartar el contexto original, contar `#` en ambos con regex y comparar — tolerancia 0% para headings perdidos.
|
|
236
236
|
- **Compactar todo el codebase al inicio de sesión**: el agente lee 20 archivos en el nuevo contexto "para orientarse" y los compacta de inmediato. Causa: se interpretó "cargar contexto fresco" como cargar y compactar todo. Solución: en el contexto entrante, cargar ESTADO.md + DECISIONS.md + 3 últimos commits, y solo los archivos de la tarea inmediata — no más.
|
|
237
237
|
- **Umbral de 70% sin recalibrar para Opus 4.8**: en proyectos que migraron de Opus 4.6 a 4.7, el umbral de compactación sigue configurado al 70% del contexto cuando debe ser 50%. Causa: el tokenizer de 4.7 produce 1.0-1.35× más tokens y el umbral efectivo llega antes. Solución: al actualizar modelo, ajustar el umbral de compactación a 50% como documenta este skill en su sección de señales cuantitativas.
|
|
238
|
+
- **Análisis forense de un transcript JSONL gigante = digest determinista + lectores paralelos, nunca `Read` directo** [VALIDADO 2026-07-11, sesión de 61.6 MB / 24,862 líneas cubierta al 100%]: para analizar la sesión de otro agente (post-mortem, auditoría, extracción de decisiones), (1) script Node línea-por-línea que emite SOLO el contenido conversacional — mensajes de usuario íntegros, texto del asistente, tool calls como `>> Tool: args` de una línea, tool_results truncados a 200-400 chars (1,200 si `is_error`), resúmenes de compactación completos — en chunks de ~350 KB; (2) un agente por chunk con mandato de leer el 100% (Read con offset/limit hasta cubrir) y reporte estructurado fijo (cronología, intervenciones del usuario con cita+línea, bugs con estado, deudas, hallazgos QA/adversarial, pendientes, problemas de proceso); (3) el driver verifica las citas críticas de cada reporte antes de usarlas. Gotcha descubierto: **los mensajes del usuario que solo sobreviven dentro de un resumen de compactación NO son diálogo crudo** — el digest debe marcarlos como "cobertura parcial" y el análisis debe declararlo en vez de citarlos como verbatim; en la sesión analizada, 3 de 6 instrucciones del usuario del tramo final solo existían en resúmenes de compactación.
|
|
238
239
|
|
|
239
240
|
## Anti-patrones a evitar
|
|
240
241
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contenedores-docker
|
|
3
3
|
description: Docker y containerización. Dockerfiles optimizados con multi-stage builds, docker-compose, volúmenes, networking, health checks, security scanning, build caching, distroless images. Anti-patrones comunes.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.4"
|
|
5
5
|
herramientasPermitidas: [Read]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para orquestación Kubernetes (Deployments, Services, Helm, HPA) — para Kubernetes cargar `kubernetes-orquestacion`."
|
|
@@ -140,4 +140,6 @@ Para ejemplos completos de multi-stage Node.js/Angular, .dockerignore, docker-co
|
|
|
140
140
|
|
|
141
141
|
**Proxy de desarrollo del frontend (Angular CLI, Vite, webpack-dev-server) con target hardcodeado a `localhost` es deuda invisible hasta el primer `docker compose up`**: en local todo funciona porque frontend y backend comparten host; en cuanto corren en contenedores separados, `localhost` dentro del contenedor del frontend apunta a sí mismo — el proxy devuelve 500/ECONNREFUSED en cada llamada a la API (síntoma típico: el login falla solo en Docker). Causa: el target del proxy es configuración de entorno, no constante del repo. Fix: usar `proxy.conf.js` (no `.json`) que lea `process.env.BACKEND_URL || 'http://localhost:8000'` y pasar `BACKEND_URL=http://backend:8000` (nombre del servicio de compose) vía `environment:` del servicio frontend. Origen: SIGAF 2026-07-02.
|
|
142
142
|
|
|
143
|
-
**`docker exec ... psql` lanzado en background contra una BD donde el rol no autentica cuelga y congestiona el subsistema `docker exec` de Docker Desktop (Windows)**: lanzar en background (`run_in_background`/`&`) un `docker exec <contenedor> psql -U rol -d db -c "..."` donde el rol no puede autenticar deja la sesión `exec` colgada esperando; varias de esas sesiones huérfanas **saturan el subsistema de `docker exec`** y luego TODO `docker exec` (incluso `echo`) y hasta `docker restart` hacen timeout, aunque `docker ps`/`version` sigan respondiendo. Causa: cada `exec` abre una sesión que no termina; el daemon las acumula. Síntoma distintivo: `docker ps` responde pero cualquier `docker exec` cuelga. Fix: `docker restart <contenedor>` mata las sesiones `exec` huérfanas y destraba el daemon — detener el bash local con TaskStop NO mata el `psql` que corre dentro del contenedor. Prevención: NUNCA lanzar `docker exec ... psql` en background contra una BD/rol cuya autenticación no esté confirmada; correrlo en foreground con timeout corto y verificar el `psql` interactivo primero. En Git Bash (Windows), pasar `MSYS_NO_PATHCONV=1` cuando el comando lleva rutas POSIX (`/tmp/...`) a `docker exec`/`docker cp` para que MSYS no las convierta.
|
|
143
|
+
**`docker exec ... psql` lanzado en background contra una BD donde el rol no autentica cuelga y congestiona el subsistema `docker exec` de Docker Desktop (Windows)**: lanzar en background (`run_in_background`/`&`) un `docker exec <contenedor> psql -U rol -d db -c "..."` donde el rol no puede autenticar deja la sesión `exec` colgada esperando; varias de esas sesiones huérfanas **saturan el subsistema de `docker exec`** y luego TODO `docker exec` (incluso `echo`) y hasta `docker restart` hacen timeout, aunque `docker ps`/`version` sigan respondiendo. Causa: cada `exec` abre una sesión que no termina; el daemon las acumula. Síntoma distintivo: `docker ps` responde pero cualquier `docker exec` cuelga. Fix: `docker restart <contenedor>` mata las sesiones `exec` huérfanas y destraba el daemon — detener el bash local con TaskStop NO mata el `psql` que corre dentro del contenedor. Prevención: NUNCA lanzar `docker exec ... psql` en background contra una BD/rol cuya autenticación no esté confirmada; correrlo en foreground con timeout corto y verificar el `psql` interactivo primero. En Git Bash (Windows), pasar `MSYS_NO_PATHCONV=1` cuando el comando lleva rutas POSIX (`/tmp/...`) a `docker exec`/`docker cp` para que MSYS no las convierta [CONFIRMADO x2 — aplica igual de necesario a `docker cp` que a `docker exec`, no solo al segundo].
|
|
144
|
+
|
|
145
|
+
**`docker cp <dir-local> contenedor:<dir-remoto>` cuando `<dir-remoto>` YA EXISTE dentro del contenedor NO reemplaza su contenido — lo anida un nivel más profundo** [CONFIRMADO]: un segundo `docker cp database/tests contenedor:/tmp/verify/database/tests` sobre un `/tmp/verify/database/tests/` ya poblado por una corrida anterior crea `/tmp/verify/database/tests/tests/` con los archivos actualizados, mientras el path original sigue con los archivos VIEJOS — silenciosamente, sin error. Causa real de confusión de debugging: un fix a un `.sql` de test parece "no surtir efecto" porque el script verificador (`find /tmp/verify/database/tests -name "*.sql"`) sigue recogiendo la copia vieja en el path esperado; la copia nueva, correcta, queda un nivel más abajo sin que nada la use. Fix: SIEMPRE `docker exec <contenedor> rm -rf <dir-remoto>` inmediatamente antes de cada `docker cp` hacia ese mismo destino — nunca asumir semántica de overwrite en `docker cp` de directorios.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: css-moderno
|
|
3
3
|
description: CSS moderno 2024+. Cubre Container Queries, CSS Layers (@layer), Nesting nativo, Custom Properties avanzadas, funciones min/max/clamp/color-mix, propiedades lógicas (block/inline), View Transitions API, animaciones performantes solo-compositor, dark mode patterns y anti-patrones críticos.
|
|
4
|
-
version: "1.1.
|
|
4
|
+
version: "1.1.1"
|
|
5
5
|
herramientasPermitidas: [Read, Grep]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para Tailwind CSS (clases utilitarias, @theme, cva, responsive) — para Tailwind cargar `tailwind-experto`."
|
|
@@ -166,3 +166,9 @@ Para ejemplos completos de Container Queries, CSS Layers, Nesting, Custom Proper
|
|
|
166
166
|
**`clamp()` con `vw` en la función intermedia no escala correctamente en pantallas muy anchas si no se acota con `max()`**: `font-size: clamp(1rem, 2vw, 2rem)` en un monitor de 2560px da `2vw = 51.2px`, que es mayor que el máximo de `2rem = 32px` — el clamp lo atrapa pero el cálculo puede ser confuso al depurar. Causa: el valor de `vw` crece sin límite. Fix: entender que `clamp(min, preferido, max)` garantiza que el resultado siempre está entre min y max — el valor preferido puede ser cualquier expresión, incluso mayor que max, y el clamp simplemente retorna max en ese caso. Verificar los tres valores en los tamaños de viewport objetivo.
|
|
167
167
|
|
|
168
168
|
**`var(--token)` NO resuelve cuando el valor lo consume JavaScript pintando a `<canvas>`**: las librerías que renderizan a canvas (Chart.js, OpenLayers, three.js/WebGL, o `ctx.fillStyle`/`strokeStyle`/`ctx.font` directos) NO reciben el contexto CSS del documento → el color sale negro o invisible **sin error en consola**. Causa: el canvas es un buffer de píxeles fuera del árbol CSS; la cascada y `getComputedStyle` no aplican al contexto 2D/WebGL — `var()` queda como string literal que el motor de canvas no interpreta. La frontera es: un color es `var(--x)` SOLO si lo consume CSS (`.css`/`.module.scss` o `style={{}}` sobre HTML); si lo consume JS pintando a canvas, debe ser hex/rgb concreto. Fix: pasar hex/rgb literal a esos objetos, con comentario anti-recurrencia (`// canvas: NO resuelve var()`). Si el color debe ser theme-aware, resolverlo primero en JS — `getComputedStyle(document.documentElement).getPropertyValue('--color-x').trim()` — y pasar el valor ya resuelto al canvas, re-leyéndolo al cambiar de tema.
|
|
169
|
+
|
|
170
|
+
**El atributo HTML `hidden` NO oculta un elemento con `display:flex/grid`** [CONFIRMADO x4]: togglear el atributo `hidden` sobre un elemento con `.clase{display:flex}` no lo oculta, **sin error en consola**. Causa: la regla de user-agent `[hidden]{display:none}` tiene menor especificidad que cualquier regla de clase con `display` explícito → la clase gana en la cascada y el elemento sigue visible. Fix: para todo elemento colapsable con `display` distinto de `block`, agregar una regla explícita `.clase[hidden]{display:none}`. Aplica a acordeones, drawers, toggles, tabs — cualquier patrón que dependa del atributo `hidden` para colapsar. Evidencia: 4 instancias en una sola sesión (proyecto convertidor-md, 2026-07-20).
|
|
171
|
+
|
|
172
|
+
**Items flex/grid-column bajo un contenedor `max-height` + `overflow` se COMPRIMEN y recortan en vez de scrollear**: en `display:flex;flex-direction:column;max-height:N;overflow-y:auto`, los hijos con `flex-shrink:1` (default) se encogen cuando el contenido excede la altura — y si tienen `overflow:hidden`, su contenido se corta — en lugar de que el contenedor haga scroll. Causa: `flex-shrink:1` autoriza al algoritmo flex a reducir los ítems para caber en el contenedor acotado, antes de recurrir al scroll. Fix: `flex-shrink:0` (o `flex:none`) en los hijos que deben conservar su altura natural; entonces el contenedor scrollea correctamente. Síntoma típico: encabezados de acordeón "recortados a rebanadas" cuando uno se expande.
|
|
173
|
+
|
|
174
|
+
**Redefinir un nombre de clase ya usado re-estiliza el componente original en silencio**: dos reglas con el mismo selector de clase (`.chip {…}` … `.chip {…}`) en la misma hoja mezclan propiedades por cascada — la segunda definición altera el primer componente sin error. Causa: CSS no tiene scoping por defecto; el nombre de clase es global a la hoja. Fix: antes de reusar un nombre de clase para un componente nuevo, `grep` la hoja de estilos; namespacea la clase del componente nuevo (p. ej. `.grp-chip` en vez de reusar `.cfdi-chip`).
|