@saulwade/swl-ses 1.3.3 → 1.3.5

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 (102) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +1 -1
  3. package/bin/swl-mcp-server.js +187 -187
  4. package/bin/swl-ses.js +4 -62
  5. package/comandos/swl/.evolved.json +22 -22
  6. package/comandos/swl/adoptar-proyecto.md +207 -207
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  9. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  10. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  11. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  12. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  13. package/habilidades/eval-framework/SKILL.md +212 -212
  14. package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
  15. package/habilidades/harness-claude-code/SKILL.md +299 -299
  16. package/habilidades/infra-github-actions/SKILL.md +166 -166
  17. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  18. package/habilidades/manejo-errores/.evolved.json +8 -8
  19. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  20. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  21. package/habilidades/patrones-python/SKILL.md +229 -229
  22. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  23. package/habilidades/planear-fase/SKILL.md +319 -319
  24. package/habilidades/release-semver/.evolved.json +8 -8
  25. package/habilidades/swl-claudemd/SKILL.md +220 -220
  26. package/habilidades/testing-python/SKILL.md +340 -340
  27. package/hooks/claudemd-bloat-detector.js +161 -161
  28. package/hooks/extraccion-aprendizajes.js +43 -12
  29. package/hooks/lib/agent-routing.js +107 -107
  30. package/hooks/lib/auto-consolidator.js +335 -335
  31. package/hooks/lib/error-classifier.js +308 -308
  32. package/hooks/lib/merkle-audit.js +96 -96
  33. package/hooks/lib/provenance-tracker.js +191 -191
  34. package/hooks/lib/rate-limit-tracker.js +253 -253
  35. package/hooks/lib/resource-quota.js +122 -122
  36. package/hooks/lib/retry-jitter.js +165 -165
  37. package/hooks/lib/skill-auditor.js +588 -588
  38. package/hooks/lib/sync-status.js +228 -228
  39. package/hooks/lib/taint-tracker.js +107 -107
  40. package/hooks/lib/text-similarity.js +241 -241
  41. package/hooks/lib/toon-compressor.js +245 -245
  42. package/hooks/registro-turnos.js +209 -209
  43. package/hooks/sugerir-regenerar-inventario.js +170 -170
  44. package/hooks/validar-formato-post-subagente.js +140 -140
  45. package/hooks/validar-memoria-hook.js +218 -218
  46. package/instintos/prompt-appendices.yaml +57 -57
  47. package/manifiestos/agent-output-schemas.json +57 -57
  48. package/manifiestos/skills-lock.json +27 -27
  49. package/package.json +1 -1
  50. package/plantillas/auditor-veto-template.md +105 -105
  51. package/plantillas/github-workflows/README.md +47 -47
  52. package/plantillas/github-workflows/release-please.yml +44 -44
  53. package/plantillas/github-workflows/swl-ci.yml +107 -107
  54. package/plantillas/github-workflows/swl-security.yml +51 -51
  55. package/plugin.json +1 -1
  56. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  57. package/reglas/arreglar-al-detectar.md +147 -147
  58. package/reglas/fragmentos-compartidos.md +152 -152
  59. package/reglas/harness-claude-code.md +213 -213
  60. package/reglas/usar-context7.md +226 -226
  61. package/schemas/diary-entry.schema.json +80 -80
  62. package/scripts/benchmark-memoria.js +167 -167
  63. package/scripts/configurar-branch-protection.js +418 -418
  64. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  65. package/scripts/doctor.js +77 -3
  66. package/scripts/field-report.js +199 -199
  67. package/scripts/generar-checklists-consolidados.js +273 -273
  68. package/scripts/generar-inventario.js +420 -420
  69. package/scripts/generar-matriz-lenguajes.js +271 -271
  70. package/scripts/instalador.js +38 -1
  71. package/scripts/lib/artefactos-python.js +43 -43
  72. package/scripts/lib/benchmark-metrics.js +160 -160
  73. package/scripts/lib/budget-enforcer.js +252 -252
  74. package/scripts/lib/configurar-ci.js +380 -380
  75. package/scripts/lib/contadores-inventario.js +217 -217
  76. package/scripts/lib/detectar-stack-detallado.js +307 -307
  77. package/scripts/lib/diary-entry.js +234 -234
  78. package/scripts/lib/eval-metrics-store.js +218 -218
  79. package/scripts/lib/eval-quality.js +171 -171
  80. package/scripts/lib/eval-schemas.js +144 -144
  81. package/scripts/lib/eval-self-correct.js +106 -106
  82. package/scripts/lib/eval-validator.js +185 -185
  83. package/scripts/lib/jaccard-similarity.js +98 -98
  84. package/scripts/lib/longmemeval-runner.js +125 -125
  85. package/scripts/lib/npm-version.js +261 -261
  86. package/scripts/lib/paquetes-conocidos.js +50 -50
  87. package/scripts/lib/parsear-opciones.js +136 -0
  88. package/scripts/lib/prompt-builder.js +264 -264
  89. package/scripts/lib/rrf-fusion.js +175 -175
  90. package/scripts/lib/scoring-instintos.js +277 -277
  91. package/scripts/lib/semantic-search.js +252 -252
  92. package/scripts/lib/transformadores/claude.js +200 -200
  93. package/scripts/limpiar-artefactos-python.js +131 -131
  94. package/scripts/mcp-server/README.md +128 -128
  95. package/scripts/mcp-server/handlers.js +206 -206
  96. package/scripts/migrar-csv-a-array.js +168 -168
  97. package/scripts/migrar-fase-dominio.js +201 -201
  98. package/scripts/publicar.js +511 -511
  99. package/scripts/run-eval.js +141 -141
  100. package/scripts/validar-manifest.js +195 -195
  101. package/scripts/validar-userland-vacio.js +110 -110
  102. package/scripts/verificar-release.js +5 -1
