Files
Faset_Engine/docs/validation/p1-iteration-2026-09-24
Emil 2c1cf2fecc
Native and manual checks / native (ubuntu-24.04) (push) Failing after 36s
Native and manual checks / manual (push) Successful in 30s
Native and manual checks / native (windows-2025) (push) Canceled after 0s
Windows editor and software Vulkan / windows-graphics (push) Canceled after 0s
Record final combined P1 Release reference and memory miss
2026-09-24 05:18:03 +03:00
..

P1 gameplay iteration: measured Linux workflow

The unaltered version 2 workflow report was produced by a clean 6c2e8fa80036315a695f67f3c53524165fb4b10a checkout on 2026-09-24. It used disposable copies of the checked-in collect-3d and examples/lua projects. Every sample, process log and Player profile is retained under raw/; the run log shows the order and completion. The report identifies each input revision by SHA-256, and records all command arguments, phase labels, configuration and dirty-tree state. Its SHA-256 is fd463c0cd12eed0a22143aa68bd732386804b0df4ecb2a3d9caa26f59dcfe6e2.

The original report's toolchain.slang is null because that version looked for slangc on PATH, while CMake used a configured executable. A separate post-run provenance supplement, generated after commit abd8c21 from the surviving disposable compressed CMake cache, hashes the selected CMake, Ninja, C/C++ compiler, Slang, Editor and UI-probe binaries. It binds to the original report hash and records both script revisions. The measured report was not rewritten. Subsequent workflow runs include these identities in their report directly. 4ac02ee changed only the Windows CI export fixture location; neither follow-up is presented as the measured code revision.

Measurement conditions and results

The host ran Linux 7.0, Ryzen 7 1700, 32 GiB RAM, RTX 2080 Ti and NVIDIA 595.84. The disposable project used Debug, Clang 21.1.8, CMake 4.2.3, Ninja 1.13.2 and Slang 2026.18. The Player rendered offscreen Vulkan at 1280×720 with validation active and full-frame readback. The run did not overlap the separate P3 GPU sweep. Build times still depend on ambient CPU load, filesystem cache and prepared dependencies. The cold row means an empty project .faset cache, not a cold OS page cache or a first dependency download.

Observation Samples Median Nearest-rank p95 Scope
Initial configure and native build 1 106.01 s — Disposable Debug project
Unchanged build 5 11.53 s 13.12 s All five reused the verified schema/package generation
Changed Gameplay.cpp build 5 28.16 s 30.33 s One warm-up edit excluded
Changed Gameplay.hpp build 5 23.89 s 25.51 s One warm-up edit excluded
Watched Lua edit to reload log 5 0.502 s 0.504 s Persistent Player; includes watcher polling
First completed offscreen Player frame 5 0.284 s 0.333 s From main(); excludes OS loader and window presentation
Synthetic Editor input to rendered state 100 13.97 ms 18.03 ms Ten warm-ups; offscreen retained-UI frame, not input-to-photon

The intentional C++ compile failure took 10.00 s and the corrected recovery build 19.93 s. The failed job preserved its prior successful build pointer. The run also imported the small Blender bundle cold and cached in 49 and 52 ms, respectively; Editor process startup dominates that tiny asset sample, so those two values do not establish import-cache speedup. The raw failed-build job exposed a navigation defect: the compiler named the staged source copy, and the original structured diagnostic omitted file. A later fix maps only the verified staged Scripts subtree to project-relative source. A real failed-build replay with the corrected Editor returns Scripts/Gameplay.cpp, line 73, column 2. The build_diagnostics test also covers project-contained snapshot paths and Windows drives; build_schema_publication verifies that an error after 250 third-party warnings survives the 200-row diagnostic limit. These are separate from this unmodified measurement.

Follow-up 54d1bae rehashes both the live source and the staged copy after native build and before reuse/publication. A fixture changes the staged C++ header during schema export; the build fails and retains the last-good pointer. The copy is content-verified at those boundaries, not sealed against a same-user write-and-restore during compiler reads.

The 3,000-frame lifecycle profile completed with zero Vulkan validation errors. Maximum explicit Vulkan allocation was 15,787,008 bytes in both frames 101–200 and 2901–3000, a measured growth of zero; the live texture count remained one. These counters exclude driver-internal memory and do not prove absence of all resource leaks.

