@saulwade/swl-ses 1.6.8 → 1.7.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.
@@ -15,7 +15,7 @@ modeloAlterno: claude-haiku-4-5-20251001
15
15
  ventanaContexto: 200k
16
16
  permissionMode: plan
17
17
  color: white
18
- version: 1.1.0
18
+ version: 1.2.0
19
19
  nivelRiesgo: BAJO
20
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]
21
21
  skillsRestringidos: [fastapi-python, angular-component, angular-forms, postgresql-table-design]
@@ -124,6 +124,42 @@ paralelismo:
124
124
  La regla de paralelización del Nivel 3 sigue aplicando, pero ahora el
125
125
  orquestador DEBE invocarla explícitamente en el prompt del sub-agente.
126
126
 
127
+ ### 4. Tamaño máximo del prompt al sub-agente
128
+
129
+ Los sub-agentes pueden entrar en **autocompact thrashing** cuando reciben
130
+ prompts mayores a ~30k tokens. Síntoma observado (caso real SIGAF
131
+ 2026-05-22): tras 4 tool uses sin escribir un solo archivo, el sub-agente
132
+ aborta con "Autocompact is thrashing: the context refilled to the limit
133
+ within 3 turns of the previous compact, 3 times in a row".
134
+
135
+ Cota dura: **prompt al sub-agente ≤ 30k tokens** (intent + constraints +
136
+ acceptance criteria + file locations + dependencies).
137
+
138
+ | Tamaño estimado del prompt | Acción |
139
+ |----------------------------|--------|
140
+ | < 10k tokens | Delegar normalmente |
141
+ | 10k–30k tokens | Delegar pero monitorear; si el sub-agente tarda más de 3 turnos sin output, abortar y dividir |
142
+ | > 30k tokens | NO delegar — dividir en sub-tareas <10k tokens cada una, o ejecutar directamente sin delegar |
143
+
144
+ ### Cuándo hacer el trabajo directo en lugar de delegar
145
+
146
+ Cuando la spec ya está completamente clara para el orquestador, delegar
147
+ solo agrega overhead de contexto sin valor:
148
+
149
+ - **Scope < 5 archivos** con código boilerplate similar → trabajo directo.
150
+ - **Scope ≥ 5 archivos no relacionados** con lógica específica por
151
+ archivo → delegar.
152
+ - **Prompt requeriría >30k tokens** de specs/ejemplos → trabajo directo
153
+ (delegar es contraproducente).
154
+
155
+ Regla práctica: si te encuentras escribiendo specs por más de 5 minutos
156
+ para preparar la delegación, es señal de que el trabajo directo es más
157
+ eficiente que la delegación.
158
+
159
+ Origen del patrón: documentado en skill global `harness-claude-code`
160
+ gotcha "Sub-agente entra en autocompact thrashing con prompts >30k tokens"
161
+ (SIGAF 2026-05-22).
162
+
127
163
  ## Routing por fase + dominio (lookup tabular determinístico)
128
164
 
129
165
  Antes de delegar, **clasifica la petición** por dos ejes mecánicos en lugar de
@@ -2,6 +2,11 @@
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)"
5
10
  ---
6
11
 
7
12
  # /swl:adoptar-proyecto — Incorporar un proyecto existente al sistema SWL
@@ -187,6 +192,29 @@ Verificar el estado de `CLAUDE.md` en la raíz del proyecto:
187
192
  Esta referencia carga la matriz operacional del sistema SWL al inicio de cada
188
193
  sesión y es el contrato base de uso del sistema para el proyecto adoptado.
189
194
 
195
+ ### Validación síncrona post-modificación (contrato cruzado con /swl:claudemd)
196
+
197
+ Tras generar o modificar `CLAUDE.md` en este paso, ejecutar el auditor
198
+ síncrono para verificar que respeta el contrato canónico:
199
+
200
+ ```bash
201
+ node scripts/auditar-claudemd.js --json
202
+ # Fallback si el script no está en el proyecto destino:
203
+ npx -y @saulwade/swl-ses@latest audit-claudemd --json
204
+ ```
205
+
206
+ Evaluar `veredicto`:
207
+
208
+ - `OK` → continuar al Paso 9.
209
+ - `WARN tamano-total` → el CLAUDE.md preexistente más la modificación
210
+ excedió el umbral. Reportar al usuario y proponer extracción a
211
+ `@docs/lessons-<tema>.md` antes de cerrar.
212
+ - `WARN bullet-gigante` → revisar y condensar el bullet detectado.
213
+ - `WARN` otras reglas → reportar al usuario pero permitir continuar.
214
+ - `ERROR placeholders` → **DETENER**, revertir la modificación y reportar.
215
+
216
+ Detalle del contrato cruzado en `@docs/contrato-aprender-claudemd.md`.
217
+
190
218
  ## Paso 9 — Reporte final
