@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.
Files changed (134) hide show
  1. package/CLAUDE.md +19 -2
  2. package/README.md +561 -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/comandos/swl/.evolved.json +22 -22
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/comandos/swl/nemesis.md +230 -56
  9. package/gateway/lib/event-channel.js +191 -191
  10. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  11. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  12. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  13. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  14. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  15. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  16. package/habilidades/eval-framework/SKILL.md +212 -212
  17. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  18. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  19. package/habilidades/harness-claude-code/SKILL.md +299 -299
  20. package/habilidades/infra-github-actions/SKILL.md +166 -166
  21. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  22. package/habilidades/manejo-errores/.evolved.json +8 -8
  23. package/habilidades/meta-skills-estandar/SKILL.md +225 -1
  24. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  25. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  26. package/habilidades/nemesis-evaluacion-json/SKILL.md +266 -0
  27. package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
  28. package/habilidades/node-experto/SKILL.md +105 -4
  29. package/habilidades/patrones-python/SKILL.md +229 -229
  30. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  31. package/habilidades/planear-fase/SKILL.md +319 -319
  32. package/habilidades/protocolo-revision-swl/SKILL.md +350 -276
  33. package/habilidades/release-semver/.evolved.json +8 -8
  34. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  35. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  36. package/habilidades/tdd-workflow/SKILL.md +150 -4
  37. package/habilidades/testing-python/SKILL.md +340 -340
  38. package/habilidades/verificar-trabajo/SKILL.md +8 -3
  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/lib/agent-routing.js +107 -107
  43. package/hooks/lib/auto-consolidator.js +335 -335
  44. package/hooks/lib/error-classifier.js +308 -308
  45. package/hooks/lib/merkle-audit.js +96 -96
  46. package/hooks/lib/provenance-tracker.js +191 -191
  47. package/hooks/lib/rate-limit-tracker.js +253 -253
  48. package/hooks/lib/resource-quota.js +122 -122
  49. package/hooks/lib/retry-jitter.js +165 -165
  50. package/hooks/lib/security-net.js +201 -201
  51. package/hooks/lib/skill-auditor.js +588 -588
  52. package/hooks/lib/sync-status.js +228 -228
  53. package/hooks/lib/taint-tracker.js +107 -107
  54. package/hooks/lib/text-similarity.js +241 -241
  55. package/hooks/lib/toon-compressor.js +245 -245
  56. package/hooks/registro-turnos.js +209 -209
  57. package/hooks/sugerir-regenerar-inventario.js +170 -170
  58. package/hooks/validar-formato-post-subagente.js +140 -140
  59. package/hooks/validar-memoria-hook.js +218 -218
  60. package/instintos/prompt-appendices.yaml +57 -57
  61. package/manifiestos/agent-output-schemas.json +57 -57
  62. package/manifiestos/modulos.json +1324 -1321
  63. package/manifiestos/skills-lock.json +1114 -1114
  64. package/package.json +2 -2
  65. package/plantillas/auditor-veto-template.md +105 -105
  66. package/plantillas/github-workflows/README.md +47 -47
  67. package/plantillas/github-workflows/release-please.yml +44 -44
  68. package/plantillas/github-workflows/swl-ci.yml +107 -107
  69. package/plantillas/github-workflows/swl-security.yml +51 -51
  70. package/plugin.json +353 -351
  71. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  72. package/reglas/arreglar-al-detectar.md +147 -147
  73. package/reglas/fragmentos-compartidos.md +152 -152
  74. package/reglas/harness-claude-code.md +213 -213
  75. package/reglas/registro-componentes-nuevos.md +192 -0
  76. package/reglas/usar-context7.md +226 -226
  77. package/schemas/diary-entry.schema.json +80 -80
  78. package/scripts/actualizar.js +110 -1
  79. package/scripts/audit-tools/audit-history.js +330 -330
  80. package/scripts/audit-tools/bundle-tracker.js +290 -290
  81. package/scripts/audit-tools/canary-monitor.js +352 -352
  82. package/scripts/audit-tools/code-profiler.js +605 -605
  83. package/scripts/audit-tools/dep-doctor.js +320 -320
  84. package/scripts/audit-tools/env-validator.js +206 -206
  85. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  86. package/scripts/audit-tools/lib/output.js +23 -23
  87. package/scripts/audit-tools/migration-checker.js +392 -392
  88. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  89. package/scripts/benchmark-memoria.js +167 -167
  90. package/scripts/configurar-branch-protection.js +418 -418
  91. package/scripts/derivar-feature-list.js +489 -489
  92. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  93. package/scripts/doctor.js +58 -4
  94. package/scripts/field-report.js +199 -199
  95. package/scripts/generar-checklists-consolidados.js +273 -273
  96. package/scripts/generar-inventario.js +420 -420
  97. package/scripts/generar-matriz-lenguajes.js +271 -271
  98. package/scripts/lib/artefactos-python.js +43 -43
  99. package/scripts/lib/benchmark-metrics.js +160 -160
  100. package/scripts/lib/budget-enforcer.js +252 -252
  101. package/scripts/lib/configurar-ci.js +380 -380
  102. package/scripts/lib/contadores-inventario.js +217 -217
  103. package/scripts/lib/detectar-stack-detallado.js +307 -307
  104. package/scripts/lib/diary-entry.js +234 -234
  105. package/scripts/lib/eval-metrics-store.js +218 -218
  106. package/scripts/lib/eval-quality.js +171 -171
  107. package/scripts/lib/eval-schemas.js +144 -144
  108. package/scripts/lib/eval-self-correct.js +106 -106
  109. package/scripts/lib/eval-validator.js +185 -185
  110. package/scripts/lib/expandir-targets.js +71 -71
  111. package/scripts/lib/jaccard-similarity.js +98 -98
  112. package/scripts/lib/longmemeval-runner.js +125 -125
  113. package/scripts/lib/mcp_config.py +127 -0
  114. package/scripts/lib/npm-version.js +261 -261
  115. package/scripts/lib/paquetes-conocidos.js +50 -50
  116. package/scripts/lib/prompt-builder.js +264 -264
  117. package/scripts/lib/rrf-fusion.js +175 -175
  118. package/scripts/lib/scoring-instintos.js +277 -277
  119. package/scripts/lib/semantic-search.js +252 -252
  120. package/scripts/lib/toml-merge.js +204 -204
  121. package/scripts/lib/transformadores/codex.js +375 -375
  122. package/scripts/lib/transformadores/cursor.js +359 -359
  123. package/scripts/limpiar-artefactos-python.js +131 -131
  124. package/scripts/mcp-orchestrator.py +8 -18
  125. package/scripts/mcp-pool-manager.py +12 -23
  126. package/scripts/mcp-server/README.md +170 -170
  127. package/scripts/mcp-server/auth.js +105 -105
  128. package/scripts/mcp-server/cache.js +106 -106
  129. package/scripts/mcp-server/telemetry.js +78 -78
  130. package/scripts/migrar-csv-a-array.js +168 -168
  131. package/scripts/migrar-fase-dominio.js +201 -201
  132. package/scripts/publicar.js +511 -511
  133. package/scripts/run-eval.js +141 -141
  134. package/scripts/validar-userland-vacio.js +110 -110
@@ -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 -->