@saulwade/swl-ses 2.1.0 → 2.2.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 +199 -196
- package/README.md +597 -579
- package/agentes/arquitecto-swl.md +0 -5
- package/agentes/backend-python-swl.md +0 -5
- package/agentes/implementador-swl.md +0 -5
- package/agentes/nemesis-auditor-swl.md +0 -5
- package/agentes/orquestador-swl.md +0 -5
- package/agentes/planificador-swl.md +0 -5
- package/agentes/revisor-codigo-swl.md +0 -5
- package/bin/swl-ses.js +63 -0
- package/comandos/swl/adoptar-proyecto.md +12 -14
- package/comandos/swl/aprender.md +30 -47
- package/comandos/swl/aprobar-plan.md +23 -35
- package/comandos/swl/autoresearch.md +12 -14
- package/comandos/swl/briefing.md +5 -8
- package/comandos/swl/checkpoint.md +10 -15
- package/comandos/swl/claudemd.md +12 -12
- package/comandos/swl/configurar-ci.md +20 -19
- package/comandos/swl/cron.md +10 -12
- package/comandos/swl/ejecutar-fase.md +10 -8
- package/comandos/swl/evolucionar.md +6 -11
- package/comandos/swl/inbox.md +10 -10
- package/comandos/swl/modelo.md +7 -9
- package/comandos/swl/notificaciones.md +19 -116
- package/comandos/swl/nuevo-proyecto.md +9 -14
- package/comandos/swl/release.md +19 -5
- package/comandos/swl/revisar-impacto.md +0 -5
- package/comandos/swl/status.md +333 -348
- package/comandos/swl/verificar.md +817 -813
- package/habilidades/agent-browser/SKILL.md +0 -5
- package/habilidades/angular-moderno/SKILL.md +0 -5
- package/habilidades/api-rest-diseno/SKILL.md +0 -5
- package/habilidades/aprendizaje-continuo/SKILL.md +0 -5
- package/habilidades/auth-patrones/SKILL.md +0 -5
- package/habilidades/build-errors-nextjs/SKILL.md +0 -5
- package/habilidades/changelog-generator/SKILL.md +174 -179
- package/habilidades/checklist-seguridad/SKILL.md +0 -5
- package/habilidades/contenedores-docker/SKILL.md +0 -5
- package/habilidades/datos-etl/SKILL.md +0 -5
- package/habilidades/doc-sync/SKILL.md +0 -5
- package/habilidades/extractor-de-aprendizajes/SKILL.md +0 -5
- package/habilidades/fastapi-experto/SKILL.md +0 -5
- package/habilidades/frontend-avanzado/SKILL.md +0 -5
- package/habilidades/iam-secretos/SKILL.md +0 -5
- package/habilidades/manejo-errores/SKILL.md +0 -5
- package/habilidades/mapear-codebase/SKILL.md +0 -5
- package/habilidades/meta-skills-estandar/SKILL.md +0 -5
- package/habilidades/monitoring-alertas/SKILL.md +0 -5
- package/habilidades/nextjs-experto/SKILL.md +0 -5
- package/habilidades/nextjs-testing/SKILL.md +0 -5
- package/habilidades/node-experto/SKILL.md +0 -5
- package/habilidades/orquestacion-async/SKILL.md +0 -5
- package/habilidades/patrones-python/SKILL.md +227 -232
- package/habilidades/planear-fase/SKILL.md +336 -341
- package/habilidades/postgresql-experto/SKILL.md +0 -5
- package/habilidades/prevencion-sobreingenieria/SKILL.md +0 -5
- package/habilidades/protocolo-revision-swl/SKILL.md +0 -5
- package/habilidades/react-experto/SKILL.md +0 -5
- package/habilidades/release-semver/SKILL.md +0 -5
- package/habilidades/swl-claudemd/SKILL.md +10 -11
- package/habilidades/tdd-workflow/SKILL.md +710 -715
- package/habilidades/testing-python/SKILL.md +335 -340
- package/habilidades/verificar-trabajo/SKILL.md +0 -5
- package/hooks/lib/evolution-tracker.js +191 -35
- package/hooks/lib/propose-step.js +1 -0
- package/llms.txt +1 -1
- package/manifiestos/canonical-hashes.json +656 -0
- package/manifiestos/modulos.json +3 -0
- package/manifiestos/skills-lock.json +71 -71
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/auditar-claudemd.js +38 -0
- package/scripts/cli/aprobar-plan.js +73 -0
- package/scripts/cli/briefing.js +23 -0
- package/scripts/cli/ciclo-evolucion.js +26 -0
- package/scripts/cli/configurar-ci.js +40 -0
- package/scripts/cli/derivar-feature-list.js +25 -0
- package/scripts/cli/detectar-host.js +27 -0
- package/scripts/cli/diary-entry.js +69 -0
- package/scripts/cli/execution-state.js +18 -0
- package/scripts/cli/gateway-notify.js +41 -0
- package/scripts/cli/liberar-fase.js +42 -0
- package/scripts/cli/loop-telemetry.js +125 -0
- package/scripts/cli/mark-evolved.js +56 -0
- package/scripts/cli/metricas-dora.js +26 -0
- package/scripts/cli/near-duplicate.js +55 -0
- package/scripts/cli/notificaciones.js +123 -0
- package/scripts/cli/propose-step.js +29 -0
- package/scripts/cli/schedule-parse.js +19 -0
- package/scripts/cli/sugerir-modelo.js +20 -0
- package/scripts/cli/verificar-plan.js +36 -0
- package/scripts/cli/verificar-trazabilidad.js +35 -0
- package/scripts/derivar-feature-list.js +1 -0
- package/scripts/generar-canonical-hashes.js +147 -0
- package/scripts/instalador.js +126 -53
- package/scripts/lib/audit-evolved.js +71 -0
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
- package/scripts/lib/canonical-hash.js +94 -0
- package/scripts/lib/evolved-fuente.js +138 -0
- package/scripts/lib/resolver-plan-fase.js +37 -0
- package/scripts/remediar-evolved-instaladas.js +239 -0
- package/scripts/validar.js +27 -0
- package/scripts/verificar-evolucion.js +36 -0
- package/scripts/verificar-release.js +33 -0
- package/scripts/verificar-trazabilidad.js +1 -1
- package/agentes/.evolved.json +0 -9
- package/comandos/swl/.evolved.json +0 -23
- package/habilidades/auth-patrones/.evolved.json +0 -9
- package/habilidades/extractor-de-aprendizajes/.evolved.json +0 -9
- package/habilidades/instalar-sistema/.evolved.json +0 -9
- package/habilidades/manejo-errores/.evolved.json +0 -9
- package/habilidades/node-experto/.evolved.json +0 -9
- package/habilidades/release-semver/.evolved.json +0 -9
|
@@ -13,11 +13,6 @@ modeloAlterno: claude-sonnet-4-6
|
|
|
13
13
|
ventanaContexto: 200k
|
|
14
14
|
color: blue
|
|
15
15
|
version: 1.0.1
|
|
16
|
-
evolved: true
|
|
17
|
-
evolved-from: "1.0.0"
|
|
18
|
-
evolved-at: "2026-05-16"
|
|
19
|
-
evolved-by: "aprender"
|
|
20
|
-
evolved-note: "v1.0.1: documentar contrato 'arquitecto NO tiene Write tool — produce contenido textual, el padre lo materializa'. Origen: sesión 2026-05-16 ADR-0021."
|
|
21
16
|
nivelRiesgo: MEDIO
|
|
22
17
|
skillsInvocables: [api-rest-diseno, microservicios, event-driven, cloud-aws, postgresql-experto, extraccion-documentos, diagrama-arquitectura]
|
|
23
18
|
skillsRestringidos: []
|
|
@@ -23,11 +23,6 @@ skillsRestringidos: [angular-moderno, typescript-avanzado, react-native-best-pra
|
|
|
23
23
|
permisosRed: false
|
|
24
24
|
permisosEscritura: true
|
|
25
25
|
permisosComandos: true
|
|
26
|
-
evolved: true
|
|
27
|
-
evolved-from: "5.2.0"
|
|
28
|
-
evolved-at: "2026-04-02"
|
|
29
|
-
evolved-by: "mutación SIGAF"
|
|
30
|
-
evolved-note: "Evolución incorporada desde proyecto SIGAF"
|
|
31
26
|
toolBudget:
|
|
32
27
|
simple: 15
|
|
33
28
|
standard: 30
|
|
@@ -20,11 +20,6 @@ skillsRestringidos: [auto-evolucion-protocolo]
|
|
|
20
20
|
permisosRed: false
|
|
21
21
|
permisosEscritura: true
|
|
22
22
|
permisosComandos: true
|
|
23
|
-
evolved: true
|
|
24
|
-
evolved-from: "5.2.0"
|
|
25
|
-
evolved-at: "2026-04-02"
|
|
26
|
-
evolved-by: "mutación SIGAF"
|
|
27
|
-
evolved-note: "Evolución incorporada desde proyecto SIGAF"
|
|
28
23
|
toolBudget:
|
|
29
24
|
simple: 15
|
|
30
25
|
standard: 30
|
|
@@ -12,11 +12,6 @@ tools: [Read, Grep, Glob, Bash, Write]
|
|
|
12
12
|
model: claude-sonnet-4-6
|
|
13
13
|
version: 1.1.1
|
|
14
14
|
nivelRiesgo: MEDIO
|
|
15
|
-
evolved: true
|
|
16
|
-
evolved-from: "1.1.0"
|
|
17
|
-
evolved-at: "2026-05-20"
|
|
18
|
-
evolved-by: "aprender"
|
|
19
|
-
evolved-note: "L-154 SIGM: reforzar exclusión ADR-0021 (no aplicar fixes) + agregar Gate defensivo post-fix (python -c import + compileall + tests) para detectar SyntaxErrors Python 2 que ruff no detecta cuando el agente excepcionalmente aplica fixes"
|
|
20
15
|
skillsInvocables: [feynman-auditor-swl, state-inconsistency-auditor-swl, memoria-busqueda, checklist-seguridad, nemesis-evaluacion-json]
|
|
21
16
|
permisosRed: false
|
|
22
17
|
permisosEscritura: true
|
|
@@ -16,11 +16,6 @@ ventanaContexto: 200k
|
|
|
16
16
|
permissionMode: plan
|
|
17
17
|
color: white
|
|
18
18
|
version: 1.3.0
|
|
19
|
-
evolved: true
|
|
20
|
-
evolved-from: "1.2.0"
|
|
21
|
-
evolved-at: "2026-06-04"
|
|
22
|
-
evolved-by: "evolucionar"
|
|
23
|
-
evolved-note: "PE-005 sección 5 'Sub-agente background falla con API Error: Usage credits required for 1M context — verificar filesystem antes de re-intentar' + PE-006 sección 6 'Cuándo NO delegar a sub-agentes Opus 4.7 1M context'. Aprobación humana explícita pese a evolvable=false (función sistémica) — patrones de recovery operativos validados en OIC v1.5 2026-06-04 (2 sub-agentes background fallaron al cerrar pero dejaron ~700 LOC en disco)."
|
|
24
19
|
nivelRiesgo: BAJO
|
|
25
20
|
skillsInvocables: [compactacion-contexto, checkpoints-verificacion, aprendizaje-continuo, discutir-fase, ejecutar-fase, planear-fase, nuevo-proyecto, brainstorming, control-profundidad, prevencion-racionalizacion, estructura-proyecto-claude, workflow-claude-code, git-worktrees-paralelo, swl-dashboard, instalar-sistema, mapear-codebase, orquestacion-async, context-builder]
|
|
26
21
|
skillsRestringidos: [fastapi-python, angular-component, angular-forms, postgresql-table-design]
|
|
@@ -19,11 +19,6 @@ skillsRestringidos: []
|
|
|
19
19
|
permisosRed: false
|
|
20
20
|
permisosEscritura: true
|
|
21
21
|
permisosComandos: false
|
|
22
|
-
evolved: true
|
|
23
|
-
evolved-from: "5.2.0"
|
|
24
|
-
evolved-at: "2026-04-02"
|
|
25
|
-
evolved-by: "mutación SIGAF"
|
|
26
|
-
evolved-note: "Evolución incorporada desde proyecto SIGAF; v1.2.0 agrega secciones vivas del ExecPlan (Progreso, Sorpresas, Bitácora de decisiones, Retrospectiva) portadas desde openai-agents-python PLANS.md"
|
|
27
22
|
toolBudget:
|
|
28
23
|
simple: 10
|
|
29
24
|
standard: 20
|
|
@@ -16,11 +16,6 @@ modeloAlterno: claude-haiku-4-5-20251001
|
|
|
16
16
|
ventanaContexto: 200k
|
|
17
17
|
color: orange
|
|
18
18
|
version: 1.2.2
|
|
19
|
-
evolved: true
|
|
20
|
-
evolved-from: "1.2.1"
|
|
21
|
-
evolved-at: "2026-06-05"
|
|
22
|
-
evolved-by: "evolucionar"
|
|
23
|
-
evolved-note: "+gating por versión de lenguaje antes de marcar sintaxis como SyntaxError CRÍTICO: leer requires-python/target-version/tsconfig/edition y refutar con import+linter del stack (aplicación de verificar-citas Familia 2 a claims de sintaxis). Generalizable a cualquier lenguaje version-dependent. Origen: falso positivo PEP 758 (except A,B: en Python 3.14) en sistema-verificacion-oic."
|
|
24
19
|
nivelRiesgo: BAJO
|
|
25
20
|
skillsInvocables: [checklist-calidad, patrones-python, api-rest-diseno, tdd-workflow, verificar-trabajo, verificacion-evidencia, swl-revisar-impacto, prevencion-sobreingenieria]
|
|
26
21
|
skillsRestringidos: []
|
package/bin/swl-ses.js
CHANGED
|
@@ -119,6 +119,26 @@ const COMANDOS = {
|
|
|
119
119
|
'audit-coverage-frameworks': '../scripts/cli/audit-coverage-frameworks.js',
|
|
120
120
|
'audit-agents-gaps': '../scripts/cli/audit-agents-gaps.js',
|
|
121
121
|
'skill-discovery': '../scripts/cli/skill-discovery.js',
|
|
122
|
+
'aprobar-plan': '../scripts/cli/aprobar-plan.js',
|
|
123
|
+
'verificar-plan': '../scripts/cli/verificar-plan.js',
|
|
124
|
+
'verificar-trazabilidad': '../scripts/cli/verificar-trazabilidad.js',
|
|
125
|
+
'liberar-fase': '../scripts/cli/liberar-fase.js',
|
|
126
|
+
'propose-step': '../scripts/cli/propose-step.js',
|
|
127
|
+
'derivar-feature-list': '../scripts/cli/derivar-feature-list.js',
|
|
128
|
+
'detectar-host': '../scripts/cli/detectar-host.js',
|
|
129
|
+
'metricas-dora': '../scripts/cli/metricas-dora.js',
|
|
130
|
+
'mark-evolved': '../scripts/cli/mark-evolved.js',
|
|
131
|
+
'near-duplicate': '../scripts/cli/near-duplicate.js',
|
|
132
|
+
'sugerir-modelo': '../scripts/cli/sugerir-modelo.js',
|
|
133
|
+
briefing: '../scripts/cli/briefing.js',
|
|
134
|
+
'execution-state': '../scripts/cli/execution-state.js',
|
|
135
|
+
'schedule-parse': '../scripts/cli/schedule-parse.js',
|
|
136
|
+
'gateway-notify': '../scripts/cli/gateway-notify.js',
|
|
137
|
+
'diary-entry': '../scripts/cli/diary-entry.js',
|
|
138
|
+
'loop-telemetry': '../scripts/cli/loop-telemetry.js',
|
|
139
|
+
'configurar-ci': '../scripts/cli/configurar-ci.js',
|
|
140
|
+
'ciclo-evolucion': '../scripts/cli/ciclo-evolucion.js',
|
|
141
|
+
notificaciones: '../scripts/cli/notificaciones.js',
|
|
122
142
|
};
|
|
123
143
|
|
|
124
144
|
// Comandos con subcomandos (nivel 2)
|
|
@@ -177,6 +197,49 @@ COMANDOS PRINCIPALES:
|
|
|
177
197
|
Usado por /swl:salud.
|
|
178
198
|
skill-discovery [query] Descubre y busca skills SWL. Sin query lista todos.
|
|
179
199
|
Flag: --rebuild. Usado por /swl:skill-search.
|
|
200
|
+
aprobar-plan --fase=N Gate G1: firma el PLAN (SHA256 → lock) y escribe
|
|
201
|
+
fase-activa.json (gate G0). Flags: --plan=<ruta>,
|
|
202
|
+
--aprobado-por="texto". Usado por /swl:aprobar-plan.
|
|
203
|
+
verificar-plan --fase=N Verifica el lock de un PLAN (read-only). Exit 1 si
|
|
204
|
+
mutado/sin-firmar. Usado por /swl:ejecutar-fase.
|
|
205
|
+
verificar-trazabilidad --fase=N Valida matriz REQ×T→commit→test. Flags:
|
|
206
|
+
--solo-plan, --json. Usado por /swl:aprobar-plan.
|
|
207
|
+
liberar-fase Cierra el gate G0 (borra fase-activa.json). Usado
|
|
208
|
+
por /swl:ejecutar-fase al terminar.
|
|
209
|
+
propose-step --rango=A..B Anexo propositivo del RESUMEN de fase (ADR-0037).
|
|
210
|
+
Opt-out SWL_PROPOSE=0. Usado por /swl:ejecutar-fase.
|
|
211
|
+
derivar-feature-list Genera .planning/feature-list.json desde HOJA-RUTA.md.
|
|
212
|
+
Flag: --check (exit 2 si drift). Usado por /swl:status, briefing.
|
|
213
|
+
detectar-host Indica si el CWD es el repo host de SWL o consumidor.
|
|
214
|
+
Flag: --json. Usado por /swl:status.
|
|
215
|
+
metricas-dora Calcula métricas DORA del repo. Flags: --json, --dias=N.
|
|
216
|
+
Usado por /swl:status.
|
|
217
|
+
mark-evolved <ruta> Marca un componente como evolucionado (frontmatter).
|
|
218
|
+
Flags: --from, --by, --note, --rounds, --score.
|
|
219
|
+
Usado por /swl:aprender, autoresearch, evolucionar.
|
|
220
|
+
near-duplicate --texto="..." Detecta si un aprendizaje es duplicado cercano.
|
|
221
|
+
Flags: --archivo, --threshold. Usado por /swl:aprender.
|
|
222
|
+
sugerir-modelo "<tarea>" Sugiere modelo (opus/sonnet/haiku) por complejidad.
|
|
223
|
+
Usado por /swl:modelo.
|
|
224
|
+
briefing Recolecta señales baratas del briefing. Usado por
|
|
225
|
+
/swl:briefing.
|
|
226
|
+
execution-state Imprime el resumen de .planning/execution-state.json.
|
|
227
|
+
Usado por /swl:checkpoint.
|
|
228
|
+
schedule-parse "<frase>" Parsea frase en inglés a expresión cron. Usado por
|
|
229
|
+
/swl:cron.
|
|
230
|
+
gateway-notify --texto="..." Encola notificación al canal origen del gateway.
|
|
231
|
+
Flags: --tipo, --to, --reply-to. Usado por /swl:inbox.
|
|
232
|
+
diary-entry (JSON stdin) Construye y persiste una entrada de diario de sesión.
|
|
233
|
+
Usado por /swl:aprender.
|
|
234
|
+
loop-telemetry <op> Telemetría de loops: iniciar|registrar|handoff|listar.
|
|
235
|
+
Usado por /swl:verificar, autoresearch, status.
|
|
236
|
+
configurar-ci <op> Workflows CI/CD: init|status|uninstall (salida JSON).
|
|
237
|
+
Usado por /swl:configurar-ci.
|
|
238
|
+
ciclo-evolucion Regenera .planning/evolution/metricas.json.
|
|
239
|
+
Usado por /swl:status.
|
|
240
|
+
notificaciones <op> Telegram: init|status|disable|repair|bot-start|
|
|
241
|
+
bot-stop|bot-status|bot-restart|bot-enable-autostart|
|
|
242
|
+
bot-disable-autostart. Usado por /swl:notificaciones.
|
|
180
243
|
info [--target <runtime>] Muestra información del sistema instalado
|
|
181
244
|
help Muestra esta ayuda (alias de --help)
|
|
182
245
|
list [--target <runtime>] Lista todos los agentes y skills instalados
|
|
@@ -2,11 +2,6 @@
|
|
|
2
2
|
name: swl:adoptar-proyecto
|
|
3
3
|
description: Incorpora un proyecto existente al sistema SWL. Analiza automáticamente el codebase (stack, arquitectura, dependencias, estado git) y combina los hallazgos con una entrevista corta al usuario para generar los 9 archivos de .planning/ con información real del proyecto — no plantillas vacías.
|
|
4
4
|
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
|
|
5
|
-
evolved: true
|
|
6
|
-
evolved-from: "1.6.8"
|
|
7
|
-
evolved-at: "2026-05-22"
|
|
8
|
-
evolved-by: "aprender"
|
|
9
|
-
evolved-note: "Paso 8 — validación síncrona del auditor tras modificar CLAUDE.md (contrato cruzado con /swl:claudemd)"
|
|
10
5
|
---
|
|
11
6
|
|
|
12
7
|
# /swl:adoptar-proyecto — Incorporar un proyecto existente al sistema SWL
|
|
@@ -182,15 +177,18 @@ Verificar el estado de `CLAUDE.md` en la raíz del proyecto:
|
|
|
182
177
|
```markdown
|
|
183
178
|
## Reglas obligatorias
|
|
184
179
|
|
|
185
|
-
|
|
180
|
+
Aplica la regla global `usar-sistema-swl.md` (matriz operacional del sistema
|
|
181
|
+
SWL), auto-cargada desde `.claude/rules/`. NO duplicar su contenido aquí.
|
|
186
182
|
```
|
|
187
|
-
- **Si existe pero NO
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
183
|
+
- **Si existe pero NO menciona la regla global `usar-sistema-swl`**: agregar la
|
|
184
|
+
mención en una sección "Reglas obligatorias" cerca del inicio del archivo,
|
|
185
|
+
preservando el contenido existente. NUNCA usar `@reglas/usar-sistema-swl.md`
|
|
186
|
+
— esa ruta no existe en proyectos downstream (las reglas viven en
|
|
187
|
+
`.claude/rules/`).
|
|
188
|
+
- **Si existe e incluye la mención**: no tocar.
|
|
191
189
|
|
|
192
|
-
Esta
|
|
193
|
-
|
|
190
|
+
Esta mención recuerda la matriz operacional del sistema SWL y es el contrato
|
|
191
|
+
base de uso del sistema para el proyecto adoptado.
|
|
194
192
|
|
|
195
193
|
### Validación síncrona post-modificación (contrato cruzado con /swl:claudemd)
|
|
196
194
|
|
|
@@ -198,7 +196,7 @@ Tras generar o modificar `CLAUDE.md` en este paso, ejecutar el auditor
|
|
|
198
196
|
síncrono para verificar que respeta el contrato canónico:
|
|
199
197
|
|
|
200
198
|
```bash
|
|
201
|
-
|
|
199
|
+
swl-ses audit-claudemd --json
|
|
202
200
|
# Fallback si el script no está en el proyecto destino:
|
|
203
201
|
npx -y @saulwade/swl-ses@latest audit-claudemd --json
|
|
204
202
|
```
|
|
@@ -230,7 +228,7 @@ Archivos generados:
|
|
|
230
228
|
✓ .planning/research/FUNCIONALIDADES.md — inventario de funcionalidades
|
|
231
229
|
✓ .planning/research/RESUMEN.md — resumen ejecutivo consolidado
|
|
232
230
|
✓ .planning/research/TRAMPAS.md — deuda técnica y anti-patrones
|
|
233
|
-
✓ CLAUDE.md — creado o actualizado con
|
|
231
|
+
✓ CLAUDE.md — creado o actualizado con mención de la regla global usar-sistema-swl
|
|
234
232
|
|
|
235
233
|
Hallazgos clave:
|
|
236
234
|
1. [hallazgo más importante]
|
package/comandos/swl/aprender.md
CHANGED
|
@@ -2,11 +2,6 @@
|
|
|
2
2
|
name: swl:aprender
|
|
3
3
|
description: Extrae aprendizajes de la sesión de trabajo actual. Analiza patrones de errores, decisiones y soluciones para generar nuevas reglas y habilidades que mejoran el sistema. Actualiza CLAUDE.md del proyecto y propone nuevas habilidades al sistema SWL.
|
|
4
4
|
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
-
evolved: true
|
|
6
|
-
evolved-from: "1.6.9"
|
|
7
|
-
evolved-at: "2026-05-22"
|
|
8
|
-
evolved-by: "aprender"
|
|
9
|
-
evolved-note: "Paso 6.5 § Protocolo 4.5 — detección de duplicación de reglas globales tras Tipo A (regla sin-duplicacion-reglas-globales.md, v1.7.0)"
|
|
10
5
|
---
|
|
11
6
|
|
|
12
7
|
# /swl:aprender — Extracción de aprendizajes y mejora del sistema
|
|
@@ -308,19 +303,18 @@ Marcar `evolved` y bumpear la versión interna del componente son **dos operacio
|
|
|
308
303
|
|
|
309
304
|
### Acción 1 — Marcar como evolved
|
|
310
305
|
|
|
306
|
+
Usar el subcomando del CLI (resuelve cross-scope; ver
|
|
307
|
+
`docs/invocacion-cli-cross-scope.md`):
|
|
308
|
+
|
|
311
309
|
```bash
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
from: pkg.version,
|
|
317
|
-
by: 'aprender',
|
|
318
|
-
note: '[tipo de aprendizaje: anti-patrón / mejora de metodología]'
|
|
319
|
-
});
|
|
320
|
-
console.log(r.marked ? 'Marcado como evolucionado' : 'Error: ' + r.error);
|
|
321
|
-
"
|
|
310
|
+
swl-ses mark-evolved "[RUTA_ARCHIVO_MODIFICADO]" \
|
|
311
|
+
--by=aprender \
|
|
312
|
+
--note="[tipo de aprendizaje: anti-patrón / mejora de metodología]"
|
|
313
|
+
# fallback: npx -y @saulwade/swl-ses@latest mark-evolved "[RUTA]" --by=aprender --note="..."
|
|
322
314
|
```
|
|
323
315
|
|
|
316
|
+
`--from` se infiere del `package.json` del CWD si se omite.
|
|
317
|
+
|
|
324
318
|
`markAsEvolved` registra automáticamente `evolved-at` con la fecha del día en formato ISO (`YYYY-MM-DD`) — no hay que pasarla manualmente. Escribe en el frontmatter los 5 campos siguientes:
|
|
325
319
|
|
|
326
320
|
```yaml
|
|
@@ -421,7 +415,7 @@ Solo si en Paso 6 se aplicó al menos un Tipo A:
|
|
|
421
415
|
1. **Ejecutar el auditor síncrono**:
|
|
422
416
|
|
|
423
417
|
```bash
|
|
424
|
-
|
|
418
|
+
swl-ses audit-claudemd --json
|
|
425
419
|
```
|
|
426
420
|
|
|
427
421
|
Si el script no está disponible en el proyecto destino (instalación
|
|
@@ -573,29 +567,24 @@ búsquedas futuras y análisis cross-sesión.
|
|
|
573
567
|
- Solo se respondieron preguntas técnicas sin tocar código.
|
|
574
568
|
- Sesión < 30min sin commits.
|
|
575
569
|
|
|
576
|
-
**Cómo generar
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
entry = diary.closeDiary(entry);
|
|
590
|
-
|
|
591
|
-
const fs = require('fs');
|
|
592
|
-
const path = require('path');
|
|
593
|
-
const dir = '.planning/sessions/diary';
|
|
594
|
-
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
595
|
-
fs.writeFileSync(path.join(dir, `${entry.id}.json`), diary.serializeDiary(entry));
|
|
570
|
+
**Cómo generar** (subcomando del CLI, resuelve cross-scope; ver
|
|
571
|
+
`docs/invocacion-cli-cross-scope.md`). Pasar el contenido como JSON por stdin:
|
|
572
|
+
|
|
573
|
+
```bash
|
|
574
|
+
echo '{
|
|
575
|
+
"sessionId": "<id-de-sesión>",
|
|
576
|
+
"agent": "orquestador-swl",
|
|
577
|
+
"accomplishments": ["<logro 1>"],
|
|
578
|
+
"decisions": ["<decisión 1 + razón>"],
|
|
579
|
+
"learnings": ["<aprendizaje clave 1>"],
|
|
580
|
+
"sourceAgents": ["implementador-swl"]
|
|
581
|
+
}' | swl-ses diary-entry
|
|
582
|
+
# fallback: ... | npx -y @saulwade/swl-ses@latest diary-entry
|
|
596
583
|
```
|
|
597
584
|
|
|
598
|
-
|
|
585
|
+
El subcomando construye la entrada, valida (`validateDiary`) y la persiste en
|
|
586
|
+
`.planning/sessions/diary/<id>.json`, imprimiendo la ruta escrita. Reportar en
|
|
587
|
+
el output:
|
|
599
588
|
|
|
600
589
|
```
|
|
601
590
|
Diary generado: .planning/sessions/diary/diary-YYYYMMDD-HASH.json
|
|
@@ -714,16 +703,10 @@ Durante la consolidación (siguiente sección), usar estos niveles para decidir:
|
|
|
714
703
|
Antes de persistir un aprendizaje nuevo, verificar que no sea duplicado de uno existente:
|
|
715
704
|
|
|
716
705
|
```bash
|
|
717
|
-
#
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
const aprendizajes = fs.readFileSync('.planning/APRENDIZAJES.md', 'utf8');
|
|
722
|
-
const existentes = aprendizajes.split(/^## /m).filter(Boolean);
|
|
723
|
-
const nuevo = '[TEXTO_DEL_APRENDIZAJE_NUEVO]';
|
|
724
|
-
const r = isNearDuplicate(nuevo, existentes, 0.6);
|
|
725
|
-
console.log(r.nearDuplicate ? 'DUPLICADO (sim=' + r.similarity + ')' : 'ÚNICO');
|
|
726
|
-
"
|
|
706
|
+
# Subcomando del CLI (resuelve cross-scope; ver docs/invocacion-cli-cross-scope.md).
|
|
707
|
+
# Lee APRENDIZAJES.md, divide por '## ' y compara con umbral 0.6 por defecto.
|
|
708
|
+
swl-ses near-duplicate --texto="[TEXTO_DEL_APRENDIZAJE_NUEVO]"
|
|
709
|
+
# fallback: npx -y @saulwade/swl-ses@latest near-duplicate --texto="[TEXTO]"
|
|
727
710
|
```
|
|
728
711
|
|
|
729
712
|
Si es duplicado (similitud ≥0.6), fusionar con la entrada existente en vez de crear nueva.
|
|
@@ -15,6 +15,14 @@ a mano (`estado: aprobado`) deja el plan en modo legacy (cláusula de gracia D-0
|
|
|
15
15
|
se ejecuta con advertencia pero sin protección de integridad. Usar este comando
|
|
16
16
|
es lo que activa el gate real.
|
|
17
17
|
|
|
18
|
+
> **Invocación cross-scope** (ver `@docs/invocacion-cli-cross-scope.md`): las
|
|
19
|
+
> partes deterministas del gate viven en subcomandos del CLI. Resuélvelos así:
|
|
20
|
+
> si existe `./scripts/cli/<sub>.js` (repo madre) usa `node scripts/cli/<sub>.js`;
|
|
21
|
+
> si `command -v swl-ses` responde usa `swl-ses <sub>`; si no,
|
|
22
|
+
> `npx -y @saulwade/swl-ses@latest <sub>`. Abajo escribo la forma `swl-ses <sub>`
|
|
23
|
+
> como canónica. NUNCA uses `node -e "require('./scripts/lib/...')"` — esa ruta no
|
|
24
|
+
> existe en proyectos downstream.
|
|
25
|
+
|
|
18
26
|
## Uso
|
|
19
27
|
|
|
20
28
|
```
|
|
@@ -37,7 +45,7 @@ Lee el campo `estado:` del frontmatter:
|
|
|
37
45
|
- Si `estado: borrador` → continúa al Paso 3 (caso normal).
|
|
38
46
|
- Si `estado: aprobado` → ya está aprobado. Verifica si existe el lock:
|
|
39
47
|
```bash
|
|
40
|
-
|
|
48
|
+
swl-ses verificar-plan --fase=N
|
|
41
49
|
```
|
|
42
50
|
- Si `modo: "firmado"` → informa "El plan ya está aprobado y firmado." y termina.
|
|
43
51
|
- Si `modo: "legacy"` (aprobado sin lock) → pregunta al usuario: "El plan está
|
|
@@ -59,7 +67,7 @@ aceptación. `verificar-trazabilidad.js` reconoce ambos formatos.
|
|
|
59
67
|
("CONTEXTO sin REQ-IDs — trazabilidad no exigible, gracia legacy") y continúa.
|
|
60
68
|
- **CONTEXTO con REQ-IDs**: verifica que el PLAN cubra TODOS:
|
|
61
69
|
```bash
|
|
62
|
-
|
|
70
|
+
swl-ses verificar-trazabilidad --fase=N --solo-plan
|
|
63
71
|
```
|
|
64
72
|
- Exit 0 → continúa al Paso 3.
|
|
65
73
|
- Exit 1 (REQ huérfanos) → **RECHAZA la aprobación**. Lista los REQ sin tarea y
|
|
@@ -86,41 +94,21 @@ a `/swl:planear-fase N` para refinar.
|
|
|
86
94
|
edita el frontmatter `estado: borrador` → `estado: aprobado` y agrega
|
|
87
95
|
`aprobadoPor: usuario (<nombre>) — <fecha>, via /swl:aprobar-plan`.
|
|
88
96
|
|
|
89
|
-
2. **Firmar** —
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
Verifica que el resultado sea `ok: true` y que exista
|
|
94
|
-
`.planning/locks/0N-PLAN.md.lock`.
|
|
95
|
-
|
|
96
|
-
3. **Verificar** la firma de inmediato:
|
|
97
|
-
```bash
|
|
98
|
-
node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
|
|
99
|
-
```
|
|
100
|
-
Debe retornar `modo: "firmado"`, `ok: true`.
|
|
101
|
-
|
|
102
|
-
4. **Marcar la fase como activa** (gate G0 — `hooks/spec-gate.js` consume este
|
|
103
|
-
archivo): escribe `.planning/locks/fase-activa.json` con el sha256 devuelto
|
|
104
|
-
por `firmarPlan`:
|
|
97
|
+
2. **Firmar y marcar la fase activa** — un solo subcomando hace las tres
|
|
98
|
+
operaciones deterministas: firma SHA256 → `.planning/locks/0N-PLAN.md.lock`,
|
|
99
|
+
verifica la firma, y escribe `.planning/locks/fase-activa.json` (gate G0 que
|
|
100
|
+
consume `hooks/spec-gate.js`):
|
|
105
101
|
```bash
|
|
106
|
-
|
|
107
|
-
const {atomicWriteJSON} = require('./hooks/lib/atomic-write');
|
|
108
|
-
const {verificarPlan} = require('./scripts/lib/plan-lock');
|
|
109
|
-
const v = verificarPlan('.planning/fases/0N-PLAN.md');
|
|
110
|
-
atomicWriteJSON('.planning/locks/fase-activa.json', {
|
|
111
|
-
numero: N,
|
|
112
|
-
planPath: '.planning/fases/0N-PLAN.md',
|
|
113
|
-
sha256: v.hashEsperado,
|
|
114
|
-
aprobadoEn: new Date().toISOString(),
|
|
115
|
-
aprobadoPor: 'usuario via /swl:aprobar-plan'
|
|
116
|
-
});
|
|
117
|
-
console.log('fase activa: 0N');
|
|
118
|
-
"
|
|
102
|
+
swl-ses aprobar-plan --fase=N
|
|
119
103
|
```
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
104
|
+
Verifica en la salida JSON que `ok: true` y `modo: "firmado"`. Si reporta
|
|
105
|
+
error de firma, **NO continúes** — revisa el `motivo`.
|
|
106
|
+
|
|
107
|
+
El `.lock` SÍ se versiona en git (evidencia de aprobación, parte del audit
|
|
108
|
+
trail SDD). El `fase-activa.json` es runtime local (gitignored);
|
|
109
|
+
`/swl:ejecutar-fase` lo elimina al cerrar la fase. Re-ejecutar
|
|
110
|
+
`swl-ses aprobar-plan --fase=N` tras una re-aprobación (plan mutado) realinea
|
|
111
|
+
lock y fase-activa automáticamente.
|
|
124
112
|
|
|
125
113
|
## Paso 5 — Reporte
|
|
126
114
|
|
|
@@ -135,20 +135,15 @@ Resultado: [ÉXITO | PLATEAU | ESTANCAMIENTO | DEGRADACIÓN]
|
|
|
135
135
|
|
|
136
136
|
Si el score mejoró respecto al baseline:
|
|
137
137
|
1. Actualizar versión del skill/agente (< 10 pts: PATCH, >= 10 pts: MINOR)
|
|
138
|
-
2. **OBLIGATORIO — Marcar como evolucionado
|
|
138
|
+
2. **OBLIGATORIO — Marcar como evolucionado** con el subcomando del CLI
|
|
139
|
+
(resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`):
|
|
139
140
|
```bash
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
rounds: [N_ROUNDS],
|
|
147
|
-
score: '[BASELINE]% → [FINAL]%',
|
|
148
|
-
note: '[descripción breve de las mutaciones]'
|
|
149
|
-
});
|
|
150
|
-
console.log(r.marked ? 'Marcado como evolucionado' : 'Error: ' + r.error);
|
|
151
|
-
"
|
|
141
|
+
swl-ses mark-evolved "[RUTA_ARCHIVO_MODIFICADO]" \
|
|
142
|
+
--by=autoresearch \
|
|
143
|
+
--rounds=[N_ROUNDS] \
|
|
144
|
+
--score="[BASELINE]% → [FINAL]%" \
|
|
145
|
+
--note="[descripción breve de las mutaciones]"
|
|
146
|
+
# fallback: npx -y @saulwade/swl-ses@latest mark-evolved "[RUTA]" --by=autoresearch ...
|
|
152
147
|
```
|
|
153
148
|
Reemplazar los placeholders entre corchetes con los valores reales.
|
|
154
149
|
Si el comando Bash no está disponible, agregar manualmente en el frontmatter:
|
|
@@ -220,8 +215,11 @@ Si `--dry-run`: terminar aquí mostrando la configuración derivada.
|
|
|
220
215
|
|
|
221
216
|
### Paso C1 — Baseline y telemetría
|
|
222
217
|
|
|
218
|
+
Subcomando del CLI (resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`).
|
|
219
|
+
Imprime el `<dir>` de la corrida:
|
|
220
|
+
|
|
223
221
|
```bash
|
|
224
|
-
|
|
222
|
+
swl-ses loop-telemetry iniciar --tipo=autoresearch --direccion=[direction] --config='{"goal":"[goal]","scope":"[scope]","verify":"[verify]","guard":"[guard]"}'
|
|
225
223
|
```
|
|
226
224
|
|
|
227
225
|
Correr Verify, extraer la métrica, registrar la iteración 0 (`estado:
|
package/comandos/swl/briefing.md
CHANGED
|
@@ -28,12 +28,9 @@ Ejecuta los recolectores de filesystem y presenta el digest sin tope de 5 (aquí
|
|
|
28
28
|
sí caben todas, no hay presupuesto de latencia de arranque):
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
for (const it of items) console.log('— [' + it.categoria + '] ' + it.titulo + ' → ' + it.accion);
|
|
35
|
-
if (items.length === 0) console.log('(sin señales baratas)');
|
|
36
|
-
"
|
|
31
|
+
# Subcomando del CLI (resuelve cross-scope; ver docs/invocacion-cli-cross-scope.md)
|
|
32
|
+
swl-ses briefing
|
|
33
|
+
# fallback: npx -y @saulwade/swl-ses@latest briefing
|
|
37
34
|
```
|
|
38
35
|
|
|
39
36
|
Las 5 categorías: `adr-vencido`, `deuda-trigger`, `nudges-pendientes`,
|
|
@@ -78,11 +75,11 @@ commits sin revisión asociada. Si no está disponible → omitir con nota.
|
|
|
78
75
|
### 2.4 — Drift de feature-list
|
|
79
76
|
|
|
80
77
|
```bash
|
|
81
|
-
|
|
78
|
+
swl-ses derivar-feature-list --check 2>/dev/null; echo "exit: $?"
|
|
82
79
|
```
|
|
83
80
|
|
|
84
81
|
Exit 2 → reportar que `HOJA-RUTA.md` y `feature-list.json` divergieron, con la
|
|
85
|
-
acción `
|
|
82
|
+
acción `swl-ses derivar-feature-list` para regenerar.
|
|
86
83
|
|
|
87
84
|
### 2.5 — Deuda con trigger en prosa libre
|
|
88
85
|
|
|
@@ -221,24 +221,19 @@ cat .planning/execution-state.json 2>/dev/null || echo "(sin estado de ejecució
|
|
|
221
221
|
```
|
|
222
222
|
|
|
223
223
|
Si existe, actualizar el campo `proximoAgente` con la siguiente tarea pendiente.
|
|
224
|
-
Si no existe y hay un plan en progreso con agentes ejecutados en esta sesión,
|
|
224
|
+
Si no existe y hay un plan en progreso con agentes ejecutados en esta sesión,
|
|
225
|
+
imprimir el resumen estructurado con el subcomando del CLI (resuelve cross-scope;
|
|
226
|
+
ver `docs/invocacion-cli-cross-scope.md`):
|
|
225
227
|
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
// Registrar agentes completados en esta sesión
|
|
231
|
-
// es.completarAgente(cwd, 'nombre-agente', 'slice', { resumen: '...' });
|
|
232
|
-
|
|
233
|
-
// Registrar el próximo agente a ejecutar
|
|
234
|
-
// es.establecerProximo(cwd, 'proximo-agente', 'proximo-slice');
|
|
235
|
-
|
|
236
|
-
// Ver resumen del estado
|
|
237
|
-
console.log(es.formatearResumen(process.cwd()));
|
|
228
|
+
```bash
|
|
229
|
+
swl-ses execution-state
|
|
230
|
+
# fallback: npx -y @saulwade/swl-ses@latest execution-state
|
|
238
231
|
```
|
|
239
232
|
|
|
240
|
-
Incluir
|
|
241
|
-
|
|
233
|
+
Incluir ese resumen en el `continue-here.md` generado en el Paso 4, bajo la
|
|
234
|
+
sección "Qué se estaba haciendo". El registro de agentes
|
|
235
|
+
(`completarAgente`/`establecerProximo`) lo gestiona el skill `ejecutar-fase`
|
|
236
|
+
internamente; aquí solo se lee el resumen.
|
|
242
237
|
|
|
243
238
|
## Paso 4 — Creación del continue-here.md
|
|
244
239
|
|
package/comandos/swl/claudemd.md
CHANGED
|
@@ -2,11 +2,6 @@
|
|
|
2
2
|
name: swl:claudemd
|
|
3
3
|
description: Audita, refactoriza, valida o inicializa archivos CLAUDE.md según best practices Anthropic (ADR-0016). Subcomandos audit (analiza calidad), refactor (sugiere extracciones), check (verifica secciones canónicas), init-user (crea ~/.claude/CLAUDE.md template), init-project (genera CLAUDE.md raíz del proyecto).
|
|
4
4
|
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
|
|
5
|
-
evolved: true
|
|
6
|
-
evolved-from: "1.6.9"
|
|
7
|
-
evolved-at: "2026-05-22"
|
|
8
|
-
evolved-by: "aprender"
|
|
9
|
-
evolved-note: "Audit dimensión 7 — duplicación de reglas globales (cataloga 6 reglas de ~/.claude/rules/ que NO deben duplicarse inline). Refactor propone reemplazo canónico. Aplica regla nueva sin-duplicacion-reglas-globales.md."
|
|
10
5
|
---
|
|
11
6
|
|
|
12
7
|
# /swl:claudemd — Tratamiento profesional de CLAUDE.md
|
|
@@ -127,12 +122,15 @@ y genera `./CLAUDE.md` mínimo con:
|
|
|
127
122
|
```markdown
|
|
128
123
|
## Reglas obligatorias
|
|
129
124
|
|
|
130
|
-
|
|
125
|
+
Aplica la regla global `usar-sistema-swl.md` (matriz operacional del sistema
|
|
126
|
+
SWL), auto-cargada desde `.claude/rules/`. NO duplicar su contenido aquí.
|
|
131
127
|
```
|
|
132
|
-
Esta
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
128
|
+
Esta mención es obligatoria — recuerda la matriz operacional de uso del
|
|
129
|
+
sistema SWL. NO usar `@reglas/usar-sistema-swl.md`: la regla se auto-carga
|
|
130
|
+
desde `.claude/rules/` y un `@reglas/...` se rompe en proyectos downstream
|
|
131
|
+
(ahí no existe `reglas/`). Las demás reglas globales (`seguridad.md`,
|
|
132
|
+
`arquitectura.md`, etc.) también se auto-cargan desde `.claude/rules/` — NO
|
|
133
|
+
referenciarlas con `@reglas/...`; mencionarlas por nombre si hace falta.
|
|
136
134
|
- Sección **Reglas de máxima prioridad** con sub-sección obligatoria
|
|
137
135
|
**Cuatro principios de implementación (Karpathy)**:
|
|
138
136
|
```markdown
|
|
@@ -150,7 +148,7 @@ y genera `./CLAUDE.md` mínimo con:
|
|
|
150
148
|
|
|
151
149
|
Si CLAUDE.md ya existe, **NO lo sobreescribe**. Sugiere correr
|
|
152
150
|
`/swl:claudemd refactor` para mejorar el actual. Si detecta que el CLAUDE.md
|
|
153
|
-
existente NO
|
|
151
|
+
existente NO menciona la regla global `usar-sistema-swl` o NO menciona los cuatro
|
|
154
152
|
principios Karpathy (o `prevencion-sobreingenieria`), emitir hallazgo WARN
|
|
155
153
|
recomendando agregarlo manualmente.
|
|
156
154
|
|
|
@@ -160,7 +158,9 @@ Tras `init-project` generar el archivo nuevo, ejecutar inmediatamente
|
|
|
160
158
|
`audit` sobre el resultado:
|
|
161
159
|
|
|
162
160
|
```bash
|
|
163
|
-
|
|
161
|
+
swl-ses audit-claudemd --json
|
|
162
|
+
# Fallback si el script no está en el proyecto destino (instalación global vía npm):
|
|
163
|
+
npx -y @saulwade/swl-ses@latest audit-claudemd --json
|
|
164
164
|
```
|
|
165
165
|
|
|
166
166
|
Veredicto esperado: `OK` (el template debe respetar el contrato por
|