@saulwade/swl-ses 1.8.0 → 2.0.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.
Files changed (135) hide show
  1. package/CLAUDE.md +8 -8
  2. package/README.md +13 -13
  3. package/agentes/accesibilidad-wcag-swl.md +3 -3
  4. package/agentes/auto-evolucion-swl.md +908 -908
  5. package/agentes/disenador-ui-swl.md +6 -5
  6. package/agentes/frontend-angular-swl.md +2 -2
  7. package/agentes/frontend-css-swl.md +2 -2
  8. package/agentes/frontend-react-swl.md +4 -4
  9. package/agentes/frontend-swl.md +6 -6
  10. package/agentes/investigador-ux-swl.md +5 -5
  11. package/agentes/orquestador-swl.md +96 -8
  12. package/agentes/perfilador-usuario-swl.md +308 -308
  13. package/agentes/producto-prd-swl.md +1 -1
  14. package/agentes/red-team-swl.md +218 -218
  15. package/agentes/revisor-codigo-swl.md +34 -10
  16. package/agentes/revisor-seguridad-swl.md +7 -0
  17. package/agentes/tdd-qa-swl.md +39 -2
  18. package/comandos/swl/actualizar.md +1 -1
  19. package/comandos/swl/aprender.md +2 -2
  20. package/comandos/swl/aprobar-plan.md +152 -0
  21. package/comandos/swl/autoresearch.md +102 -6
  22. package/comandos/swl/ayuda.md +3 -3
  23. package/comandos/swl/discutir-fase.md +20 -2
  24. package/comandos/swl/ejecutar-fase.md +53 -6
  25. package/comandos/swl/evolucionar.md +1 -1
  26. package/comandos/swl/inbox.md +1 -1
  27. package/comandos/swl/instalar.md +1 -1
  28. package/comandos/swl/nemesis.md +42 -1
  29. package/comandos/swl/planear-fase.md +25 -1
  30. package/comandos/swl/plugins.md +1 -1
  31. package/comandos/swl/predecir.md +139 -0
  32. package/comandos/swl/release.md +1 -1
  33. package/comandos/swl/status.md +279 -0
  34. package/comandos/swl/verificar.md +75 -7
  35. package/habilidades/ai-runtime-security/SKILL.md +1 -1
  36. package/habilidades/angular-moderno/SKILL.md +44 -1
  37. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  38. package/habilidades/autoresearch/SKILL.md +15 -1
  39. package/habilidades/benchmark-memoria/SKILL.md +1 -1
  40. package/habilidades/calidad-contract-testing/SKILL.md +165 -0
  41. package/habilidades/calidad-mutation-testing/SKILL.md +170 -0
  42. package/habilidades/changelog-generator/SKILL.md +9 -2
  43. package/habilidades/changelog-generator/scripts/parse-commits.js +12 -1
  44. package/habilidades/checklist-seguridad/SKILL.md +29 -1
  45. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -0
  46. package/habilidades/css-moderno/SKILL.md +3 -1
  47. package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
  48. package/habilidades/drift-detection/SKILL.md +179 -179
  49. package/habilidades/ejecutar-fase/SKILL.md +64 -14
  50. package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
  51. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
  52. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
  53. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
  54. package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
  55. package/habilidades/fastapi-experto/SKILL.md +56 -5
  56. package/habilidades/harness-claude-code/SKILL.md +10 -7
  57. package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
  58. package/habilidades/instalar-sistema/SKILL.md +3 -3
  59. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
  60. package/habilidades/patrones-python/SKILL.md +8 -5
  61. package/habilidades/perfil-usuario/SKILL.md +200 -200
  62. package/habilidades/planear-fase/SKILL.md +25 -4
  63. package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
  64. package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
  65. package/habilidades/proceso-debate-adversarial/SKILL.md +164 -0
  66. package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -0
  67. package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -0
  68. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -0
  69. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -0
  70. package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
  71. package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
  72. package/habilidades/swl-claudemd/SKILL.md +50 -210
  73. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
  74. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
  75. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
  76. package/habilidades/swl-dashboard/SKILL.md +9 -9
  77. package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
  78. package/habilidades/tdd-workflow/SKILL.md +58 -5
  79. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -0
  80. package/habilidades/validacion-ci-sistema/SKILL.md +3 -3
  81. package/hooks/calidad-pre-commit.js +340 -3
  82. package/hooks/ciclo-evolucion-subagente.js +26 -0
  83. package/hooks/ciclo-evolucion.js +26 -0
  84. package/hooks/contexto-iteracion.js +144 -0
  85. package/hooks/extraccion-aprendizajes.js +13 -0
  86. package/hooks/lib/ciclo-evolucion.js +47 -0
  87. package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
  88. package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
  89. package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
  90. package/hooks/lib/evolution-tracker.js +24 -3
  91. package/hooks/lib/loop-telemetry.js +321 -0
  92. package/hooks/notificacion-telegram.js +11 -3
  93. package/hooks/spec-gate.js +211 -0
  94. package/hooks/tdd-gate.js +241 -0
  95. package/hooks/validar-intent-spec.js +30 -10
  96. package/llms.txt +29 -0
  97. package/manifiestos/hooks-config.json +36 -18
  98. package/manifiestos/modulos.json +23 -14
  99. package/manifiestos/skills-lock.json +100 -72
  100. package/package.json +4 -3
  101. package/plugin.json +9 -10
  102. package/reglas/accesibilidad.md +10 -0
  103. package/reglas/api-diseno.md +9 -0
  104. package/reglas/arquitectura.evolved.json +7 -0
  105. package/reglas/arquitectura.md +65 -0
  106. package/reglas/auditorias-documentales-estructurales.md +7 -0
  107. package/reglas/cloud-infra.md +8 -0
  108. package/reglas/fragmentos-compartidos.md +5 -0
  109. package/reglas/gobernanza.md +4 -4
  110. package/reglas/hooks.md +6 -0
  111. package/reglas/intent-engineering.md +4 -0
  112. package/reglas/markitdown.md +8 -0
  113. package/reglas/memoria-consolidada.md +1 -1
  114. package/reglas/patrones.md +6 -0
  115. package/reglas/registro-componentes-nuevos.md +10 -1
  116. package/reglas/seguridad-agentes.md +1 -1
  117. package/reglas/seguridad.evolved.json +7 -0
  118. package/reglas/seguridad.md +144 -0
  119. package/reglas/skills-estandar.md +6 -0
  120. package/reglas/testing.md +7 -0
  121. package/reglas/tests-cleanup.md +4 -0
  122. package/reglas/usar-sistema-swl.md +1 -1
  123. package/scripts/generar-inventario.js +64 -1
  124. package/scripts/instalador.js +32 -2
  125. package/scripts/lib/gitignore-manifest.js +29 -1
  126. package/scripts/lib/plan-lock.js +275 -0
  127. package/scripts/migrar-fase-dominio.js +0 -1
  128. package/scripts/smoke-test.js +24 -2
  129. package/scripts/verificar-trazabilidad.js +292 -0
  130. package/agentes/ux-disenador-swl.md +0 -503
  131. package/comandos/swl/dashboard.md +0 -146
  132. package/comandos/swl/evolucion-estado.md +0 -191
  133. package/comandos/swl/metricas.md +0 -342
  134. package/comandos/swl/salud.md +0 -481
  135. package/reglas/verificar-citas-temporales.md +0 -139