191
219
 
192
220
  ```
@@ -3,10 +3,10 @@ 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
5
  evolved: true
6
- evolved-from: "5.12.3"
7
- evolved-at: "2026-04-25"
6
+ evolved-from: "1.6.9"
7
+ evolved-at: "2026-05-22"
8
8
  evolved-by: "aprender"
9
- evolved-note: "Paso 2 filtro crítico obligatorio sobre reportes de sub-agentes Explore para evitar sobre-ingeniería al analizar papers académicos"
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
10
  ---
11
11
 
12
12
  # /swl:aprender — Extracción de aprendizajes y mejora del sistema
@@ -392,6 +392,145 @@ Resultado: 0/2 OK, 2 con fallos
392
392
 
393
393
  Si el verificador reporta fallo, corregir el archivo puntual (agregar bump o ejecutar `markAsEvolved()`), NO saltarse la verificación. El gap que esta verificación cierra es exactamente el que el usuario detectó al auditar la sesión de aprender del 2026-04-20: `markAsEvolved` ejecutado sin bump de `version` → cambio invisible al resto del sistema pese a que el archivo quedó protegido contra reinstalación.
394
394
 
395
+ ## Paso 6.5 — Validación de CLAUDE.md tras aplicar Tipo A (auditor síncrono)
396
+
397
+ > Este paso es **OBLIGATORIO** si en Paso 6 se aplicó al menos un aprendizaje
398
+ > Tipo A (regla agregada a `CLAUDE.md` del proyecto). El hook
399
+ > `claudemd-bloat-detector.js` ya emite nudge async cuando se modifica
400
+ > `CLAUDE.md`, pero el nudge llega DESPUÉS del Paso 7 — y el comando
401
+ > habría seguido sin saber que el contrato canónico se rompió.
402
+ >
403
+ > Este Paso 6.5 invoca el auditor SÍNCRONAMENTE, antes de pasar a Paso 7.
404
+
405
+ ### Por qué existe este paso
406
+
407
+ `/swl:aprender` y `/swl:claudemd` operan sobre el mismo archivo desde
408
+ ángulos distintos: aprender **muta**, claudemd **prescribe contrato**. Sin
409
+ validación cruzada, una sesión de aprender puede agregar 25 líneas inline
410
+ a un CLAUDE.md que estaba en 195 LOC → resultado 220 LOC, WARN líneas,
411
+ contrato roto silenciosamente.
412
+
413
+ Origen del gap: detectado en sesión 2026-05-22 al evaluar el flujo
414
+ SIGAF→swl-ses (CLAUDE.md SIGAF recibió ~25 líneas inline de
415
+ "Triangulación schema cross-stack" sin validación post-mutación).
416
+
417
+ ### Procedimiento
418
+
419
+ Solo si en Paso 6 se aplicó al menos un Tipo A:
420
+
421
+ 1. **Ejecutar el auditor síncrono**:
422
+
423
+ ```bash
424
+ node scripts/auditar-claudemd.js --json
425
+ ```
426
+
427
+ Si el script no está disponible en el proyecto destino (instalación
428
+ global vía npm), invocar:
429
+
430
+ ```bash
431
+ npx -y @saulwade/swl-ses@latest audit-claudemd --json
432
+ ```
433
+
434
+ 2. **Leer el JSON de respuesta** y evaluar `veredicto`:
435
+
436
+ | Veredicto | Acción |
437
+ |-----------|--------|
438
+ | `OK` | Continuar a Paso 7. El Tipo A se aplicó respetando el contrato. |
439
+ | `WARN` con regla `tamano-total` (líneas > umbral) | Aplicar protocolo de extracción (sub-paso 3) |
440
+ | `WARN` con regla `bullet-gigante` | Aplicar protocolo de condensación (sub-paso 4) |
441
+ | `WARN` con regla `duplicacion-reglas-globales` | **DETENER y reformular** — el Tipo A duplica regla global. Aplicar protocolo de duplicación (sub-paso 4.5) |
442
+ | `WARN` con otra regla (secciones, @references, karpathy) | Reportar al usuario pero permitir continuar |
443
+ | `ERROR` con regla `placeholders` | **DETENER** — revertir Tipo A y reportar al usuario |
444
+
445
+ 3. **Protocolo de extracción** (WARN líneas excedidas):
446
+
447
+ ```
448
+ El Tipo A aplicado dejó CLAUDE.md en [N] líneas (umbral: 200).
449
+
450
+ Opciones:
451
+ [A] Condensar la regla agregada a ≤3 líneas y re-escribir en CLAUDE.md
452
+ [B] Extraer el cuerpo a @docs/lessons-<tema-kebab>.md y dejar 1 línea
453
+ en CLAUDE.md: "- **<título>**: [resumen 1 línea]. Detalle en
454
+ @docs/lessons-<tema>.md"
455
+ [C] Aceptar el WARN y continuar (ajustar SWL_CLAUDEMD_MAX_LINES en
456
+ caso de que el límite real del proyecto sea mayor)
457
+
458
+ ¿Qué prefieres?
459
+ ```
460
+
461
+ Por defecto, recomendar **[B] Extraer** cuando el aprendizaje requiere
462
+ más de 5 líneas o incluye ejemplos de código. Recomendar **[A] Condensar**
463
+ cuando el aprendizaje cabe en 1-3 líneas sin perder accionabilidad.
464
+
465
+ 4. **Protocolo de condensación** (WARN bullet-gigante):
466
+
467
+ Un bullet/párrafo >1000 chars es ilegible. Convertir a tabla, lista
468
+ jerárquica o extraer a `@docs/`. NO dejar el bullet gigante aunque el
469
+ usuario lo apruebe — viola el contrato canónico de CLAUDE.md.
470
+
471
+ 4.5. **Protocolo de duplicación de reglas globales** (WARN `duplicacion-reglas-globales`):
472
+
473
+ Esto significa que el Tipo A aplicado **parafrasea una regla que ya
474
+ vive en `~/.claude/rules/`** y se carga globalmente. Duplicarla
475
+ inline en CLAUDE.md de proyecto viola la regla
476
+ `reglas/sin-duplicacion-reglas-globales.md`.
477
+
478
+ El auditor reporta cuál regla global se duplica y la línea
479
+ aproximada. Ejemplo de hallazgo:
480
+
481
+ ```
482
+ [WARN] Bloque duplica regla global `~/.claude/rules/brevedad-output.md`
483
+ (línea ~14)
484
+ ```
485
+
486
+ Acción obligatoria:
487
+
488
+ ```
489
+ El Tipo A que se acaba de agregar parafrasea la regla global
490
+ `~/.claude/rules/<archivo>.md` § <sección> (línea ~N).
491
+
492
+ Opciones:
493
+ [A] Eliminar el bloque local — la regla global YA aplica
494
+ automáticamente en cada sesión SWL.
495
+ [B] Reescribir el bloque como matiz local (≤3 líneas) que
496
+ nombra explícitamente la regla global:
497
+ "Convenciones locales del proyecto: <matiz>.
498
+ Ver @~/.claude/rules/<archivo>.md."
499
+ [C] Documentar override explícito con justificación:
500
+ "Override de ~/.claude/rules/<archivo>.md por <razón>."
501
+
502
+ ¿Qué prefieres?
503
+ ```
504
+
505
+ Por defecto, **recomendar [A] Eliminar** salvo que el bloque agregue
506
+ matiz local genuino del proyecto. NUNCA aceptar el WARN sin
507
+ resolución — eso convierte el comando en cómplice de la duplicación
508
+ que la regla prohíbe.
509
+
510
+ 5. **Re-ejecutar el auditor** tras la corrección hasta veredicto OK o
511
+ WARN consultivo aceptable (con confirmación explícita del usuario para
512
+ los WARN no resueltos).
513
+
514
+ ### Reglas duras
515
+
516
+ - NUNCA pasar al Paso 7 con veredicto `ERROR placeholders`. Revertir el Tipo
517
+ A primero.
518
+ - NUNCA aceptar `WARN tamano-total` o `WARN bullet-gigante` sin proponer al
519
+ menos una de las opciones [A]/[B]. El usuario debe decidir conscientemente
520
+ si vivir con el WARN.
521
+ - Si el aprendizaje Tipo A genera 2+ secciones nuevas, evaluar si el
522
+ contenido pertenece a un archivo `@docs/lessons-<tema>.md` desde el inicio
523
+ en lugar de inline.
524
+
525
+ ### Anti-patrón explícito
526
+
527
+ ❌ Aplicar Tipo A inline sin Paso 6.5 → CLAUDE.md crece descontroladamente →
528
+ contrato canónico violado silenciosamente → próxima ejecución de
529
+ `/swl:claudemd audit` reporta WARN, pero el daño ya está en el commit.
530
+
531
+ ✅ Aplicar Tipo A → ejecutar auditor sync en Paso 6.5 → si hay drift,
532
+ condensar o extraer → CLAUDE.md permanece dentro del contrato.
533
+
395
534
  ## Paso 7 — APRENDIZAJES.md y reporte
396
535
 
397
536
  Crea o actualiza `.planning/APRENDIZAJES.md` con registro de la sesión: título, categoría, contexto, aprendizaje, acción tomada, métricas.
@@ -2,6 +2,11 @@
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."
5
10
  ---
6
11
 
7
12
  # /swl:claudemd — Tratamiento profesional de CLAUDE.md
@@ -149,6 +154,20 @@ existente NO incluye `@reglas/usar-sistema-swl.md` o NO menciona los cuatro
149
154
  principios Karpathy (o `prevencion-sobreingenieria`), emitir hallazgo WARN
150
155
  recomendando agregarlo manualmente.
151
156
 
157
+ ### Validación síncrona post-generación
158
+
159
+ Tras `init-project` generar el archivo nuevo, ejecutar inmediatamente
160
+ `audit` sobre el resultado:
161
+
162
+ ```bash
163
+ node scripts/auditar-claudemd.js --json
164
+ ```
165
+
166
+ Veredicto esperado: `OK` (el template debe respetar el contrato por
167
+ construcción). Cualquier WARN/ERROR es bug del template — reportar al
168
+ usuario y abrir issue para corrección. Este check es parte del contrato
169
+ cruzado con `/swl:aprender` documentado en `@docs/contrato-aprender-claudemd.md`.
170
+
152
171
  ### audit — checks específicos sobre Karpathy
153
172
 
154
173
  El subcomando `audit` verifica además de las dimensiones estándar:
@@ -162,6 +181,45 @@ recomendando agregar la sub-sección compacta (4 líneas) como guía de
162
181
  implementación. NO emite WARN para CLAUDE.md mínimos (<50 LOC) ni para
163
182
  archivos `~/.claude/CLAUDE.md` user-level (esos siguen otro contrato).
164
183
 
184
+ ### audit — checks específicos sobre duplicación de reglas globales
185
+
186
+ El subcomando `audit` también detecta (dimensión 7) si CLAUDE.md duplica
187
+ reglas que ya viven en `~/.claude/rules/` y se cargan globalmente.
188
+ Consume el catálogo declarativo
189
+ `scripts/lib/reglas-globales-conocidas.json` que cataloga 6 reglas
190
+ conocidas:
191
+
192
+ - `brevedad-output.md` § Idioma obligatorio: español de México
193
+ - `brevedad-output.md` § Brevedad y eficiencia de output
194
+ - `git-coauthor.md` § Sin co-autores en commits
195
+ - `arreglar-al-detectar.md` § Detectar → Informar → Arreglar
196
+ - `debatir-antes-de-aceptar.md`
197
+ - `usar-context7.md`
198
+
199
+ Si detecta duplicación: emite hallazgo `duplicacion-reglas-globales`
200
+ severidad WARN con línea aproximada y remediación específica. NO bloquea
201
+ el comando — sirve como nudge para limpiar el CLAUDE.md.
202
+
203
+ NO aplica a `~/.claude/CLAUDE.md` user-level (ahí sí pueden declararse
204
+ preferencias personales que parafrasean reglas globales).
205
+
206
+ Aplica regla `reglas/sin-duplicacion-reglas-globales.md`.
207
+
208
+ ### refactor — propuestas para duplicaciones de reglas globales
209
+
210
+ Cuando `audit` detecta duplicaciones, el subcomando `refactor` propone
211
+ el reemplazo concreto usando `construirSugerenciaRefactor()` del
212
+ detector. Cada propuesta incluye:
213
+
214
+ - **Bloque a eliminar** (línea aproximada en CLAUDE.md)
215
+ - **Regla global afectada** (archivo + sección canónica)
216
+ - **Reemplazo sugerido** (3 opciones):
217
+ 1. Eliminar el bloque — la regla global YA aplica automáticamente
218
+ 2. Reescribir como matiz local en ≤3 líneas referenciando la regla
219
+ 3. Documentar override explícito con justificación
220
+
221
+ El refactor SOLO imprime el diff propuesto. El usuario decide aplicar.
222
+
165
223
  ## Variables de entorno
166
224
 
167
225
  Ver `@docs/variables-entorno.md` sección "Calidad de CLAUDE.md":
@@ -2,6 +2,11 @@
2
2
  name: swl:ejecutar-fase
3
3
  description: Recibe el número de una fase y la implementa siguiendo el PLAN.md. Delega al agente implementador-swl, hace commits atómicos por slice, produce RESUMEN.md y actualiza ESTADO.md y HOJA-RUTA.md al terminar.
4
4
  allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
+ evolved: true
6
+ evolved-from: "1.6.8"
7
+ evolved-at: "2026-05-22"
8
+ evolved-by: "aprender"
9
+ evolved-note: "Paso 4.2 — cota dura 30k tokens al prompt del sub-agente para prevenir autocompact thrashing (origen SIGAF 2026-05-22)"
5
10
  ---
6
11
 
7
12
  # /swl:ejecutar-fase <n> [--iterative] — Ejecutar implementación de una fase
@@ -109,6 +114,15 @@ Anuncia inicio del slice (nombre, tipo AFK/HITL, número de tareas). Si es HITL
109
114
  ### 4.2 — Delegación al implementador-swl
110
115
  Delega con instrucción precisa: contexto a leer (PROYECTO.md, PLAN.md, CONTEXTO.md, CLAUDE.md), tareas del slice, criterio de verificación. El skill define las reglas de commit atómico y formato.
111
116
 
117
+ **Cota dura del prompt al sub-agente**: ≤30k tokens (intent + constraints + acceptance criteria + file locations). Por encima de esa cifra el sub-agente puede entrar en autocompact thrashing y abortar sin escribir archivos (caso real SIGAF 2026-05-22). Si el prompt necesario excede 30k tokens:
118
+
119
+ - Dividir el slice en sub-slices más pequeños (<10k tokens de spec cada uno).
120
+ - O ejecutar directamente sin delegar si la spec está clara para ti (scope <5 archivos boilerplate similar).
121
+
122
+ Indicador para optar por trabajo directo: si pasas más de 5 minutos escribiendo specs para preparar la delegación, el costo de delegar supera el ahorro.
123
+
124
+ Detalle del patrón anti-thrashing en `agentes/orquestador-swl.md` sección "4. Tamaño máximo del prompt al sub-agente".
125
+
112
126
  ### 4.3 — Verificación del slice
113
127
  Ejecuta comandos de verificación del PLAN.md, verifica archivos, revisa commits (`git log --oneline -5`), corre tests. Si falla: máximo 2 reintentos antes de escalar al usuario.
114
128
 
@@ -2,6 +2,11 @@
2
2
  name: swl:nuevo-proyecto
3
3
  description: Inicializa un proyecto nuevo desde cero. Hace preguntas al usuario, investiga el stack tecnológico y produce la estructura de planeación completa en .planning/.
4
4
  allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
+ evolved: true
6
+ evolved-from: "1.6.8"
7
+ evolved-at: "2026-05-22"
8
+ evolved-by: "aprender"
9
+ evolved-note: "Paso 6 — validación síncrona del auditor tras generar CLAUDE.md inicial (contrato cruzado con /swl:claudemd)"
5
10
  ---
6
11
 
7
12
  # /swl:nuevo-proyecto — Inicializar proyecto nuevo
@@ -156,6 +161,30 @@ Si ya existe `CLAUDE.md` (verificado en Paso 1), revisar que incluya
156
161
  `@reglas/usar-sistema-swl.md` en la sección de reglas obligatorias. Si NO
157
162
  lo incluye, agregarlo en este paso preservando el resto del contenido.
158
163
 
164
+ ### Validación síncrona post-generación (contrato cruzado con /swl:claudemd)
165
+
166
+ Tras generar el `CLAUDE.md` inicial, ejecutar el auditor síncrono para
167
+ verificar el contrato canónico desde el primer commit:
168
+
169
+ ```bash
170
+ node scripts/auditar-claudemd.js --json
171
+ # Fallback:
172
+ npx -y @saulwade/swl-ses@latest audit-claudemd --json
173
+ ```
174
+
175
+ Veredicto esperado en proyecto nuevo: `OK` (el template generado debe
176
+ respetar el contrato por construcción). Si reporta WARN o ERROR:
177
+
178
+ - `WARN secciones-canonicas` ausentes → bug del template, abrir issue.
179
+ - `ERROR placeholders` → bug del template, reemplazar `[ej.]` con
180
+ ejemplos reales o HTML comments.
181
+
182
+ Cualquier otro WARN/ERROR es señal de que el template necesita ajuste —
183
+ reportar al usuario y considerar invocar `/swl:claudemd refactor` antes
184
+ de continuar.
185
+
186
+ Detalle del contrato cruzado en `@docs/contrato-aprender-claudemd.md`.
187
+
159
188
  ## Paso 7 — Reporte al usuario
160
189
 
161
190
  Al terminar, reporta:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: swl-claudemd
3
3
  description: Conocimiento operacional para auditar y mantener archivos CLAUDE.md — contrato canónico de secciones (best practices Anthropic, ADR-0016), umbrales de bloat (líneas totales, bullets gigantes, placeholders, @references rotas), reglas de extracción a archivos referenciados con @, y plantillas de inicialización (init-user para ~/.claude/CLAUDE.md, init-project para CLAUDE.md raíz detectando stack). Provee las reglas; el comando /swl:claudemd ejecuta el flujo. Cargar desde ese comando o cuando el hook claudemd-bloat-detector sugiera intervención.
4
- version: "1.0.2"
4
+ version: "1.2.0"
5
5
  herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
6
6
  exclusiones:
7
7
  - "No cargar para editar reglas globales en ~/.claude/rules/ — usar Edit directo."
@@ -9,6 +9,11 @@ exclusiones:
9
9
  - "No cargar para validar otros archivos (.md de docs, READMEs) — solo CLAUDE.md tiene contrato canónico."
10
10
  - "No cargar para generar el bloque del installer en CLAUDE.md de proyectos destino — eso lo hace scripts/lib/transformadores/claude.js."
11
11
  evolvable: true
12
+ evolved: true
13
+ evolved-from: "1.1.0"
14
+ evolved-at: "2026-05-22"
15
+ evolved-by: "aprender"
16
+ evolved-note: "Dimensión 8 — detección de duplicación de reglas globales (catálogo declarativo en scripts/lib/reglas-globales-conocidas.json). Refactor propone reemplazo canónico. Hook claudemd-duplicacion-detector.js complementa la capa async. Aplica regla nueva reglas/sin-duplicacion-reglas-globales.md (v1.7.0)."
12
17
  ---
13
18
 
14
19
  # Habilidad: Tratamiento profesional de CLAUDE.md
@@ -58,7 +63,7 @@ node scripts/auditar-claudemd.js --json # para parsing
58
63
  node scripts/auditar-claudemd.js --strict # exit 1 si WARN
59
64
  ```
