# ECHO-5.5-v2 · niveles oficiales, alcance y límites

16 de octubre de 2026. Estado: integración CPU con progreso oficial verificado;
ventaja del LLM y cierre competitivo pendientes. Se conservan los resultados de v1.

## Resultado principal: tres juegos, condiciones pareadas

Antes de ejecutar se fijaron tres juegos públicos ya conocidos, semilla 73 para
entorno y política, 600 acciones físicas por intento, y parada en el primer nivel.
Se comparó el mismo explorador, con frame completo o máscara de borde explícita.
Ambas condiciones usan clics dirigidos a componentes: este contraste cambia la
clave de estado, no simultáneamente el método de selección de clics.

| Juego | Frame completo | Máscara de borde |
|---|---:|---:|
| bp35-0a0ad940 | 0 niveles / 600 acciones | 1 nivel / 247 acciones |
| tu93-0768757b | 0 / 600 | 0 / 600 |
| s5i5-18d95033 | 0 / 600 | 0 / 600 |

**0/3 frente a 1/3 en este corte de desarrollo, sin LLM.** No es una demostración
estadística de superioridad general, ni un examen reservado, ni puntuación Kaggle.
La máscara puede eliminar información útil además de HUD; se trata como hipótesis.

![Corte pareado CPU](v2-results-20261016/primary-600.png)

[JSON completo](v2-results-20261016/primary-600.json) ·
[Plan fijado](v2-results-20261016/primary-plan.json) ·
[PDF](v2-results-20261016/primary-600.pdf).

## Reproducciones adicionales: el circuito nuevo conserva las victorias

La referencia antigua se ejecutó como diagnóstico público con el motor actual.
Con semilla 73, S5I5 necesitó 1.100 acciones para avanzar y TU93 no avanzó en
2.000. Con la semilla histórica, TU93 volvió a alcanzar cuatro niveles. Esas
observaciones motivaron reproducciones separadas: no se mezclan con el panel 600.

| Juego | Semilla política / entorno | Cuota | Acciones hasta nivel 1 | Resets incluidos |
|---|---|---:|---:|---:|
| bp35 | 73 / 73 | 600 | 247 | 3 |
| tu93 | 1336611269 / 0, histórica | 600 | 247 | 4 |
| s5i5 | 73 / 73 | 1.200 | 1.100 | 21 |

Las tres pasaron por el hijo Bubblewrap y el padre de v2, con `echo.explore()`.
Se alcanzó `levels_completed == 1`; **no se completó el juego entero**.
Las fuentes permanecieron intactas en cada reproducción. Corte de código local:
`1c47718`, antes de la mejora posterior de proyección cortical.

Esto reproduce capacidades conocidas bajo condiciones concretas. No atribuye
una mejora a A*, al LLM ni a memoria nueva entre tareas. No se entrenó un modelo.

![Acciones de las reproducciones](v2-results-20261016/reference-actions.png)

[Datos JSON](v2-results-20261016/reference-reproductions.json) ·
[CSV](v2-results-20261016/reference-reproductions.csv) ·
[PDF](v2-results-20261016/reference-actions.pdf).

## Repeticiones de victorias reales

Los GIFs contienen cada observación pública, incluidos resets y transición de
nivel. No son smoke tests ni animaciones inventadas. La cadencia es de presentación;
no mide tiempo de ejecución ni implica una estrategia humana comprensible.
El contador muestra las acciones acumuladas y los niveles observados por el SDK.

- [BP35: 248 frames, 247 acciones](v2-results-20261016/bp35-0a0ad940.gif).
- [TU93: 248 frames, 247 acciones](v2-results-20261016/tu93-0768757b.gif).
- [S5I5: 1.101 frames, 1.100 acciones](v2-results-20261016/s5i5-18d95033.gif).

Hay capturas iniciales/finales, timelines y un ZIP público por juego junto a los
GIFs. Los ZIP incluyen recibos, catálogo firmado, blobs de frames, plan y scorecard;
**excluyen autoridades y claves HMAC**. La autenticación se validó localmente con
custodia privada. El SHA-256 de cada frame está anclado en el recibo; una firma
no certifica que una interpretación cognitiva sea verdadera.