The generated 527-entity scene adds 512 seeded copies to the 15-entity source and ran for 240 offscreen frames with zero Vulkan validation errors. Its raw profile reports p95 frame wall 149.39 ms, simulation 48.19 ms, scene snapshot 68.12 ms, renderer call 36.51 ms and GPU timestamp 0.911 ms. It exposes a significant CPU scaling cost in this synthetic content; it is not a typical-game benchmark or a Release budget failure for the tiny checked-in sample.

Reference budgets and coverage

The 2026-09-18 Release reference baseline measured the exact collect-2d and collect-3d packaged scenes on this host, at 1280×720 with validation/readback. Its 240-frame p95s met the initial tracking budgets: frame 2.684/2.732 ms versus ≤4; GPU 0.579/0.600 ms versus ≤1; readback 0.633/0.608 ms versus ≤1; simulation 0.258/0.300 ms and snapshot 0.215/0.257 ms versus ≤0.5 each. Explicit allocations were about 15.02/15.06 MiB versus ≤20 MiB; first-frame startup from main() was 265.5/260.8 ms versus ≤500 ms. That baseline was an evolving earlier working tree. Its values are historical and are not compared with this Debug workflow's timing.

The fresh clean combined P1/P3 Release reference at 4a3453e repeats these exact scenes on the same physical RTX 2080 Ti, now with 120-frame source-hidden relocation checks for C++ 2D/3D and Lua-only, plus sequential 240-frame C++ 2D/3D profiles. The frame, GPU, readback, simulation, snapshot and startup tracking budgets all pass. Explicit allocations instead reach 43.022/43.118 MiB, above the former ≤20 MiB budget because the new renderer eagerly retains a 16 MiB sun atlas and a 16 MiB local atlas in both scenes. The 2D sample casts no sun shadows and neither sample uses local shadow faces. This is a measured tracking-budget miss, not a failed export or a reason to redefine the counter silently. The linked dossier retains exact values, atlas breakdown, raw profiles and source/toolchain provenance.

The Lua-only Linux Release dossier separately records a relocated package that validated and rendered 120 frames after hiding its source project, with 0 validation errors. The final fixture placement was checked in clean-revision 4ac02ee Windows graphics CI: 61/61 CTests passed on pinned SwiftShader, the real 2D/3D Release export integration passed, and all three relocated Release games (collect-2d, collect-3d, Lua-only) validated and rendered 120/120 frames with source paths unavailable. The Windows playable report contains package and source hashes, device identity, result details and capture checksums; integration results, integration manifests, Vulkan probe and toolchain record preserve representative raw evidence. The parallel native/manual CI passed on Linux and Windows. This is software Vulkan; Windows did not have an active Khronos validation layer (validation_enabled: false), and no physical Windows GPU/driver performance claim follows. The later combined P1/P3 Windows graphics CI at 87230f3 passed 74/74 CTests, including real diagnostic navigation, real Release export integration and all three relocated games. The physical-GPU Linux reference above had active validation.

P1 acceptance record

Area Evidence and current limit
Lua Linux native and Release relocated Lua result, repeated in the clean combined three-game Release reference; Windows CPU/SwiftShader combined 74-test suite and relocated Lua-only Release report, 120 completed frames.
Cache and rollback Five verified hits, build_cache and build_schema_publication contracts for headers, toolchain, schema/shader corruption and source races; the raw failed/recovered build retains the previous pointer.
Diagnostics build_diagnostics fixtures cover Clang, clang-cl, Lua, Unicode and unparseable output. The raw real failure above found a staged-source mapping gap; the replay, parser case, warning-flood case and real BuildService integration assertion cover the correction.
Starters/navigation Four runnable C++/Lua × 2D/3D starters plus launcher/CLI and source-open tests.
Autosave editor_session_settings, UI tests and workspace behavior: idle coalescing, unnamed Save As, external/revision conflicts, Undo and recovery.
Iteration This Debug report, 179 raw files, 3,000-frame and seeded larger-scene profiles, plus the clean combined Release reference with three relocated games and exact 2D/3D budgets. The allocation budget miss is recorded; no CI timing gates.
Documentation The English Manual describes build/reload, templates, navigation, autosave and profile interpretation; strict MkDocs and full platform test totals are recorded in the implementation journal.

The profiling guide documents how to repeat the run and interpret its deliberately distinct timing labels. C++ hot reload, state-preserving Lua reload and Player-world MCP are not part of this P1 contract.