@@ -1,220 +1,220 @@
1
- ---
2
- name: swl-claudemd
3
- description: Tratamiento profesional de CLAUDE.md según best practices Anthropic (ADR-0016). Cubre auditoría (líneas totales, bullets gigantes, secciones canónicas, @references, placeholders), refactor (extracción a archivos referenciados con @), generación de templates (init-user para preferencias personales transversales en ~/.claude/CLAUDE.md, init-project para CLAUDE.md raíz del proyecto detectando stack). Cargar cuando se invoque /swl:claudemd o cuando el hook claudemd-bloat-detector sugiera intervención.
4
- version: "1.0.0"
5
- herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
6
- exclusiones:
7
- - "No cargar para editar reglas globales en ~/.claude/rules/ — usar Edit directo."
8
- - "No cargar para crear ADRs — usar habilidades/doc-coauthoring o Write directo."
9
- - "No cargar para validar otros archivos (.md de docs, READMEs) — solo CLAUDE.md tiene contrato canónico."
10
- - "No cargar para generar el bloque del installer en CLAUDE.md de proyectos destino — eso lo hace scripts/lib/transformadores/claude.js."
11
- evolvable: true
12
- ---
13
-
14
- # Habilidad: Tratamiento profesional de CLAUDE.md
15
-
16
- ## Propósito
17
-
18
- Aplicar las cinco recomendaciones del video oficial Anthropic
19
- *"The CLAUDE.md file"* (`temp/YouTube · O0FGCxkHM-U.md`) como mecanismo
20
- verificable y mantenible:
21
-
22
- 1. **Compacto** — empieza sin uno, agrega solo lo que tengas que corregir
23
- 2. **Stack arriba** — lenguaje, framework, ORM, BD
24
- 3. **Commands** — cómo correr dev, tests, lint, build
25
- 4. **Code style** — convenciones de indentación, exports, nombrado
26
- 5. **Conventions** — dónde van las cosas, qué patrones preferir
27
-
28
- Más dos prácticas auxiliares del video:
29
-
30
- - **`@filepath`** para referenciar docs en lugar de duplicar contenido
31
- - **"Ask Claude to save to memory"** — el archivo crece con correcciones
32
- explícitas, no por adelantar reglas hipotéticas
33
-
34
- ## Cuándo cargar
35
-
36
- - El usuario invoca `/swl:claudemd [audit|check|refactor|init-user|init-project]`
37
- - El hook `claudemd-bloat-detector` emite nudge sugiriendo `/swl:claudemd refactor`
38
- - El usuario pregunta "¿está bien mi CLAUDE.md?" o "¿cómo mejoro mi CLAUDE.md?"
39
- - Se está generando un proyecto nuevo y se necesita CLAUDE.md raíz
40
- - Se está cambiando de máquina y se necesita transportar `~/.claude/CLAUDE.md`
41
-
42
- ## Cuándo NO cargar
43
-
44
- - El usuario quiere editar `~/.claude/rules/*.md` (reglas globales) — usar Edit directo
45
- - El usuario quiere validar otros `.md` (READMEs, docs/) — no aplica el contrato canónico de CLAUDE.md
46
- - El usuario quiere generar el bloque del installer — eso lo hace `scripts/lib/transformadores/claude.js`
47
- - El usuario quiere crear un ADR — usar `Skill("doc-coauthoring")` o Write directo
48
-
49
- ---
50
-
51
- ## Subcomando: audit
52
-
53
- Ejecuta el auditor determinista:
54
-
55
- ```bash
56
- node scripts/auditar-claudemd.js
57
- node scripts/auditar-claudemd.js --json # para parsing
58
- node scripts/auditar-claudemd.js --strict # exit 1 si WARN
59
- ```
60
-
61
- El auditor verifica seis dimensiones:
62
-
63
- | Dimensión | Regla | Severidad |
64
- |---|---|---|
65
- | Existencia | Archivo presente en `./CLAUDE.md` o `./.claude/CLAUDE.md` | ERROR si ausente |
66
- | Tamaño total | Líneas ≤ `SWL_CLAUDEMD_MAX_LINES` (default 200) | WARN |
67
- | Bullets monolíticos | Cada bullet/párrafo ≤ `SWL_CLAUDEMD_MAX_BULLET_CHARS` (default 1000). Tablas y bloques de código se ignoran | WARN |
68
- | Secciones canónicas | Stack, Comandos, Code style, Conventions presentes | WARN |
69
- | @references | Archivos >80 líneas usan al menos un `@docs/...md` | WARN |
70
- | Placeholders | `[TBD]`, `[TODO]`, `[COMPLETAR]` | ERROR |
71
-
72
- Veredicto final: ERROR → WARN → OK (el más severo gana).
73
-
74
- ### Cómo interpretar los resultados
75
-
76
- - **OK**: el archivo cumple. No hay acción requerida.
77
- - **WARN líneas**: el archivo creció demasiado. Ejecuta `refactor` para
78
- identificar candidatos a extracción.
79
- - **WARN bullet gigante**: un bullet/párrafo es ilegible. Convertirlo a
80
- tabla, lista jerárquica, o extraer su contenido a archivo separado.
81
- - **WARN secciones ausentes**: las secciones canónicas Anthropic no
82
- están. Si el archivo es proyecto greenfield, agregarlas. Si es CLAUDE.md
83
- de overview/meta-sistema, considerar si aplica el contrato.
84
- - **WARN sin @references**: el archivo es grande pero no enlaza nada
85
- externo. Identificar contenido duplicable a `@docs/`, `@.planning/`, etc.
86
- - **ERROR placeholders**: bloqueador. Resolver antes de commitear.
87
-
88
- ---
89
-
90
- ## Subcomando: refactor
91
-
92
- **No modifica archivos** — propone diff. El usuario decide aplicar.
93
-
94
- ### Algoritmo
95
-
96
- 1. Lee `CLAUDE.md` actual.
97
- 2. Para cada bullet/párrafo > `MAX_BULLET_CHARS`:
98
- - Si contiene **una sola lista de items homogéneos** → propone tabla
99
- - Si contiene **definiciones técnicas extensas** → propone extracción a `docs/[tema].md`
100
- - Si contiene **enumeración de variables/configuración** → propone extracción a `docs/variables-[scope].md`
101
- 3. Para cada sección > 50 líneas:
102
- - Identifica el "tema" del header
103
- - Propone `docs/[tema-kebab].md` y reemplazo en CLAUDE.md por:
104
- `Para detalles ver @docs/[tema].md`
105
- 4. Imprime diff propuesto en formato unified.
106
-
107
- ### Patrones de extracción típicos
108
-
109
- | Si la sección/bullet contiene… | Mover a… |
110
- |---|---|
111
- | Variables de entorno opt-in | `docs/variables-entorno.md` |
112
- | Reglas de gobernanza extensas | `docs/gobernanza.md` |
113
- | Catálogo completo de comandos | `COMANDOS.md` (referenciar) |
114
- | Mapa de propagación detallado | `docs/mapa-propagacion.md` |
115
- | Convenciones por capa | `docs/convenciones-{capa}.md` |
116
- | Lista de dependencias / stack histórico | `docs/stack-historico.md` |
117
- | Decisiones puntuales antiguas | ADR en `.planning/adrs/` |
118
-
119
- ### Anti-patrones de refactor
120
-
121
- - **NO extraer reglas de máxima prioridad** — esas DEBEN estar en CLAUDE.md raíz
122
- - **NO extraer la sección Stack** — es la primera info que Claude necesita
123
- - **NO extraer la sección Commands** — son acción inmediata, deben estar visibles
124
- - **NO crear más de 3 archivos `@`-referenciados nuevos en un solo refactor** — fragmentar demasiado dispersa el contexto
125
-
126
- ---
127
-
128
- ## Subcomando: init-user
129
-
130
- Genera `~/.claude/CLAUDE.md` (en Windows: `%USERPROFILE%\.claude\CLAUDE.md`)
131
- con template de preferencias personales si NO existe. Si existe, sugiere
132
- secciones faltantes pero NO sobreescribe.
133
-
134
- ### Pasos
135
-
136
- 1. Detectar la ruta:
137
- - Linux/macOS: `$HOME/.claude/CLAUDE.md`
138
- - Windows: `$env:USERPROFILE/.claude/CLAUDE.md` (en PowerShell)
139
- 2. Si existe → leer, identificar secciones faltantes, sugerir patches
140
- 3. Si no existe → crear directorio `~/.claude/` si falta, escribir template
141
-
142
- ### Template
143
-
144
- Ver template completo en el comando `/swl:claudemd` sección `init-user`.
145
-
146
- Las secciones canónicas para user-level son DISTINTAS de project-level:
147
-
148
- | Sección | Project-level | User-level |
149
- |---|---|---|
150
- | Stack | Sí — del proyecto | No (varía por proyecto) |
151
- | Comandos | Sí — del proyecto | No |
152
- | Code style | Sí — convenciones del equipo | Sí — preferencias personales (indent, naming favorito) |
153
- | Conventions | Sí — del proyecto | No |
154
- | Mi rol y stack preferido | No | Sí |
155
- | Estilo de comunicación | No | Sí |
156
- | Patrones que aplico siempre | No | Sí — meta-preferencias cross-project |
157
-
158
- ---
159
-
160
- ## Subcomando: init-project
161
-
162
- Genera `./CLAUDE.md` raíz del proyecto detectando stack actual.
163
-
164
- ### Pasos
165
-
166
- 1. Verificar que `./CLAUDE.md` NO exista. Si existe → mensaje "ya existe,
167
- considera `/swl:claudemd refactor`" y salir sin tocar.
168
- 2. Ejecutar `detectarStackDetallado(process.cwd())` (de
169
- `scripts/lib/detectar-stack-detallado.js`).
170
- 3. Generar archivo con secciones pobladas:
171
- - **Stack**: lenguaje + framework + ORM + package manager detectados
172
- - **Comandos**: npm scripts detectados o comandos típicos por lenguaje
173
- - **Code style**: placeholders explícitos (`<!-- pendiente: definir convención de X -->`)
174
- - **Conventions**: placeholders explícitos
175
- - **@references**: enlazar a `.planning/PROYECTO.md`, `README.md`,
176
- `CONTRIBUTING.md` solo si existen
177
- 4. Imprimir mensaje con próximo paso: "ejecuta `/swl:claudemd audit`
178
- para verificar".
179
-
180
- ---
181
-
182
- ## Gotchas / Errores comunes no obvios
183
-
184
- - **Marcar tablas como bullets gigantes**: el detector debe excluir
185
- líneas que empiezan con `|` (tablas Markdown). Sin ese filtro genera
186
- falsos positivos en cualquier CLAUDE.md con tablas. Implementado en
187
- `scripts/auditar-claudemd.js` función `detectarBulletsGigantes`.
188
- - **Marcar bloques de código como bullets gigantes**: igual que tablas
189
- — el detector entra en modo "code fence" al ver ` ``` ` y no cuenta
190
- esas líneas. Sin ese filtro un script Bash de 50 líneas en CLAUDE.md
191
- rompe la auditoría.
192
- - **`refactor` que termina escribiendo el archivo**: el subcomando
193
- refactor SOLO debe imprimir diff. Si modifica el archivo viola el
194
- principio "el usuario decide". Cualquier modificación destructiva debe
195
- ser explícita y confirmada por el usuario.
196
- - **`init-project` sobreescribiendo CLAUDE.md existente**: el usuario
197
- puede tener un CLAUDE.md curado con valor irrecuperable. NUNCA
198
- sobreescribir — sugerir refactor.
199
- - **Templates con `[TBD]` que después fallan auditoría**: los templates
200
- generados por `init-user` y `init-project` usan `<!-- pendiente: ... -->`
201
- HTML comments en lugar de `[TBD]` para que el auditor no los marque
202
- como ERROR placeholders. Comments HTML son ignorados por el regex.
203
- - **Aplicar el contrato canónico a CLAUDE.md de subdirectorios**: si el
204
- proyecto adopta jerarquía (ADR-0007), los CLAUDE.md de subdirectorios
205
- pueden NO tener todas las secciones canónicas (porque heredan del root).
206
- Por ahora el auditor aplica el contrato uniforme; si el ADR-0007 se
207
- acepta, el auditor debe distinguir root vs subdirectorio.
208
-
209
- ## Señales de alerta
210
-
211
- Detente y escala si:
212
-
213
- - El usuario pide `init-project` en un directorio que ya tiene CLAUDE.md
214
- con >100 líneas de contenido custom (riesgo: pérdida de información)
215
- - `audit` reporta WARN líneas pero el contenido es legítimamente
216
- necesario (ej. listas grandes de comandos sin posibilidad de extracción
217
- útil) — sugerir ajustar `SWL_CLAUDEMD_MAX_LINES`, no extraer por extraer
218
- - El usuario pide `refactor` y propone extracciones que dispersarían
219
- contexto crítico (ej. mover "Reglas de máxima prioridad") — rechazar
220
- con explicación del anti-patrón
1
+ ---
2
+ name: swl-claudemd
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.1"
5
+ herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
6
+ exclusiones:
7
+ - "No cargar para editar reglas globales en ~/.claude/rules/ — usar Edit directo."
8
+ - "No cargar para crear ADRs — usar habilidades/doc-coauthoring o Write directo."
9
+ - "No cargar para validar otros archivos (.md de docs, READMEs) — solo CLAUDE.md tiene contrato canónico."
10
+ - "No cargar para generar el bloque del installer en CLAUDE.md de proyectos destino — eso lo hace scripts/lib/transformadores/claude.js."
11
+ evolvable: true
12
+ ---
13
+
14
+ # Habilidad: Tratamiento profesional de CLAUDE.md
15
+
16
+ ## Propósito
17
+
18
+ Aplicar las cinco recomendaciones del video oficial Anthropic
19
+ *"The CLAUDE.md file"* (`temp/YouTube · O0FGCxkHM-U.md`) como mecanismo
20
+ verificable y mantenible:
21
+
22
+ 1. **Compacto** — empieza sin uno, agrega solo lo que tengas que corregir
23
+ 2. **Stack arriba** — lenguaje, framework, ORM, BD
24
+ 3. **Commands** — cómo correr dev, tests, lint, build
25
+ 4. **Code style** — convenciones de indentación, exports, nombrado
26
+ 5. **Conventions** — dónde van las cosas, qué patrones preferir
27
+
28
+ Más dos prácticas auxiliares del video:
29
+
30
+ - **`@filepath`** para referenciar docs en lugar de duplicar contenido
31
+ - **"Ask Claude to save to memory"** — el archivo crece con correcciones
32
+ explícitas, no por adelantar reglas hipotéticas
33
+
34
+ ## Cuándo cargar
35
+
36
+ - El usuario invoca `/swl:claudemd [audit|check|refactor|init-user|init-project]`
37
+ - El hook `claudemd-bloat-detector` emite nudge sugiriendo `/swl:claudemd refactor`
38
+ - El usuario pregunta "¿está bien mi CLAUDE.md?" o "¿cómo mejoro mi CLAUDE.md?"
39
+ - Se está generando un proyecto nuevo y se necesita CLAUDE.md raíz
40
+ - Se está cambiando de máquina y se necesita transportar `~/.claude/CLAUDE.md`
41
+
42
+ ## Cuándo NO cargar
43
+
44
+ - El usuario quiere editar `~/.claude/rules/*.md` (reglas globales) — usar Edit directo
45
+ - El usuario quiere validar otros `.md` (READMEs, docs/) — no aplica el contrato canónico de CLAUDE.md
46
+ - El usuario quiere generar el bloque del installer — eso lo hace `scripts/lib/transformadores/claude.js`
47
+ - El usuario quiere crear un ADR — usar `Skill("doc-coauthoring")` o Write directo
48
+
49
+ ---
50
+
51
+ ## Subcomando: audit
52
+
53
+ Ejecuta el auditor determinista:
54
+
55
+ ```bash
56
+ node scripts/auditar-claudemd.js
57
+ node scripts/auditar-claudemd.js --json # para parsing
58
+ node scripts/auditar-claudemd.js --strict # exit 1 si WARN
59
+ ```
60
+
61
+ El auditor verifica seis dimensiones:
62
+
63
+ | Dimensión | Regla | Severidad |
64
+ |---|---|---|
65
+ | Existencia | Archivo presente en `./CLAUDE.md` o `./.claude/CLAUDE.md` | ERROR si ausente |
66
+ | Tamaño total | Líneas ≤ `SWL_CLAUDEMD_MAX_LINES` (default 200) | WARN |
67
+ | Bullets monolíticos | Cada bullet/párrafo ≤ `SWL_CLAUDEMD_MAX_BULLET_CHARS` (default 1000). Tablas y bloques de código se ignoran | WARN |
68
+ | Secciones canónicas | Stack, Comandos, Code style, Conventions presentes | WARN |
69
+ | @references | Archivos >80 líneas usan al menos un `@docs/...md` | WARN |
70
+ | Placeholders | `[TBD]`, `[TODO]`, `[COMPLETAR]` | ERROR |
71
+
72
+ Veredicto final: ERROR → WARN → OK (el más severo gana).
73
+
74
+ ### Cómo interpretar los resultados
75
+
76
+ - **OK**: el archivo cumple. No hay acción requerida.
77
+ - **WARN líneas**: el archivo creció demasiado. Ejecuta `refactor` para
78
+ identificar candidatos a extracción.
79
+ - **WARN bullet gigante**: un bullet/párrafo es ilegible. Convertirlo a
80
+ tabla, lista jerárquica, o extraer su contenido a archivo separado.
81
+ - **WARN secciones ausentes**: las secciones canónicas Anthropic no
82
+ están. Si el archivo es proyecto greenfield, agregarlas. Si es CLAUDE.md
83
+ de overview/meta-sistema, considerar si aplica el contrato.
84
+ - **WARN sin @references**: el archivo es grande pero no enlaza nada
85
+ externo. Identificar contenido duplicable a `@docs/`, `@.planning/`, etc.
86
+ - **ERROR placeholders**: bloqueador. Resolver antes de commitear.
87
+
88
+ ---
89
+
90
+ ## Subcomando: refactor
91
+
92
+ **No modifica archivos** — propone diff. El usuario decide aplicar.
93
+
94
+ ### Algoritmo
95
+
96
+ 1. Lee `CLAUDE.md` actual.
97
+ 2. Para cada bullet/párrafo > `MAX_BULLET_CHARS`:
98
+ - Si contiene **una sola lista de items homogéneos** → propone tabla
99
+ - Si contiene **definiciones técnicas extensas** → propone extracción a `docs/[tema].md`
100
+ - Si contiene **enumeración de variables/configuración** → propone extracción a `docs/variables-[scope].md`
101
+ 3. Para cada sección > 50 líneas:
102
+ - Identifica el "tema" del header
103
+ - Propone `docs/[tema-kebab].md` y reemplazo en CLAUDE.md por:
104
+ `Para detalles ver @docs/[tema].md`
105
+ 4. Imprime diff propuesto en formato unified.
106
+
107
+ ### Patrones de extracción típicos
108
+
109
+ | Si la sección/bullet contiene… | Mover a… |
110
+ |---|---|
111
+ | Variables de entorno opt-in | `docs/variables-entorno.md` |
112
+ | Reglas de gobernanza extensas | `docs/gobernanza.md` |
113
+ | Catálogo completo de comandos | `COMANDOS.md` (referenciar) |
114
+ | Mapa de propagación detallado | `docs/mapa-propagacion.md` |
115
+ | Convenciones por capa | `docs/convenciones-{capa}.md` |
116
+ | Lista de dependencias / stack histórico | `docs/stack-historico.md` |
117
+ | Decisiones puntuales antiguas | ADR en `.planning/adrs/` |
118
+
119
+ ### Anti-patrones de refactor
120
+
121
+ - **NO extraer reglas de máxima prioridad** — esas DEBEN estar en CLAUDE.md raíz
122
+ - **NO extraer la sección Stack** — es la primera info que Claude necesita
123
+ - **NO extraer la sección Commands** — son acción inmediata, deben estar visibles
124
+ - **NO crear más de 3 archivos `@`-referenciados nuevos en un solo refactor** — fragmentar demasiado dispersa el contexto
125
+
126
+ ---
127
+
128
+ ## Subcomando: init-user
129
+
130
+ Genera `~/.claude/CLAUDE.md` (en Windows: `%USERPROFILE%\.claude\CLAUDE.md`)
131
+ con template de preferencias personales si NO existe. Si existe, sugiere
132
+ secciones faltantes pero NO sobreescribe.
133
+
134
+ ### Pasos
135
+
136
+ 1. Detectar la ruta:
137
+ - Linux/macOS: `$HOME/.claude/CLAUDE.md`
138
+ - Windows: `$env:USERPROFILE/.claude/CLAUDE.md` (en PowerShell)
139
+ 2. Si existe → leer, identificar secciones faltantes, sugerir patches
140
+ 3. Si no existe → crear directorio `~/.claude/` si falta, escribir template
141
+
142
+ ### Template
143
+
144
+ Ver template completo en el comando `/swl:claudemd` sección `init-user`.
145
+
146
+ Las secciones canónicas para user-level son DISTINTAS de project-level:
147
+
148
+ | Sección | Project-level | User-level |
149
+ |---|---|---|
150
+ | Stack | Sí — del proyecto | No (varía por proyecto) |
151
+ | Comandos | Sí — del proyecto | No |
152
+ | Code style | Sí — convenciones del equipo | Sí — preferencias personales (indent, naming favorito) |
153
+ | Conventions | Sí — del proyecto | No |
154
+ | Mi rol y stack preferido | No | Sí |
155
+ | Estilo de comunicación | No | Sí |
156
+ | Patrones que aplico siempre | No | Sí — meta-preferencias cross-project |
157
+
158
+ ---
159
+
160
+ ## Subcomando: init-project
161
+
162
+ Genera `./CLAUDE.md` raíz del proyecto detectando stack actual.
163
+
164
+ ### Pasos
165
+
166
+ 1. Verificar que `./CLAUDE.md` NO exista. Si existe → mensaje "ya existe,
167
+ considera `/swl:claudemd refactor`" y salir sin tocar.
168
+ 2. Ejecutar `detectarStackDetallado(process.cwd())` (de
169
+ `scripts/lib/detectar-stack-detallado.js`).
170
+ 3. Generar archivo con secciones pobladas:
171
+ - **Stack**: lenguaje + framework + ORM + package manager detectados
172
+ - **Comandos**: npm scripts detectados o comandos típicos por lenguaje
173
+ - **Code style**: placeholders explícitos (`<!-- pendiente: definir convención de X -->`)
174
+ - **Conventions**: placeholders explícitos
175
+ - **@references**: enlazar a `.planning/PROYECTO.md`, `README.md`,
176
+ `CONTRIBUTING.md` solo si existen
177
+ 4. Imprimir mensaje con próximo paso: "ejecuta `/swl:claudemd audit`
178
+ para verificar".
179
+
180
+ ---
181
+
182
+ ## Gotchas / Errores comunes no obvios
183
+
184
+ - **Marcar tablas como bullets gigantes**: el detector debe excluir
185
+ líneas que empiezan con `|` (tablas Markdown). Sin ese filtro genera
186
+ falsos positivos en cualquier CLAUDE.md con tablas. Implementado en
187
+ `scripts/auditar-claudemd.js` función `detectarBulletsGigantes`.
188
+ - **Marcar bloques de código como bullets gigantes**: igual que tablas
189
+ — el detector entra en modo "code fence" al ver ` ``` ` y no cuenta
190
+ esas líneas. Sin ese filtro un script Bash de 50 líneas en CLAUDE.md
191
+ rompe la auditoría.
192
+ - **`refactor` que termina escribiendo el archivo**: el subcomando
193
+ refactor SOLO debe imprimir diff. Si modifica el archivo viola el
194
+ principio "el usuario decide". Cualquier modificación destructiva debe
195
+ ser explícita y confirmada por el usuario.
196
+ - **`init-project` sobreescribiendo CLAUDE.md existente**: el usuario
197
+ puede tener un CLAUDE.md curado con valor irrecuperable. NUNCA
198
+ sobreescribir — sugerir refactor.
199
+ - **Templates con `[TBD]` que después fallan auditoría**: los templates
200
+ generados por `init-user` y `init-project` usan `<!-- pendiente: ... -->`
201
+ HTML comments en lugar de `[TBD]` para que el auditor no los marque
202
+ como ERROR placeholders. Comments HTML son ignorados por el regex.
203
+ - **Aplicar el contrato canónico a CLAUDE.md de subdirectorios**: si el
204
+ proyecto adopta jerarquía (ADR-0007), los CLAUDE.md de subdirectorios
205
+ pueden NO tener todas las secciones canónicas (porque heredan del root).
206
+ Por ahora el auditor aplica el contrato uniforme; si el ADR-0007 se
207
+ acepta, el auditor debe distinguir root vs subdirectorio.
208
+
209
+ ## Señales de alerta
210
+
211
+ Detente y escala si:
212
+
213
+ - El usuario pide `init-project` en un directorio que ya tiene CLAUDE.md
214
+ con >100 líneas de contenido custom (riesgo: pérdida de información)
215
+ - `audit` reporta WARN líneas pero el contenido es legítimamente
216
+ necesario (ej. listas grandes de comandos sin posibilidad de extracción
217
+ útil) — sugerir ajustar `SWL_CLAUDEMD_MAX_LINES`, no extraer por extraer
218
+ - El usuario pide `refactor` y propone extracciones que dispersarían
219
+ contexto crítico (ej. mover "Reglas de máxima prioridad") — rechazar
220
+ con explicación del anti-patrón