ACUMULA · enmienda 1 (desarrollo, antes de congelar)
20 de octubre de 2026. Escrita antes de preflight y antes de jugar ninguna
familia de la sonda de examen (LavaCrossingS11N5, Dynamic-Obstacles-Random-6x6,
BlockedUnlockPickup, ObstructedMaze-1Dl) y ninguna semilla de examen
(3 000 000+). Q1–Q5, la métrica, α = 0,01, Holm y la puerta verde no
cambian. Datos de desarrollo: lab/echo58/acumula/dev-*.json (macros 1–3,
semillas 2 000 000+, sonda de desarrollo LavaGapS6, Dynamic-Obstacles-Random-5x5,
Unlock, KeyCorridorS3R3).
1. Cambio de menú: dos bits de rango en la firma (fuera de lo que permitía §6)
Hallazgo. En DistShift2 A2 la lava tiene la firma 8 (5–15 casillas, sin
borde); en el entrenamiento esa firma era suelo transitable 175 veces frente a
17 NOOP. La memoria cree «con razón» que se puede pisar. Ningún bit del menú
aprobado (tamaño, borde) separa esa lava del suelo: silence o verify solo
dejan al agente tanteando, y muere igual.
Cambio. La firma lleva dos bits más que el agente ya puede ver: 32 = el
identificador interior más común, 64 = el segundo. refine(k, b) puede usar
también esos bits. La configuración base los oculta: comprobado que la
memoria de partida reconstruida da exactamente las mismas tablas que la
memoria congelada de A (macro 1: 539 observaciones, capas 1 y 2 idénticas) y
un test lo fija. Es un cambio del contrato aprobado: aprobado por Nav el 20/10/2026. El revisor comprobó la identidad con A en
las 10 macros (516–572 observaciones cada una), no solo en la macro 1.
2. Diagnóstico (permitido por §6)
- Las sorpresas cuentan como fallo medido. Además de «la memoria respondió y el agente sufrió daño o perdió la acción», cuenta toda observación que contradice la regla vigente de su clave (el δ del núcleo). Motivo: en desarrollo, una puerta abierta y una tira corta de lava compartían clase morfológica; tras la ronda 4 la regla de esa clase quedaba muda y la lava de la sonda mataba, sin que la regla hubiera fallado nunca en la ronda.
- Por clave, solo el bit que mejor separa. Para cada clave culpada se prueba el bit que más aumenta la pureza de sus resultados observados (suma de la moda de cada mitad, enteros), no todos los bits.
- Orden por niveles:
order(si falló la capa 1) → partir cada clave culpada por su mejor bit →verify→silence→mergede un bit común a ≥ 2 claves. Antesmergese puntuaba con todos los fallos y ocupaba todos los huecos.boundya no lo propone el diagnóstico (el contrato §3 decía «mergeobound»); solo azar y LLM pueden elegirlo del menú. - Las candidatas se calculan una vez por ronda: si se acepta
refine(k), lasverify(k)/silence(k)que venían detrás actúan sobre una clave que ya no existe, entran por la puerta y no hacen nada. Gasta presupuesto de la propiarecursiva(no la favorece); el informe Q5 lo señalará.
3. K y puerta de aceptación (permitido por §6)
- K = 6 candidatas por ronda (antes 4), para todos los brazos.
- Puerta lexicográfica de no inferioridad, para todos los brazos: entra si el daño no sube y el éxito no baja y (baja el daño, o sube el éxito, o, si ambos empatan, el desperdicio no crece un 10 % o más; 0 → 0 cuenta como no crecer). Antes exigía mejora estricta y rechazaba ediciones que solo protegen otros mundos (p. ej. separar puerta y lava en la ronda 4).
- Validación: 10 mundos por familia de la ronda (20 por ronda), sin aprender.
4. Brazo LLM (aprobado por Nav)
openai/gpt-oss-120b en Groq, temperatura 0, respuesta JSON. Ve el mismo
diagnóstico (claves como números) y el menú completo de ediciones válidas;
elige hasta K; pasa la misma puerta. Respuestas guardadas por SHA-256 de la
petición en lab/echo58/acumula/llm-cache/. Se informa, no decide. En
desarrollo: 15 llamadas, 0 errores.
5. Desarrollo tras los cambios (dev-20261020T164733.json, 3 macros)
Sonda de desarrollo, suma de las 3 macros, éxitos / daño por ronda 0…5:
| Brazo | r0 | r1 | r2 | r3 | r4 | r5 |
|---|---|---|---|---|---|---|
| recursiva | 278/6 | 284/3 | 279/0 | 278/0 | 289/0 | 282/0 |
| azar | 278/6 | 270/13 | 267/12 | 254/36 | 232/76 | 221/80 |
| sin_acumular | 278/6 | 284/3 | 282/0 | 266/7 | 276/3 | 195/79 |
| fija | 278/6 | 270/13 | 265/10 | 259/15 | 196/83 | 193/79 |
| llm | 278/6 | 260/13 | 237/35 | 242/34 | 182/80 | 167/104 |
Q3 en desarrollo (configuración final frente a base, misma memoria final, familias de examen de A en A2): daño 84,3 → 0, éxito 111 → 196. Q4: DistShift2 A2 50 daños → 0, 0 éxitos → 50.
6. Riesgo que se declara antes del examen: Q1
En desarrollo Q1 falla: la sonda empieza casi sin daño (6), y la automejora lo que hace es impedir que el daño suba mientras los demás brazos se degradan; no puede bajar tres rondas seguidas desde casi cero. Q1 no se cambia: es el criterio de automejora sucesiva del roadmap. Si en el examen sale rojo y Q2/Q3 verdes, el resultado se leerá como «automejora que protege y corrige, sin curva sucesiva», y B quedará roja.
7. Segunda revisión independiente (20/10)
Veredicto: congelar, con dos condiciones, cumplidas: la aprobación de Nav de
§1, y que el examen no se pueda perder por un fallo de red. Ahora un trabajo
que falla queda escrito como crash con su traza en vez de abortar el
examen. La llamada al LLM captura cualquier excepción, y las respuestas con
error no se guardan en la caché. Comprobado también: equidad entre brazos
(misma puerta, mismas semillas de validación, misma memoria de partida, fija
es un control válido), aislamiento de la sonda, bloques de semillas
disjuntos, informe sin errores que cambien una predicción, invariantes.
Aviso de potencia: Q2 necesita ~9 macros a favor y ninguna empatada.
8. Congelación
preflight congela el estado de A (código y entorno), los ficheros de
echo58/acumula/, el registro de familias, rondas, sonda, K, tamaños y
semillas de examen. exam se niega si algo cambió o si exam/ no está vacío.