@saulwade/swl-ses 1.4.0 → 1.4.2
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 +4 -3
- package/README.md +15 -14
- package/agentes/nemesis-auditor-swl.md +161 -0
- package/bin/swl-mcp-server.js +187 -187
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/nemesis.md +122 -0
- package/comandos/swl/salud.md +34 -0
- package/comandos/swl/verificar.md +45 -0
- package/gateway/lib/event-channel.js +191 -191
- 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/feynman-auditor-swl/SKILL.md +123 -0
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -0
- 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/state-inconsistency-auditor-swl/SKILL.md +166 -0
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -0
- package/habilidades/testing-python/SKILL.md +340 -340
- package/habilidades/web-fetcher-routing/SKILL.md +75 -0
- package/hooks/claudemd-bloat-detector.js +161 -161
- 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/security-net.js +201 -0
- 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/modulos.json +41 -6
- package/manifiestos/perfiles.json +2 -1
- package/manifiestos/skills-lock.json +30 -9
- package/package.json +2 -2
- 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 +10 -2
- 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/audit-tools/audit-history.js +330 -0
- package/scripts/audit-tools/bundle-tracker.js +290 -0
- package/scripts/audit-tools/canary-monitor.js +352 -0
- package/scripts/audit-tools/code-profiler.js +605 -0
- package/scripts/audit-tools/dep-doctor.js +320 -0
- package/scripts/audit-tools/env-validator.js +206 -0
- package/scripts/audit-tools/lib/fs-walk.js +48 -0
- package/scripts/audit-tools/lib/output.js +23 -0
- package/scripts/audit-tools/migration-checker.js +392 -0
- package/scripts/audit-tools/pentest-scanner.js +1436 -0
- 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/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/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/manifiestos.js +42 -1
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- 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/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 +231 -195
- package/scripts/validar-userland-vacio.js +110 -110
|
@@ -1,233 +1,233 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:contribuir
|
|
3
|
-
description: Contribuye evoluciones de _userland/ al core de swl-ses creando un PR en GitHub. Filtra por dominio (solo ingeniería de software general), evalúa calidad con PluginEval (score ≥80 requerido) y crea el PR vía gh CLI. Flags: --skill=[nombre], --agente=[nombre], --dry-run.
|
|
4
|
-
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:contribuir — Contribuir evoluciones al core de swl-ses
|
|
8
|
-
|
|
9
|
-
Eres el facilitador de contribuciones del sistema SWL. Tu responsabilidad es tomar evoluciones que un usuario creó en `_userland/` y, si pasan los filtros de calidad y dominio, crear un Pull Request contra el repositorio oficial de swl-ses.
|
|
10
|
-
|
|
11
|
-
**Principio**: las evoluciones específicas de un proyecto se quedan en `_userland/` — solo evoluciones de dominio general pasan al core. Un skill de "configuración de Stripe para mi SaaS" no sube; un skill de "patrones de testing de APIs de pago" sí.
|
|
12
|
-
|
|
13
|
-
## Cuándo usar este comando
|
|
14
|
-
|
|
15
|
-
- Cuando el usuario evolucionó un agente o skill en `_userland/` y quiere compartirlo con la comunidad
|
|
16
|
-
- Después de `/swl:evolucionar` cuando el cambio aplica a cualquier proyecto de software
|
|
17
|
-
- Cuando se creó un skill nuevo con `/swl:crear-skill` que resuelve un problema general de ingeniería
|
|
18
|
-
|
|
19
|
-
## Prerrequisitos
|
|
20
|
-
|
|
21
|
-
1. **GitHub CLI (`gh`) autenticado** — verificar con `gh auth status`
|
|
22
|
-
2. **Evolución marcada** — el artefacto debe tener `evolved: true` en frontmatter o existir en `_userland/`
|
|
23
|
-
3. **Repositorio swl-ses accesible** — se necesita permiso de fork/PR
|
|
24
|
-
|
|
25
|
-
## Flags soportados
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
--skill=[nombre] Contribuir solo el skill indicado de _userland/habilidades/
|
|
29
|
-
--agente=[nombre] Contribuir solo el agente indicado de _userland/agentes/
|
|
30
|
-
--dry-run Ejecutar validaciones y evaluación sin crear PR
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Si no se pasa flag, escanea todo `_userland/` buscando candidatos.
|
|
34
|
-
|
|
35
|
-
## Paso 0 — Verificar prerrequisitos
|
|
36
|
-
|
|
37
|
-
Verificar que `gh` está instalado y autenticado:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
gh auth status
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Si falla:
|
|
44
|
-
- **No instalado**: indicar al usuario que instale GitHub CLI (ver MANUAL_USO.md § Dependencias externas)
|
|
45
|
-
- **No autenticado**: indicar al usuario que ejecute `! gh auth login` desde el prompt de Claude Code
|
|
46
|
-
|
|
47
|
-
DETENER si `gh auth status` no reporta una cuenta autenticada.
|
|
48
|
-
|
|
49
|
-
## Paso 1 — Escanear candidatos en _userland/
|
|
50
|
-
|
|
51
|
-
Buscar artefactos en `_userland/habilidades/` y `_userland/agentes/`:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
# Skills con SKILL.md
|
|
55
|
-
for dir in _userland/habilidades/*/; do
|
|
56
|
-
[ -f "$dir/SKILL.md" ] && echo "skill: $(basename $dir)"
|
|
57
|
-
done
|
|
58
|
-
|
|
59
|
-
# Agentes con .md
|
|
60
|
-
for f in _userland/agentes/*.md; do
|
|
61
|
-
[ -f "$f" ] && echo "agente: $(basename $f .md)"
|
|
62
|
-
done
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Si se pasó `--skill` o `--agente`, filtrar a solo ese candidato.
|
|
66
|
-
|
|
67
|
-
Si no hay candidatos, informar:
|
|
68
|
-
```
|
|
69
|
-
No se encontraron evoluciones en _userland/ para contribuir.
|
|
70
|
-
Usa /swl:evolucionar o /swl:crear-skill para generar evoluciones primero.
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Paso 2 — Filtro de dominio
|
|
74
|
-
|
|
75
|
-
Para cada candidato, leer su contenido y evaluar compatibilidad de dominio.
|
|
76
|
-
|
|
77
|
-
**Pregunta de filtro**: *¿Le sirve esto a un ingeniero de software en cualquier proyecto de software?*
|
|
78
|
-
|
|
79
|
-
**Dominios aceptados** (ingeniería de software general):
|
|
80
|
-
- SDLC, backend, frontend, QA, DevOps, seguridad, arquitectura
|
|
81
|
-
- Testing, CI/CD, monitoreo, observabilidad
|
|
82
|
-
- Patrones de diseño, refactoring, revisión de código
|
|
83
|
-
- APIs, bases de datos, infraestructura cloud
|
|
84
|
-
|
|
85
|
-
**Dominios rechazados** (verticales específicos):
|
|
86
|
-
- ML/AI productivo, ciencia de datos, bioinformática
|
|
87
|
-
- Finanzas, contabilidad, legal
|
|
88
|
-
- Dominio de negocio específico del proyecto
|
|
89
|
-
|
|
90
|
-
Para cada candidato rechazado, explicar por qué:
|
|
91
|
-
```
|
|
92
|
-
RECHAZADO: [nombre] — dominio "[dominio detectado]" no es ingeniería de software general.
|
|
93
|
-
Las evoluciones específicas de dominio se mantienen en _userland/ del proyecto.
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Paso 3 — Evaluación PluginEval
|
|
97
|
-
|
|
98
|
-
Para cada candidato que pasó el filtro de dominio, ejecutar evaluación de calidad.
|
|
99
|
-
|
|
100
|
-
Cargar:
|
|
101
|
-
```
|
|
102
|
-
Skill("evaluacion-agentes")
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Ejecutar evaluación completa (2 capas). El score mínimo para contribuir es **80/100** (badge Oro).
|
|
106
|
-
|
|
107
|
-
- **Score ≥ 80**: APROBADO — continuar al siguiente paso
|
|
108
|
-
- **Score 60-79**: RECHAZADO con recomendaciones de mejora
|
|
109
|
-
- **Score < 60**: RECHAZADO — necesita trabajo significativo
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
EVALUACIÓN: [nombre]
|
|
113
|
-
Capa 1 (estática): [N] errores, [N] advertencias
|
|
114
|
-
Capa 2 (semántica): [score]/100 — badge [badge]
|
|
115
|
-
Veredicto: [APROBADO | RECHAZADO]
|
|
116
|
-
[Si rechazado: top 3 mejoras recomendadas]
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Si `--dry-run`: presentar resultados de evaluación y TERMINAR.
|
|
120
|
-
|
|
121
|
-
## Paso 4 — Preparar contribución
|
|
122
|
-
|
|
123
|
-
Para cada candidato aprobado:
|
|
124
|
-
|
|
125
|
-
1. **Guardar ruta del workspace original** antes de cambiar de directorio:
|
|
126
|
-
```bash
|
|
127
|
-
WORKSPACE_DIR=$(pwd)
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
2. **Crear fork** (si no existe) del repo oficial de swl-ses y obtener el nombre del fork:
|
|
131
|
-
```bash
|
|
132
|
-
gh repo fork saul-wade/swl-ses --clone=false
|
|
133
|
-
FORK_REPO=$(gh api user --jq '.login')/swl-ses
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
3. **Clonar el fork** y crear branch descriptivo:
|
|
137
|
-
```bash
|
|
138
|
-
gh repo clone "$FORK_REPO" /tmp/swl-ses-contrib
|
|
139
|
-
cd /tmp/swl-ses-contrib
|
|
140
|
-
git checkout -b contrib/[tipo]-[nombre]
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
4. **Copiar artefacto** desde el workspace original al clon del fork:
|
|
144
|
-
- Skills: `$WORKSPACE_DIR/_userland/habilidades/[nombre]/` → `habilidades/[nombre]/`
|
|
145
|
-
- Agentes: `$WORKSPACE_DIR/_userland/agentes/[nombre].md` → `agentes/[nombre].md`
|
|
146
|
-
|
|
147
|
-
4. **Ajustar frontmatter** — agregar campos de contribución:
|
|
148
|
-
```yaml
|
|
149
|
-
contributed: true
|
|
150
|
-
contributed-from: "_userland"
|
|
151
|
-
contributed-at: "[fecha YYYY-MM-DD]"
|
|
152
|
-
contributed-by: "[usuario gh]"
|
|
153
|
-
plugineval-score: [score]
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
5. **Registrar en plugin.json** si es necesario
|
|
157
|
-
|
|
158
|
-
## Paso 5 — Crear Pull Request
|
|
159
|
-
|
|
160
|
-
Crear el PR con template estructurado:
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
git add .
|
|
164
|
-
git commit -m "contrib([tipo]): agrega [nombre] desde _userland
|
|
165
|
-
|
|
166
|
-
Evaluado con PluginEval: [score]/100 (badge [badge]).
|
|
167
|
-
Dominio: ingeniería de software general.
|
|
168
|
-
|
|
169
|
-
Co-Authored-By: swl-ses <noreply@swl-ses>"
|
|
170
|
-
|
|
171
|
-
git push origin contrib/[tipo]-[nombre]
|
|
172
|
-
|
|
173
|
-
gh pr create \
|
|
174
|
-
--repo saul-wade/swl-ses \
|
|
175
|
-
--title "contrib([tipo]): [nombre]" \
|
|
176
|
-
--body "$(cat <<'EOF'
|
|
177
|
-
## Contribución desde _userland
|
|
178
|
-
|
|
179
|
-
**Tipo**: [skill | agente]
|
|
180
|
-
**Nombre**: [nombre]
|
|
181
|
-
**Dominio**: [dominio detectado]
|
|
182
|
-
**PluginEval**: [score]/100 — badge [badge]
|
|
183
|
-
|
|
184
|
-
## Descripción
|
|
185
|
-
|
|
186
|
-
[Descripción extraída del artefacto]
|
|
187
|
-
|
|
188
|
-
## Evidencia de calidad
|
|
189
|
-
|
|
190
|
-
- Capa 1 (estática): [N] errores, [N] advertencias
|
|
191
|
-
- Capa 2 (semántica): [score]/100
|
|
192
|
-
- Filtro de dominio: APROBADO (ingeniería de software general)
|
|
193
|
-
|
|
194
|
-
## Checklist
|
|
195
|
-
|
|
196
|
-
- [ ] Score PluginEval ≥ 80
|
|
197
|
-
- [ ] Dominio: ingeniería de software general
|
|
198
|
-
- [ ] Sin credenciales hardcodeadas
|
|
199
|
-
- [ ] Frontmatter válido
|
|
200
|
-
- [ ] No duplica skill/agente existente
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
Generado por `/swl:contribuir` — swl-ses v[versión]
|
|
204
|
-
EOF
|
|
205
|
-
)"
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
## Paso 6 — Reporte final
|
|
209
|
-
|
|
210
|
-
```
|
|
211
|
-
=== Contribución completada ===
|
|
212
|
-
|
|
213
|
-
Candidatos escaneados: [N]
|
|
214
|
-
Filtro de dominio: [N] aprobados, [N] rechazados
|
|
215
|
-
Evaluación PluginEval: [N] aprobados (≥80), [N] rechazados
|
|
216
|
-
PRs creados: [N]
|
|
217
|
-
|
|
218
|
-
[Para cada PR creado:]
|
|
219
|
-
→ [nombre]: [URL del PR]
|
|
220
|
-
|
|
221
|
-
Los PRs serán revisados por los mantenedores de swl-ses.
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
## Reglas de comportamiento
|
|
225
|
-
|
|
226
|
-
- NUNCA crear un PR sin que el candidato haya pasado AMBOS filtros (dominio + PluginEval ≥ 80).
|
|
227
|
-
- NUNCA contribuir artefactos que contengan credenciales, tokens o datos del proyecto del usuario.
|
|
228
|
-
- NUNCA modificar artefactos del core existente — solo agregar nuevos.
|
|
229
|
-
- Si el artefacto duplica funcionalidad de uno existente en el core, RECHAZAR y sugerir `/swl:evolucionar` en su lugar.
|
|
230
|
-
- Si `gh auth status` falla, DETENER inmediatamente — no intentar autenticación automática.
|
|
231
|
-
- En `--dry-run`, el reporte debe ser completo y accionable sin crear ningún PR.
|
|
232
|
-
- Los artefactos contribuidos mantienen su autoría original (campo `contributed-by`).
|
|
233
|
-
- SIEMPRE verificar que el nombre del artefacto no colisione con uno existente en el core antes de crear el PR.
|
|
1
|
+
---
|
|
2
|
+
name: swl:contribuir
|
|
3
|
+
description: Contribuye evoluciones de _userland/ al core de swl-ses creando un PR en GitHub. Filtra por dominio (solo ingeniería de software general), evalúa calidad con PluginEval (score ≥80 requerido) y crea el PR vía gh CLI. Flags: --skill=[nombre], --agente=[nombre], --dry-run.
|
|
4
|
+
allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:contribuir — Contribuir evoluciones al core de swl-ses
|
|
8
|
+
|
|
9
|
+
Eres el facilitador de contribuciones del sistema SWL. Tu responsabilidad es tomar evoluciones que un usuario creó en `_userland/` y, si pasan los filtros de calidad y dominio, crear un Pull Request contra el repositorio oficial de swl-ses.
|
|
10
|
+
|
|
11
|
+
**Principio**: las evoluciones específicas de un proyecto se quedan en `_userland/` — solo evoluciones de dominio general pasan al core. Un skill de "configuración de Stripe para mi SaaS" no sube; un skill de "patrones de testing de APIs de pago" sí.
|
|
12
|
+
|
|
13
|
+
## Cuándo usar este comando
|
|
14
|
+
|
|
15
|
+
- Cuando el usuario evolucionó un agente o skill en `_userland/` y quiere compartirlo con la comunidad
|
|
16
|
+
- Después de `/swl:evolucionar` cuando el cambio aplica a cualquier proyecto de software
|
|
17
|
+
- Cuando se creó un skill nuevo con `/swl:crear-skill` que resuelve un problema general de ingeniería
|
|
18
|
+
|
|
19
|
+
## Prerrequisitos
|
|
20
|
+
|
|
21
|
+
1. **GitHub CLI (`gh`) autenticado** — verificar con `gh auth status`
|
|
22
|
+
2. **Evolución marcada** — el artefacto debe tener `evolved: true` en frontmatter o existir en `_userland/`
|
|
23
|
+
3. **Repositorio swl-ses accesible** — se necesita permiso de fork/PR
|
|
24
|
+
|
|
25
|
+
## Flags soportados
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
--skill=[nombre] Contribuir solo el skill indicado de _userland/habilidades/
|
|
29
|
+
--agente=[nombre] Contribuir solo el agente indicado de _userland/agentes/
|
|
30
|
+
--dry-run Ejecutar validaciones y evaluación sin crear PR
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Si no se pasa flag, escanea todo `_userland/` buscando candidatos.
|
|
34
|
+
|
|
35
|
+
## Paso 0 — Verificar prerrequisitos
|
|
36
|
+
|
|
37
|
+
Verificar que `gh` está instalado y autenticado:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
gh auth status
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Si falla:
|
|
44
|
+
- **No instalado**: indicar al usuario que instale GitHub CLI (ver MANUAL_USO.md § Dependencias externas)
|
|
45
|
+
- **No autenticado**: indicar al usuario que ejecute `! gh auth login` desde el prompt de Claude Code
|
|
46
|
+
|
|
47
|
+
DETENER si `gh auth status` no reporta una cuenta autenticada.
|
|
48
|
+
|
|
49
|
+
## Paso 1 — Escanear candidatos en _userland/
|
|
50
|
+
|
|
51
|
+
Buscar artefactos en `_userland/habilidades/` y `_userland/agentes/`:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Skills con SKILL.md
|
|
55
|
+
for dir in _userland/habilidades/*/; do
|
|
56
|
+
[ -f "$dir/SKILL.md" ] && echo "skill: $(basename $dir)"
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
# Agentes con .md
|
|
60
|
+
for f in _userland/agentes/*.md; do
|
|
61
|
+
[ -f "$f" ] && echo "agente: $(basename $f .md)"
|
|
62
|
+
done
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Si se pasó `--skill` o `--agente`, filtrar a solo ese candidato.
|
|
66
|
+
|
|
67
|
+
Si no hay candidatos, informar:
|
|
68
|
+
```
|
|
69
|
+
No se encontraron evoluciones en _userland/ para contribuir.
|
|
70
|
+
Usa /swl:evolucionar o /swl:crear-skill para generar evoluciones primero.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Paso 2 — Filtro de dominio
|
|
74
|
+
|
|
75
|
+
Para cada candidato, leer su contenido y evaluar compatibilidad de dominio.
|
|
76
|
+
|
|
77
|
+
**Pregunta de filtro**: *¿Le sirve esto a un ingeniero de software en cualquier proyecto de software?*
|
|
78
|
+
|
|
79
|
+
**Dominios aceptados** (ingeniería de software general):
|
|
80
|
+
- SDLC, backend, frontend, QA, DevOps, seguridad, arquitectura
|
|
81
|
+
- Testing, CI/CD, monitoreo, observabilidad
|
|
82
|
+
- Patrones de diseño, refactoring, revisión de código
|
|
83
|
+
- APIs, bases de datos, infraestructura cloud
|
|
84
|
+
|
|
85
|
+
**Dominios rechazados** (verticales específicos):
|
|
86
|
+
- ML/AI productivo, ciencia de datos, bioinformática
|
|
87
|
+
- Finanzas, contabilidad, legal
|
|
88
|
+
- Dominio de negocio específico del proyecto
|
|
89
|
+
|
|
90
|
+
Para cada candidato rechazado, explicar por qué:
|
|
91
|
+
```
|
|
92
|
+
RECHAZADO: [nombre] — dominio "[dominio detectado]" no es ingeniería de software general.
|
|
93
|
+
Las evoluciones específicas de dominio se mantienen en _userland/ del proyecto.
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Paso 3 — Evaluación PluginEval
|
|
97
|
+
|
|
98
|
+
Para cada candidato que pasó el filtro de dominio, ejecutar evaluación de calidad.
|
|
99
|
+
|
|
100
|
+
Cargar:
|
|
101
|
+
```
|
|
102
|
+
Skill("evaluacion-agentes")
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Ejecutar evaluación completa (2 capas). El score mínimo para contribuir es **80/100** (badge Oro).
|
|
106
|
+
|
|
107
|
+
- **Score ≥ 80**: APROBADO — continuar al siguiente paso
|
|
108
|
+
- **Score 60-79**: RECHAZADO con recomendaciones de mejora
|
|
109
|
+
- **Score < 60**: RECHAZADO — necesita trabajo significativo
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
EVALUACIÓN: [nombre]
|
|
113
|
+
Capa 1 (estática): [N] errores, [N] advertencias
|
|
114
|
+
Capa 2 (semántica): [score]/100 — badge [badge]
|
|
115
|
+
Veredicto: [APROBADO | RECHAZADO]
|
|
116
|
+
[Si rechazado: top 3 mejoras recomendadas]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Si `--dry-run`: presentar resultados de evaluación y TERMINAR.
|
|
120
|
+
|
|
121
|
+
## Paso 4 — Preparar contribución
|
|
122
|
+
|
|
123
|
+
Para cada candidato aprobado:
|
|
124
|
+
|
|
125
|
+
1. **Guardar ruta del workspace original** antes de cambiar de directorio:
|
|
126
|
+
```bash
|
|
127
|
+
WORKSPACE_DIR=$(pwd)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
2. **Crear fork** (si no existe) del repo oficial de swl-ses y obtener el nombre del fork:
|
|
131
|
+
```bash
|
|
132
|
+
gh repo fork saul-wade/swl-ses --clone=false
|
|
133
|
+
FORK_REPO=$(gh api user --jq '.login')/swl-ses
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
3. **Clonar el fork** y crear branch descriptivo:
|
|
137
|
+
```bash
|
|
138
|
+
gh repo clone "$FORK_REPO" /tmp/swl-ses-contrib
|
|
139
|
+
cd /tmp/swl-ses-contrib
|
|
140
|
+
git checkout -b contrib/[tipo]-[nombre]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
4. **Copiar artefacto** desde el workspace original al clon del fork:
|
|
144
|
+
- Skills: `$WORKSPACE_DIR/_userland/habilidades/[nombre]/` → `habilidades/[nombre]/`
|
|
145
|
+
- Agentes: `$WORKSPACE_DIR/_userland/agentes/[nombre].md` → `agentes/[nombre].md`
|
|
146
|
+
|
|
147
|
+
4. **Ajustar frontmatter** — agregar campos de contribución:
|
|
148
|
+
```yaml
|
|
149
|
+
contributed: true
|
|
150
|
+
contributed-from: "_userland"
|
|
151
|
+
contributed-at: "[fecha YYYY-MM-DD]"
|
|
152
|
+
contributed-by: "[usuario gh]"
|
|
153
|
+
plugineval-score: [score]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
5. **Registrar en plugin.json** si es necesario
|
|
157
|
+
|
|
158
|
+
## Paso 5 — Crear Pull Request
|
|
159
|
+
|
|
160
|
+
Crear el PR con template estructurado:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
git add .
|
|
164
|
+
git commit -m "contrib([tipo]): agrega [nombre] desde _userland
|
|
165
|
+
|
|
166
|
+
Evaluado con PluginEval: [score]/100 (badge [badge]).
|
|
167
|
+
Dominio: ingeniería de software general.
|
|
168
|
+
|
|
169
|
+
Co-Authored-By: swl-ses <noreply@swl-ses>"
|
|
170
|
+
|
|
171
|
+
git push origin contrib/[tipo]-[nombre]
|
|
172
|
+
|
|
173
|
+
gh pr create \
|
|
174
|
+
--repo saul-wade/swl-ses \
|
|
175
|
+
--title "contrib([tipo]): [nombre]" \
|
|
176
|
+
--body "$(cat <<'EOF'
|
|
177
|
+
## Contribución desde _userland
|
|
178
|
+
|
|
179
|
+
**Tipo**: [skill | agente]
|
|
180
|
+
**Nombre**: [nombre]
|
|
181
|
+
**Dominio**: [dominio detectado]
|
|
182
|
+
**PluginEval**: [score]/100 — badge [badge]
|
|
183
|
+
|
|
184
|
+
## Descripción
|
|
185
|
+
|
|
186
|
+
[Descripción extraída del artefacto]
|
|
187
|
+
|
|
188
|
+
## Evidencia de calidad
|
|
189
|
+
|
|
190
|
+
- Capa 1 (estática): [N] errores, [N] advertencias
|
|
191
|
+
- Capa 2 (semántica): [score]/100
|
|
192
|
+
- Filtro de dominio: APROBADO (ingeniería de software general)
|
|
193
|
+
|
|
194
|
+
## Checklist
|
|
195
|
+
|
|
196
|
+
- [ ] Score PluginEval ≥ 80
|
|
197
|
+
- [ ] Dominio: ingeniería de software general
|
|
198
|
+
- [ ] Sin credenciales hardcodeadas
|
|
199
|
+
- [ ] Frontmatter válido
|
|
200
|
+
- [ ] No duplica skill/agente existente
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
Generado por `/swl:contribuir` — swl-ses v[versión]
|
|
204
|
+
EOF
|
|
205
|
+
)"
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Paso 6 — Reporte final
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
=== Contribución completada ===
|
|
212
|
+
|
|
213
|
+
Candidatos escaneados: [N]
|
|
214
|
+
Filtro de dominio: [N] aprobados, [N] rechazados
|
|
215
|
+
Evaluación PluginEval: [N] aprobados (≥80), [N] rechazados
|
|
216
|
+
PRs creados: [N]
|
|
217
|
+
|
|
218
|
+
[Para cada PR creado:]
|
|
219
|
+
→ [nombre]: [URL del PR]
|
|
220
|
+
|
|
221
|
+
Los PRs serán revisados por los mantenedores de swl-ses.
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Reglas de comportamiento
|
|
225
|
+
|
|
226
|
+
- NUNCA crear un PR sin que el candidato haya pasado AMBOS filtros (dominio + PluginEval ≥ 80).
|
|
227
|
+
- NUNCA contribuir artefactos que contengan credenciales, tokens o datos del proyecto del usuario.
|
|
228
|
+
- NUNCA modificar artefactos del core existente — solo agregar nuevos.
|
|
229
|
+
- Si el artefacto duplica funcionalidad de uno existente en el core, RECHAZAR y sugerir `/swl:evolucionar` en su lugar.
|
|
230
|
+
- Si `gh auth status` falla, DETENER inmediatamente — no intentar autenticación automática.
|
|
231
|
+
- En `--dry-run`, el reporte debe ser completo y accionable sin crear ningún PR.
|
|
232
|
+
- Los artefactos contribuidos mantienen su autoría original (campo `contributed-by`).
|
|
233
|
+
- SIEMPRE verificar que el nombre del artefacto no colisione con uno existente en el core antes de crear el PR.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:nemesis
|
|
3
|
+
description: >
|
|
4
|
+
Auditoría iterativa Feynman + State Inconsistency (loop hasta convergencia).
|
|
5
|
+
Invoca el agente nemesis-auditor-swl con los 2 skills subordinados.
|
|
6
|
+
Persiste hallazgos en .planning/audit/findings/.
|
|
7
|
+
allowed-tools: [Read, Grep, Glob, Bash, Write, Agent]
|
|
8
|
+
argument-hint: "[--pass1 | --pass2 | --continue | --modulo <ruta>]"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /swl:nemesis — Auditoría iterativa de profundidad
|
|
12
|
+
|
|
13
|
+
Dos auditores en loop: Feynman interroga suposiciones línea por línea; State
|
|
14
|
+
Inconsistency mapea pares de estado acoplado y encuentra mutaciones
|
|
15
|
+
incompletas. Cada pasada alimenta la siguiente hasta que no aparecen hallazgos
|
|
16
|
+
nuevos o se llega al máximo de 6 pasadas.
|
|
17
|
+
|
|
18
|
+
## Cuándo invocar
|
|
19
|
+
|
|
20
|
+
- El módulo pasó `/swl:revisar` con score ≥ 9.0 pero hay sospechas de bugs
|
|
21
|
+
de lógica profunda que el revisor de código no captura (suposiciones
|
|
22
|
+
incorrectas, invariantes rotos, condiciones de carrera sutiles).
|
|
23
|
+
- Antes de un release de componente crítico: auth, pagos, contratos, permisos.
|
|
24
|
+
- Cuando un bug en producción se atribuye a lógica aparentemente correcta —
|
|
25
|
+
usar Nemesis para encontrar el patrón de fallo subyacente.
|
|
26
|
+
- Para módulos legacy con alta deuda técnica donde los tests no cubren los
|
|
27
|
+
caminos de estado.
|
|
28
|
+
|
|
29
|
+
## Cuándo NO invocar
|
|
30
|
+
|
|
31
|
+
- El módulo tiene menos de 200 LOC y es CRUD simple sin lógica de negocio.
|
|
32
|
+
- Se necesita revisión de estilo, naming o cobertura de tests — usar
|
|
33
|
+
`/swl:revisar` en su lugar.
|
|
34
|
+
- El proyecto no tiene `agentes/nemesis-auditor-swl.md` instalado — verificar
|
|
35
|
+
con `ls agentes/ | grep nemesis` antes de invocar.
|
|
36
|
+
- La tarea urgente es un hotfix en producción — Nemesis es deliberado (8-20
|
|
37
|
+
turnos); en incidente activo, usar `/swl:verificar` acotado.
|
|
38
|
+
|
|
39
|
+
## Modos disponibles
|
|
40
|
+
|
|
41
|
+
| Modo | Flag | Descripción |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| Loop completo (default) | (sin flag) | Pasada 1 (Feynman) + Pasada 2 (State) + N pasadas alternadas hasta convergencia, máximo 6 en total |
|
|
44
|
+
| Solo Feynman | `--pass1` | Una pasada Feynman exhaustiva; no ejecuta State |
|
|
45
|
+
| Solo State | `--pass2` | Una pasada State Inconsistency; puede alimentarse con findings previos de Feynman si existen en `.planning/audit/findings/` |
|
|
46
|
+
| Retomar | `--continue` | Continúa desde la última pasada registrada en `.planning/audit/findings/`; útil si la sesión se interrumpió |
|
|
47
|
+
| Acotar módulo | `--modulo <ruta>` | Limita el scope a un archivo o subdirectorio específico; se puede combinar con cualquier otro flag |
|
|
48
|
+
|
|
49
|
+
## Qué produce
|
|
50
|
+
|
|
51
|
+
Todos los archivos se crean en `.planning/audit/findings/`:
|
|
52
|
+
|
|
53
|
+
| Archivo | Cuándo se genera |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `feynman-pass[N].md` | Al completar cada pasada Feynman (N = número de pasada) |
|
|
56
|
+
| `state-pass[N].md` | Al completar cada pasada State Inconsistency |
|
|
57
|
+
| `nemesis-verified.md` | Al final del loop completo; consolida todos los hallazgos con estado de verificación |
|
|
58
|
+
|
|
59
|
+
Si el directorio `.planning/audit/findings/` no existe, el agente lo crea antes
|
|
60
|
+
de la primera escritura.
|
|
61
|
+
|
|
62
|
+
## Cómo interpretar el reporte
|
|
63
|
+
|
|
64
|
+
Cada hallazgo en los archivos de pasada usa este formato:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
## [SEVERIDAD] Título del hallazgo
|
|
68
|
+
|
|
69
|
+
**Discovery path**: Feynman-only | State-only | Cross-feed Pass N → Pass M
|
|
70
|
+
**Verification**: Code trace | PoC test | Both
|
|
71
|
+
**Líneas afectadas**: archivo:L1-L2
|
|
72
|
+
|
|
73
|
+
Descripción del problema y por qué es un bug y no solo código sospechoso.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Severidades**:
|
|
77
|
+
|
|
78
|
+
| Nivel | Criterio |
|
|
79
|
+
|---|---|
|
|
80
|
+
| CRITICAL | Explotable sin precondiciones; pérdida de datos o control total |
|
|
81
|
+
| HIGH | Explotable bajo condiciones razonables; impacto severo |
|
|
82
|
+
| MEDIUM | Requiere condiciones específicas; impacto moderado |
|
|
83
|
+
| LOW | Impacto menor o difícil de explotar; documentar para trazabilidad |
|
|
84
|
+
|
|
85
|
+
**Discovery path** indica cuándo se encontró:
|
|
86
|
+
|
|
87
|
+
- `Feynman-only`: Feynman lo detectó; State no lo confirmó ni refutó.
|
|
88
|
+
- `State-only`: State Inconsistency lo encontró analizando mutaciones.
|
|
89
|
+
- `Cross-feed Pass N → Pass M`: Feynman marcó un sospechoso en la pasada N;
|
|
90
|
+
State lo confirmó como bug real en la pasada M (o viceversa). Estos
|
|
91
|
+
hallazgos son los más confiables.
|
|
92
|
+
|
|
93
|
+
**Verification** indica la evidencia disponible:
|
|
94
|
+
|
|
95
|
+
- `Code trace`: el path al bug se puede seguir leyendo el código.
|
|
96
|
+
- `PoC test`: hay un caso de prueba que demuestra el comportamiento incorrecto.
|
|
97
|
+
- `Both`: lo más sólido; implica un test listo para agregar a la suite.
|
|
98
|
+
|
|
99
|
+
## Costo estimado
|
|
100
|
+
|
|
101
|
+
| Modo | Turnos aproximados |
|
|
102
|
+
|---|---|
|
|
103
|
+
| Loop completo, módulo pequeño (< 500 LOC) | 8-12 turnos |
|
|
104
|
+
| Loop completo, módulo mediano (500-2000 LOC) | 12-18 turnos |
|
|
105
|
+
| Loop completo, módulo grande (> 2000 LOC) | 18-30 turnos |
|
|
106
|
+
| Solo `--pass1` o `--pass2` | 4-8 turnos |
|
|
107
|
+
|
|
108
|
+
Para módulos mayores a 5000 LOC, usar `--modulo <ruta>` para acotar el scope.
|
|
109
|
+
Un loop sobre un módulo gigante puede tomar 30+ turnos sin garantía de que los
|
|
110
|
+
hallazgos sean más útiles que los de un subconjunto bien elegido.
|
|
111
|
+
|
|
112
|
+
## Ejemplos de invocación
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
/swl:nemesis # loop completo del proyecto
|
|
116
|
+
/swl:nemesis --modulo src/auth # acotado al módulo auth
|
|
117
|
+
/swl:nemesis --pass1 --modulo src/auth # solo Feynman sobre auth
|
|
118
|
+
/swl:nemesis --pass2 # solo State sobre findings existentes
|
|
119
|
+
/swl:nemesis --continue # retoma desde la última pasada guardada
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
<!-- Adaptado de nemesis-auditor-main bajo MIT License (transmissions11/nemesis-auditor) -->
|
package/comandos/swl/salud.md
CHANGED
|
@@ -33,6 +33,34 @@ echo "Reglas: $(ls reglas/*.md 2>/dev/null | wc -l)" && \
|
|
|
33
33
|
echo "Hooks: $(ls hooks/*.js 2>/dev/null | wc -l)"
|
|
34
34
|
```
|
|
35
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
|
+
|
|
36
64
|
## Paso 1 — Diagnóstico de agentes (determinista)
|
|
37
65
|
|
|
38
66
|
Ejecutar script Bash que verifica cada agente mecánicamente:
|
|
@@ -65,6 +93,8 @@ echo "Agentes: $ok OK, $warns advertencias, $errors errores"
|
|
|
65
93
|
|
|
66
94
|
Score de agentes = `(ok / total) * 100`
|
|
67
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
|
+
|
|
68
98
|
## Paso 2 — Diagnóstico de skills (determinista)
|
|
69
99
|
|
|
70
100
|
```bash
|
|
@@ -109,6 +139,8 @@ grep -r "Skill(" agentes/ comandos/ 2>/dev/null | grep -o '"[^"]*"' | sort | uni
|
|
|
109
139
|
|
|
110
140
|
Score de skills = `((total - errors*10 - warns*2) / total) * 100`, mínimo 0
|
|
111
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
|
+
|
|
112
144
|
## Paso 3 — Diagnóstico de comandos (determinista)
|
|
113
145
|
|
|
114
146
|
```bash
|
|
@@ -413,3 +445,5 @@ Presenta resumen con los problemas más críticos. Si hay errores, listarlos tod
|
|
|
413
445
|
- Los scores son aritmética pura. No ajustar el score "porque parece un sistema sano".
|
|
414
446
|
- Si no hay git, omitir verificaciones dependientes y notar la omisión.
|
|
415
447
|
- Si detectas un patrón sistémico (mismo error en múltiples componentes), mencionarlo en recomendaciones.
|
|
448
|
+
|
|
449
|
+
<!-- Patrón de 3 tiers adaptado de Waza/skills/health bajo MIT License (tw93/Waza) -->
|