@saulwade/swl-ses 1.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +8 -8
- package/README.md +13 -13
- package/agentes/accesibilidad-wcag-swl.md +3 -3
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/disenador-ui-swl.md +6 -5
- package/agentes/frontend-angular-swl.md +2 -2
- package/agentes/frontend-css-swl.md +2 -2
- package/agentes/frontend-react-swl.md +4 -4
- package/agentes/frontend-swl.md +6 -6
- package/agentes/investigador-ux-swl.md +5 -5
- package/agentes/orquestador-swl.md +96 -8
- package/agentes/perfilador-usuario-swl.md +308 -308
- package/agentes/producto-prd-swl.md +1 -1
- package/agentes/red-team-swl.md +218 -218
- package/agentes/revisor-codigo-swl.md +34 -10
- package/agentes/revisor-seguridad-swl.md +7 -0
- package/agentes/tdd-qa-swl.md +39 -2
- package/comandos/swl/actualizar.md +1 -1
- package/comandos/swl/aprender.md +2 -2
- package/comandos/swl/aprobar-plan.md +152 -0
- package/comandos/swl/autoresearch.md +102 -6
- package/comandos/swl/ayuda.md +3 -3
- package/comandos/swl/discutir-fase.md +20 -2
- package/comandos/swl/ejecutar-fase.md +53 -6
- package/comandos/swl/evolucionar.md +1 -1
- package/comandos/swl/inbox.md +1 -1
- package/comandos/swl/instalar.md +1 -1
- package/comandos/swl/nemesis.md +42 -1
- package/comandos/swl/planear-fase.md +25 -1
- package/comandos/swl/plugins.md +1 -1
- package/comandos/swl/predecir.md +139 -0
- package/comandos/swl/release.md +1 -1
- package/comandos/swl/status.md +279 -0
- package/comandos/swl/verificar.md +75 -7
- package/habilidades/ai-runtime-security/SKILL.md +1 -1
- package/habilidades/angular-moderno/SKILL.md +44 -1
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
- package/habilidades/autoresearch/SKILL.md +15 -1
- package/habilidades/benchmark-memoria/SKILL.md +1 -1
- package/habilidades/calidad-contract-testing/SKILL.md +165 -0
- package/habilidades/calidad-mutation-testing/SKILL.md +170 -0
- package/habilidades/changelog-generator/SKILL.md +9 -2
- package/habilidades/changelog-generator/scripts/parse-commits.js +12 -1
- package/habilidades/checklist-seguridad/SKILL.md +29 -1
- package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -0
- package/habilidades/css-moderno/SKILL.md +3 -1
- package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
- package/habilidades/drift-detection/SKILL.md +179 -179
- package/habilidades/ejecutar-fase/SKILL.md +64 -14
- package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
- package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
- package/habilidades/fastapi-experto/SKILL.md +56 -5
- package/habilidades/harness-claude-code/SKILL.md +10 -7
- package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
- package/habilidades/instalar-sistema/SKILL.md +3 -3
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
- package/habilidades/patrones-python/SKILL.md +8 -5
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +25 -4
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
- package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
- package/habilidades/proceso-debate-adversarial/SKILL.md +164 -0
- package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -0
- package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -0
- package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -0
- package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -0
- package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
- package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
- package/habilidades/swl-claudemd/SKILL.md +50 -210
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
- package/habilidades/swl-dashboard/SKILL.md +9 -9
- package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
- package/habilidades/tdd-workflow/SKILL.md +58 -5
- package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +3 -3
- package/hooks/calidad-pre-commit.js +340 -3
- package/hooks/ciclo-evolucion-subagente.js +26 -0
- package/hooks/ciclo-evolucion.js +26 -0
- package/hooks/contexto-iteracion.js +144 -0
- package/hooks/extraccion-aprendizajes.js +13 -0
- package/hooks/lib/ciclo-evolucion.js +47 -0
- package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
- package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
- package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
- package/hooks/lib/evolution-tracker.js +24 -3
- package/hooks/lib/loop-telemetry.js +321 -0
- package/hooks/notificacion-telegram.js +11 -3
- package/hooks/spec-gate.js +211 -0
- package/hooks/tdd-gate.js +241 -0
- package/hooks/validar-intent-spec.js +30 -10
- package/llms.txt +29 -0
- package/manifiestos/hooks-config.json +36 -18
- package/manifiestos/modulos.json +23 -14
- package/manifiestos/skills-lock.json +100 -72
- package/package.json +4 -3
- package/plugin.json +9 -10
- package/reglas/accesibilidad.md +10 -0
- package/reglas/api-diseno.md +9 -0
- package/reglas/arquitectura.evolved.json +7 -0
- package/reglas/arquitectura.md +65 -0
- package/reglas/auditorias-documentales-estructurales.md +7 -0
- package/reglas/cloud-infra.md +8 -0
- package/reglas/fragmentos-compartidos.md +5 -0
- package/reglas/gobernanza.md +4 -4
- package/reglas/hooks.md +6 -0
- package/reglas/intent-engineering.md +4 -0
- package/reglas/markitdown.md +8 -0
- package/reglas/memoria-consolidada.md +1 -1
- package/reglas/patrones.md +6 -0
- package/reglas/registro-componentes-nuevos.md +10 -1
- package/reglas/seguridad-agentes.md +1 -1
- package/reglas/seguridad.evolved.json +7 -0
- package/reglas/seguridad.md +144 -0
- package/reglas/skills-estandar.md +6 -0
- package/reglas/testing.md +7 -0
- package/reglas/tests-cleanup.md +4 -0
- package/reglas/usar-sistema-swl.md +1 -1
- package/scripts/generar-inventario.js +64 -1
- package/scripts/instalador.js +32 -2
- package/scripts/lib/gitignore-manifest.js +29 -1
- package/scripts/lib/plan-lock.js +275 -0
- package/scripts/migrar-fase-dominio.js +0 -1
- package/scripts/smoke-test.js +24 -2
- package/scripts/verificar-trazabilidad.js +292 -0
- package/agentes/ux-disenador-swl.md +0 -503
- package/comandos/swl/dashboard.md +0 -146
- package/comandos/swl/evolucion-estado.md +0 -191
- package/comandos/swl/metricas.md +0 -342
- package/comandos/swl/salud.md +0 -481
- package/reglas/verificar-citas-temporales.md +0 -139
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: proceso-debate-adversarial
|
|
3
|
+
description: >
|
|
4
|
+
Protocolo de debate adversarial con jueces ciegos para decisiones técnicas
|
|
5
|
+
subjetivas: dos autores en frío generan candidatos, un crítico forzosamente
|
|
6
|
+
adversarial los ataca, un sintetizador produce un híbrido y un panel de jueces
|
|
7
|
+
ciegos con etiquetas aleatorizadas elige al ganador hasta convergencia.
|
|
8
|
+
Cargar cuando una decisión de arquitectura, diseño o estrategia no tiene
|
|
9
|
+
métrica objetiva y el riesgo de sycophancy (auto-aprobarse) es alto; también
|
|
10
|
+
cuando arquitecto-swl evalúa alternativas o /swl:predecir necesita el
|
|
11
|
+
protocolo de personas en frío.
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
herramientasPermitidas: [Read, Agent, Skill]
|
|
14
|
+
exclusiones:
|
|
15
|
+
- "No cargar para decisiones con métrica objetiva verificable — ahí aplica el loop de autoresearch (Verify numérico), no un debate."
|
|
16
|
+
- "No cargar para revisión de código post-implementación — eso es revisor-codigo-swl / nemesis-auditor-swl."
|
|
17
|
+
- "No cargar para decisiones triviales o de preferencia personal sin impacto técnico — el costo de 5+ invocaciones de agente no se justifica."
|
|
18
|
+
evolvable: true
|
|
19
|
+
---
|
|
20
|
+
# Debate Adversarial con Jueces Ciegos
|
|
21
|
+
|
|
22
|
+
Protocolo para decidir entre alternativas técnicas **sin métrica objetiva**
|
|
23
|
+
eliminando los dos sesgos que arruinan las auto-evaluaciones de un LLM:
|
|
24
|
+
**sycophancy** (el agente aprueba lo que él mismo generó) y **position bias**
|
|
25
|
+
(el juez prefiere la opción presentada primero). Patrón adoptado del análisis
|
|
26
|
+
de autoresearch v2.1 (`reason-judge-protocol`), adaptado al ecosistema SWL.
|
|
27
|
+
|
|
28
|
+
**Principio**: el que genera nunca juzga, el que juzga nunca sabe quién generó.
|
|
29
|
+
|
|
30
|
+
## Cuándo cargar este skill
|
|
31
|
+
|
|
32
|
+
- Decisión de arquitectura con 2+ alternativas viables sin benchmark objetivo
|
|
33
|
+
(ej: event sourcing vs CRUD+audit, monolito modular vs microservicios).
|
|
34
|
+
- `arquitecto-swl` necesita justificar un ADR con alternativas evaluadas de
|
|
35
|
+
forma no sesgada.
|
|
36
|
+
- `/swl:predecir` requiere el protocolo de aislamiento de personas.
|
|
37
|
+
- Decisión de producto/estrategia donde el usuario pide "dame la mejor opción"
|
|
38
|
+
y una sola pasada produciría la primera idea plausible, no la mejor.
|
|
39
|
+
|
|
40
|
+
## Los 5 roles — aislamiento obligatorio (COLD START)
|
|
41
|
+
|
|
42
|
+
| Rol | Recibe | Produce | Regla dura |
|
|
43
|
+
|-----|--------|---------|------------|
|
|
44
|
+
| **Autor-A** | tarea | candidato A | No ve crítica ni candidato B |
|
|
45
|
+
| **Crítico** | tarea + candidato A | ≥3 debilidades con evidencia + qué haría un candidato superior | NUNCA elogia — rol puramente adversarial |
|
|
46
|
+
| **Autor-B** | tarea + candidato A + crítica | candidato B que resuelve la crítica preservando fortalezas de A | No ve al sintetizador |
|
|
47
|
+
| **Sintetizador** | tarea + A + B | candidato híbrido AB | Fusiona lo mejor de ambos, no promedia |
|
|
48
|
+
| **Panel de jueces** (3 default) | tarea + 3 candidatos con **etiquetas aleatorizadas** (X, Y, Z) | ranking 1°/2°/3° + justificación de un párrafo c/u | "Todos están bien" NO es veredicto válido |
|
|
49
|
+
|
|
50
|
+
**COLD START**: cada rol se ejecuta como invocación independiente del Agent
|
|
51
|
+
tool **sin contexto compartido de sesión** — recibe SOLO los insumos de su fila.
|
|
52
|
+
Pasar el historial completo a un juez invalida el protocolo (sabría quién
|
|
53
|
+
escribió qué).
|
|
54
|
+
|
|
55
|
+
**Aleatorización de etiquetas**: antes de invocar a los jueces, mapear
|
|
56
|
+
A/B/AB → X/Y/Z con orden aleatorio distinto por juez. Previene position bias.
|
|
57
|
+
|
|
58
|
+
## El loop de convergencia
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Ronda N:
|
|
62
|
+
1. Autor-A genera candidato (ronda 1) o presenta al incumbente (ronda N>1)
|
|
63
|
+
2. Crítico ataca → ≥3 debilidades con evidencia
|
|
64
|
+
3. Autor-B genera candidato alternativo
|
|
65
|
+
4. Sintetizador produce híbrido AB
|
|
66
|
+
5. Panel ciego vota → ganador por mayoría (empate → gana el híbrido)
|
|
67
|
+
6. ¿Ganador == incumbente? → convergencia++ ; si no → convergencia = 1,
|
|
68
|
+
el ganador se vuelve incumbente
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
| Condición | Acción |
|
|
72
|
+
|-----------|--------|
|
|
73
|
+
| Mismo incumbente gana 3 rondas consecutivas | **CONVERGIDO** — terminar |
|
|
74
|
+
| Ronda ≥ max (default 8) | **ACOTADO** — reportar mejor candidato actual |
|
|
75
|
+
| Incumbente cambió >5 veces en las últimas 8 rondas | **OSCILACIÓN** — detener y reportar: la tarea está mal planteada o las alternativas son equivalentes |
|
|
76
|
+
|
|
77
|
+
Registrar cada ronda con `hooks/lib/loop-telemetry.js` (tipo `debate`,
|
|
78
|
+
columnas `ronda, timestamp, etiqueta_ganadora, veredicto, convergencia,
|
|
79
|
+
descripcion`) para que la trayectoria sea auditable y `/swl:status metricas` la lea.
|
|
80
|
+
|
|
81
|
+
## Anti-herd check — obligatorio
|
|
82
|
+
|
|
83
|
+
Si TODOS los jueces coinciden en la primera ronda, el sintetizador DEBE
|
|
84
|
+
producir al menos un contraargumento antes de aceptar el consenso. Unanimidad
|
|
85
|
+
inmediata en un debate de alternativas reales es señal de herd bias, no de
|
|
86
|
+
calidad — las alternativas genuinas siempre tienen tradeoffs defendibles.
|
|
87
|
+
|
|
88
|
+
## Criterios de juez por dominio
|
|
89
|
+
|
|
90
|
+
| Dominio | Criterios de evaluación |
|
|
91
|
+
|---------|------------------------|
|
|
92
|
+
| Arquitectura de software | escalabilidad, mantenibilidad, rendimiento, seguridad, simplicidad |
|
|
93
|
+
| Estrategia de producto | encaje de mercado, factibilidad, diferenciación, riesgo, tiempos |
|
|
94
|
+
| Decisión de negocio | ROI, riesgo, alineación, recursos requeridos, reversibilidad |
|
|
95
|
+
| Enfoque de seguridad | cobertura, tasa de falsos positivos, practicidad, cumplimiento |
|
|
96
|
+
| Hipótesis de investigación | testabilidad, novedad, soporte de evidencia, poder explicativo |
|
|
97
|
+
|
|
98
|
+
El juez evalúa CADA candidato contra TODOS los criterios del dominio y
|
|
99
|
+
produce ranking con justificación — nunca un score suelto sin comparación.
|
|
100
|
+
|
|
101
|
+
## Personas para análisis predictivo
|
|
102
|
+
|
|
103
|
+
Cuando el objetivo es **predecir problemas de un cambio propuesto** (no
|
|
104
|
+
elegir entre alternativas), usar el modo personas: 5 expertos analizan EN FRÍO
|
|
105
|
+
el mismo cambio y un sintetizador deduplica y rankea. Definiciones completas,
|
|
106
|
+
preguntas guía y red flags por persona en
|
|
107
|
+
[recursos/personas.md](recursos/personas.md). Set default: Arquitecto de
|
|
108
|
+
Software, Analista de Seguridad, Ingeniero de Rendimiento, Ingeniero de
|
|
109
|
+
Confiabilidad, Abogado del Diablo. Set adversarial (`--adversarial`): El
|
|
110
|
+
Rompedor, El Tramposo, El Escalador, El Novato, El Insider Malicioso.
|
|
111
|
+
|
|
112
|
+
Ranking de hallazgos del sintetizador:
|
|
113
|
+
`severidad × confianza promedio × número de personas que coinciden`.
|
|
114
|
+
|
|
115
|
+
## Integración con el ecosistema SWL
|
|
116
|
+
|
|
117
|
+
| Componente | Uso del protocolo |
|
|
118
|
+
|-----------|-------------------|
|
|
119
|
+
| `arquitecto-swl` | Debate para la sección "Alternativas consideradas" de un ADR |
|
|
120
|
+
| `/swl:predecir` | Modo personas pre-implementación |
|
|
121
|
+
| `/swl:nemesis` | El evaluator puede pedir un debate cuando dos remediaciones compiten |
|
|
122
|
+
| `hooks/lib/loop-telemetry.js` | Registro de rondas + handoff para encadenar |
|
|
123
|
+
| `/swl:status metricas` | Lectura de trayectorias de debates en `.planning/loops/` |
|
|
124
|
+
|
|
125
|
+
## Cuándo NO cargar
|
|
126
|
+
|
|
127
|
+
- La decisión tiene métrica objetiva (latencia, cobertura, bundle size) — usar
|
|
128
|
+
el loop autoresearch con Verify numérico; un debate es más caro y menos
|
|
129
|
+
preciso que medir.
|
|
130
|
+
- El usuario ya tomó la decisión y está documentada en ADR/vault — aplicar
|
|
131
|
+
`consultar-vault-primero`, no reabrir con un debate.
|
|
132
|
+
- Hay restricción dura que elimina las alternativas (compliance, presupuesto,
|
|
133
|
+
stack fijo) — verificar restricciones ANTES de armar el debate.
|
|
134
|
+
|
|
135
|
+
## Gotchas / Errores comunes no obvios
|
|
136
|
+
|
|
137
|
+
- **Jueces con contexto contaminado**: invocar a los jueces en la misma
|
|
138
|
+
conversación donde se generaron los candidatos les revela la autoría por el
|
|
139
|
+
historial. Causa: usar el contexto principal en vez del Agent tool con
|
|
140
|
+
prompt acotado. Solución: cada juez es una invocación Agent independiente
|
|
141
|
+
cuyo prompt contiene SOLO tarea + candidatos etiquetados.
|
|
142
|
+
- **Crítico que "equilibra"**: el crítico señala 3 debilidades pero cierra con
|
|
143
|
+
"en general es un buen enfoque" — eso re-introduce sycophancy y debilita al
|
|
144
|
+
Autor-B. Solución: el prompt del crítico prohíbe explícitamente elogios y
|
|
145
|
+
exige proponer qué haría un candidato superior.
|
|
146
|
+
- **Sintetizador que promedia en vez de fusionar**: produce un candidato
|
|
147
|
+
"tibio" que toma la mitad de cada uno y pierde la coherencia interna de
|
|
148
|
+
ambos. Solución: el híbrido debe tener una tesis propia — tomar la
|
|
149
|
+
arquitectura dominante de uno e injertar mecanismos puntuales del otro.
|
|
150
|
+
- **Convergencia falsa por candidatos idénticos**: si Autor-B produce
|
|
151
|
+
esencialmente el mismo candidato que A, el panel "converge" en ronda 2 sin
|
|
152
|
+
exploración real. Solución: el prompt de Autor-B exige divergencia
|
|
153
|
+
estructural, no cosmética; si la crítica fue débil, regenerar la crítica.
|
|
154
|
+
|
|
155
|
+
## Anti-patrones
|
|
156
|
+
|
|
157
|
+
- **Debate de 1 ronda presentado como consenso** — sin convergencia ×3 no hay
|
|
158
|
+
veredicto, hay una primera impresión cara.
|
|
159
|
+
- **Saltarse la aleatorización de etiquetas** "porque los jueces son
|
|
160
|
+
imparciales" — el position bias es estadístico, no intencional.
|
|
161
|
+
- **Usar el debate para decisiones ya cerradas** — teatro de proceso que
|
|
162
|
+
quema tokens para justificar lo decidido.
|
|
163
|
+
- **Panel de 1 juez** — un juez único reintroduce el sesgo individual que el
|
|
164
|
+
panel existe para diluir; mínimo 3, número impar.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Personas para análisis predictivo y debate adversarial
|
|
2
|
+
|
|
3
|
+
Definiciones operativas de las personas que consume `proceso-debate-adversarial`
|
|
4
|
+
(modo personas) y `/swl:predecir`. Cada persona se invoca EN FRÍO (COLD START):
|
|
5
|
+
recibe la descripción del cambio + conocimiento del codebase + sus criterios —
|
|
6
|
+
nunca el análisis de otra persona.
|
|
7
|
+
|
|
8
|
+
Formato de hallazgo obligatorio por persona:
|
|
9
|
+
|
|
10
|
+
```markdown
|
|
11
|
+
| # | Hallazgo | Severidad | Confianza (0-100%) | archivo:línea | Recomendación |
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Presupuesto: `max_hallazgos_por_persona = presupuesto_total / num_personas`
|
|
15
|
+
(default presupuesto 40 → 8 por persona). Obliga a priorizar, no a enumerar.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Set default (análisis predictivo estándar)
|
|
20
|
+
|
|
21
|
+
### 1. Arquitecto de Software
|
|
22
|
+
- **Enfoque**: diseño sistémico, fronteras de componentes, flujo de datos, escalabilidad.
|
|
23
|
+
- **Preguntas guía**: ¿Escala? ¿Los límites entre módulos son limpios? ¿El acoplamiento está minimizado? ¿Sobrevive un crecimiento 10x?
|
|
24
|
+
- **Evidencia exigida**: archivo:línea, grafo de dependencias, métricas de acoplamiento.
|
|
25
|
+
- **Red flags**: god classes, dependencias circulares, abstracciones con fugas, estado mutable compartido.
|
|
26
|
+
|
|
27
|
+
### 2. Analista de Seguridad
|
|
28
|
+
- **Enfoque**: superficies de ataque, autenticación/autorización, protección de datos, vectores de inyección.
|
|
29
|
+
- **Preguntas guía**: ¿Es explotable? ¿Los trust boundaries se aplican? ¿El input se sanitiza? ¿Los secretos están protegidos?
|
|
30
|
+
- **Evidencia exigida**: archivo:línea + escenario de ataque concreto (no especulación teórica).
|
|
31
|
+
- **Red flags**: SQL crudo, authz faltante, secretos hardcodeados, input sin sanitizar.
|
|
32
|
+
|
|
33
|
+
### 3. Ingeniero de Rendimiento
|
|
34
|
+
- **Enfoque**: latencia, throughput, uso de recursos, complejidad algorítmica.
|
|
35
|
+
- **Preguntas guía**: ¿Es suficientemente rápido? ¿Cuál es el peor caso? ¿Dónde están los cuellos de botella? ¿El caching es efectivo?
|
|
36
|
+
- **Evidencia exigida**: archivo:línea, análisis de complejidad, estimaciones de recursos.
|
|
37
|
+
- **Red flags**: queries N+1, loops sin cota, índices faltantes, I/O síncrono en hot paths.
|
|
38
|
+
|
|
39
|
+
### 4. Ingeniero de Confiabilidad
|
|
40
|
+
- **Enfoque**: manejo de errores, modos de falla, observabilidad, recuperación.
|
|
41
|
+
- **Preguntas guía**: ¿Qué pasa cuando falla? ¿Podemos detectarlo? ¿Hay camino de recuperación? ¿Es observable?
|
|
42
|
+
- **Evidencia exigida**: archivo:línea, escenarios de falla, rutas de recuperación.
|
|
43
|
+
- **Red flags**: errores tragados, retries faltantes, sin circuit breakers, fallas silenciosas.
|
|
44
|
+
|
|
45
|
+
### 5. Abogado del Diablo
|
|
46
|
+
- **Enfoque**: asunciones, casos límite, complejidad oculta, mantenibilidad.
|
|
47
|
+
- **Preguntas guía**: ¿Qué asunciones son falsas? ¿Qué rompe esto? ¿Está sobre-ingenierizado?
|
|
48
|
+
- **Evidencia exigida**: contraejemplos concretos, escenarios de caso límite.
|
|
49
|
+
- **Red flags**: diseño solo-happy-path, asunciones sin probar, complejidad sin justificación.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Set adversarial (`--adversarial`)
|
|
54
|
+
|
|
55
|
+
Reemplaza al set default cuando el objetivo es estresar el cambio como atacante,
|
|
56
|
+
no como revisor.
|
|
57
|
+
|
|
58
|
+
### 1. El Rompedor
|
|
59
|
+
Intenta crashear o corromper el sistema. Busca: estados imposibles, inputs
|
|
60
|
+
malformados, condiciones de carrera, límites de recursos.
|
|
61
|
+
|
|
62
|
+
### 2. El Tramposo
|
|
63
|
+
Busca formas de saltarse reglas y abusar de features. Busca: validaciones solo
|
|
64
|
+
en frontend, límites evadibles, flujos alternos sin guards.
|
|
65
|
+
|
|
66
|
+
### 3. El Escalador
|
|
67
|
+
Imagina carga 1000x y encuentra qué se rompe primero. Busca: queries sin
|
|
68
|
+
paginación, locks globales, colas sin backpressure, costos lineales ocultos.
|
|
69
|
+
|
|
70
|
+
### 4. El Novato
|
|
71
|
+
Usa mal cada API esperando que funcione. Busca: defaults peligrosos, errores
|
|
72
|
+
crípticos, documentación que asume contexto, footguns de la interfaz.
|
|
73
|
+
|
|
74
|
+
### 5. El Insider Malicioso
|
|
75
|
+
Tiene credenciales válidas y quiere exfiltrar. Busca: permisos excesivos,
|
|
76
|
+
auditoría faltante, datos sensibles accesibles lateralmente.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Set red-team de seguridad (para `checklist-seguridad` modo cobertura)
|
|
81
|
+
|
|
82
|
+
Rotación de mentalidades para auditoría STRIDE/OWASP iterativa:
|
|
83
|
+
|
|
84
|
+
| Persona | Foco | Mentalidad |
|
|
85
|
+
|---------|------|-----------|
|
|
86
|
+
| Adversario de Seguridad | auth, crypto, inyección | atacante externo con browser + proxy de intercepción |
|
|
87
|
+
| Atacante de Supply Chain | dependencias, CI/CD, build pipeline | comprometer vía código de terceros |
|
|
88
|
+
| Amenaza Interna | acceso a datos, abuso de privilegios, exfiltración | usuario autenticado con intención maliciosa |
|
|
89
|
+
| Atacante de Infraestructura | red, configuración cloud, contenedores | apuntar a misconfigurations de infra |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Protocolo de síntesis (tras el análisis individual)
|
|
94
|
+
|
|
95
|
+
1. **Deduplicar**: mismo archivo:línea + mismo problema → fusionar, conservar la severidad más alta.
|
|
96
|
+
2. **Resolver conflictos**: si dos personas discrepan → registrar el disenso, no silenciarlo.
|
|
97
|
+
3. **Anti-herd check**: si TODAS las personas coinciden → el sintetizador DEBE producir ≥1 contraargumento.
|
|
98
|
+
4. **Rankear**: `severidad × confianza promedio × número de personas que coinciden`.
|
|
99
|
+
|
|
100
|
+
Output del sintetizador:
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
### Consenso — [N hallazgos tras dedup]
|
|
104
|
+
| # | Hallazgo | Severidad | Acuerdo | Personas origen | Acción |
|
|
105
|
+
```
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: proceso-dynamic-workflows
|
|
3
|
+
description: >
|
|
4
|
+
Patrones canónicos de dynamic workflows en Claude Code (Workflow tool / ultracode):
|
|
5
|
+
classify-and-act, fan-out-and-synthesize, adversarial-verification, generate-and-filter,
|
|
6
|
+
tournament. Cubre los 3 modos de falla que justifican orquestar (agentic laziness,
|
|
7
|
+
self-preferential bias, goal drift), cuándo NO usar workflows, token budgets, revisión
|
|
8
|
+
cross-modelo, y el anti-patrón de envolver skills auto-iterantes en /loop|/cron. Cargar
|
|
9
|
+
cuando se diseñe una orquestación multi-agente, se decida si una tarea amerita workflow,
|
|
10
|
+
o se quiera empaquetar un workflow como plantilla reutilizable en un skill.
|
|
11
|
+
when_to_use: >
|
|
12
|
+
Usar cuando el usuario diga "ultracode", "workflow", "orquesta esto", "fan-out", "panel
|
|
13
|
+
de revisores", "tournament", o cuando una tarea sea larga, masivamente paralela o
|
|
14
|
+
adversarial y un solo context window sufra laziness/goal-drift.
|
|
15
|
+
herramientasPermitidas: [Read, Grep, Glob]
|
|
16
|
+
exclusiones:
|
|
17
|
+
- "No cargar para tareas de codificación normales de un solo paso — la mayoría NO necesitan un workflow; el harness por defecto basta y un workflow gasta muchos más tokens."
|
|
18
|
+
- "No cargar para el detalle de evaluator-optimizer del nemesis — eso vive en nemesis-evaluacion-json y el comando /swl:nemesis."
|
|
19
|
+
- "No cargar para escribir el .js de un workflow concreto — este skill da los patrones; el script se escribe con el Workflow tool directamente."
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Dynamic workflows: patrones, modos de falla y cuándo orquestar
|
|
23
|
+
|
|
24
|
+
Síntesis del blog oficial de Anthropic *"A harness for every task: dynamic workflows
|
|
25
|
+
in Claude Code"* + patrones validados en swl-ses (nemesis evaluator-optimizer,
|
|
26
|
+
`/swl:verificar --until-converge`, `/swl:autoresearch`). Un dynamic workflow deja que
|
|
27
|
+
Claude escriba su propio harness (JS que coordina subagentes con ventanas aisladas).
|
|
28
|
+
|
|
29
|
+
## Cuándo cargar
|
|
30
|
+
|
|
31
|
+
- Se va a diseñar una orquestación multi-agente o decidir si una tarea amerita workflow.
|
|
32
|
+
- La tarea es larga, masivamente paralela, o adversarial (review, research, migración, triage).
|
|
33
|
+
- Se quiere empaquetar un workflow como plantilla reutilizable en un skill.
|
|
34
|
+
|
|
35
|
+
## Cuándo NO cargar
|
|
36
|
+
|
|
37
|
+
- Tarea de codificación normal de 1-2 archivos — el harness por defecto basta. Un workflow
|
|
38
|
+
gasta significativamente más tokens; la mayoría de tareas de coding NO necesitan un panel
|
|
39
|
+
de 5 revisores.
|
|
40
|
+
- Ya estás dentro del detalle del nemesis (`nemesis-evaluacion-json`).
|
|
41
|
+
- Solo necesitas escribir el `.js` — usa el Workflow tool directo con los patrones de abajo.
|
|
42
|
+
|
|
43
|
+
## Los 3 modos de falla que JUSTIFICAN orquestar
|
|
44
|
+
|
|
45
|
+
Un solo context window largo degrada de tres formas — nombrarlas guía cuándo separar Claudes:
|
|
46
|
+
|
|
47
|
+
1. **Agentic laziness** — Claude se detiene antes de terminar una tarea multi-parte y la
|
|
48
|
+
declara hecha con progreso parcial (ej. 20 de 50 ítems de un security review). Mitiga:
|
|
49
|
+
fan-out (un subagente por ítem, ventana limpia) + `/goal` (requisito de completitud duro).
|
|
50
|
+
2. **Self-preferential bias** — Claude prefiere sus propios resultados al verificarlos contra
|
|
51
|
+
un rubric. Mitiga: **adversarial-verification** con subagente separado, y mejor aún
|
|
52
|
+
**revisión cross-modelo** (el reviewer es OTRO modelo). Es el mismo principio que
|
|
53
|
+
`gobernanza.md § Separación revisor/ejecutor`.
|
|
54
|
+
3. **Goal drift** — pérdida gradual de fidelidad al objetivo tras muchos turnos y compaction
|
|
55
|
+
(cada resumen es lossy; se pierde "no hagas X"). Mitiga: subagentes con goal aislado y
|
|
56
|
+
constraints explícitas por invocación; `/goal` como ancla.
|
|
57
|
+
|
|
58
|
+
## Los 5 patrones canónicos
|
|
59
|
+
|
|
60
|
+
| Patrón | Cuándo | Forma |
|
|
61
|
+
|--------|--------|-------|
|
|
62
|
+
| **Classify-and-act** | Rutear según tipo de tarea/ítem | Clasificador → ramas distintas (al inicio o al final para decidir output) |
|
|
63
|
+
| **Fan-out-and-synthesize** | Muchos sub-pasos; cada uno se beneficia de ventana limpia sin cross-contaminación | N agentes en paralelo → barrier → synthesize merge. **Default** para descomponer |
|
|
64
|
+
| **Adversarial-verification** | Evitar self-preferential bias | Por cada agente, un agente separado verifica su output contra rubric. Diversificar lentes |
|
|
65
|
+
| **Generate-and-filter** | Espacio de ideas amplio (taste-based) | Generar N → filtrar por rubric/verificación → dedupe → solo las mejores probadas |
|
|
66
|
+
| **Tournament** | Solución taste-based con criterio | N agentes compiten con enfoques distintos → juez pairwise hasta ganador |
|
|
67
|
+
|
|
68
|
+
`pipeline()` (sin barrier entre stages) es el default; usa barrier (`parallel()` entre
|
|
69
|
+
stages) SOLO cuando el stage N necesita TODOS los resultados del N-1 (dedup global,
|
|
70
|
+
early-exit por conteo cero, comparación cruzada).
|
|
71
|
+
|
|
72
|
+
## Revisión cross-modelo (combate self-preferential bias estructuralmente)
|
|
73
|
+
|
|
74
|
+
El reviewer adversarial en el MISMO modelo aún arrastra sesgo. La mejora: **executor en un
|
|
75
|
+
modelo, reviewer en otro** (Claude ejecuta → Gemini/Codex/otro revisa). Patrón de ARIS
|
|
76
|
+
(`mcp-servers/gemini-review`): MCP que expone `review`/`review_reply`, devuelve JSON con
|
|
77
|
+
`threadId` + `response` → rastro auditable de un veredicto independiente.
|
|
78
|
+
|
|
79
|
+
En swl-ses esto es **opt-in** vía `/swl:nemesis --cross-model` (ver el comando): si hay un
|
|
80
|
+
MCP reviewer configurado, la verificación se rutea a un modelo externo; si no, degrada al
|
|
81
|
+
reviewer same-model sin fallar (regla `arreglar-al-detectar.md` / no-fallback-silencioso →
|
|
82
|
+
se anuncia la degradación). Mejoras del reviewer (de ARIS `auto-review-loop`):
|
|
83
|
+
- **Reviewer memory**: el reviewer arrastra sus sospechas entre rondas (un solo `threadId`),
|
|
84
|
+
no parte de cero cada iteración.
|
|
85
|
+
- **Debate protocol**: el executor puede rebatir; el reviewer falla el veredicto final —
|
|
86
|
+
*"it can drive, never acquit"* (el loop conduce, el jurado decide).
|
|
87
|
+
- **POSITIVE_THRESHOLD compuesto**: `score ≥ N` **AND** `verdict ∈ {ready, almost}` — un
|
|
88
|
+
score alto con verdict "not ready" NO detiene el loop.
|
|
89
|
+
|
|
90
|
+
## Anti-patrón: no envolver un skill auto-iterante en /loop · /cron · /schedule
|
|
91
|
+
|
|
92
|
+
Si un skill YA itera internamente (review→fix→re-review con memoria de reviewer en un
|
|
93
|
+
`threadId`), envolverlo en `/loop`, `/schedule` o `CronCreate` lo re-entra desde cero cada
|
|
94
|
+
tick → `threadId` nuevo, memoria del reviewer reseteada → dispara el veredicto por
|
|
95
|
+
wall-clock en vez de por cambio de artefacto: cero señal nueva, costo de tokens completo.
|
|
96
|
+
Aplica a `/swl:autoresearch`, `/swl:verificar --until-converge`, nemesis `--remediar`. Si
|
|
97
|
+
hay que agendar algo, agenda **la espera externa que lo precede** (ej. experimentos listos →
|
|
98
|
+
entonces corre el loop UNA vez), no el loop mismo.
|
|
99
|
+
|
|
100
|
+
## Token budgets, /goal y model routing
|
|
101
|
+
|
|
102
|
+
- **Token budget en workflows**: el global `budget` (o "use 10k tokens" en el prompt) pone
|
|
103
|
+
cap duro. Alinea con `scripts/lib/budget-enforcer.js` de swl-ses.
|
|
104
|
+
- **/goal + /loop**: para workflows repetibles (triage, research, verificación), `/goal` da
|
|
105
|
+
requisito de completitud y `/loop` la cadencia. NO sobre skills auto-iterantes (arriba).
|
|
106
|
+
- **Dynamic model routing**: un agente clasificador investiga la complejidad real del scope
|
|
107
|
+
y rutea a Sonnet vs Opus por tarea (más fino que el Model-Tier estático del frontmatter).
|
|
108
|
+
|
|
109
|
+
## Workflows como plantillas en skills
|
|
110
|
+
|
|
111
|
+
Un `.js` de workflow puede vivir en `recursos/` de un skill y referenciarse en su SKILL.md
|
|
112
|
+
como **plantilla** (no script verbatim) — Claude lo adapta al caso. Plantillas incluidas:
|
|
113
|
+
|
|
114
|
+
- `recursos/template-adversarial-verify.js` — fan-out de hallazgos + verificación adversarial
|
|
115
|
+
por hallazgo (filtra los reales).
|
|
116
|
+
- `recursos/template-triage.js` — clasifica ítems de un backlog, dedupe contra lo ya
|
|
117
|
+
trackeado, y rutea (fix automático vs escalar a humano) con patrón quarantine.
|
|
118
|
+
|
|
119
|
+
## Quarantine (triage de contenido no confiable)
|
|
120
|
+
|
|
121
|
+
En triage que lee contenido público/no confiable, los agentes lectores quedan **barred** de
|
|
122
|
+
acciones de alto privilegio; esas las ejecutan agentes distintos que actúan sobre la info ya
|
|
123
|
+
saneada. Coherente con `seguridad-agentes.md § Prompt injection` y el quarantine de SWL.
|
|
124
|
+
|
|
125
|
+
## Gotchas
|
|
126
|
+
|
|
127
|
+
- **Workflows gastan más tokens** — úsalos cuando la tarea de verdad necesita más cómputo
|
|
128
|
+
(adversarial, masivamente paralela), no por reflejo.
|
|
129
|
+
- **Subagentes heredan el contexto del padre** (CLAUDE.md + reglas globales). En proyectos
|
|
130
|
+
rule-heavy pueden saturar al arrancar (autocompact thrashing). Pasa scope acotado y evita
|
|
131
|
+
hacer que el subagente explore el codebase completo (ver `harness-claude-code`).
|
|
132
|
+
- **Barrier injustificado** mata wall-clock: si no hay dependencia cross-ítem entre stages,
|
|
133
|
+
usa `pipeline()`, no `parallel()` entre stages.
|
|
134
|
+
|
|
135
|
+
## Origen
|
|
136
|
+
|
|
137
|
+
Adoptado 2026-06-05 desde análisis de `temp/` (blog Anthropic dynamic-workflows +
|
|
138
|
+
ARIS `auto-review-loop`/`mcp-servers`). Ver APRENDIZAJES.md Tipo D 2026-06-05.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// PLANTILLA (no ejecutar verbatim) — Workflow tool de Claude Code.
|
|
2
|
+
// Patrón: fan-out de hallazgos -> verificación adversarial por hallazgo -> filtrar reales.
|
|
3
|
+
// Combate self-preferential bias y agentic laziness. Adapta DIMENSIONS, rubrics y schemas.
|
|
4
|
+
//
|
|
5
|
+
// Uso: el agente lee esta plantilla, la ajusta al caso concreto y la pasa al Workflow tool.
|
|
6
|
+
|
|
7
|
+
export const meta = {
|
|
8
|
+
name: 'adversarial-verify',
|
|
9
|
+
description: 'Revisa por dimensiones y verifica cada hallazgo adversarialmente antes de aceptarlo',
|
|
10
|
+
phases: [{ title: 'Review' }, { title: 'Verify' }],
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Dimensiones de revisión — una por lente independiente (no se contaminan entre sí).
|
|
14
|
+
const DIMENSIONS = [
|
|
15
|
+
{ key: 'correctness', prompt: 'Revisa SOLO correctness del scope. Devuelve hallazgos.' },
|
|
16
|
+
{ key: 'security', prompt: 'Revisa SOLO seguridad del scope. Devuelve hallazgos.' },
|
|
17
|
+
{ key: 'dry', prompt: 'Revisa SOLO duplicación/DRY del scope. Devuelve hallazgos.' },
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
const FINDINGS = {
|
|
21
|
+
type: 'object', additionalProperties: false,
|
|
22
|
+
properties: {
|
|
23
|
+
findings: {
|
|
24
|
+
type: 'array',
|
|
25
|
+
items: {
|
|
26
|
+
type: 'object', additionalProperties: false,
|
|
27
|
+
properties: {
|
|
28
|
+
title: { type: 'string' }, file: { type: 'string' }, line: { type: 'string' },
|
|
29
|
+
severity: { type: 'string', enum: ['critico', 'mayor', 'menor'] },
|
|
30
|
+
},
|
|
31
|
+
required: ['title', 'file', 'severity'],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
required: ['findings'],
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const VERDICT = {
|
|
39
|
+
type: 'object', additionalProperties: false,
|
|
40
|
+
properties: {
|
|
41
|
+
isReal: { type: 'boolean' },
|
|
42
|
+
reason: { type: 'string' },
|
|
43
|
+
},
|
|
44
|
+
required: ['isReal', 'reason'],
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// pipeline (sin barrier): cada dimensión verifica sus hallazgos en cuanto su review termina.
|
|
48
|
+
const results = await pipeline(
|
|
49
|
+
DIMENSIONS,
|
|
50
|
+
(d) => agent(d.prompt, { label: `review:${d.key}`, phase: 'Review', schema: FINDINGS }),
|
|
51
|
+
(review, d) =>
|
|
52
|
+
parallel(
|
|
53
|
+
(review?.findings || []).map((f) => () =>
|
|
54
|
+
// Verificador adversarial: prompt orientado a REFUTAR (default refutado si dudoso).
|
|
55
|
+
agent(
|
|
56
|
+
`Intenta REFUTAR este hallazgo contra el código real (cita archivo:linea). ` +
|
|
57
|
+
`Si no puedes probarlo, isReal=false: ${JSON.stringify(f)}`,
|
|
58
|
+
{ label: `verify:${f.file}`, phase: 'Verify', schema: VERDICT }
|
|
59
|
+
).then((v) => ({ ...f, verdict: v }))
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
const confirmados = results.flat().filter(Boolean).filter((f) => f.verdict?.isReal)
|
|
65
|
+
return { confirmados }
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// PLANTILLA (no ejecutar verbatim) — Workflow tool de Claude Code.
|
|
2
|
+
// Patrón: classify-and-act + quarantine. Clasifica ítems de un backlog, dedupe contra lo
|
|
3
|
+
// ya trackeado, y rutea: fix automático (bajo riesgo) vs escalar a humano (alto riesgo).
|
|
4
|
+
// Quarantine: el agente que LEE contenido no confiable NO ejecuta acciones de alto privilegio.
|
|
5
|
+
//
|
|
6
|
+
// `args` = lista de ítems del backlog (issues, reportes, etc.). Adapta schemas y umbrales.
|
|
7
|
+
|
|
8
|
+
export const meta = {
|
|
9
|
+
name: 'triage',
|
|
10
|
+
description: 'Clasifica un backlog, dedupe contra lo trackeado y rutea fix-vs-escalar (con quarantine)',
|
|
11
|
+
phases: [{ title: 'Clasificar' }, { title: 'Actuar' }],
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const items = Array.isArray(args) ? args : []
|
|
15
|
+
|
|
16
|
+
const CLASIFICACION = {
|
|
17
|
+
type: 'object', additionalProperties: false,
|
|
18
|
+
properties: {
|
|
19
|
+
categoria: { type: 'string', enum: ['bug', 'feature', 'duplicado', 'ruido'] },
|
|
20
|
+
yaTrackeado: { type: 'boolean' },
|
|
21
|
+
riesgo: { type: 'string', enum: ['bajo', 'alto'] },
|
|
22
|
+
resumen: { type: 'string' },
|
|
23
|
+
},
|
|
24
|
+
required: ['categoria', 'yaTrackeado', 'riesgo', 'resumen'],
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const ACCION = {
|
|
28
|
+
type: 'object', additionalProperties: false,
|
|
29
|
+
properties: {
|
|
30
|
+
accion: { type: 'string', enum: ['fix-aplicado', 'escalado-humano', 'descartado'] },
|
|
31
|
+
detalle: { type: 'string' },
|
|
32
|
+
},
|
|
33
|
+
required: ['accion', 'detalle'],
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Stage 1 (quarantine): clasificador LEE el ítem (posible contenido no confiable) pero NO
|
|
37
|
+
// tiene permiso de actuar — solo emite estructura. Stage 2 actúa sobre data ya saneada.
|
|
38
|
+
const triaged = await pipeline(
|
|
39
|
+
items,
|
|
40
|
+
(item) =>
|
|
41
|
+
agent(
|
|
42
|
+
`Clasifica este ítem del backlog. NO ejecutes ninguna acción: solo describe. ` +
|
|
43
|
+
`Marca yaTrackeado=true si ya existe ticket. Ítem: ${JSON.stringify(item)}`,
|
|
44
|
+
{ label: 'clasificar', phase: 'Clasificar', schema: CLASIFICACION }
|
|
45
|
+
),
|
|
46
|
+
(clf, item) => {
|
|
47
|
+
if (!clf || clf.yaTrackeado || clf.categoria === 'ruido' || clf.categoria === 'duplicado') {
|
|
48
|
+
return { accion: 'descartado', detalle: clf?.resumen || 'sin señal' }
|
|
49
|
+
}
|
|
50
|
+
if (clf.riesgo === 'alto') {
|
|
51
|
+
// Alto riesgo: escalar a humano, no auto-actuar.
|
|
52
|
+
return agent(
|
|
53
|
+
`Redacta un escalamiento conciso para humano sobre: ${clf.resumen}`,
|
|
54
|
+
{ label: 'escalar', phase: 'Actuar', schema: ACCION }
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
// Bajo riesgo: el agente que ACTÚA es distinto del que leyó contenido no confiable.
|
|
58
|
+
return agent(
|
|
59
|
+
`Aplica el fix de bajo riesgo para: ${clf.resumen}. Devuelve qué hiciste.`,
|
|
60
|
+
{ label: 'fix', phase: 'Actuar', schema: ACCION }
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return triaged.filter(Boolean)
|
|
@@ -242,7 +242,7 @@ El veredicto JSON se persiste en:
|
|
|
242
242
|
.planning/audit/reviews/<task-id>-<timestamp>.json
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
Esto permite que `auto-evolucion-swl` y `/swl:metricas` calculen tasas de
|
|
245
|
+
Esto permite que `auto-evolucion-swl` y `/swl:status metricas` calculen tasas de
|
|
246
246
|
APPROVED vs REJECTED por agente revisor y por tipo de tarea — datos
|
|
247
247
|
necesarios para identificar revisores con calibración floja o tipos de
|
|
248
248
|
tarea sistemáticamente problemáticos.
|
|
@@ -29,7 +29,7 @@ archivos SKILL.md y scripts asociados.
|
|
|
29
29
|
|
|
30
30
|
- Al ejecutar `/swl:crear-skill` — verificación pre-creación
|
|
31
31
|
- Al ejecutar `/swl:plugins install` — gate de seguridad
|
|
32
|
-
- Al auditar skills existentes con `/swl:salud`
|
|
32
|
+
- Al auditar skills existentes con `/swl:status salud`
|
|
33
33
|
- Al revisar skills generados por `auto-evolucion-swl`
|
|
34
34
|
- Cuando se incorporan skills de `_userland/plugins/` al sistema base
|
|
35
35
|
|