# F2 · E2 (planificador condicionado) · resultado: **no pasa** · la pieza no se usó

- Corrida: kernel v5, 19/10 01:27 → 05:33 UTC, 25 juegos × 2 pasadas = 50 partidas (38 `gave_up`, 12 `won`), 0 `Traceback` del harness, `submission.parquet` presente. Salida en `ECHO-5.5/artifacts/campaign/f2-e2-v5/` (fuera de git).
- Única diferencia con la base v3: la función `echo_plan()` en el sandbox (dataset helpers v2, `echo_plan.py` `3ec077fd…`) y su descripción (una línea) en el prompt del sistema. Mismo modelo, misma configuración, mismo presupuesto, `n_passes=2`.
- Comparación generada con `tools/compare.py f1-base-v3 f2-e2-v5 --arm E2`. Se vuelve a leer con la base agrupada cuando termine el A/A (criterio revisado del 19/10 03:25).

## Comparación pareada · E2 frente a la base

### cap = 1

- Total base 47.91 (pasadas 45.75, 50.07); total E2 44.39 (pasadas 42.33, 46.46).
- Diferencia -3.52 frente a banda de ruido 4.31.
- Juegos: 8 mejor, 14 peor, 3 igual; prueba de signos p = 0.286.
- Niveles por pasada: base [104, 108], E2 [100, 104]. Acciones por nivel completado: base 37.5, E2 35.6.
- Tokens generados por pasada: base [4389080, 4307134], E2 [4334120, 4461355].
- Veredicto (DESIGN §4): no pasa.

### cap = 1.15

- Total base 49.66 (pasadas 47.45, 51.88); total E2 46.23 (pasadas 44.14, 48.31).
- Diferencia -3.44 frente a banda de ruido 4.42.
- Juegos: 8 mejor, 12 peor, 5 igual; prueba de signos p = 0.503.
- Niveles por pasada: base [104, 108], E2 [100, 104]. Acciones por nivel completado: base 37.5, E2 35.6.
- Tokens generados por pasada: base [4389080, 4307134], E2 [4334120, 4461355].
- Veredicto (DESIGN §4): no pasa.

### Por juego (media de pasadas, cap = 1)

| Juego | base | E2 | Δ |
|---|---|---|---|
| ar25-0c556536 | 100.00 | 100.00 | +0.00 |
| bp35-0a0ad940 | 1.11 | 4.01 | +2.90 |
| cd82-fb555c5d | 94.83 | 91.74 | -3.09 |
| cn04-2fe56bfb | 71.43 | 71.43 | +0.00 |
| dc22-fdcac232 | 23.40 | 47.20 | +23.80 |
| ft09-0d8bbf25 | 47.62 | 100.00 | +52.38 |
| g50t-5849a774 | 0.00 | 10.71 | +10.71 |
| ka59-38d34dbb | 44.10 | 35.05 | -9.06 |
| lf52-271a04aa | 3.64 | 6.36 | +2.73 |
| lp85-305b61c3 | 100.00 | 70.20 | -29.80 |
| ls20-9607627b | 23.25 | 13.75 | -9.50 |
| m0r0-492f87ba | 45.60 | 67.15 | +21.55 |
| r11l-495a7899 | 100.00 | 100.00 | +0.00 |
| re86-8af5384d | 49.26 | 41.67 | -7.59 |
| s5i5-18d95033 | 9.30 | 7.27 | -2.03 |
| sb26-7fbdac44 | 89.50 | 84.35 | -5.15 |
| sc25-635fd71a | 57.21 | 55.24 | -1.98 |
| sk48-d8078629 | 1.26 | 0.62 | -0.64 |
| sp80-589a99af | 26.19 | 4.76 | -21.43 |
| su15-1944f8ab | 28.66 | 13.02 | -15.64 |
| tn36-ef4dde99 | 1.58 | 1.79 | +0.20 |
| tr87-cd924810 | 90.28 | 59.52 | -30.75 |
| tu93-0768757b | 85.28 | 52.47 | -32.81 |
| vc33-5430563c | 96.89 | 54.62 | -42.27 |
| wa30-ee6fef47 | 7.33 | 16.82 | +9.49 |

## Uso de la pieza (`tools/piece_usage.py`)

- **0 llamadas a `echo_plan()` en 3.225 pasos**, en los 25 juegos.
- En los mensajes del modelo, tanto en el texto como en el razonamiento (`reasoning_content`), «echo_plan» aparece en **0 de 4.684** mensajes únicos del asistente. Solo aparece en el prompt del sistema.
- Es decir: E2 es, en la práctica, la base con un párrafo más en el prompt, que el modelo ignoró.

## Diagnóstico (19/10, sin GPU)

1. **El gancho está limpio.** El prompt del sistema real (primera petición de vc33 p0) difiere de la base en exactamente una línea, la declarada. El log del kernel confirma `ECHO piece E2: hook applied` y `priority gate active: 10 concurrent streams`.
2. **El cómputo fue el mismo.**
   - Acciones: 10.139 en E2, 10.186 en la base.
   - Tokens generados por pasada: 4,33 M y 4,46 M en E2, frente a 4,39 M y 4,31 M.
   - Duración: 4 h 05 min frente a 4 h 06 min.
   - Errores de Python del propio modelo: 397 `Traceback` frente a 380.
3. **Partidas paradas por el planificador de M2** (`stop_requested`): 29 en E2, 28 en E1 y 24 en la base.
4. **Las diferencias por juego son grandes en los dos sentidos sin que la pieza se use:**
   - a favor: ft09 +52, dc22 +24, m0r0 +22, g50t +11 (la base sacaba 0) y wa30 +9;
   - en contra: vc33 −42, tu93 −33, tr87 −31, lp85 −30 y sp80 −21.
   - Como la pieza no se tocó, estas diferencias son ruido entre corridas más, como mucho, el efecto de un párrafo más en el prompt.

## Lectura

- E2 no pasa: −3,44 frente a una banda de 4,42, con 8 juegos mejor y 12 peor. Se registra como negativo.
- **Lo más útil de E2 es lo que dice del ruido.** Una corrida sin cambio efectivo mueve juegos enteros ±30–50 puntos y el total unos 3,4 puntos. El A/A lo medirá sin ningún cambio en el prompt.
- **Lección de diseño (E1 y E2): este modelo casi no llama a funciones nuevas que solo se le describen en el prompt.** `effects()` se llamó 16 veces en 3.108 pasos; `echo_plan()`, 0 en 3.225. Una pieza tiene que llegar al modelo sin que él la pida.

## Qué cambia

- El A/A (kernel v6, subido a las 05:42:56 UTC) sigue: es la medida que permite juzgar cualquier brazo.
- La siguiente pieza, si el A/A deja margen, es **E1b**: el harness añade a cada resultado de acción un resumen corto y verificado de los efectos, sin esperar a que el modelo lo pida. Un planificador en el sandbox no vuelve a probarse en esta forma.

## Relectura con la base agrupada (19/10, tras el A/A)

La base agrupada son las corridas v3 y v6, con 4 pasadas: total 48,00 con cap 1,15 y banda 10,03. Detalle en `F1-AA.md`. El veredicto no cambia: **no pasa**.

E2 queda en 46,23 frente a 48,00 (−1,78); 11 juegos mejor, 13 peor y 1 igual. Es lo mismo que una repetición de la base (A/A: 46,34).