Las reproducciones suman 5.005 recibos de eventos y 80 recibos de catálogo,
con diarios válidos, frames comprobados, `destroyed == 0` y cgroups cerrados.
Se verificó el número de frames de los GIFs y su coloración en cuatro cortes
por juego, incluido el frame final, con la paleta oficial de arc-agi 0.9.3.

## Qué cambió en el código

- A* acotado a 4.096 celdas, rutas cardinales de coste unitario, hasta 64×64.
  Solo es óptimo bajo el mapa y los efectos declarados; no interpreta la física
  del juego. `action_map=[arriba,derecha,abajo,izquierda]` declara los IDs.
- `echo.targets(background=None)` devuelve componentes por rareza de color,
  con el centro proyectado a una celda observada. Son candidatos, no metas ciertas.
- `echo.explore(steps)` delega en la política histórica `Arc3EchoV2`, importada,
  no copiada. Su T, curiosidad BFS, estimación de efectos y rutas se conservan.
- La política comparte la CAM activa del broker. No se introduce un LLM en
  NEXUS-0 ni otro bus de pensamiento. Las rutas se invalidan ante contradicciones.
- La clave exploratoria admite máscara de borde opt-in. La observación original
  y la clave de seguridad conservan el HUD; nunca se recorta el frame del hijo.
- Muertes son observaciones con atribución tentativa. Supervivencia previa
  revoca el veto tentativo, pero no demuestra que la muerte sea por energía.
  El guard de muerte es opt-in (`--death-guard`) y estuvo apagado en los contrastes publicados.
  Una supervivencia posterior también elimina la marca tentativa de la política histórica.
- Reset es una capacidad explícita después de GAME_OVER confirmado y consume
  una acción. No se reinician las cuotas al cambiar de programa ni hay rollback
  del mundo. Las peticiones se deduplican dentro del script.

Se resolvió además un cuello de botella de auditoría: frames por hash y segmentos
pequeños del ReceiptStore existente, unidos mediante catálogo HMAC. El catálogo
mantiene orden global y ancla la cabeza de cada segmento anterior. Los blobs se
verifican contra sus hashes; falta de autoridad, truncación, sustitución o segmentos
no registrados causan fallo. No se cambió el núcleo de recibos congelado de 5.1.
Los intentos previos interrumpidos por coste se mantienen en artifacts/v2-development.

## Preparación y prueba del neocórtex

El tokenizador local de Qwen 7B detectó que el RLE inicial de BP35 superaba el
límite de 3.000 tokens. Se añadió un diccionario de filas sin pérdida: los índices
seleccionan filas RLE únicas. En el corte medido pasó de 3.182 a 2.259 entradas;
TU93 de 2.061 a 1.074 y S5I5 de 1.624 a 1.118. Es proxy de familia, no medición
certificada del 32B. El proveedor objetivo hace su propio conteo antes de generar.

También se corrigió un fallo de observabilidad: `print()` se capturaba, pero el
turno siguiente no recibía esa salida. Ahora recibe un extracto acotado y marcado,
sin convertir texto del modelo en hechos. Las pruebas verifican que una salida
calculada en el hijo llega al siguiente turno y que el límite de tiempo se impone
antes de una acción extra. Una meta de nivel se reporta por separado de WIN.

## Calibraciones reales con el 32B en Kaggle

Qwen2.5-Coder-32B-Instruct Q4_K_M, revisión
`9d3053fce650fe1cdbdb75998c2a87add9d178ef`, SHA-256
`4d64b316b5e6319d9613e0d97935d9ebd631fc7e334da400d00085eca749d085`.
Se verificaron 65/65 capas en GPU en dos Tesla T4. El juego y los candidatos
Python se ejecutaron en el host local aislado; Kaggle solo sirvió inferencia.

| Calibración | Niveles alcanzados | Acciones | Llamadas | Tokens |
|---|---:|---:|---:|---:|
| R1, primer protocolo | 0 | 64 | 1 | 2.309 |
| R2, continuidad corregida | 1 | 247 | 4 | 10.318 |

