@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.
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/bin/swl-mcp-server.js +187 -187
- package/bin/swl-ses.js +4 -62
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/adoptar-proyecto.md +207 -207
- package/comandos/swl/contribuir.md +233 -233
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +171 -171
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
- package/habilidades/harness-claude-code/SKILL.md +299 -299
- package/habilidades/infra-github-actions/SKILL.md +166 -166
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/manejo-errores/.evolved.json +8 -8
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
- package/habilidades/patrones-python/SKILL.md +229 -229
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/planear-fase/SKILL.md +319 -319
- package/habilidades/release-semver/.evolved.json +8 -8
- package/habilidades/swl-claudemd/SKILL.md +220 -220
- package/habilidades/testing-python/SKILL.md +340 -340
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/extraccion-aprendizajes.js +43 -12
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/registro-turnos.js +209 -209
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-memoria-hook.js +218 -218
- package/instintos/prompt-appendices.yaml +57 -57
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/skills-lock.json +27 -27
- package/package.json +1 -1
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +1 -1
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/arreglar-al-detectar.md +147 -147
- package/reglas/fragmentos-compartidos.md +152 -152
- package/reglas/harness-claude-code.md +213 -213
- package/reglas/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +77 -3
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-inventario.js +420 -420
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/instalador.js +38 -1
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/parsear-opciones.js +136 -0
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/transformadores/claude.js +200 -200
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/README.md +128 -128
- package/scripts/mcp-server/handlers.js +206 -206
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +201 -201
- package/scripts/publicar.js +511 -511
- package/scripts/run-eval.js +141 -141
- package/scripts/validar-manifest.js +195 -195
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-release.js +5 -1
|
@@ -1,220 +1,220 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl-claudemd
|
|
3
|
-
description:
|
|
4
|
-
version: "1.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
|