Limitaciones conocidas

Documentación de la versión v0.1.0-beta.3Ver fuente en GitHub

Traducción de la página original en inglés de OmsiLaunch 0.1.0-beta3. La página en inglés es la referencia normativa: si difieren, prevalecen la página en inglés y el código.

Esta página enumera, a partir del código, todo lo que en OmsiLaunch 0.1.0-beta3 es UNAVAILABLE, PARTIAL o un riesgo aceptado, para que usuarios e integradores no construyan sobre un comportamiento que el producto no ofrece. Cada fila nombra la limitación, su estabilidad, por qué existe y dónde se documenta en detalle. La documentación en inglés es normativa; las copias traducidas bajo docs/localized/ no se mantienen al mismo nivel y pueden quedar desfasadas (consulta la última sección).

Compatibilidad#

LimitaciónEstabilidadDetalle
Solo se admite Omsi23004_692EBFBF (692EBFBF...6243); el hash de Steam LAA 7DAB063D...D759 está en la lista de permitidos; su huella y su plan se validaron con una copia controlada, pero la fase de juego necesita una instalación genuina de Steam (la imagen es el ejecutable de Steam protegido con DRM)PARTIAL para Steam LAAcompatibilidad
Solo Windows 10+ x64; no hay Windows 7/8, ni XP, ni ARM64UNAVAILABLEcompatibilidad
El plugin necesita el runtime de .NET 6 x86 además del runtime x64 que usa el controladorcompatibilidad

Inicio del mundo y opciones de lanzamiento#

LimitaciónEstabilidadDetalle
LAST_MAP_STATE (/last, WorldMode.LastMapState) no está implementado; nunca se sustituye por un .osn elegido por marca de tiempoUNAVAILABLE (BI-006)Diagnóstico del plan OL_E_CAPABILITY_UNAVAILABLE
La fecha, la hora y el año explícitos o del sistema (/date, /time, /year, new.date/new.time/new.year del perfil, DateSpec/TimeSpec/YearSpec) se transportan en la especificación, pero hacen que el plan no sea ejecutable; el plugin rechaza los modos distintos de UnsetUNAVAILABLE (STATICALLY_PARTIAL)perfiles de sesión, launchspec
Preset meteorológico, ICAO y tiempo real actual en el inicio (/weather*, new.weather)UNAVAILABLE (STATICALLY_PARTIAL, BI-003)como arriba
El modelo, el repaint, el HOF, el número de flota y la matrícula del vehículo del jugador en el inicio (familia /vehicle, PlayerVehicleSpec) se resuelven contra el catálogo de contenido, pero no se aplican; solicitarlos hace que el plan no sea ejecutable; la asignación headless determinista de PlayerVehicle es una extensión futuraUNAVAILABLE (BI-007)player.assign-headless en capacidades
El punto de entrada por identidad (/entrypoint:<identity>) no se correlaciona con la lista presentada por OMSI; usa /entrypoint-indexPARTIAL (BI-001)capacidad del plan world.entrypoint-identity = RUNTIME_PARTIAL
Los overlays de documentos de teclado y controladores (InputSpec, Environment.Keyboard, Environment.Controllers) se analizan, pero ninguna sesión los aplica nuncaUNAVAILABLE (BI-005)capacidades input.*
LaunchBehaviorSpec.RestoreConfiguration y InstallationSpec.ExpectedExecutableSha256 están declarados, pero nunca se leenUNAVAILABLElaunchspec
ShutdownTimeoutSeconds (/shutdown-timeout, shutdown-timeout del perfil) se acepta y se transporta, pero el supervisor no lo utilizaACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTciclo de vida de la sesión
/quiet y /serveACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECTCLI
Los flags de diagnóstico (/log, /logall, /omsi-logall, /verbose, /trace, /trace-process, /trace-plugin, /trace-native) rellenan DiagnosticsSpec; el efecto visible se limita a la traza del host en .omsilaunch\diagnosticsPARTIALCLI
/runtime-batch, /runtime-write-batch y /d3d-batch son arneses de validaciónINTERNALCLI

Fin de la sesión y control de procesos#

