@saulwade/swl-ses 1.5.1 → 1.6.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.
Files changed (155) hide show
  1. package/CLAUDE.md +225 -209
  2. package/README.md +578 -561
  3. package/agentes/arquitecto-swl.md +33 -1
  4. package/agentes/nemesis-auditor-swl.md +59 -19
  5. package/bin/swl-mcp-server.js +214 -214
  6. package/bin/swl-ses.js +49 -7
  7. package/comandos/swl/.evolved.json +22 -22
  8. package/comandos/swl/contribuir.md +233 -233
  9. package/comandos/swl/nemesis.md +230 -56
  10. package/gateway/lib/event-channel.js +191 -191
  11. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  12. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  13. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  14. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  15. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  16. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  17. package/habilidades/eval-framework/SKILL.md +212 -212
  18. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  19. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  20. package/habilidades/harness-claude-code/SKILL.md +299 -299
  21. package/habilidades/infra-github-actions/SKILL.md +166 -166
  22. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  23. package/habilidades/manejo-errores/.evolved.json +8 -8
  24. package/habilidades/meta-skills-estandar/SKILL.md +207 -4
  25. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  26. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  27. package/habilidades/nemesis-evaluacion-json/SKILL.md +266 -0
  28. package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
  29. package/habilidades/node-experto/SKILL.md +94 -4
  30. package/habilidades/patrones-python/SKILL.md +229 -229
  31. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  32. package/habilidades/planear-fase/SKILL.md +319 -319
  33. package/habilidades/protocolo-revision-swl/SKILL.md +350 -276
  34. package/habilidades/release-semver/.evolved.json +8 -8
  35. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  36. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  37. package/habilidades/tdd-workflow/SKILL.md +121 -4
  38. package/habilidades/testing-python/SKILL.md +340 -340
  39. package/habilidades/web-fetcher-routing/SKILL.md +75 -75
  40. package/hooks/check-update.js +31 -3
  41. package/hooks/claudemd-bloat-detector.js +161 -161
  42. package/hooks/extraccion-aprendizajes.js +11 -0
  43. package/hooks/lib/agent-routing.js +107 -107
  44. package/hooks/lib/auto-consolidator.js +335 -335
  45. package/hooks/lib/error-classifier.js +308 -308
  46. package/hooks/lib/merkle-audit.js +96 -96
  47. package/hooks/lib/provenance-tracker.js +191 -191
  48. package/hooks/lib/rate-limit-tracker.js +253 -253
  49. package/hooks/lib/resource-quota.js +122 -122
  50. package/hooks/lib/retry-jitter.js +165 -165
  51. package/hooks/lib/security-net.js +201 -201
  52. package/hooks/lib/skill-auditor.js +588 -588
  53. package/hooks/lib/sync-status.js +228 -228
  54. package/hooks/lib/taint-tracker.js +107 -107
  55. package/hooks/lib/text-similarity.js +241 -241
  56. package/hooks/lib/toon-compressor.js +245 -245
  57. package/hooks/registro-turnos.js +209 -209
  58. package/hooks/sugerir-regenerar-inventario.js +170 -170
  59. package/hooks/validar-formato-post-subagente.js +140 -140
  60. package/hooks/validar-memoria-hook.js +218 -218
  61. package/instintos/prompt-appendices.yaml +57 -57
  62. package/manifiestos/agent-output-schemas.json +57 -57
  63. package/manifiestos/modulos.json +1324 -1321
  64. package/manifiestos/skills-lock.json +1142 -1114
  65. package/package.json +5 -4
  66. package/plantillas/auditor-veto-template.md +105 -105
  67. package/plantillas/github-workflows/README.md +47 -47
  68. package/plantillas/github-workflows/release-please.yml +44 -44
  69. package/plantillas/github-workflows/swl-ci.yml +107 -107
  70. package/plantillas/github-workflows/swl-security.yml +51 -51
  71. package/plugin.json +355 -351
  72. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  73. package/reglas/arreglar-al-detectar.md +147 -147
  74. package/reglas/fragmentos-compartidos.md +152 -152
  75. package/reglas/harness-claude-code.md +213 -213
  76. package/reglas/registro-componentes-nuevos.md +192 -0
  77. package/reglas/usar-context7.md +226 -226
  78. package/schemas/diary-entry.schema.json +80 -80
  79. package/scripts/actualizar.js +110 -1
  80. package/scripts/audit-tools/audit-history.js +330 -330
  81. package/scripts/audit-tools/bundle-tracker.js +290 -290
  82. package/scripts/audit-tools/canary-monitor.js +352 -352
  83. package/scripts/audit-tools/code-profiler.js +605 -605
  84. package/scripts/audit-tools/dep-doctor.js +320 -320
  85. package/scripts/audit-tools/env-validator.js +206 -206
  86. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  87. package/scripts/audit-tools/lib/output.js +23 -23
  88. package/scripts/audit-tools/migration-checker.js +392 -392
  89. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  90. package/scripts/benchmark-memoria.js +167 -167
  91. package/scripts/configurar-branch-protection.js +418 -418
  92. package/scripts/derivar-feature-list.js +489 -489
  93. package/scripts/desinstalar.js +105 -24
  94. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  95. package/scripts/doctor.js +27 -0
  96. package/scripts/field-report.js +199 -199
  97. package/scripts/generar-checklists-consolidados.js +273 -273
  98. package/scripts/generar-inventario.js +420 -420
  99. package/scripts/generar-matriz-lenguajes.js +271 -271
  100. package/scripts/instalador.js +55 -4
  101. package/scripts/lib/artefactos-python.js +43 -43
  102. package/scripts/lib/benchmark-metrics.js +160 -160
  103. package/scripts/lib/budget-enforcer.js +252 -252
  104. package/scripts/lib/configurar-ci.js +380 -380
  105. package/scripts/lib/contadores-inventario.js +217 -217
  106. package/scripts/lib/detectar-stack-detallado.js +307 -307
  107. package/scripts/lib/diary-entry.js +234 -234
  108. package/scripts/lib/eval-metrics-store.js +218 -218
  109. package/scripts/lib/eval-quality.js +171 -171
  110. package/scripts/lib/eval-schemas.js +144 -144
  111. package/scripts/lib/eval-self-correct.js +106 -106
  112. package/scripts/lib/eval-validator.js +185 -185
  113. package/scripts/lib/expandir-targets.js +71 -71
  114. package/scripts/lib/jaccard-similarity.js +98 -98
  115. package/scripts/lib/longmemeval-runner.js +125 -125
  116. package/scripts/lib/mcp_config.py +127 -0
  117. package/scripts/lib/npm-version.js +261 -261
  118. package/scripts/lib/paquetes-conocidos.js +50 -50
  119. package/scripts/lib/parsear-opciones.js +3 -0
  120. package/scripts/lib/prompt-builder.js +264 -264
  121. package/scripts/lib/rrf-fusion.js +175 -175
  122. package/scripts/lib/scoring-instintos.js +277 -277
  123. package/scripts/lib/semantic-search.js +252 -252
  124. package/scripts/lib/toml-merge.js +204 -204
  125. package/scripts/lib/transformadores/codex.js +375 -375
  126. package/scripts/lib/transformadores/cursor.js +359 -359
  127. package/scripts/lib/ui.js +148 -22
  128. package/scripts/limpiar-artefactos-python.js +131 -131
  129. package/scripts/mcp-orchestrator.py +8 -18
  130. package/scripts/mcp-pool-manager.py +12 -23
  131. package/scripts/mcp-server/README.md +170 -170
  132. package/scripts/mcp-server/auth.js +105 -105
  133. package/scripts/mcp-server/cache.js +106 -106
  134. package/scripts/mcp-server/telemetry.js +78 -78
  135. package/scripts/migrar-csv-a-array.js +168 -168
  136. package/scripts/migrar-fase-dominio.js +201 -201
  137. package/scripts/publicar.js +511 -511
  138. package/scripts/run-eval.js +141 -141
  139. package/scripts/tui/componentes/selector-multi.js +189 -0
  140. package/scripts/tui/componentes/selector-unico.js +158 -0
  141. package/scripts/tui/ejecutores.js +375 -0
  142. package/scripts/tui/index.js +162 -0
  143. package/scripts/tui/lib/colores.js +129 -0
  144. package/scripts/tui/lib/render.js +264 -0
  145. package/scripts/tui/lib/teclas.js +113 -0
  146. package/scripts/tui/pantallas/inspect.js +173 -0
  147. package/scripts/tui/pantallas/install-wizard.js +334 -0
  148. package/scripts/tui/pantallas/menu-principal.js +52 -0
  149. package/scripts/tui/pantallas/progreso.js +274 -0
  150. package/scripts/tui/pantallas/resumen.js +132 -0
  151. package/scripts/tui/pantallas/uninstall-wizard.js +208 -0
  152. package/scripts/tui/pantallas/update-wizard.js +232 -0
  153. package/scripts/tui/pantallas/welcome.js +187 -0
  154. package/scripts/validar-userland-vacio.js +110 -110
  155. package/scripts/verificar-docs-vs-codigo.js +425 -0
@@ -1,19 +1,23 @@
1
1
  ---
2
2
  name: swl:nemesis
3
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>]"
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 de profundidad
14
+ # /swl:nemesis — Auditoría iterativa con remediación opt-in
12
15
 
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.
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 es deliberado (8-20
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
- | 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 |
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
- ## Qué produce
58
+ ## Flujo completo con `--remediar`
50
59
 
51
- Todos los archivos se crean en `.planning/audit/findings/`:
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
- | 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 |
67
+ # Fase 0 del comando: análisis del scope
68
+ loc_total, modulos = analizar_scope(modulo_arg or "directorio actual")
58
69
 
59
- Si el directorio `.planning/audit/findings/` no existe, el agente lo crea antes
60
- de la primera escritura.
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
- ## Cómo interpretar el reporte
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
- Cada hallazgo en los archivos de pasada usa este formato:
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
- **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
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
- **Severidades**:
212
+ ### Severidades
77
213
 
78
214
  | Nivel | Criterio |
79
215
  |---|---|
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 |
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
- **Discovery path** indica cuándo se encontró:
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
- **Verification** indica la evidencia disponible:
229
+ ### Veredicto JSON
94
230
 
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.
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
- | 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 |
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
- 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.
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
- /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
- ```
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 -->