@@ -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.2.0"
4
+ version: "1.2.1"
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."
@@ -148,19 +148,11 @@ secciones faltantes pero NO sobreescribe.
148
148
 
149
149
  ### Template
150
150
 
151
- Ver template completo en el comando `/swl:claudemd` sección `init-user`.
152
-
153
- Las secciones canónicas para user-level son DISTINTAS de project-level:
154
-
155
- | Sección | Project-level | User-level |
156
- |---|---|---|
157
- | Stack | Sí — del proyecto | No (varía por proyecto) |
158
- | Comandos | Sí — del proyecto | No |
159
- | Code style | Sí — convenciones del equipo | Sí — preferencias personales (indent, naming favorito) |
160
- | Conventions | Sí — del proyecto | No |
161
- | Mi rol y stack preferido | No | Sí |
162
- | Estilo de comunicación | No | Sí |
163
- | Patrones que aplico siempre | No | Sí — meta-preferencias cross-project |
151
+ Las secciones canónicas user-level son DISTINTAS de project-level (Stack y
152
+ Comandos no aplican; sí aplican rol, estilo de comunicación y meta-preferencias).
153
+ Tabla comparativa completa y template: ver
154
+ [plantillas-init](recursos/plantillas-init.md) y el comando `/swl:claudemd`
155
+ sección `init-user`.
164
156
 
165
157
  ---
166
158
 
@@ -182,222 +174,70 @@ Genera `./CLAUDE.md` raíz del proyecto detectando stack actual.
182
174
  - **Comandos**: npm scripts detectados o comandos típicos por lenguaje
183
175
  - **Code style**: placeholders explícitos (`<!-- pendiente: definir convención de X -->`)
184
176
  - **Conventions**: placeholders explícitos
177
+ - **SWL es tooling (frontera de versionado)** — bloque exacto definido abajo.
178
+ OBLIGATORIO cuando el proyecto destino NO es el repo madre de swl-ses (es
179
+ decir, siempre en `init-project` sobre un proyecto del usuario). Mantiene
180
+ el CLAUDE.md consistente con la sección swl-ses del `.gitignore`.
185
181
  - **@references**: enlazar a `.planning/PROYECTO.md`, `README.md`,
