@saulwade/swl-ses 2.5.3 → 2.6.1
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 +9 -9
- package/README.md +37 -37
- package/agentes/_intent-spec.md +73 -73
- package/agentes/_propose-step.md +90 -90
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +932 -908
- 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 +32 -7
- package/comandos/swl/actualizar.md +3 -3
- package/comandos/swl/aprender.md +13 -0
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/evaluar-skill.md +18 -3
- package/comandos/swl/evolucion-continua.md +73 -0
- package/comandos/swl/evolucionar.md +13 -0
- package/comandos/swl/instalar.md +4 -4
- package/comandos/swl/notificaciones.md +1 -1
- package/comandos/swl/status.md +2 -2
- package/gateway/cron/jobs.example.json +12 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +19 -1
- package/habilidades/autoresearch/SKILL.md +3 -2
- package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
- package/habilidades/benchmark-memoria/SKILL.md +7 -7
- package/habilidades/changelog-generator/SKILL.md +1 -1
- package/habilidades/changelog-generator/scripts/parse-commits.js +2 -1
- package/habilidades/checkpoints-verificacion/SKILL.md +6 -0
- package/habilidades/compactacion-contexto/SKILL.md +2 -1
- package/habilidades/contenedores-docker/SKILL.md +4 -2
- package/habilidades/context-builder/SKILL.md +4 -0
- package/habilidades/doubt-driven-review/SKILL.md +17 -1
- package/habilidades/drift-detection/SKILL.md +6 -1
- package/habilidades/ejecutar-fase/SKILL.md +6 -6
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/eval-framework/SKILL.md +8 -3
- package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
- package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
- package/habilidades/harness-claude-code/SKILL.md +7 -3
- package/habilidades/infra-github-actions/SKILL.md +4 -3
- package/habilidades/instalar-sistema/SKILL.md +5 -1
- package/habilidades/memoria-busqueda/SKILL.md +31 -39
- package/habilidades/planear-fase/SKILL.md +9 -1
- package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
- package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +3 -2
- package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
- package/habilidades/release-semver/SKILL.md +2 -2
- package/habilidades/swl-claudemd/SKILL.md +6 -7
- package/habilidades/swl-dashboard/SKILL.md +11 -43
- package/habilidades/tdd-workflow/SKILL.md +12 -7
- package/habilidades/validacion-ci-sistema/SKILL.md +1 -1
- package/hooks/agente-lifecycle.js +2 -1
- package/hooks/aiisms-detector.js +13 -4
- package/hooks/audit-trail.js +2 -1
- package/hooks/auto-consolidacion.js +2 -1
- package/hooks/captura-acciones-post.js +2 -1
- package/hooks/captura-acciones-session.js +2 -1
- package/hooks/captura-feedback-usuario.js +3 -2
- package/hooks/claudemd-bloat-detector.js +12 -3
- package/hooks/claudemd-duplicacion-detector.js +13 -3
- package/hooks/contexto-iteracion.js +2 -1
- package/hooks/contexto-subagente.js +68 -68
- package/hooks/degradacion-instintos.js +2 -1
- package/hooks/extraccion-aprendizajes.js +109 -15
- package/hooks/grafo-contexto.js +2 -1
- package/hooks/guardrail-modelo.js +2 -1
- package/hooks/inbox-aviso.js +2 -1
- package/hooks/inyeccion-contexto.js +2 -1
- package/hooks/lib/agent-matcher.js +2 -1
- package/hooks/lib/agent-routing.js +2 -1
- package/hooks/lib/autonomia.js +5 -3
- package/hooks/lib/captura-acciones.js +2 -1
- package/hooks/lib/consolidation-lock.js +21 -10
- package/hooks/lib/etapa-auto-evolucion.js +10 -4
- package/hooks/lib/etapa-metricas.js +2 -1
- package/hooks/lib/etapa-perfil-usuario.js +20 -4
- package/hooks/lib/evolution-tracker.js +2 -1
- package/hooks/lib/gateway-notify.js +17 -3
- package/hooks/lib/loop-telemetry.js +5 -4
- package/hooks/lib/mcp-health.js +2 -1
- package/hooks/lib/memory-search.js +4 -0
- package/hooks/lib/merkle-audit.js +58 -6
- package/hooks/lib/notificacion-formato.js +58 -0
- package/hooks/lib/nudge-tracker.js +2 -1
- package/hooks/lib/otlp-exporter.js +2 -1
- package/hooks/lib/propose-step.js +3 -2
- package/hooks/lib/raiz-proyecto.js +127 -0
- package/hooks/lib/run-log.js +2 -1
- package/hooks/lib/singleton-guard.js +225 -27
- package/hooks/lib/telegram-cliente.js +28 -11
- package/hooks/notificacion-telegram.js +13 -3
- package/hooks/preservar-estado-pre-compact.js +2 -1
- package/hooks/proteccion-rutas.js +59 -3
- package/hooks/registro-turnos.js +2 -1
- package/hooks/resumen-sesion.js +2 -1
- package/hooks/risk-scoring.js +2 -1
- package/hooks/rotar-audit-auto.js +46 -20
- package/hooks/session-briefing.js +127 -1
- package/hooks/spec-gate.js +2 -1
- package/hooks/sugerir-contribuir.js +6 -3
- package/hooks/sugerir-regenerar-inventario.js +3 -2
- package/hooks/tdd-gate.js +2 -1
- package/hooks/telemetria-agentes.js +2 -1
- package/hooks/telemetria-skill-routing.js +2 -1
- package/hooks/tracking-costos.js +4 -3
- package/hooks/validar-formato-post-subagente.js +2 -1
- package/hooks/validar-intent-spec.js +2 -1
- package/hooks/validar-memoria-hook.js +13 -3
- package/hooks/validar-planning-paths.js +2 -1
- package/instintos/perfil-usuario.yaml +506 -3
- package/instintos/proyecto.yaml +78 -0
- package/llms.txt +29 -29
- package/manifiestos/canonical-hashes.json +5588 -4925
- package/manifiestos/hooks-config.json +469 -469
- package/manifiestos/invariantes-criticos.json +30 -30
- package/manifiestos/modulos.json +1429 -1423
- package/manifiestos/planning-paths.json +1 -0
- package/manifiestos/skills-lock.json +1275 -1275
- package/package.json +94 -95
- package/plugin.json +369 -369
- package/scripts/actualizar.js +3 -0
- package/scripts/auditar-clases-conocidas.js +134 -106
- package/scripts/benchmark-memoria.js +1 -0
- package/scripts/bootstrap-instintos.js +85 -14
- package/scripts/canario-hooks.js +166 -166
- package/scripts/cli/autonomia.js +23 -0
- package/scripts/cli/benchmark-memoria.js +37 -0
- package/scripts/cli/ciclo-autonomo.js +73 -0
- package/scripts/cli/ciclo-fase-b.js +102 -0
- package/scripts/cli/guardrail-metrics.js +39 -0
- package/scripts/cli/loop-telemetry.js +4 -2
- package/scripts/cli/memoria-search.js +69 -0
- package/scripts/cli/nudge-accionar.js +39 -0
- package/scripts/cli/run-eval.js +38 -0
- package/scripts/cli/run-skill-evals.js +13 -2
- package/scripts/derivar-feature-list.js +15 -14
- package/scripts/desinstalar.js +11 -0
- package/scripts/doctor.js +50 -13
- package/scripts/evidencia-valor.js +101 -101
- package/scripts/field-report.js +16 -16
- package/scripts/instalador.js +98 -7
- package/scripts/lib/activar-hooks-proyecto.js +116 -104
- package/scripts/lib/auditar-invocaciones-comandos.js +96 -6
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -0
- package/scripts/lib/ciclo-autonomo/config.js +165 -0
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -0
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -0
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -0
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -0
- package/scripts/lib/ciclo-autonomo/index.js +301 -0
- package/scripts/lib/ciclo-autonomo/lock.js +124 -0
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -0
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -0
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -0
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -0
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -0
- package/scripts/lib/estado.js +9 -0
- package/scripts/lib/evidencia-valor.js +228 -228
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/gitignore-manifest.js +8 -1
- package/scripts/lib/hooks-settings.js +45 -0
- package/scripts/lib/limpiar-basura-global.js +161 -0
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/rotar-audit-logs.js +48 -2
- package/scripts/run-eval.js +1 -0
- package/scripts/run-skill-evals.js +287 -8
- package/scripts/smoke-test.js +16 -8
- package/scripts/tui/pantallas/install-wizard.js +69 -13
- package/scripts/validar.js +40 -1
package/bin/swl-ses.js
CHANGED
|
@@ -106,8 +106,8 @@ const COMANDOS = {
|
|
|
106
106
|
doctor: '../scripts/doctor.js',
|
|
107
107
|
update: '../scripts/actualizar.js',
|
|
108
108
|
uninstall: '../scripts/desinstalar.js',
|
|
109
|
-
prune: '../scripts/prune.js',
|
|
110
|
-
valor: '../scripts/evidencia-valor.js',
|
|
109
|
+
prune: '../scripts/prune.js',
|
|
110
|
+
valor: '../scripts/evidencia-valor.js',
|
|
111
111
|
'field-report': '../scripts/field-report.js',
|
|
112
112
|
'check-update': '../scripts/check-update.js',
|
|
113
113
|
'install-git-hook': '../scripts/instalar-git-hook.js',
|
|
@@ -141,7 +141,14 @@ const COMANDOS = {
|
|
|
141
141
|
'loop-telemetry': '../scripts/cli/loop-telemetry.js',
|
|
142
142
|
'configurar-ci': '../scripts/cli/configurar-ci.js',
|
|
143
143
|
'ciclo-evolucion': '../scripts/cli/ciclo-evolucion.js',
|
|
144
|
+
'ciclo-autonomo': '../scripts/cli/ciclo-autonomo.js',
|
|
145
|
+
'ciclo-fase-b': '../scripts/cli/ciclo-fase-b.js',
|
|
144
146
|
notificaciones: '../scripts/cli/notificaciones.js',
|
|
147
|
+
autonomia: '../scripts/cli/autonomia.js',
|
|
148
|
+
'memoria-search': '../scripts/cli/memoria-search.js',
|
|
149
|
+
'guardrail-metrics': '../scripts/cli/guardrail-metrics.js',
|
|
150
|
+
'run-eval': '../scripts/cli/run-eval.js',
|
|
151
|
+
'benchmark-memoria': '../scripts/cli/benchmark-memoria.js',
|
|
145
152
|
};
|
|
146
153
|
|
|
147
154
|
// Comandos con subcomandos (nivel 2)
|
|
@@ -164,9 +171,9 @@ COMANDOS PRINCIPALES:
|
|
|
164
171
|
doctor Diagnóstica problemas de instalación
|
|
165
172
|
update Actualiza componentes instalados
|
|
166
173
|
uninstall Desinstala componentes del runtime
|
|
167
|
-
prune Purga componentes retirados del paquete (dry-run; --confirmar ejecuta)
|
|
168
|
-
valor Panel de evidencia de valor del harness (intercepciones, defectos, DORA/CI, uso; --json, --dias N)
|
|
169
|
-
install --solo-hooks Activa hooks (telemetría) a nivel proyecto apuntando al scope global — sin duplicar componentes en la UI
|
|
174
|
+
prune Purga componentes retirados del paquete (dry-run; --confirmar ejecuta)
|
|
175
|
+
valor Panel de evidencia de valor del harness (intercepciones, defectos, DORA/CI, uso; --json, --dias N)
|
|
176
|
+
install --solo-hooks Activa hooks (telemetría) a nivel proyecto apuntando al scope global — sin duplicar componentes en la UI
|
|
170
177
|
field-report Reporte de agregados anónimos para compartir con el autor (opt-in, revisión manual)
|
|
171
178
|
check-update Fuerza consulta inmediata de nueva versión en npm (sin throttle)
|
|
172
179
|
install-git-hook [--force] Instala pre-commit hook que avisa de nuevas versiones.
|
|
@@ -244,9 +251,26 @@ COMANDOS PRINCIPALES:
|
|
|
244
251
|
Usado por /swl:configurar-ci.
|
|
245
252
|
ciclo-evolucion Regenera .planning/evolution/metricas.json.
|
|
246
253
|
Usado por /swl:status.
|
|
254
|
+
ciclo-autonomo [on|off|status] Motor determinista de aprendizaje (Fase A,
|
|
255
|
+
ADR-0041). Nace encendido; off = kill-switch.
|
|
256
|
+
Usado por /swl:evolucion-continua.
|
|
257
|
+
ciclo-fase-b [--dry-run|status] Runner headless de Fase B (ADR-0042 gate
|
|
258
|
+
G-B). En esta versión siempre dry-run.
|
|
259
|
+
nudge-accionar <id> [--por X] Marca un nudge como accionado (cierra el
|
|
260
|
+
ciclo). Usado por /swl:aprender y /swl:evolucionar.
|
|
247
261
|
notificaciones <op> Telegram: init|status|disable|repair|bot-start|
|
|
248
262
|
bot-stop|bot-status|bot-restart|bot-enable-autostart|
|
|
249
263
|
bot-disable-autostart. Usado por /swl:notificaciones.
|
|
264
|
+
autonomia --accion="..." Registra auto-checkpoint según el dial de
|
|
265
|
+
autonomía. Usado por ejecutar-fase.
|
|
266
|
+
memoria-search <op> Búsqueda en memoria del proyecto: search|timeline|
|
|
267
|
+
fetch (JSON). Usado por memoria-busqueda.
|
|
268
|
+
guardrail-metrics [--json] Métricas + diagnóstico de guardrails de la sesión.
|
|
269
|
+
Usado por /swl:status (dashboard).
|
|
270
|
+
run-eval <eval.json> Ejecuta un eval del framework de validación de
|
|
271
|
+
outputs. --rebuild-aggregate reconstruye métricas.
|
|
272
|
+
benchmark-memoria [--json] Benchmark de retrieval de memoria (--dataset,
|
|
273
|
+
--limit, --verbose).
|
|
250
274
|
info [--target <runtime>] Muestra información del sistema instalado
|
|
251
275
|
help Muestra esta ayuda (alias de --help)
|
|
252
276
|
list [--target <runtime>] Lista todos los agentes y skills instalados
|
|
@@ -263,8 +287,9 @@ OPCIONES DE INSTALL:
|
|
|
263
287
|
--target <runtime> Runtime destino: claude|openclaude|copilot|opencode|codex|gemini|cursor (default: claude)
|
|
264
288
|
--profile <perfil> Perfil: core|backend-python|backend-node|frontend-react|frontend-angular|
|
|
265
289
|
fullstack-python-angular|fullstack-node-react|mobile|devops|completo (default: completo)
|
|
266
|
-
--with <
|
|
267
|
-
|
|
290
|
+
--with <modulos> Incluir módulos adicionales, incluidos los opt-in fuera de todo perfil
|
|
291
|
+
(p. ej. reglas-personales). Quedan en el install-state y update los preserva
|
|
292
|
+
--without <modulos> Excluir módulos (separados por coma; también quita extras preservados)
|
|
268
293
|
--global Instalar en directorio global del runtime (~/.claude, etc.)
|
|
269
294
|
--local Instalar en directorio local del proyecto (.claude/, etc.)
|
|
270
295
|
--dry-run Mostrar plan sin aplicar cambios
|
|
@@ -128,7 +128,7 @@ Espera confirmación del usuario.
|
|
|
128
128
|
## Paso 3 — Ejecutar actualización
|
|
129
129
|
|
|
130
130
|
```bash
|
|
131
|
-
npx @saulwade/swl-ses@latest install --target claude --profile <PERFIL> [--global] --force
|
|
131
|
+
npx -y @saulwade/swl-ses@latest install --target claude --profile <PERFIL> [--global] --force
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
Usa el mismo perfil y ubicación de la instalación original.
|
|
@@ -136,7 +136,7 @@ Usa el mismo perfil y ubicación de la instalación original.
|
|
|
136
136
|
## Paso 4 — Ejecutar doctor
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
npx @saulwade/swl-ses@latest doctor
|
|
139
|
+
npx -y @saulwade/swl-ses@latest doctor
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
## Paso 5 — Reportar resultado
|
|
@@ -157,7 +157,7 @@ Doctor: <resultado>
|
|
|
157
157
|
Si el usuario dice algo como "actualiza y cambia a perfil completo", ejecuta:
|
|
158
158
|
|
|
159
159
|
```bash
|
|
160
|
-
npx @saulwade/swl-ses@latest install --target claude --profile <NUEVO_PERFIL> [--global] --force
|
|
160
|
+
npx -y @saulwade/swl-ses@latest install --target claude --profile <NUEVO_PERFIL> [--global] --force
|
|
161
161
|
```
|
|
162
162
|
|
|
163
163
|
Informa que el cambio de perfil puede agregar componentes nuevos pero no elimina los del perfil anterior. Si quiere una instalación limpia con otro perfil, sugiere:
|
package/comandos/swl/aprender.md
CHANGED
|
@@ -542,6 +542,19 @@ Archivos actualizados:
|
|
|
542
542
|
[lista con rutas]
|
|
543
543
|
```
|
|
544
544
|
|
|
545
|
+
### Cierre del ciclo de nudges (obligatorio si este comando fue disparado por un nudge)
|
|
546
|
+
|
|
547
|
+
Si esta ejecución atendió un nudge (de `auto-consolidacion.js` o cualquier
|
|
548
|
+
otro visible en el briefing o en `evolution/nudges.jsonl`), márcalo como
|
|
549
|
+
accionado — sin este cierre los nudges se acumulan sin consumidor:
|
|
550
|
+
|
|
551
|
+
```bash
|
|
552
|
+
swl-ses nudge-accionar <id-del-nudge> --por aprender
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
El `<id>` viene en el propio nudge (campo `id` del JSONL o del mensaje del
|
|
556
|
+
hook). Si la sesión fue manual (sin nudge), omite este cierre.
|
|
557
|
+
|
|
545
558
|
## Paso 7.3 — Diary estructurado de la sesión (opcional)
|
|
546
559
|
|
|
547
560
|
Si la sesión generó al menos 3 aprendizajes aprobados (cualquier categoría),
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:deuda-codigo
|
|
3
|
-
description: Cosecha los marcadores `simplificado:` del código (simplificaciones deliberadas con techo y trigger de upgrade) hacia un ledger visible, detecta marcadores sin trigger (riesgo de rot) y sincroniza opcionalmente con .planning/DEUDA-TECNICA.md. Cargar cuando el usuario pida "qué simplificamos", "deuda de código", "cosecha los marcadores", o tras una fase que dejó marcadores simplificado:.
|
|
4
|
-
allowed_tools: ["Grep", "Read", "Edit", "Bash"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:deuda-codigo — Cosecha de simplificaciones deliberadas
|
|
8
|
-
|
|
9
|
-
Todo atajo intencional marcado con `simplificado: <techo>, <trigger>` (convención
|
|
10
|
-
de `Skill("prevencion-sobreingenieria")`, adaptada del patrón `ponytail:` de
|
|
11
|
-
ponytail, MIT) se cosecha aquí en un ledger — para que un "después" no se
|
|
12
|
-
convierta en "nunca" (regla `arreglar-al-detectar.md`).
|
|
13
|
-
|
|
14
|
-
## Uso
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
/swl:deuda-codigo — Reporte en pantalla (no escribe nada)
|
|
18
|
-
/swl:deuda-codigo --sync — Además sincroniza a .planning/DEUDA-TECNICA.md
|
|
19
|
-
/swl:deuda-codigo --owners — Agrega autor por marcador (git blame)
|
|
20
|
-
/swl:deuda-codigo <directorio> — Limita la cosecha a un subárbol
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Paso 1 — Cosechar los marcadores
|
|
24
|
-
|
|
25
|
-
Buscar con Grep (herramienta, no shell) el patrón sobre el árbol del proyecto,
|
|
26
|
-
excluyendo `node_modules`, `.git`, `dist`, `build`, `temp`, `respositorios-git`:
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
Grep(pattern: "(#|//|--|<!--|/\\*)\\s?simplificado:", output_mode: "content", -n: true)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Cada hit es una fila del ledger. El prefijo de comentario evita capturar prosa
|
|
33
|
-
que solo menciona la convención (como este archivo o el SKILL.md).
|
|
34
|
-
|
|
35
|
-
## Paso 2 — Parsear techo y trigger
|
|
36
|
-
|
|
37
|
-
La convención es `simplificado: <techo>, <trigger de upgrade>`:
|
|
38
|
-
|
|
39
|
-
- **techo**: el límite conocido del atajo (lock global, O(n²), heurística naive).
|
|
40
|
-
- **trigger**: la condición observable que obliga el upgrade ("si throughput > X",
|
|
41
|
-
"cuando haya un segundo consumidor", "antes del primer deploy productivo").
|
|
42
|
-
|
|
43
|
-
Si el texto tras `simplificado:` no contiene una condición observable,
|
|
44
|
-
etiquetar la fila `sin-trigger` — esos son los que rotan en silencio.
|
|
45
|
-
|
|
46
|
-
## Paso 3 — Reporte
|
|
47
|
-
|
|
48
|
-
Una fila por marcador, agrupado por archivo:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
## Ledger de simplificaciones — [fecha]
|
|
52
|
-
|
|
53
|
-
| Ubicación | Qué se simplificó | Techo | Trigger de upgrade | Estado |
|
|
54
|
-
|---|---|---|---|---|
|
|
55
|
-
| src/locks.py:42 | lock global | contención con N workers | throughput > 500 rps | ok |
|
|
56
|
-
| api/cache.js:17 | TTL fijo 5 min | staleness | (ninguno) | sin-trigger |
|
|
57
|
-
|
|
58
|
-
Total: N marcadores, M sin trigger.
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Con `--owners`: agregar columna con `git blame -L<línea>,<línea> --porcelain <archivo>`
|
|
62
|
-
(solo el autor, una llamada por fila).
|
|
63
|
-
|
|
64
|
-
Si no hay marcadores: `Sin deuda simplificado:. Ledger limpio.` — y terminar.
|
|
65
|
-
|
|
66
|
-
## Paso 4 — Sincronizar al ledger formal (solo con --sync)
|
|
67
|
-
|
|
68
|
-
Para cada marcador `sin-trigger` o de techo relevante que no exista ya en
|
|
69
|
-
`.planning/DEUDA-TECNICA.md`:
|
|
70
|
-
|
|
71
|
-
1. Leer el ledger actual y verificar duplicados por ubicación (`archivo:línea`).
|
|
72
|
-
2. Agregar entrada `### DT-SIMPLIFICADO-<n>` con: ubicación, techo, trigger
|
|
73
|
-
(o `PENDIENTE DE TRIGGER` marcado como acción requerida), fecha de cosecha.
|
|
74
|
-
3. Los `sin-trigger` NO se sincronizan como DT válidas hasta tener trigger:
|
|
75
|
-
reportarlos al usuario como acción inmediata — una DT sin trigger verificable
|
|
76
|
-
viola `arreglar-al-detectar.md § DT formal`.
|
|
77
|
-
|
|
78
|
-
NUNCA borrar ni editar los marcadores del código durante la cosecha: el
|
|
79
|
-
comando lee y reporta; el código solo cambia cuando el trigger se cumple y
|
|
80
|
-
el upgrade se implementa.
|
|
81
|
-
|
|
82
|
-
## Cuándo usarlo
|
|
83
|
-
|
|
84
|
-
- Cierre de fase (`/swl:verificar` lo puede invocar como pasada complementaria).
|
|
85
|
-
- Antes de un release: los `sin-trigger` son bloqueo blando (reportar en el gate).
|
|
86
|
-
- Auditorías de deuda: junto con la sección "Sobre-ingeniería" de `/swl:revisar`.
|
|
87
|
-
|
|
88
|
-
## Gotchas
|
|
89
|
-
|
|
90
|
-
- **Marcadores en fixtures o docs**: los hits dentro de `tests/fixtures/`,
|
|
91
|
-
ejemplos de skills o este propio comando son material de referencia, no deuda
|
|
92
|
-
— excluirlos del conteo y decir cuántos se excluyeron (sin caps silenciosos).
|
|
93
|
-
- **Prefijos de comentario por stack**: el patrón cubre `#` (Python/shell),
|
|
94
|
-
`//` (JS/TS/Go/Rust/C#/Java), `--` (SQL/Lua), `<!--` (HTML/MD) y `/*` (CSS/C).
|
|
95
|
-
Si el proyecto usa otro prefijo, agregarlo al patrón y decirlo en el reporte.
|
|
96
|
-
- **`git blame` sobre archivos renombrados**: usar `git blame -M -C` si el
|
|
97
|
-
autor aparece como el commit del rename.
|
|
1
|
+
---
|
|
2
|
+
name: swl:deuda-codigo
|
|
3
|
+
description: Cosecha los marcadores `simplificado:` del código (simplificaciones deliberadas con techo y trigger de upgrade) hacia un ledger visible, detecta marcadores sin trigger (riesgo de rot) y sincroniza opcionalmente con .planning/DEUDA-TECNICA.md. Cargar cuando el usuario pida "qué simplificamos", "deuda de código", "cosecha los marcadores", o tras una fase que dejó marcadores simplificado:.
|
|
4
|
+
allowed_tools: ["Grep", "Read", "Edit", "Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:deuda-codigo — Cosecha de simplificaciones deliberadas
|
|
8
|
+
|
|
9
|
+
Todo atajo intencional marcado con `simplificado: <techo>, <trigger>` (convención
|
|
10
|
+
de `Skill("prevencion-sobreingenieria")`, adaptada del patrón `ponytail:` de
|
|
11
|
+
ponytail, MIT) se cosecha aquí en un ledger — para que un "después" no se
|
|
12
|
+
convierta en "nunca" (regla `arreglar-al-detectar.md`).
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/swl:deuda-codigo — Reporte en pantalla (no escribe nada)
|
|
18
|
+
/swl:deuda-codigo --sync — Además sincroniza a .planning/DEUDA-TECNICA.md
|
|
19
|
+
/swl:deuda-codigo --owners — Agrega autor por marcador (git blame)
|
|
20
|
+
/swl:deuda-codigo <directorio> — Limita la cosecha a un subárbol
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Paso 1 — Cosechar los marcadores
|
|
24
|
+
|
|
25
|
+
Buscar con Grep (herramienta, no shell) el patrón sobre el árbol del proyecto,
|
|
26
|
+
excluyendo `node_modules`, `.git`, `dist`, `build`, `temp`, `respositorios-git`:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Grep(pattern: "(#|//|--|<!--|/\\*)\\s?simplificado:", output_mode: "content", -n: true)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Cada hit es una fila del ledger. El prefijo de comentario evita capturar prosa
|
|
33
|
+
que solo menciona la convención (como este archivo o el SKILL.md).
|
|
34
|
+
|
|
35
|
+
## Paso 2 — Parsear techo y trigger
|
|
36
|
+
|
|
37
|
+
La convención es `simplificado: <techo>, <trigger de upgrade>`:
|
|
38
|
+
|
|
39
|
+
- **techo**: el límite conocido del atajo (lock global, O(n²), heurística naive).
|
|
40
|
+
- **trigger**: la condición observable que obliga el upgrade ("si throughput > X",
|
|
41
|
+
"cuando haya un segundo consumidor", "antes del primer deploy productivo").
|
|
42
|
+
|
|
43
|
+
Si el texto tras `simplificado:` no contiene una condición observable,
|
|
44
|
+
etiquetar la fila `sin-trigger` — esos son los que rotan en silencio.
|
|
45
|
+
|
|
46
|
+
## Paso 3 — Reporte
|
|
47
|
+
|
|
48
|
+
Una fila por marcador, agrupado por archivo:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
## Ledger de simplificaciones — [fecha]
|
|
52
|
+
|
|
53
|
+
| Ubicación | Qué se simplificó | Techo | Trigger de upgrade | Estado |
|
|
54
|
+
|---|---|---|---|---|
|
|
55
|
+
| src/locks.py:42 | lock global | contención con N workers | throughput > 500 rps | ok |
|
|
56
|
+
| api/cache.js:17 | TTL fijo 5 min | staleness | (ninguno) | sin-trigger |
|
|
57
|
+
|
|
58
|
+
Total: N marcadores, M sin trigger.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Con `--owners`: agregar columna con `git blame -L<línea>,<línea> --porcelain <archivo>`
|
|
62
|
+
(solo el autor, una llamada por fila).
|
|
63
|
+
|
|
64
|
+
Si no hay marcadores: `Sin deuda simplificado:. Ledger limpio.` — y terminar.
|
|
65
|
+
|
|
66
|
+
## Paso 4 — Sincronizar al ledger formal (solo con --sync)
|
|
67
|
+
|
|
68
|
+
Para cada marcador `sin-trigger` o de techo relevante que no exista ya en
|
|
69
|
+
`.planning/DEUDA-TECNICA.md`:
|
|
70
|
+
|
|
71
|
+
1. Leer el ledger actual y verificar duplicados por ubicación (`archivo:línea`).
|
|
72
|
+
2. Agregar entrada `### DT-SIMPLIFICADO-<n>` con: ubicación, techo, trigger
|
|
73
|
+
(o `PENDIENTE DE TRIGGER` marcado como acción requerida), fecha de cosecha.
|
|
74
|
+
3. Los `sin-trigger` NO se sincronizan como DT válidas hasta tener trigger:
|
|
75
|
+
reportarlos al usuario como acción inmediata — una DT sin trigger verificable
|
|
76
|
+
viola `arreglar-al-detectar.md § DT formal`.
|
|
77
|
+
|
|
78
|
+
NUNCA borrar ni editar los marcadores del código durante la cosecha: el
|
|
79
|
+
comando lee y reporta; el código solo cambia cuando el trigger se cumple y
|
|
80
|
+
el upgrade se implementa.
|
|
81
|
+
|
|
82
|
+
## Cuándo usarlo
|
|
83
|
+
|
|
84
|
+
- Cierre de fase (`/swl:verificar` lo puede invocar como pasada complementaria).
|
|
85
|
+
- Antes de un release: los `sin-trigger` son bloqueo blando (reportar en el gate).
|
|
86
|
+
- Auditorías de deuda: junto con la sección "Sobre-ingeniería" de `/swl:revisar`.
|
|
87
|
+
|
|
88
|
+
## Gotchas
|
|
89
|
+
|
|
90
|
+
- **Marcadores en fixtures o docs**: los hits dentro de `tests/fixtures/`,
|
|
91
|
+
ejemplos de skills o este propio comando son material de referencia, no deuda
|
|
92
|
+
— excluirlos del conteo y decir cuántos se excluyeron (sin caps silenciosos).
|
|
93
|
+
- **Prefijos de comentario por stack**: el patrón cubre `#` (Python/shell),
|
|
94
|
+
`//` (JS/TS/Go/Rust/C#/Java), `--` (SQL/Lua), `<!--` (HTML/MD) y `/*` (CSS/C).
|
|
95
|
+
Si el proyecto usa otro prefijo, agregarlo al patrón y decirlo en el reporte.
|
|
96
|
+
- **`git blame` sobre archivos renombrados**: usar `git blame -M -C` si el
|
|
97
|
+
autor aparece como el commit del rename.
|
|
@@ -374,9 +374,22 @@ Umbral de promoción:
|
|
|
374
374
|
Si un skill es rechazado ≥3 veces consecutivas, el agente escala al usuario
|
|
375
375
|
con análisis de qué dimensiones bajan el score. Origen: ADR 0013 sección 3C.
|
|
376
376
|
|
|
377
|
-
## Paso 4 — Emitir reporte
|
|
377
|
+
## Paso 4 — Emitir reporte y artefacto de procedencia
|
|
378
378
|
|
|
379
|
-
|
|
379
|
+
Tras calcular el score final y el badge, persiste el **artefacto de
|
|
380
|
+
evaluación con procedencia** (única fuente que `run-skill-evals.js
|
|
381
|
+
--record-after` acepta para aprobar una evolución — anti-gaming,
|
|
382
|
+
DT-AGP-SCORE-AUTODECLARADO):
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
swl-ses run-skill-evals <nombre> --emitir-evaluacion \
|
|
386
|
+
--score=<score-final> --badge=<badge> --producido-por=evaluar-skill
|
|
387
|
+
# → escribe .planning/evolution/evaluaciones/<nombre>.json (fechado)
|
|
388
|
+
# y registra el evento tipo:evaluacion en evoluciones.jsonl
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Es el ÚNICO archivo que este comando crea. Luego generar el siguiente
|
|
392
|
+
reporte directamente en la conversación:
|
|
380
393
|
|
|
381
394
|
```markdown
|
|
382
395
|
## Evaluación de skill: [nombre]
|
|
@@ -498,7 +511,9 @@ Score evals: 82.4/100 (peso 30% del final)
|
|
|
498
511
|
- Los evals NUNCA se inventan en este comando — solo se ejecutan los declarados por el autor del skill. Crear evals nuevos es tarea de `/swl:aprender` o del autor del skill directamente, siguiendo `plantillas/skill-evals-template.json`.
|
|
499
512
|
- Si el archivo no existe, informar al usuario con el path exacto y terminar.
|
|
500
513
|
- Si `--agente` se pasa sin nombre, listar los agentes disponibles y terminar.
|
|
501
|
-
- El reporte siempre se emite en la conversación.
|
|
514
|
+
- El reporte siempre se emite en la conversación. El único archivo que se
|
|
515
|
+
crea es el artefacto de procedencia del Paso 4 (`.planning/evolution/
|
|
516
|
+
evaluaciones/<nombre>.json`) — nunca reportes sueltos.
|
|
502
517
|
- Las "Fortalezas" deben ser específicas del contenido leído, no genéricas.
|
|
503
518
|
- Las "Áreas de mejora" deben incluir la sección o línea aproximada donde se detectó el problema.
|
|
504
519
|
- Si la Capa 1 genera errores E001–E010, reflejar el impacto en el score de la dimensión afectada antes de sumar las contribuciones ponderadas.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:evolucion-continua
|
|
3
|
+
description: Enciende, apaga o consulta el motor determinista de aprendizaje del ciclo autónomo (ADR-0041). Con on, el proyecto aprende solo — decay y promoción de instintos, drenaje de feedback al perfil, puente de degradación e higiene de nudges — vía cron nocturno o fallback de session-briefing (cada ≥24h). Subcomandos on | off | status. Nace encendido (opt-out): off/SWL_CICLO_AUTONOMO=0 son el kill-switch sagrado.
|
|
4
|
+
allowed_tools: ["Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:evolucion-continua — Motor determinista de aprendizaje (on|off|status)
|
|
8
|
+
|
|
9
|
+
Eres el operador del motor determinista del ciclo autónomo (Nivel 0,
|
|
10
|
+
ADR-0041). Este comando es la cara de usuario del subcomando CLI
|
|
11
|
+
`swl-ses ciclo-autonomo`: NO implementa lógica propia — delega en el CLI
|
|
12
|
+
(invocación cross-scope, regla `validar.js §7b`).
|
|
13
|
+
|
|
14
|
+
## Qué hace el motor cuando está encendido
|
|
15
|
+
|
|
16
|
+
Cada corrida de la Fase A (Node puro, sin LLM, <2s, $0):
|
|
17
|
+
|
|
18
|
+
1. **Writer de instintos** — aplica decay, promueve drafts maduros
|
|
19
|
+
(confidence ≥0.5 + evidencia ≥3), degrada por feedback dañino y archiva
|
|
20
|
+
instintos muertos en `instintos/proyecto.yaml` (con backup previo).
|
|
21
|
+
2. **Puente de degradación** — un aprendizaje `[DEGRADADO]` en
|
|
22
|
+
APRENDIZAJES.md baja la confidence del instinto derivado.
|
|
23
|
+
3. **Drenador de feedback** — consolida las señales de
|
|
24
|
+
`evolution/feedback-queue.jsonl` (≤90 días) como drafts en
|
|
25
|
+
`instintos/perfil-usuario.yaml`; lo más viejo se archiva sin procesar.
|
|
26
|
+
4. **Higiene de nudges** — marca atendidos los que el ciclo consume y
|
|
27
|
+
archiva los >90 días sin accionar.
|
|
28
|
+
|
|
29
|
+
Todo queda registrado en `evolution/ciclo-autonomo.jsonl` con
|
|
30
|
+
`origen: ciclo-autonomo`. Corridas sin señales son no-op sin escrituras.
|
|
31
|
+
|
|
32
|
+
## Uso
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/swl:evolucion-continua on # habilita el motor en este proyecto
|
|
36
|
+
/swl:evolucion-continua off # lo apaga (kill-switch)
|
|
37
|
+
/swl:evolucion-continua status # last_run + conteos de la última corrida
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Ejecución
|
|
41
|
+
|
|
42
|
+
Resuelve el CLI con el patrón cross-scope (repo madre → bin en PATH → npx):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# on | off | status según el argumento recibido
|
|
46
|
+
swl-ses ciclo-autonomo <accion>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Sin binario en PATH: `npx -y @saulwade/swl-ses@latest ciclo-autonomo <accion>`.
|
|
50
|
+
|
|
51
|
+
Tras `on`, informa al usuario los dos disparadores disponibles:
|
|
52
|
+
|
|
53
|
+
1. **Cron del gateway** (si usa `/swl:cron`): job de ejemplo en
|
|
54
|
+
`gateway/cron/jobs.example.json` (nocturno, `0 3 * * *`).
|
|
55
|
+
2. **Fallback automático de session-briefing**: sin cron, la Fase A se
|
|
56
|
+
dispara sola al iniciar sesión cuando pasaron ≥24h de la última corrida
|
|
57
|
+
(fire-and-forget; el lock evita corridas dobles).
|
|
58
|
+
|
|
59
|
+
Una corrida manual siempre es posible: `swl-ses ciclo-autonomo`.
|
|
60
|
+
|
|
61
|
+
## Reglas de comportamiento
|
|
62
|
+
|
|
63
|
+
- El motor **nace ENCENDIDO** (opt-out estricto, decisión del usuario
|
|
64
|
+
2026-07-10): en proyectos sin señales la corrida es no-op inofensiva.
|
|
65
|
+
`off` y `SWL_CICLO_AUTONOMO=0` (docs/variables-entorno.md) son el
|
|
66
|
+
kill-switch — el off es sagrado: cero corridas, cero escrituras.
|
|
67
|
+
- Este comando NO corre la Fase B con LLM (Fases 22+ del ADR-0042) — el
|
|
68
|
+
campo `credencial` del config existe pero aquí no se consume.
|
|
69
|
+
- Si `status` reporta corridas con `errores`, sugiere revisar
|
|
70
|
+
`evolution/ciclo-autonomo.jsonl` y los backups en `instintos/.backups/`.
|
|
71
|
+
- La primera corrida sobre un proyecto con señales acumuladas puede mover
|
|
72
|
+
mucho (bootstrap con ventana de 90 días): recomienda revisar el diff de
|
|
73
|
+
`instintos/*.yaml` antes de commitear.
|
|
@@ -244,6 +244,19 @@ Versión: [anterior] → [nueva]
|
|
|
244
244
|
Próxima evolución recomendada: después de [N] proyectos o [fecha]
|
|
245
245
|
```
|
|
246
246
|
|
|
247
|
+
### Cierre del ciclo de nudges (obligatorio si este comando fue disparado por un nudge)
|
|
248
|
+
|
|
249
|
+
Si esta evolución atendió un nudge de `etapa-auto-evolucion.js` / drift
|
|
250
|
+
(visible en el briefing o en `evolution/nudges.jsonl`), márcalo como
|
|
251
|
+
accionado — es lo que permite al sistema distinguir sugerencias atendidas
|
|
252
|
+
de ruido acumulado:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
swl-ses nudge-accionar <id-del-nudge> --por evolucionar
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Si la evolución fue manual (sin nudge), omite este cierre.
|
|
259
|
+
|
|
247
260
|
## Reglas de comportamiento
|
|
248
261
|
|
|
249
262
|
- NUNCA apliques cambios sin evidencia concreta. "Parece que sería mejor" no es evidencia.
|
package/comandos/swl/instalar.md
CHANGED
|
@@ -121,7 +121,7 @@ Espera confirmación explícita del usuario.
|
|
|
121
121
|
## Paso 5 — Ejecutar init
|
|
122
122
|
|
|
123
123
|
```bash
|
|
124
|
-
npx @saulwade/swl-ses@latest init
|
|
124
|
+
npx -y @saulwade/swl-ses@latest init
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
Esto crea:
|
|
@@ -136,7 +136,7 @@ Si reporta archivos omitidos (ya existen), eso es normal.
|
|
|
136
136
|
Construye el comando según las respuestas del usuario:
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
npx @saulwade/swl-ses@latest install --target claude --profile <PERFIL> [--global] [--force]
|
|
139
|
+
npx -y @saulwade/swl-ses@latest install --target claude --profile <PERFIL> [--global] [--force]
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
- `<PERFIL>`: el perfil que eligió el usuario
|
|
@@ -155,7 +155,7 @@ Este paso:
|
|
|
155
155
|
## Paso 7 — Ejecutar doctor
|
|
156
156
|
|
|
157
157
|
```bash
|
|
158
|
-
npx @saulwade/swl-ses@latest doctor
|
|
158
|
+
npx -y @saulwade/swl-ses@latest doctor
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
Verifica que todo quedó correctamente instalado:
|
|
@@ -217,4 +217,4 @@ Solo pregunta lo que NO se especificó en los argumentos.
|
|
|
217
217
|
- Si el usuario no tiene el registry configurado, NO intentes instalar — solo guíalo.
|
|
218
218
|
- Si el usuario pide un perfil que no existe, muestra la tabla de perfiles disponibles.
|
|
219
219
|
- Este comando NO modifica código del proyecto — solo instala componentes SWL en `.claude/` y `.planning/`.
|
|
220
|
-
- Para actualización: `npx @saulwade/swl-ses@latest update` detecta automáticamente el perfil instalado y actualiza sin preguntar perfil.
|
|
220
|
+
- Para actualización: `npx -y @saulwade/swl-ses@latest update` detecta automáticamente el perfil instalado y actualiza sin preguntar perfil.
|
|
@@ -51,7 +51,7 @@ o quiere reconfigurar.
|
|
|
51
51
|
**Modo headless** (sin TTY):
|
|
52
52
|
```bash
|
|
53
53
|
# Usar el instalador directamente con flag
|
|
54
|
-
npx @saulwade/swl-ses@latest install --with-notificaciones=<TOKEN>,<CHAT_ID>
|
|
54
|
+
npx -y @saulwade/swl-ses@latest install --with-notificaciones=<TOKEN>,<CHAT_ID>
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
**Criterio de éxito**: al terminar, el hook `notificacion-telegram.js` está
|
package/comandos/swl/status.md
CHANGED
|
@@ -17,7 +17,7 @@ funcionalidad ni de flags.
|
|
|
17
17
|
/swl:status salud — Diagnóstico de salud del sistema SWL (genera SALUD.md)
|
|
18
18
|
/swl:status metricas — Métricas de la sesión actual (tokens, costo, herramientas)
|
|
19
19
|
/swl:status metricas detalle — Desglose completo por herramienta, agente y timeline
|
|
20
|
-
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
20
|
+
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
21
21
|
/swl:status valor — Evidencia de valor del harness en ESTE proyecto (intercepciones, defectos/escapes, DORA/CI, uso — con procedencia por métrica)
|
|
22
22
|
/swl:status loops — Trayectorias de loops iterativos (.planning/loops/)
|
|
23
23
|
/swl:status evolucion — Estado del ciclo de auto-evolución (health_score, nudges…)
|
|
@@ -45,7 +45,7 @@ como vista por defecto si el contexto lo sugiere.
|
|
|
45
45
|
| `metricas` (+ `detalle`, `fases`) | scripts de métricas de sesión + `derivar-feature-list.js` | `/swl:metricas` |
|
|
46
46
|
| `loops` | `hooks/lib/loop-telemetry.js` | `/swl:metricas loops` |
|
|
47
47
|
| `evolucion` | `hooks/ciclo-evolucion.js` (etapa métricas) + `.planning/evolution/metricas.json` | `/swl:evolucion-estado` |
|
|
48
|
-
| `dora` | `scripts/lib/metricas-dora.js` + `.planning/evolution/metricas-dora.json` | nuevo (Fase 15, ADR-0039) |
|
|
48
|
+
| `dora` | `scripts/lib/metricas-dora.js` + `.planning/evolution/metricas-dora.json` | nuevo (Fase 15, ADR-0039) |
|
|
49
49
|
| `valor` | CLI cross-scope `swl-ses valor` (`scripts/evidencia-valor.js`) — datos 100% locales; frontera y reglas anti-gaming en `docs/evidencia-valor.md` | nuevo (v2.5.1) |
|
|
50
50
|
| `historico` / `dashboard` | `Skill("swl-dashboard")` | `/swl:dashboard` |
|
|
51
51
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comentario": "Plantilla de referencia — NO se carga automáticamente por el scheduler. Crear el job real con `/swl:cron add` o `store.addJob(cwd, {...})` (ver comandos/swl/cron.md). Campos que store.addJob acepta: name, schedule, command, deliver (opcional, default 'local'), enabled (opcional, default true).",
|
|
3
|
+
"jobs": [
|
|
4
|
+
{
|
|
5
|
+
"name": "Ciclo autónomo nocturno",
|
|
6
|
+
"schedule": "0 3 * * *",
|
|
7
|
+
"command": "npx -y @saulwade/swl-ses@latest ciclo-autonomo",
|
|
8
|
+
"deliver": "local",
|
|
9
|
+
"descripcion": "Fase A del motor determinista de aprendizaje (ADR-0041); requiere /swl:evolucion-continua on"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
Protocolo de auto-evolución del sistema SWL. Cómo los agentes aprenden y se mejoran,
|
|
5
5
|
proponen cambios, versionado semántico de agentes, changelog, métricas de evolución,
|
|
6
6
|
governance de cambios, parser de señales de fricción y safety checks.
|
|
7
|
-
version: "1.1.
|
|
7
|
+
version: "1.1.2"
|
|
8
8
|
herramientasPermitidas: [Read, Bash, Grep]
|
|
9
9
|
evolvable: false # bloqueado por lista (skill de seguridad/privacidad)
|
|
10
10
|
exclusiones:
|
|
@@ -148,6 +148,24 @@ Todo agente que proponga modificar un artefacto del sistema DEBE verificar:
|
|
|
148
148
|
4. **Reversibilidad**: Todo cambio tiene un plan de rollback documentado
|
|
149
149
|
5. **No contradicciones**: El cambio no contradice otros skills o reglas
|
|
150
150
|
|
|
151
|
+
### Default de features autónomas: opt-out con kill-switch sagrado, no opt-in
|
|
152
|
+
|
|
153
|
+
[Decisión validada 2026-07-10, motor determinista Fase 21/ADR-0041] Un ciclo
|
|
154
|
+
autónomo que exige encendido explícito es un ciclo muerto en downstream —
|
|
155
|
+
nadie lo opera. El diseño correcto es **nacer encendido** SOLO si se cumplen
|
|
156
|
+
las 4 precondiciones que lo hacen inofensivo:
|
|
157
|
+
|
|
158
|
+
1. **No-op sin señales**: en un proyecto sin datos, la corrida no escribe nada.
|
|
159
|
+
2. **Backup pre-mutación**: toda escritura sobre memoria/estado tiene respaldo previo.
|
|
160
|
+
3. **Kill-switch doble y sagrado**: config persistente (`off`) + variable por
|
|
161
|
+
sesión (`=0`); apagado = cero corridas, cero escrituras, sin excepción.
|
|
162
|
+
4. **Visibilidad**: cada corrida deja digest/telemetría que el usuario ve sin pedirla.
|
|
163
|
+
|
|
164
|
+
Sin las 4, el default sigue siendo opt-in. La autonomía de MUTACIÓN (cambiar
|
|
165
|
+
skills/agentes) queda además detrás de sus propios gates (checklist
|
|
166
|
+
humano-validado, canary con quórum) — el default-on aplica al ciclo
|
|
167
|
+
determinista, no a la aplicación de cambios.
|
|
168
|
+
|
|
151
169
|
---
|
|
152
170
|
|
|
153
171
|
## Formato de Commit Evolutivo
|
|
@@ -87,10 +87,11 @@ Ejecutar el skill con un **caso de prueba representativo** y evaluar:
|
|
|
87
87
|
score = Σ(items_cumplidos × peso) / Σ(todos_pesos) × 100
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Usar el script de scoring para cálculo determinista
|
|
90
|
+
Usar el script de scoring para cálculo determinista (viaja DENTRO de este
|
|
91
|
+
skill — invocarlo con la ruta del directorio del skill, no relativa al cwd):
|
|
91
92
|
|
|
92
93
|
```bash
|
|
93
|
-
node scripts/calcular-score.js '{"items":[{"peso":5,"cumple":true},{"peso":3,"cumple":false}]}'
|
|
94
|
+
node "<dir-de-este-skill>/scripts/calcular-score.js" '{"items":[{"peso":5,"cumple":true},{"peso":3,"cumple":false}]}'
|
|
94
95
|
```
|
|
95
96
|
|
|
96
97
|
**Formato de reporte baseline:**
|
|
@@ -10,7 +10,7 @@ description: >
|
|
|
10
10
|
`async with conn.transaction():`, cuando un test "deba pasar" pero falla
|
|
11
11
|
con `TypeError: object MagicMock is not async iterable`, o cuando se
|
|
12
12
|
agregue transaction wrapping a un service que tenía tests previos rotos.
|
|
13
|
-
version: "1.0.
|
|
13
|
+
version: "1.0.1"
|
|
14
14
|
herramientasPermitidas: [Read, Grep]
|
|
15
15
|
exclusiones:
|
|
16
16
|
- "No cargar para testing de SQLAlchemy async (AsyncSession) — esos usan `async with session.begin()` con un patrón distinto; cargar `fastapi-experto` que cubre el patrón con sessionmaker."
|
|
@@ -205,6 +205,7 @@ Si el código olvida envolver en transaction, `conn.transaction.assert_called_on
|
|
|
205
205
|
- **`fetchrow.side_effect = [row, row]` se agota tras 2 llamadas**: en la 3ra llamada lanza `StopIteration`. Si el código real hace 3 fetchrows en distintas ramas, el test falla con error críptico. Fix: usar lista con suficientes elementos o `side_effect` callable que retorna según args (`lambda *args: row if args[0] == "SELECT..." else None`).
|
|
206
206
|
- **`MagicMock` (no `AsyncMock`) en `conn.transaction` permite `assert_called_with(*args)` natural** — `AsyncMock` también lo soporta, pero produce warnings de "coroutine never awaited" si el mock se invoca incorrectamente. La distinción importa para diagnóstico, no para corrección.
|
|
207
207
|
- **`pytest-asyncio` con `mode="auto"` puede no marcar el test como async si no detecta `async def`**: si el fixture es async pero el test es sync, el fixture nunca se await. Fix: explícito `@pytest.mark.asyncio` en el test, o usar `asyncio_mode = "auto"` en `pyproject.toml` y verificar que el test es `async def`.
|
|
208
|
+
- **Un test que simula transacciones concurrentes abriendo un `asyncpg.connect()` NUEVO (no el mock ni la conexión de la fixture) contra una BD con RLS DENY-by-default (`FORCE ROW LEVEL SECURITY`) ve CERO filas silenciosamente si esa conexión no setea `app.tenant_id`** [CONFIRMADO]: el GUC de tenant NUNCA se hereda entre conexiones distintas — ni siquiera si la conexión que sembró los datos ya seteó `app.tenant_id` y sigue abierta en otra variable. Este patrón aparece en tests de integración E2E (no en los mocks de este skill) que abren 2+ `asyncpg.connect()` para simular procesos concurrentes reales (ej. probar un `SELECT ... FOR SHARE`/TOCTOU). El síntoma es engañoso: no hay excepción de permisos, la query simplemente devuelve `None`/lista vacía, y el código que asume una fila (`row["estatus"]`) revienta con `TypeError: 'NoneType' object is not subscriptable` — fácil de confundir con un bug de lógica. Solo se manifiesta contra un rol que SÍ enforcea RLS (ej. el rol de aplicación en CI); un rol superusuario (usado en desarrollo local) bypasea RLS y el test pasa igual, ocultando el bug hasta CI. Fix: en CADA conexión nueva que abra el test (no solo la primera), `await conn.execute("SELECT set_config('app.tenant_id', $1, false)", str(tenant_id))` antes de cualquier query sobre una tabla con RLS.
|
|
208
209
|
|
|
209
210
|
## Referencias
|
|
210
211
|
|
|
@@ -71,7 +71,7 @@ significativas**.
|
|
|
71
71
|
QUERY="qué hicimos sobre force push a main protegida"
|
|
72
72
|
|
|
73
73
|
# 2. Ejecuta búsqueda y anota top-5 IDs
|
|
74
|
-
|
|
74
|
+
swl-ses memoria-search search --query="$QUERY" --limit=5
|
|
75
75
|
|
|
76
76
|
# 3. Verifica manualmente qué IDs son CORRECTOS (revisión humana,
|
|
77
77
|
# no se inventa). Solo esos van en gold_ids.
|
|
@@ -93,7 +93,7 @@ benchmark es gate de release.
|
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
95
|
# Ejecutar benchmark con dataset por defecto
|
|
96
|
-
|
|
96
|
+
swl-ses benchmark-memoria
|
|
97
97
|
|
|
98
98
|
# Output esperado:
|
|
99
99
|
# Recall @ 5: 85.0%
|
|
@@ -107,16 +107,16 @@ node scripts/benchmark-memoria.js
|
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
109
|
# Dataset alternativo
|
|
110
|
-
|
|
110
|
+
swl-ses benchmark-memoria --dataset=.planning/benchmark/custom.jsonl
|
|
111
111
|
|
|
112
112
|
# Top-k personalizado (default 20)
|
|
113
|
-
|
|
113
|
+
swl-ses benchmark-memoria --limit=30
|
|
114
114
|
|
|
115
115
|
# Output JSON (para scripts)
|
|
116
|
-
|
|
116
|
+
swl-ses benchmark-memoria --json
|
|
117
117
|
|
|
118
118
|
# Detalle por query (útil para debugging)
|
|
119
|
-
|
|
119
|
+
swl-ses benchmark-memoria --verbose
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
### Tracking histórico opcional
|
|
@@ -126,7 +126,7 @@ agregado a `.planning/evolution/benchmark-memoria.jsonl` (append-only)
|
|
|
126
126
|
para detectar regresión entre releases:
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
SWL_BENCHMARK_PERSIST=1
|
|
129
|
+
SWL_BENCHMARK_PERSIST=1 swl-ses benchmark-memoria
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
Comparar entre releases:
|