Documento originalAbrir .md

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 → merge de un bit común a ≥ 2 claves. Antes merge se puntuaba con todos los fallos y ocupaba todos los huecos. bound ya no lo propone el diagnóstico (el contrato §3 decía «merge o bound»); solo azar y LLM pueden elegirlo del menú.
  • Las candidatas se calculan una vez por ronda: si se acepta refine(k), las verify(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 propia recursiva (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.

Vista previa

Abrir original