Files
fparkan/docs/appendices/knowledge-boundaries.md
T
Valentin Popov f8e447ffee feat: close stage 0-2 audit groundwork
Remove legacy SDL/OpenGL adapters from the workspace and introduce winit/Vulkan adapter boundaries for the rendered composition root.

Add reproducible toolchain and xtask CI coverage for formatting, tests, clippy, docs, policy, deny, acceptance auditing, and hosted OS matrix evidence.

Strengthen Stage 1 data contracts with byte-first paths, VFS hardening, structured diagnostics, RsLi writer/edit scaffolding, corpus reporting, and resource error classification.

Advance Stage 2 asset preparation by moving mission loading through assets/runtime boundaries, materializing prototype graph data, preserving provenance, and adding inspection/viewer integration.

Record the Stage 0-2 audit input, acceptance roadmap, coverage updates, and documentation notes for follow-up evidence.
2026-06-23 22:05:16 +04:00

9.5 KiB
Raw Blame History

Границы знания

Этот раздел перечисляет области, где контракт ещё не закрыт полностью. Они не мешают безопасному чтению и lossless сохранению, но не должны превращаться в authoring API без динамического подтверждения.

Render state

Доказаны frame boundaries, world traversal, material resolve и крупные проходы. Не доказаны символами точные имена renderer vtable slots, полный набор CShade state transitions и окончательный порядок части transparent/FX/shadow subpasses.

Закрывающий эксперимент: запустить оригинал в совместимой Windows/DirectX среде, перехватить DirectDraw/Direct3D calls и surface flips, сохранить state log на минимальных сценах с одним типом материала.

FXID field-level semantics

Размеры команд, resource references, lifecycle, flags families и используемые time modes известны. Не закрыто значение каждого поля body opcodes 1--10, отсутствующий во всех проверенных каталогах opcode 6 и точные формулы редких time modes.

Закрывающий эксперимент: изменять по одному полю копии эффекта, воспроизводить его в контролируемой сцене и логировать runtime command object, emitted primitives, sound events и reads в Effect.dll.

Script VM

Доступны packages, symbols, event sections, variable declarations и version checks. Полная instruction grammar .scr, semantics opcodes и serialization state ещё не восстановлены.

Закрывающий эксперимент: найти dispatcher loop в ai.dll, сопоставить jump table с instruction sizes, построить disassembler и сравнить выполнение коротких scripts с оригиналом.

Saves and campaign state

Найдены saveslots.cfg и missions/dispatcher.ini, но binary savegame payload, serialization World3D/AI/script/RNG и migration rules не закрыты.

Нужны сохранения оригинала в контролируемых состояниях: старт миссии, изменение позиции, здоровья, order/path, FX/timer, script variable, research/economy, mission completion, pause и non-default game time.

Physical/control formats

CTLD и связанные resources структурно читаются, count patterns и variants известны. Не названы все секции, shape types, coefficients и точный contact solver. То же относится к редким MSH auxiliary streams и части CTPT/NDPR flags.

Закрывающий эксперимент: трассировать LoadControlSystem, LoadPhysicalModel, CreateCollManager и создание collision objects; связать каждый изменяемый field с созданным shape, contact или реакцией на движение.

DirectPlay wire

DirectPlay lifecycle и имена игровых messages известны. Wire framing, payload schema, reliability flags и netZipData требуют записи обмена двух оригинальных клиентов.

Native interoperability подтверждается только успешным обменом original client <-> compatibility implementation в обе стороны.

Shell, HUD, шрифты и локализация

Граница shell подтверждена exports createShell/getIShell, IGUIServer, верхнеуровневым UI-pass и файлами ui/*.cfg, DATA/TextRes.cfg, gamefont.rlb и sprites.lib. RsLi framing библиотек закрыт, но widget tree, layout rules, glyph metrics, sprite command semantics, focus/navigation и HUD state machine пока не восстановлены до field-level спецификации.

Закрывающий эксперимент: трассировать загрузку shell_ctrls.cfg, menu_resources.cfg, cursor.cfg, game_resources.cfg и hq.cfg, сопоставить GUI object factories и снять command/event captures для меню, HUD, briefing и диалогов.

Research, economy and properties

Экспорты LoadResearch, CalcFullResearchCost, TRF/preload resources и TMA properties доказывают отдельный слой исследований, стоимости, добычи и производственных параметров. Формулы стоимости, dependency graph технологий, inventory/economy transitions и точная типизация всех 16-byte property values не закрыты.

Закрывающий эксперимент: сопоставить research functions с ресурсами и UI, снять изменения state на контролируемых покупках/исследованиях и построить typed schema свойств по consumers, а не по одному имени.

Rare branches

  • Land.map poly_count > 0;
  • RsLi adaptive methods 0x080 и 0x0A0;
  • Texm formats 556 и 88;
  • FX opcode 6;
  • редкие material flags и MSH auxiliary streams.

Такие ветки реализуются по бинарному коду и synthetic tests, а статус corpus-verified получают только после реального файла или runtime trace.

Dynamic-stage requirements

Оставшиеся вопросы нельзя закрыть только статическими архивами. Нужна изолированная 32-bit Windows-среда, неизменённые игровые каталоги, manifest SHA-256, debugger, API/vtable hooks, controlled clocks/input и автоматический launcher, который восстанавливает snapshot, запускает один test case, собирает логи и завершает процесс без ручного вмешательства.

Для каждого capture сохраняются build profile, module hashes, mission/resource key, configuration, device profile, initial state, input/time script и версии инструментов.

Local evidence requests

На текущем рабочем месте закрыты статические, corpus и headless runtime gates. Для локально воспроизводимого Desktop backend подтверждено только command/state trace в существующем GL-воркфлоу:

  • fixtures/acceptance/macos-gl33-triangle-capture.json;

S3-GL-001 пока не закрыт: текущая evidence не отражает полноценный winit+fparkan-render-vulkan path с real surface/present pipeline. Для закрытия требования требуется постоянный workspace-владельческий backend на winit/fparkan-platform-winit + fparkan-render-vulkan с реальным surface/present pipeline, command/state parity и licensed frame capture.

Для повышения S3-GL-002 до covered всё ещё нужен воспроизводимый GLES2 backend profile: GLES2 должен создать кадр, сохранить pixel capture и тот же command/state trace. Локальный Docker probe существующего Rust image не нашёл libGL, libEGL, libGLES или libOSMesa, поэтому закрытие этого gate требует отдельно предоставленного Docker image с Rust + Mesa/EGL/OSMesa либо разрешения на установку соответствующего проверочного окружения.

Для текущей macOS-focused цели S3-GL-002, L3-DEVICE-001 и L5-RG40-001 помечены как omitted: они остаются требованиями portable target scope, но не блокируют локальный macOS acceptance-аудит. При возврате RG40XX/GLES2 в область цели эти gates снова должны требовать внешнего evidence.

L3-DEVICE-001 и L5-RG40-001 не закрываются локально без RG40XX H или эквивалентного удалённого runner-а. Требуемое доказательство: запуск выбранной миссии при 640x480 на целевом профиле, сохранённые stdout/stderr, build fingerprint, manifest игрового каталога, frame/tick budget, memory budget и итоговый pass/fail report. Desktop/headless результаты не считаются заменой on-device smoke.

Closure criteria

Вопрос считается закрытым только при наличии build fingerprint, raw trace, parser trace-а, минимального воспроизводимого input/resource/save/message, формального контракта или явно ограниченной гипотезы, differential test для изменённых DLL, обновления тематической главы и regression case, запускаемого без ручного анализа.