Статус проверки в runtime
Перевод исходной страницы на английском языке для OmsiLaunch 0.1.0-beta3. Нормативной является английская страница: при расхождениях приоритет имеют английская страница и код.
Эта страница — единая таблица подтверждений для OmsiLaunch 0.1.0-beta3. В каждой строке указаны возможность или функция и состояние её подтверждения. Для RUNTIME_VALIDATED может приводиться ссылка либо на research/reports/OMSILAUNCH-RUNTIME-VALIDATION-MATRIX.md (идентификаторы матрицы RV-nnn, блокеры BI-nnn, идентификаторы сеансов из её таблицы выполнения от 2026-09-20), либо на отчёт Round A после Fable research/reports/OMSILAUNCH-RUNTIME-VALIDATION-ROUND-A-001.md (RA-nnn); всё остальное выведено из кода и наборов офлайн-тестов. Раунд усиления защиты от 2026-09-21 (research/reports/OMSILAUNCH-SECURITY-ROBUSTNESS-REVIEW-001.md, находки с S-01 по S-34) изменил поведение восстановления, восстановления после сбоя (recovery), плоскости управления и границ; для этих изменений были только офлайн-подтверждения. Финальный раунд закрытия проверки в runtime от 2026-09-23 (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md, идентификаторы сценариев, например F01, S05, T01, кандидаты 2 и 3) выполнил их в реальных сеансах на авторизованной установке; строки, повышенные в этом раунде, ссылаются на его идентификаторы сценариев и сеансов. Поэтому RUNTIME_VALIDATED может ссылаться и на этот отчёт.
Состояния подтверждения:
| Состояние | Значение |
|---|---|
| RUNTIME_VALIDATED | Наблюдалось в каноническом сеансе, записанном в матрице (указаны идентификатор и сеанс). |
| STATICALLY_VALIDATED | Реализовано и покрыто офлайн-тестами (tools/OmsiLaunch.TestHost, tests/*), после последнего изменения в живом сеансе не наблюдалось. |
| PARTIAL | Реализовано, но подтверждения неполны или противоречивы, либо поведение заведомо ограничено. |
| RUNTIME_VALIDATION_REQUIRED | Поведение изменилось или никогда не наблюдалось; перед повышением статуса должно быть проверено в реальном сеансе. |
| UNAVAILABLE | Не реализовано или намеренно отклонено. |
Жизненный цикл сеанса и транзакция#
| Функция | Состояние | Подтверждение |
|---|---|---|
Headless-запуск NEW_MAP (world.new-map, world.presented-entrypoint, boot.headless-start) | RUNTIME_VALIDATED | Раздел матрицы «Existing Runtime Evidence»; сеансы e5454061, 1e8e0548, 5f641c8d, 50a1f1ec (Grundorf) |
Запуск SAVED_SITUATION (world.saved-situation) | RUNTIME_VALIDATED | Примечание GetCapabilitiesAsync и матрица (Berlin-Spandau, форма Start и Button1Click) |
Принудительное завершение session.stop и точное восстановление | RUNTIME_VALIDATED | Сеанс 50a1f1ec: после обычной остановки не осталось ни процесса OMSI, ни журнала |
Идемпотентность запуска (повторный PluginStart) | RUNTIME_VALIDATED | Сеанс 50a1f1ec |
Семантический overlay (временная замена файла на время сеанса) для options.cfg и побайтово точное восстановление (RV-005) | RUNTIME_VALIDATED | Сеанс 1e8e0548: AIMaxCountRandom 150/200 плюс сохранённый хвост файла; хеш после восстановления A12982C3... |
| Управляемая заставка плюс транзакция overlay (RV-006) | RUNTIME_VALIDATED | Матрица RV-006 PASS (пакет проверок представления: управляемая по умолчанию, управляемая пользовательская, Unset); сеансы Release Presentation 001 388cf5d2-7310-4301-9313-e62c4c08a346, 794cae34-a2ac-4fcf-8981-f142ac14c308, 12a74b24-6c78-4863-8ffe-947651212eeb |
| Восстановление после раннего выхода (RV-008, принудительное завершение OMSI) | RUNTIME_VALIDATED | Сеансы Round A после Fable 9e7cad79-9c35-4f93-bfc8-71f455513f82 (после начала игрового процесса) и dcac497e-ff35-4c97-b5e4-98b660f88032 (после world.starting, до начала игрового процесса): владелец завершил работу, журнал и lease очищены, options.cfg и изначально отсутствовавшее состояние заставки совпали со снимками. Внедрение нативного сбоя запуска и неудачного восстановления проверяется отдельно. |
| Границы сбоя запуска и намеренно неудачного восстановления (оставшаяся часть RV-008) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md): тайм-аут запуска SF01 сеанс 0b21c664-b0b2-46b2-9b6b-def536765fff и сообщённый плагином сбой мира SF02 сеанс 53358c75-469b-41d5-9ddb-cdb1d1ff828d завершились состоянием Failed с типизированными кодами и точным восстановлением; неудачное восстановление F01 сеанс d4194a69-d858-42fe-97c7-ce93ccbdc3f6 (файл, которым владеет сеанс, заблокирован только тестовым процессом во время остановки) дало OL_E_RESTORE_FAILED, сохранило журнал и резервную копию, а /recover в точности восстановил состояние до сеанса. Источники сбоев — исключительно тестовая инфраструктура. |
Восстановление артефактов сеанса для целей .itx и Texture\standard.ipr (S-01) | RUNTIME_VALIDATED | Round A восстановил существующие пути в 47efd323-4ce1-400a-ac83-74893cf82f26; создал и удалил зарегистрированную, изначально отсутствовавшую цель при обычной остановке в 8d9bdedf-d7de-4c64-a8b1-627ae4deff7b; и повторил эту очистку через прерывание владельца и /recover в aa9a45d4-302e-4cf5-8490-f5a1c9e44b79. |
closecheck как удаление в рамках сеанса и удаление устаревшего маркера (S-13) | RUNTIME_VALIDATED | Сеансы Round A, в том числе 47efd323-4ce1-400a-ac83-74893cf82f26, зафиксировали closecheck.stale-removed, а затем restore.session-artifact-removed; журнала не осталось. |
| Раннее восстановление после сбоя до построения overlay, отложенное восстановление без отпечатка (S-05) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) S05: владелец сеанса f755ed51-b85c-4df2-b062-5bf65c768b32 был убит при незавершённом журнале (действовал maxFPS=77); следующий запуск, сеанс 291ea22b-f9b3-42a4-be07-7f0c055c7113, записал в журнал диагностики PENDING_JOURNAL_RECOVERED до TRANSACTION_STARTED, отработал со своим overlay (88) и завершился в состоянии, побайтово идентичном состоянию до первого сеанса. Ветвь отложенного восстановления без отпечатка проверена только офлайн-тестами (transaction.legacy-journal-ownership-migration). |
| Восстановление метаданных (метки времени, атрибуты, только чтение), сброс write-through, очистка резервных копий (S-12) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md): S12a сеанс 40de172b-e144-4f0a-9207-09c80b5d7df7 (известная метка времени options.cfg) и S12b сеанс d9e2534b-3cb3-47ef-9cbd-1b92c62a35e7 (метка времени плюс ReadOnly): overlay действовал во время сеанса (ReadOnly снят для OMSI), а байты, время последней записи, время создания и атрибуты были восстановлены в точности; каталог резервных копий не остался. |
/recover под арендой установки (lease); отказ в окне до получения PID (S-04) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md): S04 сеанс 1fb2aad5-2985-4fa4-9c5a-6186f51d37b8: при живом владельце /recovery-status и /recover вернули OL_E_INSTALLATION_BUSY, а второй запуск был отклонён; после того как владелец был убит, а OMSI остался работать, /recover и новый запуск отклонялись до выхода OMSI, после чего /recover выполнил точное восстановление. S04b сеанс 5e57ca51-ab5e-4e94-a0d0-531735ee4057: журнал без PID (внедрение ошибки тестовой обвязкой) отклонялся, пока из корневого каталога работал любой Omsi.exe, и был восстановлен после выхода; closecheck, записанный этим OMSI, сохраняется с OL_W_RESTORE_FOREIGN_FILE_RETAINED (задокументировано, консервативное поведение). |
Повторное планирование в StartSessionAsync, OL_E_PLAN_NOT_RUNNABLE для устаревшего плана (S-15) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) R02: когда плагин из манифеста был убран после планирования, StartSessionAsync выбросил OL_E_PLAN_NOT_RUNNABLE: OL_E_PERMANENT_PLUGIN_MISSING до создания какого-либо сеанса (план 4797c9ce-6eb3-47b1-b09d-03562dd3bd44, кандидат 2, после исправления BUG-01) |
Жизненный цикл владельца: остановка через pipe, Ctrl+C, остановка из трея, выход OMSI, убитый владелец, /observe-seconds | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md): остановка через pipe во время /observe-seconds L06 сеанс 300a563e-7b0e-4f01-afbd-9e15df32c7e6; Ctrl+C L03 сеанс 5e2aca54-bae2-4fc6-a106-93699e755bfc (владелец завершился через 577 ms после сигнала); OMSI убит L05a сеанс d69658f9-16f6-43e9-8e36-682114b97e14; главное окно OMSI закрыто L05b сеанс 76b11ba4-8ddb-4611-9a1c-8be317cd0337 (OMSI игнорирует WM_CLOSE; завершён принудительно); остановка из трея T01/T03 сеансы 6d827c13-caf8-4221-832a-c91d26f130e0, 7e6e805d-69c2-47a3-9fa3-4cdccbe3ccb8; убитый владелец S05. Каждый путь завершился точным восстановлением. Если владельца убить напрямую, Omsi.exe продолжает работать (так задумано); восстановление после сбоя отклоняется, пока он не завершится (S04). |
| Бюджет ProcessExit в 4 s при закрытии консоли или выходе из системы | RUNTIME_VALIDATED (закрытие консоли) | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) L04 сеанс 559d0f1d-7d5b-4b6b-b70c-0acb272d53db: окно консоли закрыто; восстановление завершилось в пределах бюджета, сеанс достиг Completed без журнала; Windows завершила владельца примерно через 5 s после закрытия (выход 0xC000013A). Выход из системы не проверялся. |
| Кооперативное завершение через WM_CLOSE | UNAVAILABLE | Не реализовано (решение по продукту, S-11). Раунд закрытия L05b: OMSI не закрылся в течение 30 s после WM_CLOSE, отправленного его главному окну. ShutdownTimeoutSeconds не используется. |
Семантика аренды установки (семафор Local\) | STATICALLY_VALIDATED | lease.cross-thread-release; ограничения задокументированы как принятый риск (S-18) |
| Сохранение CP1252 при изменении файлов OMSI (S-07) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) C01 сеанс 84a71235-d618-4917-9af4-c2a6025742f4: options.cfg со значением CP1252 с диакритикой (включая 0x80 и 0x96) изменён через /set; живой файл сохранил байты CP1252 без EF BF BD, а после сеанса файл был побайтово идентичен исходному |
| Пропуск точек повторной обработки (reparse points) при обнаружении контента (S-23) | STATICALLY_VALIDATED | Тесты discovery.* |
| Хранение диагностики (50 последних сеансов) (S-26) | STATICALLY_VALIDATED | HostTrace.Prune |
| Кратковременные блокировки файлов (антивирус, индексатор) при записи и удалении в транзакции повторяются около 1,5 s; постоянные блокировки по-прежнему приводят к ошибке (корректирующий проход CP-10) | STATICALLY_VALIDATED | transaction.transient-lock-retried, transaction.restore-failure-recovery (постоянная блокировка по-прежнему приводит к ошибке); до исправления наблюдались два нестабильных офлайн-сбоя, после — ни одного за 16 прогонов |
Постоянный плагин и платформа#
| Функция | Состояние | Подтверждение |
|---|---|---|
Профиль Omsi23004_692EBFBF (692EBFBF...6243, 8 503 440 байт) | RUNTIME_VALIDATED | Каждый сеанс матрицы |
Исполняемый файл Steam LAA (7DAB063D...D759) | PARTIAL | Раунд закрытия LAA01 сеанс 9ec975ca-7820-47be-b806-5f5a94aad4ab: контролируемая копия (получена из непропатченного оригинала установки с IMAGE_FILE_LARGE_ADDRESS_AWARE и пересчитанной контрольной суммой PE; 8 503 440 байт, характеристики 0x81AE) совпала по хешу, отпечаток был принят, а план оказался исполнимым. Образ — это оригинальный исполняемый файл Steam с защитой DRM: вне подлинной установки Steam он передаёт управление клиенту Steam и завершается, поэтому сеанс завершился ошибкой OL_E_PROCESS_EXITED_EARLY и точным восстановлением. Игровой процесс, чтение, команды и остановка требуют подлинной установки Steam (ENVIRONMENT). |
Идентичность установки: имя lease и имя управляющего pipe выводятся из одного определения, InstallationPaths.IdentityKey (C:\OMSI = C:\OMSI\ = C:\OMSI\. = C:\foo\..\OMSI = варианты регистра; C:\OMSI-A отличается от C:\OMSI-B) (корректирующий проход CP-02, дополнение A/B) | STATICALLY_VALIDATED; наблюдалось в runtime | lease.root-normalization, paths.installation-identity-and-containment. Раунд закрытия ID01: пока работал сеанс 01bfc780-10ef-4390-b700-c08bf809a42f, повторные запуски и /recovery-status с корневым каталогом, записанным с \., с сегментом .., в нижнем и верхнем регистре, отклонялись (OL_E_SESSION_ALREADY_ACTIVE, OL_E_INSTALLATION_BUSY); то же для записи с завершающим разделителем (ID01b, сеанс ba3ea7c9-9826-453d-b447-81c48763e18f). |
Согласованность релизного пакета: чистая промежуточная сборка, квитанция сборки Native.x86 (по содержимому, а не по метке времени), манифест без BOM, целостность подготовленного замыкания и повторно извлечённого архива, установщик копирует манифест (корректирующий проход CP-01, Round A RA-007, дополнение F/G/H) | STATICALLY_VALIDATED; наблюдалось при установке | Test-PackagingPipeline.ps1 (согласованный кандидат плюс 16 негативных случаев), runtime.release-manifest-bom, runtime.release-manifest-strict-parser. Раунд закрытия: пакеты, установленные в авторизованную установку, соответствовали своим манифестам, и каждый сеанс планировался с plugin.integrity.reference = manifest (реестр кандидатов research/reports/runtime-closure/CANDIDATES.md). |
Целостность замыкания плагина относительно release-manifest.json (S-09) | RUNTIME_VALIDATED | Сеанс Round A 47efd323-4ce1-400a-ac83-74893cf82f26; сеансы раунда закрытия на установленных релизных пакетах (например, R01 сеанс 878b5e3c-2f9d-46bf-a918-11bb2e227e55, кандидат 3) планировались с plugin.integrity.reference = manifest; R02 показал, что отсутствие плагина из списка блокирует запуск. |
Проверка сборки внутри процесса (plugin.build.invalid -> OL_E_BUILD_VALIDATION_FAILED) | RUNTIME_VALIDATED | Сеансы матрицы; два более ранних сеанса plugin.build.invalid с устаревшим плагином |
| Handoff v4 с SHA-256 | RUNTIME_VALIDATED | Интеграционные тесты handoff.*; каждый сеанс |
| Плагин бездействует без OmsiLaunch (нет handoff) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) P01 (обычный запуск OMSI без сеанса OmsiLaunch; pid OMSI 35564): замыкание плагина и хост .NET загрузились, OmsiLaunch.Native.x86.dll не загружалась, три нативных места патча содержали непропатченные байты Omsi.exe, и не появились ни управляющий pipe, ни журнал, ни диагностика |
Политика поиска DLL (AssemblyDirectory | System32) (S-24) | STATICALLY_VALIDATED | Атрибуты сборки |
| Обнаружение Windows 10+ x64 и отклонение других платформ | STATICALLY_VALIDATED | CurrentWindowsX64Platform.Detect |
Канал runtime-управления и плоскость управления#
| Функция | Состояние | Подтверждение |
|---|---|---|
| Целостность передачи через почтовый ящик (mailbox), привязка к сеансу | RUNTIME_VALIDATED | Все runtime-сеансы; runtime-command.wire-guard, runtime-command.session-binding |
| Отбрасывание запоздавших ответов и отсутствие зависания канала после тайм-аута (S-08) | RUNTIME_VALIDATED | Сеанс Round A 173414a5-ee53-4b10-aeb7-046f40b851e9: внешний клиент отказался от road-vehicles.spawn через 250 ms; последующий map.read выполнился успешно, и каноническая остановка очистила сеанс. Отклонение слишком большого ответа проверено только офлайн-тестами. |
Локальная плоскость управления: имя pipe для каждой установки, привязка session_id, типизированные ошибки обработчика, лимит 64 KiB (S-06) | RUNTIME_VALIDATED | Сеанс Round A a00c6ff8-9cc9-4bce-ae44-c4314daad7bf: неверный протокол, непривязанная остановка, runtime-запрос к чужому сеансу и слишком большой фрейм были отклонены; следующие за ними корректный запрос состояния и привязанная остановка выполнились успешно. Отклонение слишком большого ответа проверено только офлайн-тестами. |
| Слот последовательности телеметрии, пропуск разорванных выборок, одинаковые последовательные события (S-25) | STATICALLY_VALIDATED | telemetry.sequence-samples |
Граница API отклоняет internal.* и удаляет внутренние ключи результата (S-02) | STATICALLY_VALIDATED | OmsiLaunchService.ExecuteRuntimeAsync; проверка реестра |
| Некорректный или слишком большой ответ в почтовом ящике освобождает слот; следующий запрос выполняется успешно (корректирующий проход CP-03) | STATICALLY_VALIDATED | runtime-command.oversized-response-rejected; на стороне плагина plugin-runtime.oversized-and-abandoned-responses. Воспроизвести в runtime невозможно: ни одна публичная операция не возвращает больше одного слота (наибольший ответ около 37,8 KB, раунд закрытия R03). |
| Каждый конечный путь runtime-запроса оставляет почтовый ящик пригодным для повторного использования: типизированный отказ, тайм-аут, отмена вызывающей стороной, повторно использованный идентификатор запроса, внутренняя операция, чужой сеанс, отсутствующий аргумент (runtime); некорректные, слишком большие, повреждённые, устаревшие и осиротевшие ответы (офлайн) | RUNTIME_VALIDATED (достижимые пути) | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) R03 сеанс 1134fdc3-a469-4ff5-a511-9964ed65e7cd: каждый сбой был типизирован, и следующий корректный запрос выполнялся успешно. Пути с повреждением ответа невозможно вызвать извне, они проверены только офлайн-тестами (runtime-command.terminal-paths-leave-channel-usable). |
Слишком большой ответ плоскости управления возвращается как OL_E_CONTROL_RESPONSE_TOO_LARGE; состояние и события обрезаются начиная с самых старых до одного фрейма (корректирующий проход CP-04) | STATICALLY_VALIDATED | control-plane.binding-and-typed-errors. Воспроизвести в runtime невозможно: наибольший публичный ответ, наблюдавшийся в раунде закрытия, составил около 37,8 KB (R03), а история событий сеанса остаётся гораздо меньше одного фрейма. |
Плоскость управления никогда не молчит после подключения: некорректные, слишком большие фреймы, фреймы с отрицательной длиной, пустые, JSON null, без команды, с нестроковым аргументом, с неверным протоколом, с неизвестной командой, непривязанные и адресованные чужому сеансу; усечённые фреймы клиента; зависшие клиенты; клиенты, отключившиеся до ответа | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) R04 сеанс faaaf8a8-126d-4a23-a8f3-381e47c58de6 (кандидат 2, после исправления BUG-02): каждый фрейм получил свою типизированную ошибку, за каждым следовал успешный session.status; зависший клиент не блокировал остальных; привязанная остановка, конкурирующая с выполняющимся road-vehicles.spawn, завершила сеанс, а вызывающая сторона spawn получила корректный конец потока. OL_E_TIMEOUT и метаданные усечения проверены только офлайн-тестами (control-plane.errors-never-silent). |
Пакетные тестовые обвязки runtime (/runtime-batch, /runtime-write-batch, /d3d-batch) | INTERNAL (STATICALLY_VALIDATED) | Только обвязка для проверки (S-27) |
Runtime-операции#
| Операция(и) | Состояние | Подтверждение |
|---|---|---|
time.read, time.set | RUNTIME_VALIDATED | Сеанс e5454061 (запись, SetTime, обратное чтение, восстановление) |
weather.read, weather.actual.read | RUNTIME_VALIDATED | Сеанс e5454061 |
weather.set | UNAVAILABLE | Отклоняется с OL_E_RUNTIME_SETTING_NOT_PERSISTENT; сохранение значения FAIL в сеансах e5454061 и 5f641c8d; отклонение PASS в 50a1f1ec |
map.read | RUNTIME_VALIDATED | Повторно проверено после исправления глобального слота Map в сеансе 9dd62626-94c6-4cd7-bb6f-0288327696f4: loaded=true, 19 тайлов, идентичность Grundorf, имя файла, описание и диапазон лет согласованы. |
camera.read, camera.set | RUNTIME_VALIDATED | Сеанс e5454061 (запись FOV, обратное чтение, восстановление) |
camera.lock, camera.unlock | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) CAM01 сеанс 5dfd9b96-fa94-4060-85af-0c9d19823a73: сохранённая ситуация Linie 5 предоставила PlayerVehicle (rv-000001); фиксация для семейств 0, 2 и 1 подтверждена обратным чтением камеры; разблокировка сняла политику |
road-vehicles.read, road-vehicles.list, road-vehicle.read | RUNTIME_VALIDATED | Сеансы e5454061, 5f641c8d |
| Время жизни handle RoadVehicle и обнаружение устаревших handle (RV-002) | PARTIAL | Нет безопасного способа воспроизвести удаление в runtime: в трёх окнах раунда закрытия (H01, H01b, H01c, до 180 s, со скачком часов) популяции RoadVehicle и Human в Grundorf только росли; ни одна публичная операция не удаляет объект. Обнаружение устаревших handle покрыто офлайн-тестами (S-19). Правило поколений/ABA проверено в runtime для текстур D3D (H02). |
road-vehicles.spawn (RV-003) | RUNTIME_VALIDATED | Сеанс 5f641c8d: 2 -> 3, rv-000003 разрешён |
road-vehicles.place-random | RUNTIME_VALIDATED | Матрица: коллекция 2 -> 4 |
player-vehicle.read | RUNTIME_VALIDATED | Round A RA-002 сеанс 9dd62626-94c6-4cd7-bb6f-0288327696f4 (present=false); раунд закрытия CAM01 сеанс 5dfd9b96-fa94-4060-85af-0c9d19823a73 прочитал присутствующий PlayerVehicle из сохранённой ситуации |
humans.read, humans.list, human.read | RUNTIME_VALIDATED | Сеанс e5454061 |
timetable.read, timetable.*.list, timetable.logs.read | RUNTIME_VALIDATED | Сеанс e5454061; записи маршрута (track entries): 91 запись |
Усечение ограниченного списка вместо OL_E_RUNTIME_RESPONSE_TOO_LARGE (аудит документации BUG-05) | RUNTIME_VALIDATED | Повторная проверка аудита документации на пакете 9F8CC87B..., сохранённая ситуация situations\Linie 5.osn (Berlin-Spandau): timetable.track-entries.list вернул 137 из 825 записей, а timetable.tour-entries.list — 224 из 4747 с truncated=true (сеансы 08df97b8-06cc-4faa-be8b-f49ca1538dce и повторная проверка doc-capture); до исправления оба завершались ошибкой OL_E_RUNTIME_RESPONSE_TOO_LARGE (сеанс f51dcb59-a723-4570-b6c5-b61e628a7993). Подтверждения: research/reports/documentation-audit/runtime/. |
drivers.read, tickets.read | RUNTIME_VALIDATED | Сеанс e5454061 |
vehicle.variables.list, vehicle.variable.get, vehicle.variable.set | RUNTIME_VALIDATED | Refresh_Strings 0 -> 1 -> 0 в runtime-сеансе, записанном как Runtime-Proven в research/reports/OmsiHook-Parity-Wave-A-Closure-001.md (перечислено 1 025 имён, согласно OMSILAUNCH-AUTONOMOUS-BUILD-001.md); идентификатор сеанса в отчёте не записан |
vehicle.string-variables.list, vehicle.string-variable.get | RUNTIME_VALIDATED (только чтение) | Сеанс e5454061; запись BI-004 UNAVAILABLE |
vehicle.constants.list, vehicle.constant.get, vehicle.curves.list, vehicle.curve.evaluate, vehicle.hofs.read | RUNTIME_VALIDATED | Сеанс e5454061 |
d3d.status, d3d.texture.create, d3d.texture.describe, d3d.texture.update, d3d.texture.release, отклонение освобождённого handle | RUNTIME_VALIDATED | Раздел матрицы «basic D3D texture lifecycle»; примечания к возможностям runtime.d3d.* (сеанс 4378899d для слота устройства) |
| События потери, сброса и восстановления устройства D3D, инвалидация поколения (RV-007) | RUNTIME_VALIDATED (resetting/restored) | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) D01 сеанс fc07946e-58dd-4ddc-af7e-10c7e61a899a: временная смена режима дисплея (тестовый источник, никогда не публичный, без синтетического вызова сброса) заставила OMSI дважды сбросить своё устройство. Были выданы d3d.resetting/d3d.restored, поколение увеличивалось в каждом цикле, запрос во время сброса получил OL_E_D3D_RESET_IN_PROGRESS, текстура, созданная до потери, была отклонена с OL_E_D3D_STALE_RESOURCE_HANDLE, а новые текстуры работали. OMSI сразу перешёл в DEVICENOTRESET, поэтому отдельный переход lost воспроизвести не удалось. Одна попытка привела к падению OMSI в DSound.dll (смена аудиоустройства дисплея; владелец выполнил точное восстановление). |
events.read / events watch | RUNTIME_VALIDATED | Каждый сеанс (жизненный цикл на основе телеметрии) |
internal.road-vehicles.make-basic | INTERNAL | Недостижимо через публичные интерфейсы |
Функции запуска#
| Функция | Состояние | Подтверждение |
|---|---|---|
/set и settings профиля (configuration.options.semantic) | RUNTIME_VALIDATED | RV-005 |
| Профили сеанса (строгий компилятор, конфликты, ограничение путей, включая точки повторной обработки, S-17) | RUNTIME_VALIDATED (в объёме запуска профиля) | Round A RA-009, Test-Beta3SessionProfile.ps1, 2026-09-22: управляемая заставка, отключённые интернет-текстуры (Internet Textures) и пресет graphics.maxFPS=30; options.cfg восстановлен, тестовые данные не повреждены, нет журнала, lease и процесса. |
Загрузка /spec (лимит 1 MiB, неизвестные свойства отклоняются, тайм-ауты соблюдаются) (S-20) | STATICALLY_VALIDATED | Тесты cli.* |
Управляемая заставка PTB/ENG/DEU/FRA | RUNTIME_VALIDATED | RV-006 |
Интернет-текстуры Disabled (подавление загрузчика внутри процесса) | STATICALLY_VALIDATED | Путь телеметрии internet-textures.suppressed; в матрице не упоминается |
Защита целей .itx интернет-текстур (Round A RA-011/RA-012, корректирующий проход CP-05, дополнение E): канонический корневой каталог, каноническая цель, относительный путь, правила сегментов; подходит только сегмент каталога с именем texture ниже корневого каталога (mytexture, texture_backup, texture2 и texture в абсолютном корневом пути не подходят); цели с обходом каталогов, абсолютные, относительные к корню и через junction отклоняются; разные записи сводятся к одному каноническому пути транзакции | STATICALLY_VALIDATED | presentation.itx-target-root-normalization, presentation.itx-target-guard-rejections |
Интернет-текстуры Override | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md): I01 сеанс 6eac2dac-c7e9-49a1-acbf-2a5d59c1c0d3: загрузчик OMSI отправил HEAD и GET на loopback-сервер для существующей и изначально отсутствовавшей цели, записал обе, и после канонической остановки отсутствовавшая цель была удалена, а существующая восстановлена побайтово точно; I02 сеанс a8f2b720-e41a-4e34-86bf-125bf519a5bd: то же самое после того, как владелец и OMSI были убиты, через /recover. |
/date, /time, /year, флаги погоды, флаги транспортного средства игрока (STATICALLY_PARTIAL) | UNAVAILABLE | Планировщик помечает план как неисполнимый (OL_E_CAPABILITY_UNAVAILABLE); плагин отклоняет режимы даты/времени, отличные от Unset |
/entrypoint:<identity> (BI-001) | PARTIAL | План неисполним (RUNTIME_PARTIAL) |
/last (LastMapState, BI-006) | UNAVAILABLE | UNSUPPORTED_FOR_CURRENT_PROFILE |
Overlay клавиатуры/контроллера InputSpec (BI-005) | UNAVAILABLE | Парсеры существуют; не применяются |
Headless-назначение PlayerVehicle (BI-007), SetActualDateTime (BI-002), управление погодой ICAO (BI-003), запись строковых переменных (BI-004), перемещение между тайлами (BI-008) | UNAVAILABLE | Заблокировано до завершения реализации |
Обнаружение через /list (content.*) | STATICALLY_VALIDATED; наблюдалось в runtime | discovery.fixture; в раунде закрытия /list:situations применялся к авторизованной установке (идентичности, включая не-ASCII situations\Nur für Fortgeschrittene.osn) |
/quiet, /serve | UNAVAILABLE | ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT |
Флаги диагностики (/log, /logall, /omsi-logall, /verbose, /trace*) | PARTIAL | Передаются в DiagnosticsSpec; эффект ограничен трассировкой хоста |
Хост Windows и трей#
| Функция | Состояние | Подтверждение |
|---|---|---|
Индикатор в трее (OmsiLaunchW.exe): значок в области уведомлений, состояние, «End session» с подтверждением и Cancel, перезапуск Проводника (Explorer), диалоги, открытые во время поступления остановки, остановка во время /observe-seconds, диалоги ошибки (S-16) | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) на кандидате 3 (после исправления BUG-04): T01 сеанс 6d827c13-caf8-4221-832a-c91d26f130e0 (значок найден в Shell_TrayWnd, окно состояния на pt-BR, перезапуск Проводника снова добавил значок, Cancel сохранил сеанс, End session завершил его за 607 ms и убрал значок); T02 сеанс 0939a151-bf03-4ca9-8294-8b0088df7d30 (окно состояния и подтверждение открыты во время остановки через pipe); T03 сеанс 7e6e805d-69c2-47a3-9fa3-4cdccbe3ccb8; T04 сеанс 8ddc4cc9-3089-4c0c-b062-f0c526ce0e4a (диалоги ошибки аргумента, отсутствия активного сеанса и сбоя сеанса с кодами). Коды выхода shim 100-106 воспроизведены не были. |
Повторный запуск с /silent, возвращающий 0 после запуска хоста | RUNTIME_VALIDATED | Раунд закрытия проверки в runtime (research/reports/runtime-closure/FINAL-RUNTIME-VALIDATION-REPORT.md) T04 сеанс 8ddc4cc9-3089-4c0c-b062-f0c526ce0e4a (кандидат 3, после исправления BUG-03): программа запуска вернула 0, а вызывающая сторона, перехватывающая её вывод, получила конец потока через 0,4 s, пока сеанс OmsiLaunchW работал без окна консоли; сеанс остановился с точным восстановлением |
| Коды выхода shim загрузчика 100-106, динамический буфер пути (S-21) | STATICALLY_VALIDATED | Test-ReleaseIdentity.ps1 |
Повторная проверка аудита документации (закрытие документации 0.1.0-beta3)#
Пакет 9F8CC87B238A677F7238C262E8FE0496832263B6C0A58083409EB485C03C6F17 на авторизованной установке, причём BUG-05, BUG-06, BUG-07 и smoke-тест повторены на финальном пакете B8462ED6C596843E778C33DF4E93EBA3ACC875B7E43B011D60E5A21A16032E35 (R01 сеанс 56cdee4b-9160-49fc-b0fd-5134ff9fe2d0, сеанс doc capture 40046805-5337-48fc-90dd-e7d3500ed3b4); подтверждения находятся в research/reports/documentation-audit/runtime/ и research/reports/OMSILAUNCH-BETA3-FINAL-DOCUMENTATION-AUDIT.md.
| Пункт | Состояние | Подтверждение |
|---|---|---|
OmsiLaunchW.exe сообщает о неисполнимом запуске (BUG-06) | RUNTIME_VALIDATED | /new ... /date:2026-09-20 под OmsiLaunchW.exe: диалог Requested capability unavailable: world.explicit-date / Code: OL_E_CAPABILITY_UNAVAILABLE, выход 1, процесса OMSI нет (doc-bug06-dialog.json; установленный пакет 9f8cc87b..., сеанс не создаётся — так задумано) |
| Объявленные маршруты CLI являются реальным синтаксисом (BUG-07) | RUNTIME_VALIDATED | Каждый вариант клиентского маршрута, выводимый установленными help --json и capabilities --json (32 дескриптора), был принят установленным парсером; ни один не вывел справку по использованию (doc-bug07-routes.json; установленный пакет 9f8cc87b...) |
| Каждая командная строка страницы примеров CLI | RUNTIME_VALIDATED | 43 клиентские строки выполнены для сеанса владельца 08df97b8-06cc-4faa-be8b-f49ca1538dce (сохранённая ситуация; events watch пропущен, так как работает до Ctrl+C), в конце — собственная команда страницы session stop (выход владельца 0). Все совпали со страницей, кроме vehicle.constant.get с name=max_speed — константы, которой у этого автобуса нет; теперь на странице используется antrieb_getr_version. Пример профиля grundorf-quick не прошёл планирование (удвоенные обратные косые черты в простых скалярах YAML) и был исправлен; каждая строка без сеанса запускалась из корневого каталога установки, строки запуска — с /plan (doc-client-examples.json, doc-examples-no-session.json, doc-profile-example.json) |
Smoke-тест NEW_MAP с /observe-seconds на финальном пакете | RUNTIME_VALIDATED | R01 сеанс 08570134-cfd8-4726-a472-5f6dd2f04c8f, чистое конечное состояние (research/reports/runtime-closure/doc-R01-*) |
Сводный список RUNTIME_VALIDATION_REQUIRED#
Раунд закрытия проверки в runtime от 2026-09-23 закрыл предыдущую очередь. Она остаётся пустой, за исключением пунктов, которые невозможно безопасно воспроизвести на этой установке:
- Игровой процесс, чтение, команды и остановка для Steam LAA: требуется подлинная установка Steam (окружение; строка выше имеет статус
PARTIAL). - Удаление RoadVehicle и Human для RV-002: нет безопасного способа воспроизвести удаление (строка выше имеет статус
PARTIAL).
Пункты, которые остаются проверенными только офлайн-тестами, поскольку их невозможно воспроизвести извне продукта, отмечены в своих строках и не входят в очередь: повреждение ответа в почтовом ящике, слишком большие ответы, усечение истории событий, переход D3D lost, выход из системы, коды выхода shim 100-106 и ветвь отложенного восстановления без отпечатка.
См. также: возможности, известные ограничения, транзакции и восстановление после сбоя, совместимость.