LimitaciónEstabilidadDetalle
La detención de la sesión es una terminación forzada: session.stop, «End session» (finalizar la sesión) en la bandeja, Ctrl+C y CloseAsync conducen todos a TerminateProcess. La rutina de cierre de OMSI no se ejecuta, OMSI no reescribe options.cfg ni sus logs al salir, y se pierde cualquier estado de OMSI no guardado. Es deliberado: evita que OMSI escriba sobre los archivos restaurados.por diseñociclo de vida de la sesión
El cierre cooperativo mediante WM_CLOSE con un timeout y terminación como alternativa no está implementadoUNAVAILABLE (decisión de producto, S-11; OMSI ignoró WM_CLOSE enviado a su ventana principal en la ronda de cierre de runtime)estado de la validación en runtime
Al cerrar la consola o en el cierre de sesión de Windows, el propietario dispone de un presupuesto de 4 s para detener y restaurar; lo que quede pendiente lo recupera el diario en el siguiente iniciocierre de consola validado en runtime; cierre de sesión de Windows no probadotransacciones y recuperación

Transacción, recuperación y lease#

LimitaciónEstabilidadDetalle
El lease de la instalación es un semáforo Local\: un propietario por instalación por sesión de inicio de sesión; no se aplica entre usuarios; no se libera mientras otro proceso tenga un handle; cualquier proceso del mismo usuario puede retener el nombreriesgo aceptado (S-18)transacciones y recuperación
La recuperación se rechaza (OL_E_INSTALLATION_BUSY) mientras se ejecuta el proceso de OMSI registrado en el diario o, para un diario sin PID, cualquier Omsi.exe de esa raízpor diseñocomo arriba
Una ruta de overlay originalmente ausente cuyo contenido cambió durante la sesión bloquea la restauración (OL_E_RECOVERY_ABSENT_OWNERSHIP_MISMATCH) hasta que se inspeccionepor diseñocomo arriba
Los diarios anteriores a las huellas de propiedad solo puede cerrarlos una sesión con bytes planificados idénticos (OL_E_RECOVERY_ABSENT_OWNERSHIP_UNVERIFIED)PARTIALcomo arriba
Solo se restauran las rutas propiedad de la sesión. Las escrituras propias de OMSI durante una sesión ([last_map] de options.cfg cuando ningún ajuste aplica un overlay a options.cfg, Texture\standard.ipr, cachés, laststn.osn, perfil de conductor, logs) persisten, igual que tras un inicio directo de OMSIpor diseñotransacciones y recuperación
La eliminación de un closecheck obsoleto antes de una sesión es permanente (se registra, no se restaura) cuando SuppressStaleClosecheckWarning es truepor diseñocomo arriba

Control de runtime#

LimitaciónEstabilidadDetalle
weather.set se rechaza (OL_E_RUNTIME_SETTING_NOT_PERSISTENT): OMSI sobrescribe ambos candidatos de viento del perfil en su siguiente ciclo meteorológicoUNAVAILABLEcapacidades
Escrituras del calendario (SetActualDateTime)UNAVAILABLE (BI-002)calendar.set-actual-date-time
Escrituras de variables de cadena, triggers con nombre, triggers de sonido (propiedad de las cadenas gestionadas de Delphi)UNAVAILABLE (BI-004)scripts.string.read es de solo lectura
No hay reubicación de vehículos, ni revinculación espacial entre tiles, ni autoridad sobre transformaciones segura para ODE; los campos de posición son de solo lecturaUNAVAILABLE (BI-008)road-vehicle.read
camera.lock / camera.unlock necesitan un PlayerVehicle; el inicio headless de NEW_MAP no tiene ninguno (una situación guardada proporciona uno)por diseño (BI-007)RV-004
Las mutaciones de runtime (time.set, camera.set, camera.lock, vehicle.variable.set, spawn, place-random, texturas D3D) no se registran en el diario ni se restauranpor diseñocontrol de runtime
Punto ciego de la huella de los handles: un objeto de la misma clase y definición recreado en la misma dirección entre dos lecturas de lista no se detecta como obsoleto; la vida útil ante la eliminación natural (RV-002) no tiene un productor seguro en runtime y sigue siendo offlinePARTIALcontrol de runtime
Los resultados están acotados por el buzón de 64 KiB: las listas largas se truncan (truncated=true); las cargas de píxeles se limitan a 48 KiB por d3d.texture.updatepor diseñocapacidades
Canal de una sola solicitud en vuelo: una solicitud cada vez por sesión; un slot ocupado da OL_E_RUNTIME_CHANNEL_BUSY; los ids de solicitud no deben reutilizarsepor diseñocontrol de runtime
La telemetría es un slot de último valor: las ráfagas más rápidas que el muestreo de 100 ms del host pueden perder eventos intermedios (los números de secuencia mantienen diferenciados los eventos consecutivos idénticos; las muestras incoherentes se omiten)PARTIALplugin permanente
El reset del dispositivo D3D se observó en runtime (resetting, restored, invalidación de generación); no se produjo una transición lost diferenciada porque el dispositivo de OMSI pasó directamente a DEVICENOTRESETPARTIAL (RV-007)estado de la validación en runtime
Los resultados de listas acotadas (las operaciones timetable.*.list, vehicle.variables.list, vehicle.string-variables.list) devuelven como máximo las filas que caben en el slot de runtime de 64 KiB; el resto se omite con truncated=true y un returned_count menor (auditoría de documentación BUG-05). No hay paginación en esta versiónpor diseñocapacidades
timetable.logs.read, road-vehicles.list, humans.list, vehicle.constants.list y vehicle.curves.list no están acotadas: un resultado mayor que el slot falla con OL_E_RUNTIME_RESPONSE_TOO_LARGE (no se ha observado en ninguna de ellas en los mapas probados)PARTIALcapacidades
Las cadenas de evidencia autodeclaradas (RuntimeValidation de PublicCapabilityRegistry, EvidenceState de GetCapabilitiesAsync) no se actualizaron tras la ronda de cierre de runtime: camera.lock sigue indicando STATICALLY_VALIDATED y runtime.d3d.lifecycle.reset IMPLEMENTED_NOT_RUNTIME_VALIDATED. La página estado de la validación en runtime es la referencia autorizadadesfase de la documentación, no una diferencia de comportamientocapacidades
Algunos campos avanzados del grafo de mapas, tiles, rutas y objetos no se exponen; los lectores de runtime son snapshots tipados condicionados al perfil, nunca acceso arbitrario a memoriapor diseñocapacidades
Las lecturas de memoria dentro del proceso siguen el patrón comprobar y luego usar contra un OMSI en ejecución; una mutación concurrente de OMSI entre la comprobación y la lectura puede producir un snapshot incoherente (OL_E_RUNTIME_OPERATION_FAILED)riesgo aceptado (S-33)

