@saulwade/swl-ses 1.5.0 → 1.5.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 +19 -2
- package/README.md +561 -561
- package/agentes/arquitecto-swl.md +33 -1
- package/agentes/nemesis-auditor-swl.md +59 -19
- package/bin/swl-mcp-server.js +214 -214
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/nemesis.md +230 -56
- 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/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- 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/SKILL.md +225 -1
- 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/nemesis-evaluacion-json/SKILL.md +266 -0
- package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
- package/habilidades/node-experto/SKILL.md +105 -4
- 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/protocolo-revision-swl/SKILL.md +350 -276
- package/habilidades/release-semver/.evolved.json +8 -8
- package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- package/habilidades/tdd-workflow/SKILL.md +150 -4
- package/habilidades/testing-python/SKILL.md +340 -340
- package/habilidades/verificar-trabajo/SKILL.md +8 -3
- package/habilidades/web-fetcher-routing/SKILL.md +75 -75
- package/hooks/check-update.js +31 -3
- 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 -201
- 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 +1324 -1321
- package/manifiestos/skills-lock.json +1114 -1114
- 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 +353 -351
- 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/registro-componentes-nuevos.md +192 -0
- package/reglas/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/actualizar.js +110 -1
- package/scripts/audit-tools/audit-history.js +330 -330
- package/scripts/audit-tools/bundle-tracker.js +290 -290
- package/scripts/audit-tools/canary-monitor.js +352 -352
- package/scripts/audit-tools/code-profiler.js +605 -605
- package/scripts/audit-tools/dep-doctor.js +320 -320
- package/scripts/audit-tools/env-validator.js +206 -206
- package/scripts/audit-tools/lib/fs-walk.js +48 -48
- package/scripts/audit-tools/lib/output.js +23 -23
- package/scripts/audit-tools/migration-checker.js +392 -392
- package/scripts/audit-tools/pentest-scanner.js +1436 -1436
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/derivar-feature-list.js +489 -489
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +58 -4
- 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/expandir-targets.js +71 -71
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/mcp_config.py +127 -0
- 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/lib/toml-merge.js +204 -204
- package/scripts/lib/transformadores/codex.js +375 -375
- package/scripts/lib/transformadores/cursor.js +359 -359
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-orchestrator.py +8 -18
- package/scripts/mcp-pool-manager.py +12 -23
- package/scripts/mcp-server/README.md +170 -170
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/mcp-server/telemetry.js +78 -78
- 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-userland-vacio.js +110 -110
package/comandos/swl/nemesis.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: swl:nemesis
|
|
3
3
|
description: >
|
|
4
|
-
Auditoría iterativa Feynman + State Inconsistency
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
Auditoría iterativa Feynman + State Inconsistency con loop evaluator-optimizer
|
|
5
|
+
opcional. Sin flag --remediar: solo audita (comportamiento clásico de
|
|
6
|
+
v1.5.x). Con --remediar: ciclo audit→fix→re-audit hasta convergencia
|
|
7
|
+
(max 3 iteraciones, Recovery Catalog si no converge). Modo redistribuido
|
|
8
|
+
automático para scope > 1500 LOC o > 5 archivos en módulos distintos.
|
|
9
|
+
Persiste hallazgos en .planning/audit/findings/iter-N/.
|
|
10
|
+
allowed-tools: [Read, Grep, Glob, Bash, Write, Agent, Skill]
|
|
11
|
+
argument-hint: "[--remediar] [--pass1 | --pass2 | --continue] [--modulo <ruta>] [--redistribuir] [--reset-plan]"
|
|
9
12
|
---
|
|
10
13
|
|
|
11
|
-
# /swl:nemesis — Auditoría iterativa
|
|
14
|
+
# /swl:nemesis — Auditoría iterativa con remediación opt-in
|
|
12
15
|
|
|
13
|
-
Dos auditores en loop
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
Dos auditores en loop interno (Feynman + State Inconsistency) detectan bugs de
|
|
17
|
+
profundidad que el código superficialmente correcto esconde. Con el flag
|
|
18
|
+
`--remediar` el comando entra en modo **evaluator-optimizer** (patrón oficial
|
|
19
|
+
de Anthropic, ADR-0021): el agente nemesis evalúa, el orquestador-swl remedia,
|
|
20
|
+
y el ciclo continúa hasta convergencia o agotar el guardrail de 3 iteraciones.
|
|
17
21
|
|
|
18
22
|
## Cuándo invocar
|
|
19
23
|
|
|
@@ -25,6 +29,8 @@ nuevos o se llega al máximo de 6 pasadas.
|
|
|
25
29
|
usar Nemesis para encontrar el patrón de fallo subyacente.
|
|
26
30
|
- Para módulos legacy con alta deuda técnica donde los tests no cubren los
|
|
27
31
|
caminos de estado.
|
|
32
|
+
- **Para cerrar el loop audit→fix→re-audit en una sola invocación**: usar
|
|
33
|
+
`/swl:nemesis --remediar`. La autonomía es opt-in.
|
|
28
34
|
|
|
29
35
|
## Cuándo NO invocar
|
|
30
36
|
|
|
@@ -33,56 +39,186 @@ nuevos o se llega al máximo de 6 pasadas.
|
|
|
33
39
|
`/swl:revisar` en su lugar.
|
|
34
40
|
- El proyecto no tiene `agentes/nemesis-auditor-swl.md` instalado — verificar
|
|
35
41
|
con `ls agentes/ | grep nemesis` antes de invocar.
|
|
36
|
-
- La tarea urgente es un hotfix en producción — Nemesis
|
|
37
|
-
turnos); en incidente activo, usar `/swl:verificar` acotado.
|
|
42
|
+
- La tarea urgente es un hotfix en producción — Nemesis con `--remediar` es
|
|
43
|
+
deliberado (8-30 turnos); en incidente activo, usar `/swl:verificar` acotado.
|
|
38
44
|
|
|
39
45
|
## Modos disponibles
|
|
40
46
|
|
|
41
47
|
| Modo | Flag | Descripción |
|
|
42
48
|
|---|---|---|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
| Solo
|
|
46
|
-
|
|
|
47
|
-
|
|
|
49
|
+
| **Solo auditar** (default) | (sin flag) | Pasada 1 (Feynman) + Pasada 2 (State) + N alternadas hasta convergencia interna, máximo 6 pasadas. Entrega reporte. NO remedia. Retrocompatible con v1.5.x. |
|
|
50
|
+
| **Loop completo** | `--remediar` | Evaluator-optimizer: audita → invoca `orquestador-swl` con hallazgos → re-audita. Max 3 iteraciones. Convergencia cuando status=PASS. Recovery Catalog si no converge. |
|
|
51
|
+
| Solo Feynman | `--pass1` | Una pasada Feynman exhaustiva; no ejecuta State. Ortogonal a `--remediar`. |
|
|
52
|
+
| Solo State | `--pass2` | Una pasada State Inconsistency; puede alimentarse con findings previos. |
|
|
53
|
+
| Retomar | `--continue` | Continúa desde la última iteración registrada en `.planning/audit/findings/`. |
|
|
54
|
+
| Acotar módulo | `--modulo <ruta>` | Limita el scope a un archivo o subdirectorio específico. Se combina con cualquier otro flag. |
|
|
55
|
+
| Forzar redistribución | `--redistribuir` | Activa `Skill("nemesis-redistribuir")` aunque scope sea menor al umbral. |
|
|
56
|
+
| Reset del plan | `--reset-plan` | Regenera `nemesis-plan.json` desde cero (descarta plan previo). |
|
|
48
57
|
|
|
49
|
-
##
|
|
58
|
+
## Flujo completo con `--remediar`
|
|
50
59
|
|
|
51
|
-
|
|
60
|
+
```
|
|
61
|
+
# iter usa indexing 1-based para alinear con el agente y los output paths
|
|
62
|
+
# (.planning/audit/findings/iter-1/, iter-2/, iter-3/). Max 3 iteraciones.
|
|
63
|
+
iter = 1
|
|
64
|
+
MAX_ITER = 3
|
|
65
|
+
evaluacion = null
|
|
52
66
|
|
|
53
|
-
|
|
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 |
|
|
67
|
+
# Fase 0 del comando: análisis del scope
|
|
68
|
+
loc_total, modulos = analizar_scope(modulo_arg or "directorio actual")
|
|
58
69
|
|
|
59
|
-
|
|
60
|
-
|
|
70
|
+
# Decisión de redistribuir:
|
|
71
|
+
# 1. --redistribuir explícito siempre activa redistribución (override del usuario).
|
|
72
|
+
# 2. --modulo respeta el scope acotado por el usuario y NO redistribuye, aunque
|
|
73
|
+
# excede umbrales. El usuario ya delimitó intencionalmente.
|
|
74
|
+
# 3. Sin --modulo: umbrales automáticos (> 1500 LOC ó > 5 módulos distintos).
|
|
75
|
+
redistribuir = flag_redistribuir or (
|
|
76
|
+
not flag_modulo and (loc_total > 1500 or modulos > 5)
|
|
77
|
+
)
|
|
61
78
|
|
|
62
|
-
|
|
79
|
+
if redistribuir:
|
|
80
|
+
cargar Skill("nemesis-redistribuir")
|
|
81
|
+
plan = generar_plan_redistribuido(scope)
|
|
82
|
+
persistir plan en .planning/audit/nemesis-plan.json
|
|
83
|
+
sub_scopes = plan.sub_scopes
|
|
84
|
+
else:
|
|
85
|
+
sub_scopes = [scope_unico]
|
|
86
|
+
|
|
87
|
+
# Fase 1+: loop evaluator-optimizer (iter ∈ {1, 2, 3})
|
|
88
|
+
while iter <= MAX_ITER:
|
|
89
|
+
# Evaluator: invocar nemesis-auditor-swl una vez por sub-scope.
|
|
90
|
+
# En modo redistribuido cada sub_scope tiene un `id` (declarado en
|
|
91
|
+
# nemesis-plan.json) que el agente USA para construir la ruta de output
|
|
92
|
+
# `.planning/audit/findings/iter-N/<sub_id>/`. Sin sub_id, los reportes
|
|
93
|
+
# se sobrescribirían entre sub-scopes. En modo monolítico sub_id queda
|
|
94
|
+
# `null` y el agente escribe a `iter-N/` (sin subdirectorio).
|
|
95
|
+
for sub_scope in sub_scopes:
|
|
96
|
+
sub_id = sub_scope.id if redistribuir else null
|
|
97
|
+
invocar(nemesis-auditor-swl, sub_scope, iter=iter, sub_id=sub_id)
|
|
98
|
+
# Produce:
|
|
99
|
+
# redistribuido → .planning/audit/findings/iter-N/<sub_id>/evaluacion.json + .md
|
|
100
|
+
# monolítico → .planning/audit/findings/iter-N/evaluacion.json + .md
|
|
101
|
+
|
|
102
|
+
# Consolidar (si modo redistribuido)
|
|
103
|
+
evaluacion = consolidar_evaluaciones(iter)
|
|
104
|
+
# Produce: .planning/audit/findings/iter-N/evaluacion.json consolidado
|
|
105
|
+
# (en modo monolítico no hay consolidación: el archivo ya está en iter-N/)
|
|
106
|
+
|
|
107
|
+
# Decisión sobre el JSON consolidado
|
|
108
|
+
if evaluacion.veredicto.status == "PASS":
|
|
109
|
+
emitir_reporte_final(evaluacion)
|
|
110
|
+
return { exito: True, iters: iter, evaluacion } # convergencia
|
|
111
|
+
|
|
112
|
+
if not flag_remediar:
|
|
113
|
+
emitir_reporte(evaluacion)
|
|
114
|
+
return { exito: False, iters: iter, evaluacion } # solo audita
|
|
115
|
+
|
|
116
|
+
if evaluacion.veredicto.status == "FAIL":
|
|
117
|
+
return activar_recovery_catalog("escalate", evaluacion.veredicto.razon_si_fail)
|
|
63
118
|
|
|
64
|
-
|
|
119
|
+
if not evaluacion.veredicto.puede_remediar_automaticamente:
|
|
120
|
+
return activar_recovery_catalog("escalate", "Hallazgos no auto-remediables")
|
|
65
121
|
|
|
122
|
+
# Generator: invocar orquestador-swl con hallazgos como input
|
|
123
|
+
invocar(
|
|
124
|
+
orquestador-swl,
|
|
125
|
+
hallazgos=evaluacion.hallazgos,
|
|
126
|
+
feedback=evaluacion,
|
|
127
|
+
intentos_previos=hallazgos_de_iters_anteriores(iter),
|
|
128
|
+
iter=iter,
|
|
129
|
+
)
|
|
130
|
+
iter += 1
|
|
131
|
+
|
|
132
|
+
# max-iter agotado sin PASS
|
|
133
|
+
return activar_recovery_catalog_secuencial(evaluacion)
|
|
134
|
+
# orden: reprompt(1ª) → reduce-autonomy(2ª) → escalate(3ª)
|
|
66
135
|
```
|
|
67
|
-
## [SEVERIDAD] Título del hallazgo
|
|
68
136
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
137
|
+
Los `return` son explícitos. Sin `--remediar`, el `return` del bloque
|
|
138
|
+
`if not flag_remediar` impide que el flujo alcance la invocación del
|
|
139
|
+
orquestador. La retrocompatibilidad es por construcción.
|
|
140
|
+
|
|
141
|
+
## Activación de redistribución (Fase 0)
|
|
142
|
+
|
|
143
|
+
| Condición | Acción |
|
|
144
|
+
|---|---|
|
|
145
|
+
| `loc_total > 1500` | Cargar `Skill("nemesis-redistribuir")` |
|
|
146
|
+
| `archivos_modulos_distintos > 5` | Cargar `Skill("nemesis-redistribuir")` |
|
|
147
|
+
| `--redistribuir` explícito | Cargar `Skill("nemesis-redistribuir")` |
|
|
148
|
+
| `--modulo <ruta>` con scope acotado | NO redistribuir (respetar decisión explícita del usuario) |
|
|
149
|
+
|
|
150
|
+
Cuando se activa, el comando registra un nudge en `.planning/nudges.jsonl`:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"timestamp": "<ISO 8601>",
|
|
155
|
+
"tipo": "nemesis-redistribuido",
|
|
156
|
+
"mutation_category": "scope-adaptation",
|
|
157
|
+
"risk_level": "low",
|
|
158
|
+
"razon": "loc_total=3170 (>1500)",
|
|
159
|
+
"sub_scopes": 3,
|
|
160
|
+
"archivo_plan": ".planning/audit/nemesis-plan.json"
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Recovery Catalog cuando max-iter sin PASS
|
|
165
|
+
|
|
166
|
+
Tras 3 iteraciones del loop sin alcanzar `status=PASS`, el comando aplica en
|
|
167
|
+
orden estricto el catálogo de `reglas/seguridad-agentes.md § Recovery Catalog`:
|
|
168
|
+
|
|
169
|
+
1. **reprompt** (excedencia 1): re-invoca al orquestador con feedback reforzado
|
|
170
|
+
(qué hallazgos quedaron sin resolver, constraints adicionales). Una sola vez.
|
|
171
|
+
2. **reduce-autonomy** (excedencia 2 consecutiva): baja `nivelRiesgo` efectivo,
|
|
172
|
+
pide confirmación al usuario antes de cada acción del generator.
|
|
173
|
+
3. **escalate** (excedencia 3): pausa la cadena, invoca `notificador-swl`,
|
|
174
|
+
espera decisión humana del usuario.
|
|
175
|
+
4. **terminate**: solo si el evaluator detecta violación de regla de seguridad
|
|
176
|
+
explícita (no por simple no-convergencia).
|
|
177
|
+
|
|
178
|
+
Cada activación se registra en `.planning/nudges.jsonl` con
|
|
179
|
+
`mutation_category: repair` y `risk_level` proporcional.
|
|
180
|
+
|
|
181
|
+
## Qué produce
|
|
182
|
+
|
|
183
|
+
Estructura de salida bajo `.planning/audit/findings/`:
|
|
72
184
|
|
|
73
|
-
Descripción del problema y por qué es un bug y no solo código sospechoso.
|
|
74
185
|
```
|
|
186
|
+
.planning/audit/findings/
|
|
187
|
+
├── nemesis-plan.json # solo si modo redistribuido
|
|
188
|
+
├── iter-1/
|
|
189
|
+
│ ├── feynman-pass1.md # output crudo Feynman
|
|
190
|
+
│ ├── feynman-pass2.md # si hubo segunda pasada Feynman
|
|
191
|
+
│ ├── state-pass1.md # output crudo State
|
|
192
|
+
│ ├── state-pass2.md # si hubo segunda pasada State
|
|
193
|
+
│ ├── nemesis-verified.md # reporte legible consolidado
|
|
194
|
+
│ ├── evaluacion.json # veredicto estructurado
|
|
195
|
+
│ ├── sub-1/ # solo en modo redistribuido
|
|
196
|
+
│ │ ├── feynman-pass1.md
|
|
197
|
+
│ │ ├── state-pass1.md
|
|
198
|
+
│ │ ├── nemesis-verified.md
|
|
199
|
+
│ │ └── evaluacion.json
|
|
200
|
+
│ ├── sub-2/
|
|
201
|
+
│ └── sub-3/
|
|
202
|
+
├── iter-2/ # solo si --remediar y no convergió en iter 1
|
|
203
|
+
│ └── (mismo formato)
|
|
204
|
+
└── iter-3/ # último intento si --remediar y no convergió
|
|
205
|
+
└── (mismo formato)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Cada `evaluacion.json` sigue el schema `nemesis-evaluacion-json` v1.0.0.
|
|
209
|
+
|
|
210
|
+
## Cómo interpretar el reporte
|
|
75
211
|
|
|
76
|
-
|
|
212
|
+
### Severidades
|
|
77
213
|
|
|
78
214
|
| Nivel | Criterio |
|
|
79
215
|
|---|---|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
216
|
+
| CRÍTICO | Explotable sin precondiciones; pérdida de datos o control total |
|
|
217
|
+
| ALTO | Explotable bajo condiciones razonables; impacto severo |
|
|
218
|
+
| MEDIO | Requiere condiciones específicas; impacto moderado |
|
|
219
|
+
| BAJO | Impacto menor o difícil de explotar; documentar para trazabilidad |
|
|
84
220
|
|
|
85
|
-
|
|
221
|
+
### Discovery path
|
|
86
222
|
|
|
87
223
|
- `Feynman-only`: Feynman lo detectó; State no lo confirmó ni refutó.
|
|
88
224
|
- `State-only`: State Inconsistency lo encontró analizando mutaciones.
|
|
@@ -90,33 +226,71 @@ Descripción del problema y por qué es un bug y no solo código sospechoso.
|
|
|
90
226
|
State lo confirmó como bug real en la pasada M (o viceversa). Estos
|
|
91
227
|
hallazgos son los más confiables.
|
|
92
228
|
|
|
93
|
-
|
|
229
|
+
### Veredicto JSON
|
|
94
230
|
|
|
95
|
-
- `
|
|
96
|
-
- `
|
|
97
|
-
- `
|
|
231
|
+
- `status: "PASS"` — convergencia. El loop terminó. 0 críticos + 0 altos.
|
|
232
|
+
- `status: "NEEDS_IMPROVEMENT"` — el loop puede continuar (si `--remediar`).
|
|
233
|
+
- `status: "FAIL"` — requiere intervención humana. El loop se detiene.
|
|
98
234
|
|
|
99
235
|
## Costo estimado
|
|
100
236
|
|
|
101
237
|
| Modo | Turnos aproximados |
|
|
102
238
|
|---|---|
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
239
|
+
| Solo auditar, módulo pequeño (< 500 LOC) | 8-12 |
|
|
240
|
+
| Solo auditar, módulo mediano (500-1500 LOC) | 12-18 |
|
|
241
|
+
| Solo auditar, módulo grande (> 1500 LOC, modo redistribuido) | 18-30 |
|
|
242
|
+
| `--remediar`, módulo pequeño, converge en 1 iter | 12-18 |
|
|
243
|
+
| `--remediar`, módulo mediano, 2-3 iters | 20-40 |
|
|
244
|
+
| `--remediar`, módulo grande con redistribución, 3 iters | 40-70 |
|
|
245
|
+
| Solo `--pass1` o `--pass2` | 4-8 |
|
|
107
246
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
hallazgos sean más útiles que los de un subconjunto bien elegido.
|
|
247
|
+
El costo del modo `--remediar` es 3-5× el del modo solo auditar. Es opt-in
|
|
248
|
+
deliberado del usuario, no default.
|
|
111
249
|
|
|
112
250
|
## Ejemplos de invocación
|
|
113
251
|
|
|
252
|
+
```bash
|
|
253
|
+
# Modo clásico (retrocompatibilidad v1.5.x): solo audita
|
|
254
|
+
/swl:nemesis
|
|
255
|
+
/swl:nemesis --modulo backend/app/auth
|
|
256
|
+
|
|
257
|
+
# Solo una pasada específica
|
|
258
|
+
/swl:nemesis --pass1 --modulo backend/app/auth
|
|
259
|
+
/swl:nemesis --pass2
|
|
260
|
+
|
|
261
|
+
# Retomar auditoría interrumpida
|
|
262
|
+
/swl:nemesis --continue
|
|
263
|
+
|
|
264
|
+
# Modo evaluator-optimizer completo (nuevo en v1.5.2)
|
|
265
|
+
/swl:nemesis --remediar --modulo backend/app/auth
|
|
266
|
+
/swl:nemesis --remediar # scope = directorio actual
|
|
267
|
+
/swl:nemesis --remediar --modulo database/schemas # módulo grande → activa redistribución
|
|
268
|
+
|
|
269
|
+
# Forzar redistribución aunque scope sea pequeño
|
|
270
|
+
/swl:nemesis --redistribuir --modulo backend/app/auth
|
|
114
271
|
```
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
272
|
+
|
|
273
|
+
## Regla obligatoria sobre las citas archivo:línea del reporte
|
|
274
|
+
|
|
275
|
+
Cuando se actúe sobre un hallazgo `archivo:linea` reportado por el evaluator,
|
|
276
|
+
**verificar la cita** con `Read` antes de aplicar el fix. Esto es directiva de
|
|
277
|
+
la regla global `verificar-citas-normativas.md` Familia 2 — citas
|
|
278
|
+
archivo:línea en reportes de auditoría DEBEN re-verificarse contra el código
|
|
279
|
+
actual antes de tomar acción. El loop de remediación NO sustituye esta
|
|
280
|
+
verificación — el generator (orquestador-swl + agentes de stack) debe leer el
|
|
281
|
+
archivo en su HEAD actual antes de modificar.
|
|
282
|
+
|
|
283
|
+
## Referencias
|
|
284
|
+
|
|
285
|
+
- ADR-0021: `nemesis-evaluator-optimizer` — diseño completo del patrón.
|
|
286
|
+
- ADR-0018: introducción del agente nemesis-auditor-swl.
|
|
287
|
+
- `agentes/nemesis-auditor-swl.md`: agente evaluator.
|
|
288
|
+
- `agentes/orquestador-swl.md`: agente generator (delega a depurador, backend-*, frontend-*, etc.).
|
|
289
|
+
- `habilidades/nemesis-evaluacion-json/SKILL.md`: schema del JSON estructurado.
|
|
290
|
+
- `habilidades/nemesis-redistribuir/SKILL.md`: modo redistribuido para scope grande.
|
|
291
|
+
- `reglas/seguridad-agentes.md § Recovery Catalog`: manejo de no-convergencia.
|
|
292
|
+
- Cookbook Anthropic, patrón evaluator-optimizer:
|
|
293
|
+
https://github.com/anthropics/anthropic-cookbook/blob/main/patterns/agents/evaluator_optimizer.ipynb
|
|
121
294
|
|
|
122
295
|
<!-- Adaptado de nemesis-auditor-main bajo MIT License (transmissions11/nemesis-auditor) -->
|
|
296
|
+
<!-- Loop evaluator-optimizer agregado en v1.6.0 (ADR-0021), 2026-05-16 -->
|