@saulwade/swl-ses 1.9.0 → 2.1.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.
- package/CLAUDE.md +196 -196
- package/README.md +579 -579
- package/agentes/_propose-step.md +90 -0
- package/agentes/accesibilidad-wcag-swl.md +3 -3
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/disenador-ui-swl.md +6 -5
- package/agentes/frontend-angular-swl.md +2 -2
- package/agentes/frontend-css-swl.md +2 -2
- package/agentes/frontend-react-swl.md +4 -4
- package/agentes/frontend-swl.md +6 -6
- package/agentes/implementador-swl.md +2 -0
- package/agentes/investigador-ux-swl.md +5 -5
- package/agentes/orquestador-swl.md +9 -7
- package/agentes/perfilador-usuario-swl.md +321 -308
- package/agentes/producto-prd-swl.md +1 -1
- package/agentes/red-team-swl.md +218 -218
- package/agentes/tdd-qa-swl.md +17 -1
- package/bin/swl-ses.js +1 -1
- package/comandos/swl/actualizar.md +1 -1
- package/comandos/swl/aprender.md +2 -2
- package/comandos/swl/aprobar-plan.md +153 -0
- package/comandos/swl/ayuda.md +3 -3
- package/comandos/swl/briefing.md +122 -0
- package/comandos/swl/compactar.md +29 -2
- package/comandos/swl/discutir-fase.md +23 -2
- package/comandos/swl/ejecutar-fase.md +59 -6
- package/comandos/swl/evolucionar.md +1 -1
- package/comandos/swl/inbox.md +1 -1
- package/comandos/swl/instalar.md +1 -1
- package/comandos/swl/nemesis.md +1 -1
- package/comandos/swl/planear-fase.md +19 -1
- package/comandos/swl/plugins.md +1 -1
- package/comandos/swl/release.md +47 -1
- package/comandos/swl/status.md +348 -0
- package/comandos/swl/verificar.md +27 -1
- package/habilidades/ai-runtime-security/SKILL.md +1 -1
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
- package/habilidades/benchmark-memoria/SKILL.md +1 -1
- package/habilidades/calidad-contract-testing/SKILL.md +165 -0
- package/habilidades/changelog-generator/SKILL.md +9 -2
- package/habilidades/changelog-generator/scripts/parse-commits.js +13 -1
- package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
- package/habilidades/drift-detection/SKILL.md +179 -179
- package/habilidades/ejecutar-fase/SKILL.md +541 -468
- package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
- package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
- package/habilidades/harness-claude-code/SKILL.md +10 -7
- package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
- package/habilidades/instalar-sistema/SKILL.md +3 -3
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +26 -4
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
- package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
- package/habilidades/proceso-debate-adversarial/SKILL.md +2 -2
- package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
- package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
- package/habilidades/swl-claudemd/SKILL.md +50 -210
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
- package/habilidades/swl-dashboard/SKILL.md +9 -9
- package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
- package/habilidades/tdd-workflow/SKILL.md +715 -673
- package/habilidades/validacion-ci-sistema/SKILL.md +20 -4
- package/hooks/calidad-pre-commit.js +344 -3
- package/hooks/check-update.js +39 -1
- package/hooks/ciclo-evolucion-subagente.js +26 -0
- package/hooks/ciclo-evolucion.js +26 -0
- package/hooks/extraccion-aprendizajes.js +13 -0
- package/hooks/lib/autonomia.js +208 -0
- package/hooks/lib/briefing.js +474 -0
- package/hooks/lib/ciclo-evolucion.js +47 -0
- package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
- package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
- package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
- package/hooks/lib/evolution-tracker.js +24 -3
- package/hooks/lib/propose-step.js +357 -0
- package/hooks/session-briefing.js +98 -0
- package/hooks/spec-gate.js +211 -0
- package/hooks/tdd-gate.js +241 -0
- package/hooks/telemetria-skill-routing.js +100 -0
- package/hooks/validar-intent-spec.js +30 -10
- package/instintos/autonomia.yaml +27 -0
- package/llms.txt +6 -6
- package/manifiestos/hooks-config.json +44 -17
- package/manifiestos/modulos.json +40 -15
- package/manifiestos/skills-lock.json +64 -57
- package/package.json +93 -93
- package/plugin.json +371 -375
- package/reglas/accesibilidad.md +10 -0
- package/reglas/analizar-directorios-antes-de-escribir.md +228 -0
- package/reglas/api-diseno.md +9 -0
- package/reglas/auditorias-documentales-estructurales.md +7 -0
- package/reglas/cloud-infra.md +8 -0
- package/reglas/consultar-vault-primero.md +195 -0
- package/reglas/debatir-antes-de-aceptar.md +158 -0
- package/reglas/fragmentos-compartidos.md +5 -0
- package/reglas/git-coauthor.md +100 -0
- package/reglas/gobernanza.md +4 -4
- package/reglas/hooks.md +6 -0
- package/reglas/intent-engineering.md +4 -0
- package/reglas/markitdown.md +8 -0
- package/reglas/memoria-consolidada.md +1 -1
- package/reglas/monitor-ci.md +309 -0
- package/reglas/patrones.md +6 -0
- package/reglas/registro-componentes-nuevos.md +39 -2
- package/reglas/seguridad-agentes.md +1 -1
- package/reglas/sesiones-paralelas.md +180 -0
- package/reglas/skills-estandar.md +6 -0
- package/reglas/testing.md +7 -0
- package/reglas/tests-cleanup.md +4 -0
- package/reglas/usar-code-review-graph.md +155 -0
- package/reglas/usar-sistema-swl.md +1 -1
- package/reglas/verificar-citas-normativas.md +548 -0
- package/scripts/instalador.js +52 -6
- package/scripts/lib/ci-reader.js +193 -0
- package/scripts/lib/detectar-host-swl.js +175 -0
- package/scripts/lib/evidencia-release.js +322 -0
- package/scripts/lib/gate-hooks-requires.js +249 -0
- package/scripts/lib/gate-licencias.js +212 -0
- package/scripts/lib/git-metricas.js +257 -0
- package/scripts/lib/gitignore-manifest.js +29 -1
- package/scripts/lib/metricas-dora.js +204 -0
- package/scripts/lib/plan-lock.js +275 -0
- package/scripts/migrar-fase-dominio.js +0 -1
- package/scripts/tui/ejecutores.js +1 -1
- package/scripts/validar-manifest.js +92 -1
- package/scripts/verificar-evolucion.js +54 -4
- package/scripts/verificar-release.js +102 -0
- package/scripts/verificar-trazabilidad.js +298 -0
- package/agentes/ux-disenador-swl.md +0 -503
- package/comandos/swl/dashboard.md +0 -146
- package/comandos/swl/evolucion-estado.md +0 -191
- package/comandos/swl/metricas.md +0 -376
- package/comandos/swl/salud.md +0 -481
- package/reglas/arquitectura.evolved.json +0 -7
- package/reglas/seguridad.evolved.json +0 -7
- package/reglas/verificar-citas-temporales.md +0 -139
package/comandos/swl/salud.md
DELETED
|
@@ -1,481 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:salud
|
|
3
|
-
description: Diagnóstico completo de salud del sistema SWL. Verifica integridad de agentes, skills, comandos, reglas y hooks. Genera un reporte con score por componente y detecta agentes sin versión, skills huérfanos, comandos rotos y reglas contradictorias.
|
|
4
|
-
allowed_tools: ["Read", "Write", "Bash", "Glob", "Grep"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:salud — Diagnóstico de salud del sistema SWL
|
|
8
|
-
|
|
9
|
-
Inspector de salud del sistema SWL. Verifica integridad de todos los componentes
|
|
10
|
-
usando **verificaciones deterministas** (conteos, existencia de campos, sintaxis).
|
|
11
|
-
Genera SALUD.md con score objetivo y reproducible.
|
|
12
|
-
|
|
13
|
-
**Carga**: `Skill("validacion-ci-sistema")` — contiene las reglas de validación por componente (agentes, skills, hooks, comandos, reglas), tabla de exit codes para hooks y checklist de integridad. Delega toda lógica de verificación al skill.
|
|
14
|
-
|
|
15
|
-
Este comando es de **solo lectura**. No modifica archivos — solo genera SALUD.md. Para corregir problemas, usar `swl:evolucionar`.
|
|
16
|
-
|
|
17
|
-
## Cuándo usar
|
|
18
|
-
|
|
19
|
-
- Antes de iniciar proyecto nuevo con SWL
|
|
20
|
-
- Después de agregar o modificar agentes/skills manualmente
|
|
21
|
-
- Cuando un agente produce outputs inesperados
|
|
22
|
-
- Después de merge o pull de cambios al repositorio
|
|
23
|
-
- Periódicamente como mantenimiento (mensual)
|
|
24
|
-
|
|
25
|
-
## Paso 0 — Inventario con Bash (determinista)
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
echo "=== INVENTARIO ===" && \
|
|
29
|
-
echo "Agentes: $(ls agentes/*.md 2>/dev/null | wc -l)" && \
|
|
30
|
-
echo "Skills: $(ls -d habilidades/*/ 2>/dev/null | wc -l)" && \
|
|
31
|
-
echo "Comandos: $(ls comandos/swl/*.md 2>/dev/null | wc -l)" && \
|
|
32
|
-
echo "Reglas: $(ls reglas/*.md 2>/dev/null | wc -l)" && \
|
|
33
|
-
echo "Hooks: $(ls hooks/*.js 2>/dev/null | wc -l)"
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Paso 0.5 — Detección automática de tier del proyecto
|
|
37
|
-
|
|
38
|
-
Antes de ejecutar los pasos de diagnóstico, /swl:salud detecta el tier del proyecto contando archivos relevantes:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
find . -type f \
|
|
42
|
-
-not -path '*/node_modules/*' \
|
|
43
|
-
-not -path '*/.git/*' \
|
|
44
|
-
-not -path '*/dist/*' \
|
|
45
|
-
-not -path '*/build/*' \
|
|
46
|
-
-not -path '*/.next/*' \
|
|
47
|
-
-not -path '*/coverage/*' \
|
|
48
|
-
-not -path '*/__pycache__/*' \
|
|
49
|
-
-not -path '*/.cache/*' \
|
|
50
|
-
-not -path '*/.planning/sessions/*' \
|
|
51
|
-
| wc -l
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
| Tier | Rango | Características esperadas |
|
|
55
|
-
|---|---|---|
|
|
56
|
-
| **Simple** | <500 archivos | 1 contributor, CI mínimo o ninguno. CLAUDE.md opcional. Skills/agentes opcionales. |
|
|
57
|
-
| **Standard** | 500–5,000 archivos | Equipo pequeño con CI. CLAUDE.md + 1-2 reglas. 2-4 skills. Hooks básicos. |
|
|
58
|
-
| **Complex** | >5,000 archivos | Múltiples contributors, CI activo. Setup completo de 6 capas: agentes + skills + reglas + hooks + instintos + memoria. |
|
|
59
|
-
|
|
60
|
-
El tier detectado se reporta al inicio del SALUD.md generado.
|
|
61
|
-
|
|
62
|
-
**Default ante ambigüedad**: si el conteo cae cerca de 500 (490-510) o 5000 (4900-5100), aplicar el tier superior. Es preferible diagnosticar de más que de menos.
|
|
63
|
-
|
|
64
|
-
## Paso 1 — Diagnóstico de agentes (determinista)
|
|
65
|
-
|
|
66
|
-
Ejecutar script Bash que verifica cada agente mecánicamente:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
errors=0; warns=0; ok=0
|
|
70
|
-
for f in agentes/*.md; do
|
|
71
|
-
name=$(basename "$f" .md)
|
|
72
|
-
has_name=$(head -30 "$f" | grep -c "^name:")
|
|
73
|
-
has_desc=$(head -30 "$f" | grep -c "^description:")
|
|
74
|
-
has_version=$(head -30 "$f" | grep -c "^version:")
|
|
75
|
-
has_riesgo=$(head -30 "$f" | grep -c "^nivelRiesgo:")
|
|
76
|
-
placeholders=$(grep -cE '\[TODO\]|\[COMPLETAR\]|\[TBD\]' "$f" || true)
|
|
77
|
-
|
|
78
|
-
if [ "$has_name" -eq 0 ] || [ "$has_desc" -eq 0 ]; then
|
|
79
|
-
echo "ERROR: $name — falta name o description"
|
|
80
|
-
errors=$((errors+1))
|
|
81
|
-
elif [ "$has_version" -eq 0 ] || [ "$has_riesgo" -eq 0 ]; then
|
|
82
|
-
echo "ADVERTENCIA: $name — falta version o nivelRiesgo"
|
|
83
|
-
warns=$((warns+1))
|
|
84
|
-
elif [ "$placeholders" -gt 0 ]; then
|
|
85
|
-
echo "ADVERTENCIA: $name — placeholders sin reemplazar"
|
|
86
|
-
warns=$((warns+1))
|
|
87
|
-
else
|
|
88
|
-
ok=$((ok+1))
|
|
89
|
-
fi
|
|
90
|
-
done
|
|
91
|
-
echo "Agentes: $ok OK, $warns advertencias, $errors errores"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Score de agentes = `(ok / total) * 100`
|
|
95
|
-
|
|
96
|
-
**Restricción de tier**: el análisis cruzado de agentes (cross-check entre `exclusiones` declaradas y rutas reales en `manifiestos/modulos.json`) se ejecuta solo en proyectos **Standard** o **Complex**. En tier Simple, reportar el conteo básico y omitir la validación cruzada.
|
|
97
|
-
|
|
98
|
-
## Paso 2 — Diagnóstico de skills (determinista)
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
errors=0; warns=0; ok=0
|
|
102
|
-
for d in habilidades/*/; do
|
|
103
|
-
name=$(basename "$d")
|
|
104
|
-
skill="$d/SKILL.md"
|
|
105
|
-
if [ ! -f "$skill" ]; then
|
|
106
|
-
echo "ERROR: $name — sin SKILL.md"
|
|
107
|
-
errors=$((errors+1)); continue
|
|
108
|
-
fi
|
|
109
|
-
lines=$(wc -l < "$skill")
|
|
110
|
-
has_name=$(head -10 "$skill" | grep -c "^name:")
|
|
111
|
-
has_desc=$(head -10 "$skill" | grep -c "^description:")
|
|
112
|
-
content_chars=$(sed -n '/^---$/,/^---$/d; p' "$skill" | wc -c)
|
|
113
|
-
abs_paths=$(grep -cE 'C:\\|/home/|/Users/' "$skill" || true)
|
|
114
|
-
|
|
115
|
-
if [ "$has_name" -eq 0 ] || [ "$has_desc" -eq 0 ]; then
|
|
116
|
-
echo "ERROR: $name — frontmatter sin name o description"
|
|
117
|
-
errors=$((errors+1))
|
|
118
|
-
elif [ "$lines" -gt 300 ]; then
|
|
119
|
-
echo "ADVERTENCIA: $name — $lines lineas (max 300)"
|
|
120
|
-
warns=$((warns+1))
|
|
121
|
-
elif [ "$content_chars" -lt 500 ]; then
|
|
122
|
-
echo "ADVERTENCIA: $name — contenido muy corto ($content_chars chars)"
|
|
123
|
-
warns=$((warns+1))
|
|
124
|
-
elif [ "$abs_paths" -gt 0 ]; then
|
|
125
|
-
echo "ADVERTENCIA: $name — paths absolutos detectados"
|
|
126
|
-
warns=$((warns+1))
|
|
127
|
-
else
|
|
128
|
-
ok=$((ok+1))
|
|
129
|
-
fi
|
|
130
|
-
done
|
|
131
|
-
echo "Skills: $ok OK, $warns advertencias, $errors errores"
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Detectar skills huérfanos (no referenciados):
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
grep -r "Skill(" agentes/ comandos/ 2>/dev/null | grep -o '"[^"]*"' | sort | uniq
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Score de skills = `((total - errors*10 - warns*2) / total) * 100`, mínimo 0
|
|
141
|
-
|
|
142
|
-
**Restricción de tier**: la detección de skills huérfanos (no referenciados en ningún agente ni comando) se ejecuta solo en proyectos **Standard** o **Complex**. En tier Simple, donde hay menos de 10 skills esperados, la verificación de huérfanos genera falsos positivos y se omite.
|
|
143
|
-
|
|
144
|
-
## Paso 3 — Diagnóstico de comandos (determinista)
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
errors=0; warns=0; ok=0
|
|
148
|
-
for f in comandos/swl/*.md; do
|
|
149
|
-
name=$(basename "$f" .md)
|
|
150
|
-
lines=$(wc -l < "$f")
|
|
151
|
-
has_name=$(head -10 "$f" | grep -c "^name:")
|
|
152
|
-
has_desc=$(head -10 "$f" | grep -c "^description:")
|
|
153
|
-
desc_len=$(head -5 "$f" | grep "^description:" | wc -c)
|
|
154
|
-
|
|
155
|
-
if [ "$has_name" -eq 0 ] || [ "$has_desc" -eq 0 ]; then
|
|
156
|
-
echo "ERROR: $name — frontmatter sin name o description"
|
|
157
|
-
errors=$((errors+1))
|
|
158
|
-
elif [ "$desc_len" -lt 30 ]; then
|
|
159
|
-
echo "ADVERTENCIA: $name — description muy breve"
|
|
160
|
-
warns=$((warns+1))
|
|
161
|
-
elif [ "$lines" -gt 300 ]; then
|
|
162
|
-
echo "ADVERTENCIA: $name — $lines lineas (considerar delegar a skill)"
|
|
163
|
-
warns=$((warns+1))
|
|
164
|
-
else
|
|
165
|
-
ok=$((ok+1))
|
|
166
|
-
fi
|
|
167
|
-
done
|
|
168
|
-
echo "Comandos: $ok OK, $warns advertencias, $errors errores"
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Paso 4 — Diagnóstico de reglas (determinista)
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
errors=0; warns=0; ok=0
|
|
175
|
-
for f in reglas/*.md; do
|
|
176
|
-
name=$(basename "$f" .md)
|
|
177
|
-
lines=$(wc -l < "$f")
|
|
178
|
-
has_h1=$(grep -c "^# " "$f" || true)
|
|
179
|
-
has_checklist=$(grep -c "\- \[ \]" "$f" || true)
|
|
180
|
-
|
|
181
|
-
if [ "$lines" -lt 20 ]; then
|
|
182
|
-
echo "ERROR: $name — regla muy corta ($lines lineas)"
|
|
183
|
-
errors=$((errors+1))
|
|
184
|
-
elif [ "$has_h1" -eq 0 ]; then
|
|
185
|
-
echo "ADVERTENCIA: $name — sin titulo H1"
|
|
186
|
-
warns=$((warns+1))
|
|
187
|
-
elif [ "$has_checklist" -eq 0 ]; then
|
|
188
|
-
echo "ADVERTENCIA: $name — sin checklist"
|
|
189
|
-
warns=$((warns+1))
|
|
190
|
-
else
|
|
191
|
-
ok=$((ok+1))
|
|
192
|
-
fi
|
|
193
|
-
done
|
|
194
|
-
echo "Reglas: $ok OK, $warns advertencias, $errors errores"
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
## Paso 5 — Diagnóstico de hooks (determinista)
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
errors=0; warns=0; ok=0
|
|
201
|
-
for f in hooks/*.js; do
|
|
202
|
-
name=$(basename "$f")
|
|
203
|
-
if node --check "$f" 2>/dev/null; then
|
|
204
|
-
if grep -q "$name" .claude/settings.json 2>/dev/null; then
|
|
205
|
-
ok=$((ok+1))
|
|
206
|
-
else
|
|
207
|
-
echo "ADVERTENCIA: $name — no registrado en settings.json"
|
|
208
|
-
warns=$((warns+1))
|
|
209
|
-
fi
|
|
210
|
-
else
|
|
211
|
-
echo "ERROR: $name — error de sintaxis Node.js"
|
|
212
|
-
errors=$((errors+1))
|
|
213
|
-
fi
|
|
214
|
-
done
|
|
215
|
-
echo "Hooks: $ok OK, $warns advertencias, $errors errores"
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## Paso 5b — Auditoría opcional de skills (opt-in)
|
|
219
|
-
|
|
220
|
-
Si la variable de entorno `SWL_AUDIT_SKILLS=1` está presente, ejecutar:
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
bash scripts/audit-skills.sh
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
Este paso es **no bloqueante**: si el comando falla por cualquier causa (red,
|
|
227
|
-
dependencia faltante, paquete no publicado), el diagnóstico continúa normalmente.
|
|
228
|
-
|
|
229
|
-
**Qué detecta**:
|
|
230
|
-
- Prompt injection en contenido de SKILL.md (instrucciones que intentan manipular el modelo).
|
|
231
|
-
- Secretos hardcodeados (API keys, tokens, contraseñas en ejemplos).
|
|
232
|
-
- URLs sospechosas embebidas en los skills.
|
|
233
|
-
- Estructura inválida de SKILL.md (frontmatter incompleto, ausencia de secciones requeridas).
|
|
234
|
-
|
|
235
|
-
**Requisito**: `pip install uv` (o `pipx install uv`) antes de activar.
|
|
236
|
-
|
|
237
|
-
**Activación manual**:
|
|
238
|
-
```bash
|
|
239
|
-
SWL_AUDIT_SKILLS=1 bash scripts/audit-skills.sh
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Si `SWL_AUDIT_SKILLS` no está definida, el script imprime instrucciones y sale
|
|
243
|
-
con código 0 — no afecta el score ni el diagnóstico general.
|
|
244
|
-
|
|
245
|
-
## Paso 6 — Score global ponderado
|
|
246
|
-
|
|
247
|
-
```
|
|
248
|
-
Score = agentes x 0.30 + skills x 0.25 + comandos x 0.20 + reglas x 0.15 + hooks x 0.10
|
|
249
|
-
|
|
250
|
-
90-100: Excelente
|
|
251
|
-
75-89: Saludable con mejoras menores
|
|
252
|
-
60-74: Funcional con problemas
|
|
253
|
-
<60: Estado crítico
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## Paso 5c — Reporte de cobertura de frameworks de seguridad (opt-in)
|
|
257
|
-
|
|
258
|
-
Si la variable de entorno `SWL_AUDIT_FRAMEWORKS=1` está presente, ejecutar el
|
|
259
|
-
auditor de cobertura:
|
|
260
|
-
|
|
261
|
-
```bash
|
|
262
|
-
npx -y @saulwade/swl-ses@latest audit-coverage-frameworks --resumen
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
Propósito: reportar cuántos skills declaran mapeos a los 5 frameworks de
|
|
266
|
-
seguridad (NIST CSF 2.0, NIST AI RMF 1.0, MITRE ATLAS v5.4, ATT&CK v18,
|
|
267
|
-
D3FEND v1.3) y qué controles están cubiertos. Útil para:
|
|
268
|
-
|
|
269
|
-
- Verificar que los skills de dominio seguridad declaran mapeos antes de un
|
|
270
|
-
audit de compliance
|
|
271
|
-
- Detectar gaps en la cobertura (ej: ningún skill cubre `PR.DS-11` — data
|
|
272
|
-
integrity — si eso importa para el proyecto)
|
|
273
|
-
- Producir evidencia para auditores (SOC 2, ISO 27001) sobre controles
|
|
274
|
-
implementados
|
|
275
|
-
|
|
276
|
-
El reporte NO marca skills sin mapeos como error — solo skills de dominio
|
|
277
|
-
seguridad necesitan declararlos. Ver `reglas/skills-estandar.md` sección
|
|
278
|
-
"Mapeo a frameworks de seguridad (REC-C01)" para criterios de cuándo declarar
|
|
279
|
-
cada framework.
|
|
280
|
-
|
|
281
|
-
**Filtrado por framework**:
|
|
282
|
-
|
|
283
|
-
```bash
|
|
284
|
-
SWL_AUDIT_FRAMEWORKS=1 npx -y @saulwade/swl-ses@latest audit-coverage-frameworks --framework=nist_ai_rmf --resumen
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
**Persistir snapshot**:
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
npx -y @saulwade/swl-ses@latest audit-coverage-frameworks --save
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
Persiste en `.planning/evolution/cobertura-frameworks.json` para comparación
|
|
294
|
-
histórica tras incorporar nuevos skills de seguridad.
|
|
295
|
-
|
|
296
|
-
Si `SWL_AUDIT_FRAMEWORKS` no está definida, este paso se omite sin mensaje
|
|
297
|
-
— los reportes son opt-in por diseño (CLAUDE.md: "Variables de entorno
|
|
298
|
-
opt-in para integraciones enterprise").
|
|
299
|
-
|
|
300
|
-
## Paso 5d — Auditoría SAP-Agents (opt-in)
|
|
301
|
-
|
|
302
|
-
Si la variable de entorno `SWL_AUDIT_AGENTES=1` está presente, ejecutar el
|
|
303
|
-
auditor de agentes:
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
npx -y @saulwade/swl-ses@latest audit-agents-gaps --resumen
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
Propósito: reportar cuántos agentes carecen de Exclusion Clause (campo
|
|
310
|
-
`exclusiones` o sección `## Cuándo NO invocarme`) y Gotchas explícitos.
|
|
311
|
-
Previene agent hijacking por activación tangencial de agentes por similitud
|
|
312
|
-
superficial en `description`.
|
|
313
|
-
|
|
314
|
-
El reporte incluye conteo de excepciones documentadas por ADR (si las hay)
|
|
315
|
-
para separar gaps reales de excepciones por diseño.
|
|
316
|
-
|
|
317
|
-
Si `SWL_AUDIT_AGENTES` no está definida, este paso se omite — los reportes
|
|
318
|
-
son opt-in por diseño (CLAUDE.md: "Variables de entorno opt-in para
|
|
319
|
-
integraciones enterprise").
|
|
320
|
-
|
|
321
|
-
## Paso 5f — Calidad de CLAUDE.md (ADR-0016)
|
|
322
|
-
|
|
323
|
-
Auditoría determinista del archivo `CLAUDE.md` raíz del proyecto según best
|
|
324
|
-
practices Anthropic ("The CLAUDE.md file"): líneas totales, bullets
|
|
325
|
-
monolíticos, secciones canónicas (Stack/Comandos/Code style/Conventions),
|
|
326
|
-
uso de `@references`, placeholders sin reemplazar.
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
npx -y @saulwade/swl-ses@latest audit-claudemd --json
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
Veredictos posibles:
|
|
333
|
-
|
|
334
|
-
| Veredicto | Significado | Score impact |
|
|
335
|
-
|---|---|---|
|
|
336
|
-
| `OK` | Cumple best practices, sin hallazgos | +1 |
|
|
337
|
-
| `WARN` | Oportunidades de mejora (líneas excesivas, bullets gigantes, secciones ausentes, sin @references) | -0.5 |
|
|
338
|
-
| `ERROR` | No existe, placeholders sin reemplazar, secciones críticas ausentes | -1 |
|
|
339
|
-
|
|
340
|
-
Si veredicto != OK, el reporte sugiere ejecutar `/swl:claudemd refactor`
|
|
341
|
-
para identificar candidatos a extracción a archivos `@`-referenciados.
|
|
342
|
-
|
|
343
|
-
Variables de entorno: `SWL_CLAUDEMD_MAX_LINES` (default 200) y
|
|
344
|
-
`SWL_CLAUDEMD_MAX_BULLET_CHARS` (default 1000) ajustan los umbrales.
|
|
345
|
-
Documentación completa en `@docs/variables-entorno.md`.
|
|
346
|
-
|
|
347
|
-
Este paso siempre se ejecuta (no es opt-in) — la calidad de CLAUDE.md
|
|
348
|
-
es métrica continua del sistema.
|
|
349
|
-
|
|
350
|
-
## Paso 5g — Smoke test de servidores MCP (opt-in)
|
|
351
|
-
|
|
352
|
-
Si el proyecto declara servidores MCP en `.claude/settings.json` o en
|
|
353
|
-
`~/.cursor/mcp.json` o `~/.claude/settings.json` (global), ejecutar un smoke
|
|
354
|
-
test rápido para detectar configuraciones rotas antes de que fallen en uso
|
|
355
|
-
interactivo:
|
|
356
|
-
|
|
357
|
-
```bash
|
|
358
|
-
python scripts/mcp-orchestrator.py status --json 2>/dev/null
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
El orchestrator levanta un proceso MCP fresh por cada server configurado y
|
|
362
|
-
reporta:
|
|
363
|
-
|
|
364
|
-
- `status: "OK"` — handshake completo + lista de tools devuelta correctamente
|
|
365
|
-
- `status: "ERROR"` — fallo de handshake, autenticación o spawn
|
|
366
|
-
|
|
367
|
-
Casos detectables que `/swl:salud` debe reportar:
|
|
368
|
-
|
|
369
|
-
| Síntoma | Causa probable | Acción sugerida |
|
|
370
|
-
|---|---|---|
|
|
371
|
-
| `40101 Authorization required` | apiKey desincronizada entre cliente y plugin | Verificar `HKCU\Environment` (Windows) o variable de entorno del shell coincide con apiKey del plugin |
|
|
372
|
-
| `Server failed to start` | Binario no encontrado en `command` | Verificar path absoluto del binario |
|
|
373
|
-
| `Connection refused` | Plugin/servicio destino no corriendo | Iniciar plugin (ej. Obsidian con Local REST API activo) |
|
|
374
|
-
| `env=None passed` | Config tiene `"env": {}` literal — rompe herencia | Omitir clave `env` por completo en JSON (no dejar vacía) |
|
|
375
|
-
|
|
376
|
-
Si no hay servers configurados, este paso se omite silenciosamente.
|
|
377
|
-
|
|
378
|
-
Este smoke test detecta drift de apiKeys ANTES de que el usuario interactivo
|
|
379
|
-
encuentre 40101 en una invocación crítica. Recomendado ejecutar como parte del
|
|
380
|
-
flujo `/swl:salud` periódico mensual.
|
|
381
|
-
|
|
382
|
-
## Paso 5e — Verificación de drift de skills (skills-lock)
|
|
383
|
-
|
|
384
|
-
Si existe `manifiestos/skills-lock.json`, comparar el hash actual de cada
|
|
385
|
-
`habilidades/*/SKILL.md` contra el lock. Detecta ediciones silenciosas de
|
|
386
|
-
skills entre release y release.
|
|
387
|
-
|
|
388
|
-
```bash
|
|
389
|
-
npx -y @saulwade/swl-ses@latest generate-skills-lock --check
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
Estados posibles:
|
|
393
|
-
|
|
394
|
-
| Salida | Significado | Acción |
|
|
395
|
-
|--------|-------------|--------|
|
|
396
|
-
| `✓ skills-lock OK: N skills sin drift` | Todos los hashes coinciden | Continuar |
|
|
397
|
-
| `✗ skills-lock DRIFT detectado` | Skills modificados, nuevos o faltantes | Listar diferencias y proponer regenerar |
|
|
398
|
-
|
|
399
|
-
Si NO existe el lock (proyecto fresco o pre-1.1.0), este paso se omite y
|
|
400
|
-
emite advertencia sugerente: `npx -y @saulwade/swl-ses@latest generate-skills-lock`.
|
|
401
|
-
|
|
402
|
-
El lock se regenera automáticamente como parte de `/swl:release`. Drift
|
|
403
|
-
fuera de release indica ediciones manuales no committed.
|
|
404
|
-
|
|
405
|
-
## Paso 6b — Formato de salida enriquecido (HealthRow)
|
|
406
|
-
|
|
407
|
-
El módulo `scripts/lib/health-row.js` genera filas de salud con formato visual enriquecido
|
|
408
|
-
para la salida de terminal. Cada fila sigue el patrón:
|
|
409
|
-
|
|
410
|
-
```
|
|
411
|
-
Label valor/max |████████████████████| indicador
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
Ejemplo visual (modo con color ANSI):
|
|
415
|
-
|
|
416
|
-
```
|
|
417
|
-
Agentes 59/59 |████████████████████| ✓ ok
|
|
418
|
-
Skills 52/55 |███████████████████░| ✓ ok
|
|
419
|
-
Comandos 37/38 |███████████████████░| ✓ ok
|
|
420
|
-
Reglas 18/18 |████████████████████| ✓ ok
|
|
421
|
-
Hooks 22/25 |█████████████████░░░| ⚠ warn
|
|
422
|
-
Score Global 88/100 |█████████████████░░░| ✓ ok
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Umbrales automáticos
|
|
426
|
-
|
|
427
|
-
| Rango de porcentaje | Estado | Color ANSI |
|
|
428
|
-
|---------------------|--------|-------------|
|
|
429
|
-
| >= 80% | good | Verde `\x1b[32m` |
|
|
430
|
-
| >= 50% y < 80% | warn | Amarillo `\x1b[33m` |
|
|
431
|
-
| < 50% | bad | Rojo `\x1b[31m` |
|
|
432
|
-
|
|
433
|
-
Respetar `NO_COLOR` (https://no-color.org) y la variable `SWL_ASCII_SIMPLE=1`
|
|
434
|
-
para entornos sin soporte Unicode.
|
|
435
|
-
|
|
436
|
-
### Uso para generar el bloque de salud
|
|
437
|
-
|
|
438
|
-
```javascript
|
|
439
|
-
const { formatearBloqueHealth } = require('./scripts/lib/health-row');
|
|
440
|
-
|
|
441
|
-
const filas = [
|
|
442
|
-
{ label: 'Agentes', valor: 59, maximo: 59 },
|
|
443
|
-
{ label: 'Skills', valor: 52, maximo: 55 },
|
|
444
|
-
{ label: 'Comandos', valor: 37, maximo: 38 },
|
|
445
|
-
{ label: 'Reglas', valor: 18, maximo: 18 },
|
|
446
|
-
{ label: 'Hooks', valor: 22, maximo: 25 },
|
|
447
|
-
{ label: 'Score Global', valor: 88, maximo: 100 },
|
|
448
|
-
];
|
|
449
|
-
|
|
450
|
-
console.log(formatearBloqueHealth(filas));
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
Para override de estado (forzar bad aunque el valor sea alto):
|
|
454
|
-
|
|
455
|
-
```javascript
|
|
456
|
-
const { formatearHealthRow } = require('./scripts/lib/health-row');
|
|
457
|
-
const fila = formatearHealthRow({ label: 'Seguridad', valor: 100, maximo: 100, estado: 'bad' });
|
|
458
|
-
```
|
|
459
|
-
|
|
460
|
-
La integración real del formato en la ejecución del comando se implementará en el
|
|
461
|
-
código de salida de `/swl:salud`. Este paso solo define la API disponible y la muestra visual.
|
|
462
|
-
|
|
463
|
-
## Paso 7 — Generar SALUD.md
|
|
464
|
-
|
|
465
|
-
Escribe el reporte con tabla resumen, errores, advertencias y recomendaciones. Usa los datos exactos de los scripts. Si el script dice 73%, reportar 73%.
|
|
466
|
-
|
|
467
|
-
## Paso 8 — Resumen en terminal
|
|
468
|
-
|
|
469
|
-
Presenta resumen con los problemas más críticos. Si hay errores, listarlos todos. Si solo advertencias, listar las top 5.
|
|
470
|
-
|
|
471
|
-
## Reglas de comportamiento
|
|
472
|
-
|
|
473
|
-
- SOLO LECTURA. NUNCA modifica archivos excepto SALUD.md.
|
|
474
|
-
- Las verificaciones de Pasos 1-5 son scripts Bash deterministas. NO usar juicio subjetivo.
|
|
475
|
-
- Los scripts miden: existencia de campos, conteo de líneas, sintaxis. NO miden calidad de redacción.
|
|
476
|
-
- Si un check requiere juicio (contradicciones entre reglas), documentar como "requiere revisión manual".
|
|
477
|
-
- Los scores son aritmética pura. No ajustar el score "porque parece un sistema sano".
|
|
478
|
-
- Si no hay git, omitir verificaciones dependientes y notar la omisión.
|
|
479
|
-
- Si detectas un patrón sistémico (mismo error en múltiples componentes), mencionarlo en recomendaciones.
|
|
480
|
-
|
|
481
|
-
<!-- Patrón de 3 tiers adaptado de Waza/skills/health bajo MIT License (tw93/Waza) -->
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"evolved": true,
|
|
3
|
-
"evolved-from": "1.8.0",
|
|
4
|
-
"evolved-at": "2026-06-04",
|
|
5
|
-
"evolved-by": "evolucionar",
|
|
6
|
-
"evolved-note": "PE-010 sección nueva 'Tablas append-only — excepción documentada a audit columns nullable=False'. Patrón portable a logs estructurados, audit trails, event sourcing, telemetría. Origen: OIC v1.5 Slice 1 2026-06-04 (BitacoraError)."
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"evolved": true,
|
|
3
|
-
"evolved-from": "1.8.0",
|
|
4
|
-
"evolved-at": "2026-06-04",
|
|
5
|
-
"evolved-by": "evolucionar",
|
|
6
|
-
"evolved-note": "PE-003 (verificación de flags antes de asumir servicios externos LDAP/Redis/S3) + PE-004 (sanitización PII centralizada en handlers) + PE-007 (generación de passwords legibles sin chars ambiguos). Origen: OIC v1.5 2026-06-04, bug histórico manuel.monteagudo + Slice 2 v1.5 Observabilidad."
|
|
7
|
-
}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# Regla: Comentarios temporales en código NO son verificación
|
|
2
|
-
|
|
3
|
-
Esta regla es OBLIGATORIA para todo trabajo de Claude en swl-ses. Extiende la
|
|
4
|
-
regla global `~/.claude/rules/verificar-citas-normativas.md § Familia 2` con
|
|
5
|
-
el sub-caso específico de **comentarios temporales como `// Alineado con
|
|
6
|
-
commits X+Y` o `// Refactorizado a vN.M.0`**.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Principio
|
|
11
|
-
|
|
12
|
-
> Un comentario en código que afirma alineación con otro commit, versión o
|
|
13
|
-
> contrato (`// Alineado con commits X+Y`, `// Refactorizado a vN.M.0`,
|
|
14
|
-
> `# Sincronizado con backend`, `<!-- Coherente con schema X -->`) **NO es
|
|
15
|
-
> verificación** — es afirmación temporal sin prueba. Antes de actuar
|
|
16
|
-
> sobre el comentario como si fuera evidencia, verificar contra la fuente
|
|
17
|
-
> real con `grep` / `Read` / `git log`.
|
|
18
|
-
|
|
19
|
-
El comentario puede haberse desactualizado silenciosamente si el commit
|
|
20
|
-
referenciado se revirtió, nunca se aplicó, o si el refactor citado cambió
|
|
21
|
-
después de escribir el comentario.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Cuándo aplicar
|
|
26
|
-
|
|
27
|
-
OBLIGATORIO verificar antes de aceptar como evidencia accionable:
|
|
28
|
-
|
|
29
|
-
- Comentarios `// Alineado con commits <SHA>+<SHA>` en código
|
|
30
|
-
- Comentarios `// Refactorizado a v<N.M.0>` o `// Migrado a <framework>`
|
|
31
|
-
- Comentarios `# Sincronizado con backend` o `# Espejo del schema X`
|
|
32
|
-
- Comentarios `<!-- Tipos coherentes con API vN -->`
|
|
33
|
-
- Cualquier afirmación de cross-stack alignment en comentario inline
|
|
34
|
-
|
|
35
|
-
NO aplica cuando:
|
|
36
|
-
|
|
37
|
-
- El comentario describe la INTENCIÓN del código (no afirma alineación)
|
|
38
|
-
- El comentario es una nota pendiente (`TODO` / `FIXME`) con ticket asociado
|
|
39
|
-
- El comentario es una explicación del POR QUÉ (no del QUÉ histórico)
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Cómo verificar
|
|
44
|
-
|
|
45
|
-
Cuando un comentario afirma "alineado con X":
|
|
46
|
-
|
|
47
|
-
1. Identificar **qué se afirma alineado**: archivo, commit, versión, schema.
|
|
48
|
-
2. Localizar la fuente real:
|
|
49
|
-
```bash
|
|
50
|
-
# Si afirma alineación con commit:
|
|
51
|
-
git show <SHA> -- <archivo-citado>
|
|
52
|
-
|
|
53
|
-
# Si afirma alineación con schema/types:
|
|
54
|
-
grep -rn "<campo-clave>" backend/ frontend/ schemas/
|
|
55
|
-
```
|
|
56
|
-
3. Comparar campo por campo. Si hay drift, NO confiar en el comentario.
|
|
57
|
-
4. Actualizar el comentario o eliminarlo (un comentario stale es peor que
|
|
58
|
-
ningún comentario).
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Caso de origen — sesión SIGAF 2026-05-22
|
|
63
|
-
|
|
64
|
-
`frontend/.../contratos/models/contrato.models.ts` línea 2 decía:
|
|
65
|
-
|
|
66
|
-
```typescript
|
|
67
|
-
// Alineados con el backend refactorizado (commits 284df74 + 5869ac9)
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Pero el backend nunca aplicó ese refactor. El frontend enviaba 5 campos
|
|
71
|
-
(`monto_total`, `fecha_inicio`, `fecha_termino`, `porcentaje_iva`,
|
|
72
|
-
`tipo_contrato_id`) que Pydantic con `extra=ignore` descartaba
|
|
73
|
-
silenciosamente. Los contratos se creaban sin monto ni vigencia durante
|
|
74
|
-
semanas, hasta que se detectó por triangulación cross-stack (modelo
|
|
75
|
-
SQLAlchemy + schema Pydantic + types TypeScript).
|
|
76
|
-
|
|
77
|
-
El comentario funcionó como **falso anclaje de confianza**: un reviewer
|
|
78
|
-
posterior lo leyó, asumió validez, y no verificó. La causa raíz era el
|
|
79
|
-
comentario stale, no el código.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Anti-patrones específicos
|
|
84
|
-
|
|
85
|
-
- **Confiar en el comentario en code review**: el reviewer ve
|
|
86
|
-
`// Alineado con commits X+Y` y asume válido sin hacer `git show`.
|
|
87
|
-
- **Propagar el comentario en refactors**: al copiar código, el comentario
|
|
88
|
-
viaja con él y eventualmente se vuelve falso sin que nadie lo note.
|
|
89
|
-
- **No actualizar el comentario al revertir el commit citado**: el `git
|
|
90
|
-
revert` no borra comentarios — el comentario sobrevive afirmando
|
|
91
|
-
alineación con un commit que ya no existe en la línea de desarrollo.
|
|
92
|
-
- **Usar el comentario como "prueba" en debates técnicos**: "ya está
|
|
93
|
-
alineado con X" cuando el comentario es la única evidencia es razonar
|
|
94
|
-
desde una afirmación no verificada.
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Alternativas seguras a los comentarios temporales
|
|
99
|
-
|
|
100
|
-
Cuando se necesita marcar alineación cross-stack:
|
|
101
|
-
|
|
102
|
-
| En vez de | Usar |
|
|
103
|
-
|-----------|------|
|
|
104
|
-
| `// Alineado con commits X+Y` | Test de contrato que valide el shape real en CI |
|
|
105
|
-
| `// Refactorizado a v2.3.0` | Versión semántica en el archivo + lock |
|
|
106
|
-
| `# Sincronizado con backend` | Tipos generados (OpenAPI codegen, Prisma) |
|
|
107
|
-
| `<!-- Coherente con schema X -->` | Validador automatizado en pre-commit |
|
|
108
|
-
|
|
109
|
-
Si el comentario es la única opción (no hay test/codegen disponible),
|
|
110
|
-
incluir **fecha y SHA** explícitos para que la revisión periódica detecte
|
|
111
|
-
drift:
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
// Alineado con backend commit 284df74 al 2026-05-22.
|
|
115
|
-
// Re-verificar si el endpoint POST /contratos cambia su contrato.
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Relación con otras reglas
|
|
121
|
-
|
|
122
|
-
- `~/.claude/rules/verificar-citas-normativas.md § Familia 2` — regla
|
|
123
|
-
global hermana. Esta regla extiende el principio al sub-caso "comentarios
|
|
124
|
-
temporales en código".
|
|
125
|
-
- `reglas/arreglar-al-detectar.md` — un comentario stale detectado es
|
|
126
|
-
trabajo a resolver en mismo turno (actualizarlo o eliminarlo).
|
|
127
|
-
- `~/.claude/rules/usar-sistema-swl.md` — invocar `revisor-codigo-swl`
|
|
128
|
-
cuando se sospecha drift acumulado de comentarios temporales en un
|
|
129
|
-
módulo.
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Checklist al detectar un comentario temporal
|
|
134
|
-
|
|
135
|
-
- [ ] ¿El comentario afirma alineación con algo verificable (commit, schema, versión)?
|
|
136
|
-
- [ ] ¿Verifiqué la fuente real con `grep`/`Read`/`git show` ANTES de actuar?
|
|
137
|
-
- [ ] Si hay drift detectado, ¿actualicé/eliminé el comentario en el mismo commit?
|
|
138
|
-
- [ ] Si voy a propagar el código (copy-paste, refactor), ¿el comentario sigue siendo válido?
|
|
139
|
-
- [ ] Si el comentario es la única opción, ¿incluye fecha y SHA explícitos?
|