TRANSFER-3 v8 — la diversidad de salas sí mueve la cobertura, y no basta
2026-09-18. Desarrollo público. TRANSFER-3 no cerrado. Sin candidato. Diseño fijado antes de ejecutar: contrato v8. No se generó ni abrió B/C. Inventario congelado de v4 comprobado ruta a ruta.
Predicciones 1 y 2: confirmadas
El brazo de 4 salas replica exactamente baseline de v6 y corrected de v4
(11/13/40, 2 fallos nuevos, −40). La corrida es válida.
A presupuesto constante de 128 movimientos, cambiar sólo el número de salas distintas:
| Salas | Features | Pares muestreados | Pares posibles | Pares en conflicto |
|---|---|---|---|---|
| 4 | 27 | 38 | 108 | 0 |
| 8 | 39 | 60 | 156 | 0 |
| 12 | 39 | 66 | 156 | 0 |
La cobertura casi se duplica sin gastar un movimiento más. V7 había mostrado que ocho veces el presupuesto sobre cuatro salas compra dos pares; aquí, triplicar las salas con el mismo presupuesto compra veintiocho. Queda confirmado que el techo lo ponía la distribución de datos, no el gasto. El conflicto de retornos sigue en cero en los tres conjuntos.
Predicción 3: falla, y falla por una sola razón
| Salas | Brazo | Metas | Movimientos examen | W/L/T | Fallos nuevos | Ahorro conjunto | Coste total | Cribado |
|---|---|---|---|---|---|---|---|---|
| — | scratch |
62/64 | 1065 | — | — | — | 1065 | — |
| 4 | baseline |
62/64 | 1130 | 11/13/40 | 2 | −40 | 1258 | no |
| 8 | baseline |
62/64 | 1088 | 17/14/33 | 2 | −14 | 1216 | no |
| 12 | baseline |
62/64 | 1086 | 17/16/31 | 2 | −12 | 1214 | no |
| 4 | pessimistic |
60/64 | 1135 | 8/10/46 | 2 | −18 | 1263 | no |
| 8 | pessimistic |
61/64 | 1116 | 13/11/40 | 3 | −20 | 1244 | no |
| 12 | pessimistic |
60/64 | 1180 | 11/15/38 | 4 | −56 | 1308 | no |
Cero colisiones, violaciones de reserva, hechos falsos, escrituras imaginadas y modelos alterados en las 448 misiones.
baseline mejora de forma clara y monótona con la diversidad: de 11 victorias
a 17, y el déficit de eficiencia se reduce de −40 a −12. Pero ningún brazo
pasa, y siempre por el mismo motivo: new_failures = 2.
Los dos fallos son siempre los mismos
scratch falla en 20264674 y 20264680. Todo brazo entrenado con
exportación estándar falla en 20264670 y 20264695, con 4, 8 o 12 salas, y
recupera a cambio las dos de scratch. El intercambio es exactamente 2 por 2 en
los tres conjuntos: más cobertura no lo deshace.
No es ruido de muestreo: es un modo de fallo reproducible que el entrenamiento introduce y la diversidad no corrige. El criterio de v4 rechaza cualquier brazo con un fallo nuevo, así que esas dos salas son, hoy, el único obstáculo entre el mejor brazo y el cribado. Antes de tocar nada más hay que saber qué ocurre en ellas.
La exportación pesimista empeora con la diversidad —de 2 a 4 fallos nuevos—, como predijo el mecanismo de v6: ordenar lo desconocido al final suprime el desvío no explorado, y con más features hay más sitios donde eso muerde. Queda descartada como dirección.
Los dos fallos son un solo valor aprendido
Reproducidas las dos salas paso a paso contra scratch, el mecanismo es
idéntico en ambas y se localiza en una entrada de la tabla:
| Sala | Divergencia | Posición | Distancia a meta | scratch |
Entrenado |
|---|---|---|---|---|---|
20264670 |
paso 12 | (−2, −4, 0) | 6 | acción 1 → llega en 18 | acción 2 → abandona tras 54 |
20264695 |
paso 14 | (−4, −4, 0) | 6 | acción 1 → llega en 20 | acción 2 → abandona tras 48 |
Las dos divergencias ocurren en la misma feature, el código 504, cuya fila
Q es [−3, 1, 3, 0]: la acción 2 gana el desempate con +3. scratch no tiene
preferencia y cae en el orden de camino, que aquí acierta.
El código 504 significa: meta con x menor y y mayor que la posición, z
igual, acción 3 bloqueada, acciones 0–2 libres. Con DIRECTIONS planares
[(+1,0),(−1,0),(0,+1),(0,−1)], tanto la acción 1 como la 2 reducen la
distancia L1: las dos son avances legítimos y las dos cobran +7 en la
escuela. La feature no puede decir cuál de las dos entra en un callejón,
porque la pared está a más de una celda y la máscara sólo ve el anillo
inmediato.
La fila cambia con la diversidad —[−3, 0, 1, 0] con 4 y 8 salas,
[−3, 1, 3, 0] con 12— pero la acción 2 gana en los tres casos, y por eso los
dos fallos sobreviven a duplicar la cobertura.
Esto es aliasing, no cobertura. El par está muestreado; el valor está
aprendido; el problema es que la representación mete en la misma celda dos
situaciones con respuestas opuestas. También explica por qué el medidor de
conflicto de v7 marcó cero: dentro de la escuela el par (504, acción 2)
siempre dio retornos consistentes, porque allí era correcto. La contradicción
sólo aparece fuera de la distribución de entrenamiento, y un medidor calculado
dentro de la escuela no puede verla por construcción.
El discriminador que falta es observable sin oráculo: la longitud de tramo
libre en cada dirección más allá del anillo inmediato, que el agente ya tiene
en sus creencias (free() sobre celdas observadas). Es un cambio de
representación, no un ajuste, y no se implementa aquí sin contrato aprobado.
Coste del banco público
Esta corrida consume 8 de las 42 formas canónicas que quedaban en la
familia de una pared con un hueco; quedan 34. Las salas nuevas son
20264706, 20264710, 20264717, 20264721, 20264725, 20264727, 20264729, 20264735.
Se declaró en el contrato antes de ejecutar.
Con 34 formas restantes no hay margen para un examen prospectivo de 64 salas más una confirmación reservada. El generador ampliado es el camino crítico, y ahora lo es por dos motivos independientes: hacen falta salas para B/C y hacen falta salas para que la escuela aprenda algo.
Verificación
Artefacto: lab/transfer3/rooms-v8.json, isolated=true, hash canónico
7019d0eb60eebae9fbdc42ca6ddc2da2c683f82f920917eb141317b999d67164.
Auditoría completa en proceso nuevo: replay_valid=true, exit 0, mismo hash.
11 tests v8 nuevos; regresión TRANSFER-3 en 130 tests.
env PYTHONPATH=.. python3 -m unittest tests.test_transfer3_v8 -q
env PYTHONPATH=.. python3 -m echoai.nexus0.transfer3.rooms_v8 audit lab/transfer3/rooms-v8.json
Un defecto del arnés, encontrado al auditar
rehearsal.inventory() hashea todo el árbol nexus0/**/*.py, no las
dependencias de la corrida. Consecuencia: añadir cualquier módulo nuevo
invalida la reproducción de todos los informes anteriores, aunque ninguna de
sus dependencias haya cambiado. La primera auditoría de v7 falló exactamente
por eso —se creó rooms_v8.py mientras estaba en vuelo—, y no por un
desacuerdo de resultados.
No se corrige aquí: inventory() pertenece al inventario congelado de v2, v3
y v4, y tocarla rompería esas auditorías. Queda anotado para el protocolo
final, que debería fijar el conjunto de dependencias de cada corrida en vez de
fotografiar el árbol. Los artefactos screen-v6-stable.json y
curve-v7-stable.json regeneran v6 y v7 sobre el árbol estable para que los
tres puedan auditarse a la vez.
Seis cribados más contra el mismo banco público no son pruebas independientes. Ninguno pasó, así que no hay nada que confirmar prospectivamente.
TRANSFER-3 sigue en rojo. ECHO-3 permanece en 13/15.