1. Síntoma
Tras el salto de mapa Belu → Keros, la nave no estaba junto a la estación de Keros. La distancia HUD quedaba cerca de ~798 m. La primera llegada scripted a Keros seguía usando una pose de vista. Abrir el mapa y seleccionar Belu no contaba como llegar; solo un cambio físico de sistema.
2. Impacto en el jugador
La lección de mapa terminaba con la nave lejos del muelle al que “acababa de llegar”. El paso a Capítulo 1 y el beat de entrenamiento básico dependían de estar físicamente en Keros, así que una pose incorrecta hacía sentir roto el tutorial aunque el id de sistema fuera correcto.
3. Reproducción
Jugar Last Run hasta la lección de mapa: saltar de verdad Keros → Belu, reabrir el mapa, saltar Belu → Keros. Comparar los metros HUD a la estación con la primera colocación scripted. Los tests de regresión reconstruyen el fallo sumando el offset local de estación (190, 72, 0) como si fuera espacio mundo.
4. Ownership del sistema
Las reglas de mapa/vuelo de Last Run viven en last-run-map-lesson.js (puras, sin warp propio). La colocación real la posee galaxy arrival / runtime de Last Run. El warp genérico usa _computeWarpArrivalPosition. El primer Keros scripted usa _teleportToKeros. Los comentarios en fuente nombran esas dos llegadas como funciones distintas.
5. Supuesto erróneo
Si currentSystemId === "keros", la nave “está en Keros” de un modo usable. También: un offset local de estación puede aplicarse como sample de mundo. También: un solo helper de llegada de warp basta para tutorial y campaña.
6. Causa raíz
El near-dock Belu → Keros usaba el offset local de la estación como si ya fuera espacio mundo, lo que aparcaba la nave cerca del origen (~795 m HUD en la reconstrucción). El warp de mapa no reutilizaba el ancla near-dock scripted. Entradas posteriores registran que el helper genérico de warp seguía dejando el segundo salto fuera de la banda 80–100 m HUD hasta que Last Run aplicó el mismo hook near-dock (~90 m).
7. Arreglo mínimo
Reconstruir el ancla de muelle sobre el host visual de Keros, descartar un sample local no confiable, y aplicar near-dock al completar aunque el flag ya estuviera puesto. Dejar igual la vista del primer Keros, el warp genérico y el respawn de muerte. La segunda llegada de Last Run (Belu → Keros, pata to_keros, ida ya llegada) es el único camino que debe usar el hook near-dock.
8. Test de regresión
last-run-map-warps.test.mjs afirma: seleccionar Belu sin llegar no completa Last Run; warpear no es llegada física; la reconstrucción offset-local-como-mundo queda demasiado lejos; samples de muelle confiables producen la banda 80–100 m HUD; lastRunSecondKerosArrivalUsesNearDock es verdadero solo para el retorno Last Run Belu → Keros.
9. Validación de release
Quedó registrado en el log de desarrollo de CONTRABAND el 19 de agosto de 2026 en v0.4.155–v0.4.157 (rebuild near-dock, banda 80–100 m, segundo salto también ~90 m). El QA Electron de Last Run sigue en el gate qa:release posterior; el contrato de este incidente es el archivo unitario anterior.
10. Lección generalizada
El id de sistema no es la pose. Dos entradas que comparten etiqueta siguen necesitando un contrato de colocación compartido. Mezclar espacio local y mundo se ve como un “bug de warp” para el jugador y como un vector de una línea para un asistente de IA. Posee una política de llegada por intención (vista vs near-dock) y testa metros, no solo flags.
Antes / después
Antes: salto de retorno ~795–798 m del muelle (offset local tratado como mundo); la primera llegada seguía en vista. Después: el retorno Last Run Belu → Keros usa el ancla near-dock (~80–100 m HUD, log ~90 m); la vista del primer Keros scripted no cambia; warp genérico y respawn no cambian.
Extracto simplificado
Simplificado / pseudocódigo para enseñar. No es un volcado de archivos de producción.
Reconstrucción de test de la mezcla mundo/local. No es el fuente de producción.
// Simplified teaching excerpt — not CONTRABAND production source.
const stationLocal = { x: 190, y: 72, z: 0 };
// Wrong: treat local dock offset as a world sample (~795 m HUD in the test).
const wrongWorld = stationLocal;
// Right: rebuild dock on the Keros visual host, then apply near-dock offsets.
const dockWorld = kerosHost.position.clone().add(stationLocal);
placeNearDock(kerosStar, dockWorld);
// Arrival #1 = scripted teleport. Arrival #2 = Belu→Keros map warp.
// lastRunSecondKerosArrivalUsesNearDock is true only for #2.Evidencia pública
- Log de desarrollo de CONTRABAND, 19 ago 2026, v0.4.155–v0.4.157 (near-dock de Keros / segundo salto).
- last-run-map-warps.test.mjs (metros de muelle, dos caminos de llegada, reglas de cierre del mapa).
- Comentarios en last-run-map-lesson.js y lastRunSecondKerosArrivalUsesNearDock; samples de muelle confiables en galaxy-arrival.