60
65
 
61
- El auditor verifica siete dimensiones:
66
+ El auditor verifica ocho dimensiones:
62
67
 
63
68
  | Dimensión | Regla | Severidad |
64
69
  |---|---|---|
@@ -69,6 +74,7 @@ El auditor verifica siete dimensiones:
69
74
  | @references | Archivos >80 líneas usan al menos un `@docs/...md` | WARN |
70
75
  | Placeholders | `[TBD]`, `[TODO]`, `[COMPLETAR]` | ERROR |
71
76
  | Karpathy reference | Project-level >50 LOC menciona "Karpathy", los 4 principios, o `prevencion-sobreingenieria` | WARN |
77
+ | Duplicación reglas globales | Bloque inline parafrasea regla de `~/.claude/rules/` ya cargada globalmente (catálogo en `scripts/lib/reglas-globales-conocidas.json`) | WARN |
72
78
 
73
79
  Veredicto final: ERROR → WARN → OK (el más severo gana).
74
80
 
@@ -219,6 +225,182 @@ Esta dimensión es WARN, no ERROR — guía sin imponer. CLAUDE.md user-level
219
225
 
220
226
  ---
221
227
 
228
+ ## Interacción con /swl:aprender (contrato cruzado)
229
+
230
+ `/swl:aprender` y `/swl:claudemd` operan sobre el mismo archivo desde
231
+ ángulos opuestos: aprender **muta**, claudemd **prescribe contrato**.
232
+ Sin coordinación explícita, una sesión de aprender puede romper el
233
+ contrato silenciosamente.
234
+
235
+ ### El gap arquitectural que esta interacción cierra
236
+
237
+ `/swl:aprender` Paso 6 Tipo A agrega reglas a `CLAUDE.md` del proyecto.
238
+ El hook `claudemd-bloat-detector.js` (PostToolUse, async, no bloqueante)
239
+ emite nudge tras Write/Edit/MultiEdit sobre CLAUDE.md, pero **el nudge
240
+ llega después** del comando de aprender. Resultado: aprender termina,
241
+ reporta éxito al usuario, y solo después aparece el nudge — con el
242
+ commit ya hecho.
243
+
244
+ Origen detectado: sesión 2026-05-22 al evaluar el flujo SIGAF→swl-ses.
245
+ CLAUDE.md SIGAF recibió ~25 líneas inline de "Triangulación schema
246
+ cross-stack" sin validación post-mutación → archivo probablemente
247
+ superó el umbral de 200 LOC sin warning consciente.
248
+
249
+ ### Contrato canónico de interacción
250
+
251
+ Para cualquier comando SWL que escriba a CLAUDE.md del proyecto
252
+ (`/swl:aprender`, `/swl:adoptar-proyecto`, `/swl:nuevo-proyecto`,
253
+ `/swl:claudemd init-project`, futuros comandos similares):
254
+
255
+ 1. **Antes de escribir**: opcional, pero recomendado — leer el tamaño
256
+ actual del archivo y estimar el delta.
257
+ 2. **Después de escribir**: OBLIGATORIO ejecutar el auditor síncrono:
258
+
259
+ ```bash
260
+ node scripts/auditar-claudemd.js --json
261
+ # o fallback:
262
+ npx -y @saulwade/swl-ses@latest audit-claudemd --json
263
+ ```
264
+
265
+ 3. **Evaluar veredicto**:
266
+ - `OK` → continuar
267
+ - `WARN tamano-total` → proponer condensar o extraer a `@docs/lessons-<tema>.md`
268
+ - `WARN bullet-gigante` → proponer condensar a tabla/lista jerárquica
269
+ - `WARN secciones-canonicas` / `WARN sin-at-references` / `WARN karpathy-reference` → reportar al usuario, permitir continuar
270
+ - `ERROR placeholders` → **DETENER** y revertir
271
+
272
+ 4. **Re-ejecutar el auditor** tras la corrección hasta veredicto OK o
273
+ WARN aceptable.
274
+
275
+ ### Doble red de seguridad
276
+
277
+ El sistema tiene dos capas de protección complementarias:
278
+
279
+ | Capa | Mecanismo | Cuándo actúa | Bloqueo |
280
+ |------|-----------|--------------|---------|
281
+ | Síncrona | Paso 6.5 de `/swl:aprender` (y equivalente en otros comandos) | Justo después del Write/Edit, antes del reporte final | Bloquea pasos posteriores hasta resolver |
282
+ | Asíncrona | Hook `claudemd-bloat-detector.js` (PostToolUse) | Tras cualquier Write/Edit/MultiEdit a CLAUDE.md (incluso fuera de comandos SWL) | No bloquea — emite nudge a `.planning/evolucion/nudges.jsonl` |
283
+
284
+ La capa síncrona es proactiva (detiene el comando antes de reportar
285
+ éxito). La asíncrona es retroactiva (cubre escrituras desde fuera de
286
+ comandos SWL, ej. edición manual).
287
+
288
+ ### Por qué NO se duplica al hook
289
+
290
+ El hook async existente cubre el caso de escrituras desde **cualquier
291
+ fuente** (edición manual del usuario, otros comandos, scripts externos).
292
+ Es la red de seguridad universal. La validación síncrona en aprender es
293
+ específica para el flujo del comando — donde el agente puede actuar
294
+ sobre el WARN antes de continuar.
295
+
296
+ NO crear un hook nuevo dedicado a aprender — duplicaría el rol del
297
+ existente. La invocación síncrona en el Paso 6.5 es suficiente.
298
+
299
+ ### Reglas duras
300
+
301
+ - `/swl:aprender` Paso 6.5 es OBLIGATORIO si se aplicó Tipo A.
302
+ - `/swl:adoptar-proyecto` Paso 8 debe ejecutar el auditor tras
303
+ generar/modificar CLAUDE.md.
304
+ - `/swl:nuevo-proyecto` Paso 6 debe ejecutar el auditor tras generar
305
+ CLAUDE.md inicial.
306
+ - `/swl:claudemd init-project` debe ejecutar el auditor sobre el
307
+ archivo recién generado.
308
+
309
+ Cualquier comando futuro que escriba a CLAUDE.md DEBE seguir este
310
+ contrato.
311
+
312
+ ---
313
+
314
+ ---
315
+
316
+ ## Detección de duplicación de reglas globales (dimensión 8)
317
+
318
+ ### Por qué existe
319
+
320
+ Las reglas en `~/.claude/rules/` se cargan automáticamente en cada
321
+ sesión SWL. Si un proyecto duplica inline el contenido de esas reglas
322
+ en su `CLAUDE.md`, ocurren tres patologías:
323
+
324
+ 1. **Bloat acumulativo**: 7-15 líneas por regla duplicada × N proyectos
325
+ = inflación silenciosa que rompe el umbral de 200 LOC.
326
+ 2. **Drift al actualizar la global**: si la regla global cambia, las
327
+ copias en cada CLAUDE.md quedan obsoletas sin alerta.
328
+ 3. **Erosión del contrato canónico**: cada CLAUDE.md re-deriva el
329
+ principio con palabras propias, generando 4 paráfrasis distintas
330
+ del mismo contenido.
331
+
332
+ La regla `reglas/sin-duplicacion-reglas-globales.md` (v1.7.0) prohíbe
333
+ esta duplicación. Esta dimensión del auditor la detecta.
334
+
335
+ ### Catálogo declarativo
336
+
337
+ `scripts/lib/reglas-globales-conocidas.json` lista las reglas globales
338
+ conocidas con sus patrones de detección. Estructura por entrada:
339
+
340
+ ```json
341
+ {
342
+ "id": "idioma-espanol-mexico",
343
+ "regla_global": "brevedad-output.md",
344
+ "seccion_canonica": "Idioma obligatorio: español de México",
345
+ "referencia_canonica": "@~/.claude/rules/brevedad-output.md § Idioma obligatorio",
346
+ "patrones": ["\\bespañol\\s+de\\s+M[ée]xico\\b", "..."],
347
+ "min_matches": 2,
348
+ "remediacion_sugerida": "Eliminar el bloque local..."
349
+ }
350
+ ```
351
+
352
+ Reglas incluidas en v1.7.0:
353
+
354
+ - `idioma-espanol-mexico` (brevedad-output.md § Idioma)
355
+ - `brevedad-sin-aiisms` (brevedad-output.md § Brevedad)
356
+ - `git-sin-coautores` (git-coauthor.md)
357
+ - `arreglar-al-detectar` (arreglar-al-detectar.md)
358
+ - `debatir-antes-de-aceptar` (debatir-antes-de-aceptar.md)
359
+ - `usar-context7` (usar-context7.md)
360
+
361
+ ### Cuándo NO se evalúa
362
+
363
+ - **User-level** (`~/.claude/CLAUDE.md`): ahí sí pueden declararse
364
+ preferencias personales que parafrasean reglas globales. La opción
365
+ `esUserLevel: true` skipea la evaluación.
366
+ - **Archivos < 20 LOC**: CLAUDE.md mínimos no acumulan duplicaciones
367
+ con suficiente densidad para evaluar.
368
+
369
+ ### Capa async — hook
370
+
371
+ `hooks/claudemd-duplicacion-detector.js` (PostToolUse, no bloquea)
372
+ ejecuta el detector tras cualquier Write/Edit a CLAUDE.md y emite
373
+ nudge a `.planning/evolucion/nudges.jsonl` con `kind:
374
+ claudemd-duplicacion-reglas`. Opt-out: `SWL_CLAUDEMD_DUPLICACION=0`.
375
+
376
+ ### Cómo refactorizar duplicaciones detectadas
377
+
378
+ Tres opciones para cada hallazgo:
379
+
380
+ 1. **Eliminar** (default recomendado): el bloque solo repite la regla
381
+ global, eliminarlo no pierde información.
382
+ 2. **Convertir a matiz local** (≤3 líneas): si el bloque agrega valor
383
+ local genuino, reescribirlo corto referenciando la regla global:
384
+ ```markdown
385
+ Convenciones locales: identificadores técnicos en inglés (rutas,
386
+ comandos). Ver @~/.claude/rules/brevedad-output.md.
387
+ ```
388
+ 3. **Documentar override explícito** (raro): si el proyecto contradice
389
+ la regla global por requerimiento documentable:
390
+ ```markdown
391
+ Override de @~/.claude/rules/brevedad-output.md § Brevedad: este
392
+ proyecto exige docstrings extendidos por compliance regulatorio.
393
+ ```
394
+
395
+ ### Anti-patrón: "lo dejo por claridad"
396
+
397
+ La regla global YA es visible — se carga automáticamente. Duplicarla
398
+ no aumenta su prioridad ni su claridad; solo crea deuda. Si el WARN
399
+ del auditor incomoda, la respuesta correcta es **resolver la
400
+ duplicación**, no aceptar el WARN.
401
+
402
+ ---
403
+
222
404
  ## Gotchas / Errores comunes no obvios
223
405
 
224
406
  - **Marcar tablas como bullets gigantes**: el detector debe excluir