186
182
  `CONTRIBUTING.md` solo si existen
187
183
  4. Imprimir mensaje con próximo paso: "ejecuta `/swl:claudemd audit`
188
184
  para verificar".
189
185
 
190
- ### Bloque obligatorio Karpathy en init-project
186
+ ### Bloques literales de init-project
191
187
 
192
- Toda generación nueva incluye esta sub-sección literal en "Reglas de
193
- máxima prioridad":
194
-
195
- ```markdown
196
- ### Cuatro principios de implementación (Karpathy)
197
- Antes de implementar, refactorizar o corregir bugs: (1) **pensar antes de codificar** (no asumir en silencio), (2) **simplicidad primero** (sin abstracciones especulativas), (3) **cambios quirúrgicos** (leer archivo completo antes de editar, no refactor de oportunidad), (4) **ejecución orientada a metas** (criterios verificables, test que reproduce bugs antes del fix). Detalle + 9 ejemplos MAL→BIEN: `Skill("prevencion-sobreingenieria")` + `recursos/EXAMPLES.md`.
198
- ```
188
+ Los dos bloques OBLIGATORIOS que toda generación nueva inserta literal viven en
189
+ [plantillas-init](recursos/plantillas-init.md) (fuente de verdad de los templates):
199
190
 
200
- Justificación: el skill `prevencion-sobreingenieria` y su `recursos/EXAMPLES.md`
201
- se distribuyen con cada instalación SWL, así que la referencia siempre resuelve.
202
- La sub-sección compacta (5 líneas) ataca los gaps cognitivos más frecuentes
203
- de cualquier proyecto sin agregar opinión específica.
191
+ - **Bloque SWL-tooling (frontera de versionado)**: documenta en el CLAUDE.md del
192
+ proyecto destino qué archivos son runtime gitignored (gestionado por
193
+ `scripts/lib/gitignore-manifest.js`) vs qué versiona el equipo. Si
194
+ `ENTRADAS_BASE` cambia, el bloque del recurso se actualiza en sync.
195
+ - **Bloque Karpathy (4 principios)**: sub-sección compacta en "Reglas de máxima
196
+ prioridad" que referencia `Skill("prevencion-sobreingenieria")` (siempre
197
+ resuelve — se distribuye con cada instalación SWL).
204
198
 
205
- ### Check Karpathy en audit
206
-
207
- `scripts/auditar-claudemd.js` debe verificar (search regex case-insensitive):
208
-
209
- - `/karpathy/i`
210
- - `/cuatro principios/i` o `/4 principios/i`
211
- - `/prevencion-sobreingenieria/`
212
- - `/Skill\(["'`]prevencion-sobreingenieria["'`]\)/`
213
-
214
- Si NO encuentra ninguna AND el archivo tiene >50 LOC AND es project-level
215
- (no `~/.claude/CLAUDE.md`): emitir hallazgo WARN con mensaje:
216
-
217
- ```
218
- CLAUDE.md no menciona los cuatro principios Karpathy ni el skill
219
- prevencion-sobreingenieria. Considerar agregar la sub-sección compacta
220
- (ver /swl:claudemd init-project § Bloque obligatorio Karpathy).
221
- ```
222
-
223
- Esta dimensión es WARN, no ERROR — guía sin imponer. CLAUDE.md user-level
224
- (`~/.claude/`) NO se evalúa contra este check.
199
+ El recurso incluye también el **check Karpathy del auditor** (regex, condiciones
200
+ y mensaje WARN — project-level >50 LOC sin mención a los 4 principios).
225
201
 
226
202
  ---
227
203
 
228
204
  ## Interacción con /swl:aprender (contrato cruzado)
229
205
 
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):
206
+ `/swl:aprender` **muta** CLAUDE.md; `/swl:claudemd` **prescribe contrato**.
207
+ Todo comando SWL que escriba a CLAUDE.md del proyecto (`aprender`,
208
+ `adoptar-proyecto`, `nuevo-proyecto`, `claudemd init-project`, futuros) DEBE
209
+ ejecutar el auditor síncrono tras escribir (`node scripts/auditar-claudemd.js
210
+ --json`), evaluar el veredicto (OK→continuar; WARN→proponer condensar/extraer;
211
+ `ERROR placeholders`→**DETENER y revertir**) y re-auditar hasta OK/WARN aceptable.
254
212
 
255
- 1. **Antes de escribir**: opcional, pero recomendadoleer el tamaño
256
- actual del archivo y estimar el delta.
257
- 2. **Después de escribir**: OBLIGATORIO ejecutar el auditor síncrono:
213
+ Doble red: capa síncrona (Paso 6.5 de aprender proactiva, bloquea el comando)
214
+ + capa async (hook `claudemd-bloat-detector.js` nudge universal para
215
+ escrituras fuera de comandos SWL). NO crear hook nuevo dedicado — duplicaría el
216
+ existente.
258
217
 
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/evolution/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
- ---
218
+ Detalle completo (gap arquitectural de origen, contrato canónico de 4 pasos,
219
+ tabla de capas, reglas duras por comando): ver
220
+ [contrato-aprender](recursos/contrato-aprender.md).
313
221
 