Plano de control local y modelo de confianza#

LimitaciónEstabilidadDetalle
Modelo de confianza del mismo usuario: la canalización con nombre (CurrentUserOnly), las asignaciones de memoria de handoff, telemetría y runtime y el semáforo del lease son accesibles para cualquier proceso del mismo usuario de Windows. Un proceso así puede leer el estado, detener la sesión o ejecutar operaciones de runtime una vez que ha leído el session_id.riesgo aceptado (S-06, S-30)control local
El endpoint de control solo existe mientras el propietario está en Running; un cliente ve OL_E_NO_ACTIVE_SESSION (salida 4) durante el arranque y después de que termine la sesiónpor diseñocontrol local
Si otro proceso ya posee el nombre de la canalización, el propietario sigue ejecutándose sin endpoint (ListenFault), y un segundo lanzamiento puede notificar erróneamente OL_E_SESSION_ALREADY_ACTIVEriesgo aceptadocontrol local
.omsilaunch\ hereda la ACL de la raíz de OMSI; no se aplica ningún control de acceso explícitoriesgo aceptado (S-31)transacciones y recuperación

Diagnóstico y salida#

LimitaciónEstabilidadDetalle
Los diagnósticos son solo archivos locales (.omsilaunch\diagnostics); no se sube nada y no hay notificación remotapor diseñotransacciones y recuperación
La retención conserva las 50 sesiones más recientes; los diagnósticos más antiguos con prefijo de sesión se eliminan cuando se inicia una sesión nuevapor diseñocomo arriba
La salida JSON y los diagnósticos incluyen rutas de la instalación (RootPath, directorios de recursos, rutas .itx)por diseño (datos locales)
El cuadro de diálogo de fallo de la sesión de OmsiLaunchW.exe muestra como mensaje la carga útil de fallo del plugin (por ejemplo {"name":"world.failed",...}) en lugar de una frase; la línea Code: es correctaestéticobandeja de Windows
Una solicitud D3D rechazada por el puente nativo antes de cualquier llamada a Direct3D notifica native_status correctamente, pero su texto detail indica HRESULT 0x00000000estéticocapacidades
La ventana de estado de la bandeja es un snapshot de la sesión planificada tomado al abrirse; no se actualiza y no muestra valores de OMSI en tiempo realpor diseñobandeja de Windows

Documentación#

Las páginas en inglés bajo docs/ son la documentación normativa de esta versión. docs/localized/<locale>/ contiene traducciones de las mismas páginas de 0.1.0-beta3 (consulta LOCALIZATION-MANIFEST.md); cuando una traducción difiere del texto en inglés, el texto en inglés y el código son la referencia autorizada. Las páginas históricas y heredadas que allí se enumeran solo están disponibles en inglés.

Relacionado: capacidades, estado de la validación en runtime, errores.