R1 emitió un bucle de clics al centro hasta GAME_OVER. Se conserva ese fracaso.
El runner determinista permitía resets, pero el bucle cortical terminaba al perder
una vida. R2 habilita continuidad tras GAME_OVER en la misma cuota, una directriz
explícita de exploración cuando no se conocen las reglas y corte de llamadas al
agotar acciones. Se verificó en CPU que el reset final no dispara una generación
pagada cuando consume la última acción disponible.

En R2 los cuatro programas fueron `echo.explore(steps=64)`. El padre hizo tres
resets y paró al primer nivel. **La secuencia de 247 acciones y los 248 frames
coinciden exactamente con la referencia CPU.** El LLM pudo orquestar el explorador;
no mejoró su ruta ni descubrió por sí mismo la solución, y añadió 10.318 tokens.
R1 y R2 son calibraciones adaptativas con protocolos diferentes, no un contraste
causal que separe el efecto de cada cambio.

Cada intento tenía como techo ocho llamadas, 25.000 tokens, 600 acciones,
3.000 entradas/512 salidas por llamada y 30 s por programa. Los prompts iniciales
reales fueron 2.276 y 2.319 tokens. Ambos cortes conservaron sus fuentes sin
cambios, recibos y frames válidos, `destroyed == 0`, cgroups cerrados y ninguna
reserva de generación sin respuesta. WIN completo sigue siendo falso: se ganó
un nivel, no todo el juego.

Los dos kernels privados terminaron en COMPLETE y se cerraron relays/túneles.
Entre los envíos y las solicitudes de parada transcurrieron unos 16,1 minutos
en total, incluyendo arranque/descarga. **No es una lectura de facturación ni
un saldo certificado de Kaggle.** Se consumieron 12.627 tokens de inferencia.

[Resumen y coincidencias](v2-results-20261016/model-calibrations.json) ·
[R1 y programa fallido](v2-results-20261016/calibration-r1-result.json) ·
[R2 y sus cuatro programas](v2-results-20261016/calibration-r2-result.json) ·
[Perfil GPU verificado](v2-results-20261016/calibration-r2-model.json).

El protocolo exacto de cada corte está preservado como texto y coincide con el
hash de su plan. La CLI posterior añade una entrada reusable y amplía el manifiesto
de dependencias; no reescribe los datos de calibración. No se lanzó el panel de
25 juegos: todavía falta fijar un baseline Duck compatible y un contrato de
ablaciones que evite atribuir al modelo las victorias de la exploración CPU.

## Verificación y lo que falta

50 pruebas de v1/v2, 24 de interacción y 9 del núcleo/rejilla: **83 pasadas**.
Las pruebas históricas de v1 permanecen como datos; se actualizó el contrato
actual que antes esperaba abstención del planificador en 64×64.

- [x] Helpers 64×64, candidatos, exploración y memoria por nivel integrados.
- [x] Niveles oficiales alcanzados desde el hijo y auditados por el padre.
- [x] Contraste CPU pareado y fallos preservados.
- [x] Proyección cortical y feedback comprobados antes de generar remotamente.
- [x] Calibración 32B cerrada y auditada; sin ventaja sobre la ruta CPU observada.
- [ ] Panel de 25 juegos con políticas, cuotas y scorer congelados y ablaciones.
- [ ] Comparación LLM solo / LLM+ECHO / ECHO solo a recursos declarados.
- [ ] Entrada Kaggle autosuficiente sin internet; el relay de desarrollo no sirve
  como submission oficial. Bubblewrap/systemd del host no se presuponen en Kaggle.
- [ ] Mejoras de percepción/actuadores y transferencia con evidencia independiente.
- [ ] Cierre competitivo y paper. No se declara verde científico por estas reproducciones.

El scorer del SDK se guarda, pero sus números locales no son una puntuación de
leaderboard. El premio exige una submission vinculada al paper. La fecha oficial
es 2 de noviembre para código y 8 para papers; los fondos anunciados no son una
recompensa garantizada para el laboratorio.
[Calendario](https://arcprize.org/competitions/2026) ·
[Requisitos del Paper Prize](https://arcprize.org/competitions/2026/paper).