314
222
  ---
315
223
 
316
224
  ## Detección de duplicación de reglas globales (dimensión 8)
317
225
 
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/evolution/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.
226
+ Las reglas de `~/.claude/rules/` se cargan automáticamente en cada sesión;
227
+ duplicarlas inline en un CLAUDE.md de proyecto produce bloat, drift al
228
+ actualizar la global y erosión del contrato (regla
229
+ `reglas/sin-duplicacion-reglas-globales.md`). El auditor lo detecta con el
230
+ catálogo declarativo `scripts/lib/reglas-globales-conocidas.json` (6 reglas en
231
+ v1.7.0); la capa async es `hooks/claudemd-duplicacion-detector.js` (opt-out
232
+ `SWL_CLAUDEMD_DUPLICACION=0`). NO se evalúa user-level ni archivos <20 LOC.
233
+
234
+ Remediación por hallazgo: **eliminar** (default), **matiz local** ≤3 líneas
235
+ referenciando la global, u **override explícito** documentado. Anti-patrón:
236
+ "lo dejo por claridad" la global ya es visible; duplicar solo crea deuda.
237
+
238
+ Detalle completo (patologías, estructura del catálogo, ejemplos de
239
+ remediación): ver
240
+ [duplicacion-reglas-globales](recursos/duplicacion-reglas-globales.md).
401
241
 
402
242
  ---
403
243
 
@@ -0,0 +1,83 @@
1
+ # Contrato cruzado con /swl:aprender (y todo comando que escriba a CLAUDE.md)
2
+
3
+ `/swl:aprender` y `/swl:claudemd` operan sobre el mismo archivo desde
4
+ ángulos opuestos: aprender **muta**, claudemd **prescribe contrato**.
5
+ Sin coordinación explícita, una sesión de aprender puede romper el
6
+ contrato silenciosamente.
7
+
8
+ ## El gap arquitectural que esta interacción cierra
9
+
10
+ `/swl:aprender` Paso 6 Tipo A agrega reglas a `CLAUDE.md` del proyecto.
11
+ El hook `claudemd-bloat-detector.js` (PostToolUse, async, no bloqueante)
12
+ emite nudge tras Write/Edit/MultiEdit sobre CLAUDE.md, pero **el nudge
13
+ llega después** del comando de aprender. Resultado: aprender termina,
14
+ reporta éxito al usuario, y solo después aparece el nudge — con el
15
+ commit ya hecho.
16
+
17
+ Origen detectado: sesión 2026-05-22 al evaluar el flujo SIGAF→swl-ses.
18
+ CLAUDE.md SIGAF recibió ~25 líneas inline de "Triangulación schema
19
+ cross-stack" sin validación post-mutación → archivo probablemente
20
+ superó el umbral de 200 LOC sin warning consciente.
21
+
22
+ ## Contrato canónico de interacción
23
+
24
+ Para cualquier comando SWL que escriba a CLAUDE.md del proyecto
25
+ (`/swl:aprender`, `/swl:adoptar-proyecto`, `/swl:nuevo-proyecto`,
26
+ `/swl:claudemd init-project`, futuros comandos similares):
27
+
28
+ 1. **Antes de escribir**: opcional, pero recomendado — leer el tamaño
29
+ actual del archivo y estimar el delta.
30
+ 2. **Después de escribir**: OBLIGATORIO ejecutar el auditor síncrono:
31
+
32
+ ```bash
33
+ node scripts/auditar-claudemd.js --json
34
+ # o fallback:
35
+ npx -y @saulwade/swl-ses@latest audit-claudemd --json
36
+ ```
37
+
38
+ 3. **Evaluar veredicto**:
39
+ - `OK` → continuar
40
+ - `WARN tamano-total` → proponer condensar o extraer a `@docs/lessons-<tema>.md`
41
+ - `WARN bullet-gigante` → proponer condensar a tabla/lista jerárquica
42
+ - `WARN secciones-canonicas` / `WARN sin-at-references` / `WARN karpathy-reference` → reportar al usuario, permitir continuar
43
+ - `ERROR placeholders` → **DETENER** y revertir
44
+
45
+ 4. **Re-ejecutar el auditor** tras la corrección hasta veredicto OK o
46
+ WARN aceptable.
47
+
48
+ ## Doble red de seguridad
49
+
50
+ El sistema tiene dos capas de protección complementarias:
51
+
52
+ | Capa | Mecanismo | Cuándo actúa | Bloqueo |
53
+ |------|-----------|--------------|---------|
54
+ | 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 |
55
+ | 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/evolution/nudges.jsonl` |
56
+
57
+ La capa síncrona es proactiva (detiene el comando antes de reportar
58
+ éxito). La asíncrona es retroactiva (cubre escrituras desde fuera de
59
+ comandos SWL, ej. edición manual).
60
+
61
+ ## Por qué NO se duplica al hook
62
+
63
+ El hook async existente cubre el caso de escrituras desde **cualquier
64
+ fuente** (edición manual del usuario, otros comandos, scripts externos).
65
+ Es la red de seguridad universal. La validación síncrona en aprender es
66
+ específica para el flujo del comando — donde el agente puede actuar
67
+ sobre el WARN antes de continuar.
68
+
69
+ NO crear un hook nuevo dedicado a aprender — duplicaría el rol del
70
+ existente. La invocación síncrona en el Paso 6.5 es suficiente.
71
+
72
+ ## Reglas duras
73
+
74
+ - `/swl:aprender` Paso 6.5 es OBLIGATORIO si se aplicó Tipo A.
75
+ - `/swl:adoptar-proyecto` Paso 8 debe ejecutar el auditor tras
76
+ generar/modificar CLAUDE.md.
77
+ - `/swl:nuevo-proyecto` Paso 6 debe ejecutar el auditor tras generar
78
+ CLAUDE.md inicial.
79
+ - `/swl:claudemd init-project` debe ejecutar el auditor sobre el
80
+ archivo recién generado.
81
+
82
+ Cualquier comando futuro que escriba a CLAUDE.md DEBE seguir este
83
+ contrato.
@@ -0,0 +1,85 @@
1
+ # Dimensión 8 — Detección de duplicación de reglas globales
2
+
3
+ ## Por qué existe
4
+
5
+ Las reglas en `~/.claude/rules/` se cargan automáticamente en cada
6
+ sesión SWL. Si un proyecto duplica inline el contenido de esas reglas
7
+ en su `CLAUDE.md`, ocurren tres patologías:
8
+
9
+ 1. **Bloat acumulativo**: 7-15 líneas por regla duplicada × N proyectos
10
+ = inflación silenciosa que rompe el umbral de 200 LOC.
11
+ 2. **Drift al actualizar la global**: si la regla global cambia, las
12
+ copias en cada CLAUDE.md quedan obsoletas sin alerta.
13
+ 3. **Erosión del contrato canónico**: cada CLAUDE.md re-deriva el
14
+ principio con palabras propias, generando 4 paráfrasis distintas
15
+ del mismo contenido.
16
+
17
+ La regla `reglas/sin-duplicacion-reglas-globales.md` (v1.7.0) prohíbe
18
+ esta duplicación. Esta dimensión del auditor la detecta.
19
+
20
+ ## Catálogo declarativo
21
+
22
+ `scripts/lib/reglas-globales-conocidas.json` lista las reglas globales
23
+ conocidas con sus patrones de detección. Estructura por entrada:
24
+
25
+ ```json
26
+ {
27
+ "id": "idioma-espanol-mexico",
28
+ "regla_global": "brevedad-output.md",
29
+ "seccion_canonica": "Idioma obligatorio: español de México",
30
+ "referencia_canonica": "@~/.claude/rules/brevedad-output.md § Idioma obligatorio",
31
+ "patrones": ["\\bespañol\\s+de\\s+M[ée]xico\\b", "..."],
32
+ "min_matches": 2,
33
+ "remediacion_sugerida": "Eliminar el bloque local..."
34
+ }
35
+ ```
36
+
37
+ Reglas incluidas en v1.7.0:
38
+
39
+ - `idioma-espanol-mexico` (brevedad-output.md § Idioma)
40
+ - `brevedad-sin-aiisms` (brevedad-output.md § Brevedad)
41
+ - `git-sin-coautores` (git-coauthor.md)
42
+ - `arreglar-al-detectar` (arreglar-al-detectar.md)
43
+ - `debatir-antes-de-aceptar` (debatir-antes-de-aceptar.md)
44
+ - `usar-context7` (usar-context7.md)
45
+
46
+ ## Cuándo NO se evalúa
47
+
48
+ - **User-level** (`~/.claude/CLAUDE.md`): ahí sí pueden declararse
49
+ preferencias personales que parafrasean reglas globales. La opción
50
+ `esUserLevel: true` skipea la evaluación.
51
+ - **Archivos < 20 LOC**: CLAUDE.md mínimos no acumulan duplicaciones
52
+ con suficiente densidad para evaluar.
53
+
54
+ ## Capa async — hook
55
+
56
+ `hooks/claudemd-duplicacion-detector.js` (PostToolUse, no bloquea)
57
+ ejecuta el detector tras cualquier Write/Edit a CLAUDE.md y emite
58
+ nudge a `.planning/evolution/nudges.jsonl` con `kind:
59
+ claudemd-duplicacion-reglas`. Opt-out: `SWL_CLAUDEMD_DUPLICACION=0`.
60
+
61
+ ## Cómo refactorizar duplicaciones detectadas
62
+
63
+ Tres opciones para cada hallazgo:
64
+
65
+ 1. **Eliminar** (default recomendado): el bloque solo repite la regla
66
+ global, eliminarlo no pierde información.
67
+ 2. **Convertir a matiz local** (≤3 líneas): si el bloque agrega valor
68
+ local genuino, reescribirlo corto referenciando la regla global:
69
+ ```markdown
70
+ Convenciones locales: identificadores técnicos en inglés (rutas,
71
+ comandos). Ver @~/.claude/rules/brevedad-output.md.
72
+ ```
73
+ 3. **Documentar override explícito** (raro): si el proyecto contradice
74
+ la regla global por requerimiento documentable:
75
+ ```markdown
76
+ Override de @~/.claude/rules/brevedad-output.md § Brevedad: este
77
+ proyecto exige docstrings extendidos por compliance regulatorio.
78
+ ```
79
+
80
+ ## Anti-patrón: "lo dejo por claridad"
81
+
82
+ La regla global YA es visible — se carga automáticamente. Duplicarla
83
+ no aumenta su prioridad ni su claridad; solo crea deuda. Si el WARN
84
+ del auditor incomoda, la respuesta correcta es **resolver la
85
+ duplicación**, no aceptar el WARN.
@@ -0,0 +1,94 @@
1
+ # Plantillas literales de init-project / init-user
2
+
3
+ Bloques exactos que `/swl:claudemd init-project` inserta en el CLAUDE.md
4
+ generado. Este recurso es la fuente de verdad de los templates — el SKILL.md
5
+ los referencia sin duplicarlos.
6
+
7
+ ---
8
+
9
+ ## Bloque obligatorio SWL-tooling (init-project)
10
+
11
+ Toda generación nueva en un proyecto destino incluye esta sub-sección literal
12
+ (empareja el CLAUDE.md con la sección swl-ses del `.gitignore` — gestionada por
13
+ `scripts/lib/gitignore-manifest.js`). Sin ella, un compañero del equipo no sabe
14
+ qué archivos son del proyecto y cuáles son runtime de la herramienta:
15
+
16
+ ```markdown
17
+ ## SWL es tooling de desarrollo (frontera de versionado)
18
+
19
+ Este proyecto usa [swl-ses](https://www.npmjs.com/package/@saulwade/swl-ses) como
20
+ herramienta de desarrollo. Lo que SWL instala y genera **no forma parte del
21
+ proyecto** y está en `.gitignore` (sección `# [swl-ses:inicio]`): `.claude/`
22
+ (framework), `hooks/`, `instintos/`, `usage.db` y el runtime bajo `.planning/`
23
+ (APRENDIZAJES, métricas, sesiones, traces, evolution, loops, locks, feature-list,
24
+ caches del grafo, etc.).
25
+
26
+ SÍ se versionan (los edita el equipo): `CLAUDE.md`, `.claude/settings.json`, el
27
+ manifest `.swl-ses`, y las plantillas de `.planning/` — `PROYECTO.md`,
28
+ `REQUISITOS.md`, `HOJA-RUTA.md`, `ESTADO.md`, `research/`, `adrs/`, y los
29
+ `fases/0N-{CONTEXTO,PLAN,RESUMEN,VERIFICACION}.md`.
30
+
31
+ Reinstalar/actualizar el tooling: `npx -y @saulwade/swl-ses@latest install`.
32
+ ```
33
+
34
+ Justificación: la lista de qué se ignora vs qué se commitea es la **fuente de
35
+ verdad** de `gitignore-manifest.js`. Replicarla en prosa en el CLAUDE.md del
36
+ proyecto cierra el gap de "el .gitignore lo sabe pero el humano que lee CLAUDE.md
37
+ no". Mantener ambas en sync: si `ENTRADAS_BASE` cambia, este bloque se actualiza.
38
+
39
+ ---
40
+
41
+ ## Bloque obligatorio Karpathy (init-project)
42
+
43
+ Toda generación nueva incluye esta sub-sección literal en "Reglas de
44
+ máxima prioridad":
45
+
46
+ ```markdown
47
+ ### Cuatro principios de implementación (Karpathy)
48
+ Antes de implementar, refactorizar o corregir bugs: (1) **pensar antes de codificar** (no asumir en silencio), (2) **simplicidad primero** (sin abstracciones especulativas), (3) **cambios quirúrgicos** (leer archivo completo antes de editar, no refactor de oportunidad), (4) **ejecución orientada a metas** (criterios verificables, test que reproduce bugs antes del fix). Detalle + 9 ejemplos MAL→BIEN: `Skill("prevencion-sobreingenieria")` + `recursos/EXAMPLES.md`.
49
+ ```
50
+
51
+ Justificación: el skill `prevencion-sobreingenieria` y su `recursos/EXAMPLES.md`
52
+ se distribuyen con cada instalación SWL, así que la referencia siempre resuelve.
53
+ La sub-sección compacta (5 líneas) ataca los gaps cognitivos más frecuentes
54
+ de cualquier proyecto sin agregar opinión específica.
55
+
56
+ ---
57
+
58
+ ## Check Karpathy en audit
59
+
60
+ `scripts/auditar-claudemd.js` debe verificar (search regex case-insensitive):
61
+
62
+ - `/karpathy/i`
63
+ - `/cuatro principios/i` o `/4 principios/i`
64
+ - `/prevencion-sobreingenieria/`
65
+ - `/Skill\(["'`]prevencion-sobreingenieria["'`]\)/`
66
+
67
+ Si NO encuentra ninguna AND el archivo tiene >50 LOC AND es project-level
68
+ (no `~/.claude/CLAUDE.md`): emitir hallazgo WARN con mensaje:
69
+
70
+ ```
71
+ CLAUDE.md no menciona los cuatro principios Karpathy ni el skill
72
+ prevencion-sobreingenieria. Considerar agregar la sub-sección compacta
73
+ (ver /swl:claudemd init-project § Bloque obligatorio Karpathy).
74
+ ```
75
+
76
+ Esta dimensión es WARN, no ERROR — guía sin imponer. CLAUDE.md user-level
77
+ (`~/.claude/`) NO se evalúa contra este check.
78
+
79
+ ---
80
+
81
+ ## Secciones canónicas: project-level vs user-level (init-user)
82
+
83
+ | Sección | Project-level | User-level |
84
+ |---|---|---|
85
+ | Stack | Sí — del proyecto | No (varía por proyecto) |
86
+ | Comandos | Sí — del proyecto | No |
87
+ | Code style | Sí — convenciones del equipo | Sí — preferencias personales (indent, naming favorito) |
88
+ | Conventions | Sí — del proyecto | No |
89
+ | Mi rol y stack preferido | No | Sí |
90
+ | Estilo de comunicación | No | Sí |
91
+ | Patrones que aplico siempre | No | Sí — meta-preferencias cross-project |
92
+
93
+ El template completo de user-level vive en el comando `/swl:claudemd`
94
+ sección `init-user`.
@@ -11,8 +11,8 @@ user-invocable: false
11
11
  version: "1.0.0"
12
12
  herramientasPermitidas: [Read, Bash, Glob]
13
13
  exclusiones:
14
- - "No cargar para ver métricas de la sesión actual en tiempo real — usar `/swl:metricas`; este skill requiere datos históricos de múltiples sesiones en `~/.claude/projects/**/*.jsonl`."
15
- - "No cargar si `claude-usage` no está disponible y el objetivo es solo verificar el estado del sistema SWL — usar `/swl:salud` que no depende de la instalación de la herramienta vendor."
14
+ - "No cargar para ver métricas de la sesión actual en tiempo real — usar `/swl:status metricas`; este skill requiere datos históricos de múltiples sesiones en `~/.claude/projects/**/*.jsonl`."
15
+ - "No cargar si `claude-usage` no está disponible y el objetivo es solo verificar el estado del sistema SWL — usar `/swl:status salud` que no depende de la instalación de la herramienta vendor."
16
16
  - "No cargar para diagnosticar por qué un agente falló — este skill muestra métricas de tokens y costos, no trazas de error de agentes; para eso usar `tracing-processor` o revisar `.planning/traces/`."
17
17
  - "No cargar en entornos CI/headless donde no hay browser para abrir el dashboard web — usar el subcomando `stats` o `today` que salen en terminal sin servidor HTTP."
18
18
  evolvable: true # default para skill estandar
@@ -42,7 +42,7 @@ Si Python < 3.8 o no está disponible:
42
42
  ```
43
43
  ⚠ swl-dashboard requiere Python 3.8+. No se encontró intérprete compatible.
44
44
  Instala Python desde https://python.org o usa: winget install Python.Python.3
45
- Alternativa: usa /swl:metricas para métricas de la sesión actual.
45
+ Alternativa: usa /swl:status metricas para métricas de la sesión actual.
46
46
  ```
47
47
  Detener y mostrar el mensaje anterior.
48
48
 
@@ -103,7 +103,7 @@ Si el resultado es `MISSING` después de los cuatro intentos:
103
103
  Esto copia claude-usage a ~/.claude/scripts/vendor/claude-usage/ y lo hace
104
104
  disponible en todos los proyectos automáticamente.
105
105
 
106
- Alternativa inmediata: /swl:metricas para métricas de la sesión actual.
106
+ Alternativa inmediata: /swl:status metricas para métricas de la sesión actual.
107
107
  ```
108
108
 
109
109
  > **Nota**: guardar `CLI_PY` y el directorio padre `VENDOR_DIR=$(dirname "$CLI_PY")` para usarlos en el Paso 2.
@@ -155,7 +155,7 @@ echo "✓ Base de datos actualizada: ~/.claude/usage.db"
155
155
 
156
156
  `cli.py` detecta automáticamente el primer puerto libre (8888 → 9090 → 9191 …).
157
157
  **Nota:** 8080 está excluido intencionalmente — suele estar ocupado por Postgres, IIS u otros servicios.
158
- Si el usuario especificó un puerto con `/swl:dashboard --port 9090`, pasarlo explícitamente.
158
+ Si el usuario especificó un puerto con `/swl:status dashboard --port 9090`, pasarlo explícitamente.
159
159
 
160
160
  **IMPORTANTE:** No verificar disponibilidad con `curl http://localhost:8080` — ese puerto puede estar
161
161
  ocupado por otro servicio y devolvería un falso positivo. Usar el flujo siguiente:
@@ -331,7 +331,7 @@ const w = obtenerWidget('health-score');
331
331
 
332
332
  ### Integración futura en la salida del comando
333
333
 
334
- Al generar la salida de `/swl:dashboard`, iterar el layout default del modo detectado
334
+ Al generar la salida de `/swl:status dashboard`, iterar el layout default del modo detectado
335
335
  y renderizar cada widget con su categoría como sección:
336
336
 
337
337
  ```javascript
@@ -350,15 +350,15 @@ comando. El catálogo solo define la estructura — no accede a fuentes de datos
350
350
  | Componente SWL | Scope | Complemento |
351
351
  |---------------|-------|-------------|
352
352
  | `tracking-costos.js` (hook) | Sesión actual, tiempo real | swl-dashboard añade histórico multi-sesión |
353
- | `/swl:metricas` (comando) | Sesión actual | swl-dashboard añade visualización gráfica |
353
+ | `/swl:status metricas` (comando) | Sesión actual | swl-dashboard añade visualización gráfica |
354
354
  | `.planning/METRICAS.md` | Persistencia por proyecto | swl-dashboard agrega consulta SQL cross-project |
355
355
  | `resumen-sesion.js` (hook) | Resumen inline al Stop | swl-dashboard añade análisis post-hoc detallado |
356
356
  | `guardrail-metrics.js` (lib) | Sesión actual | swl-dashboard `guardrails` muestra activaciones/bloqueos por hook |
357
357
 
358
358
  ## Cuándo NO cargar
359
359
 
360
- - El usuario quiere ver métricas de la sesión activa actual — usar `/swl:metricas`; este skill procesa el historial persisitido en `~/.claude/projects/`, no el stream en tiempo real de la sesión.
361
- - `claude-usage` no está instalado y el objetivo es diagnosticar la salud del sistema SWL — usar `/swl:salud`; no tiene sentido cargar este skill si la única acción posible sería indicar que hay que instalar la herramienta vendor.
360
+ - El usuario quiere ver métricas de la sesión activa actual — usar `/swl:status metricas`; este skill procesa el historial persisitido en `~/.claude/projects/`, no el stream en tiempo real de la sesión.
361
+ - `claude-usage` no está instalado y el objetivo es diagnosticar la salud del sistema SWL — usar `/swl:status salud`; no tiene sentido cargar este skill si la única acción posible sería indicar que hay que instalar la herramienta vendor.
362
362
  - Se ejecuta en un entorno CI/headless o en un servidor remoto sin browser — los subcomandos `today` y `stats` funcionan en terminal, pero si el objetivo era el dashboard web interactivo, ese entorno no lo soporta.
363
363
  - Se busca trazar el motivo de fallo de un agente específico — este skill visualiza consumo de tokens y costos; los detalles de error de agente están en `.planning/traces/` y se analizan con `tracing-processor`.
364
364
 
@@ -213,7 +213,7 @@ Invocar automáticamente este skill en estos momentos:
213
213
 
214
214
  | Componente | Scope | Complemento |
215
215
  |------------------|--------------------------------|--------------------------------------|
216
- | `/swl:metricas` | Costo/tokens de sesión actual | revisar-impacto agrega análisis estructural |
216
+ | `/swl:status metricas` | Costo/tokens de sesión actual | revisar-impacto agrega análisis estructural |
217
217
  | `calidad-pre-commit.js` | Lint + secretos pre-commit | revisar-impacto agrega risk score semántico |
218
218
  | `auto-evolucion-swl` | Mejora de agentes | revisar-impacto prioriza por comunidades |
219
219
  | `run-log.js` | Observabilidad de sesión | revisar-impacto agrega contexto de código |