Complete MVP acceptance, publish platform evidence and finalize the manual
Native and manual checks / native (ubuntu-24.04) (push) Canceled after 0s
Native and manual checks / native (windows-2025) (push) Canceled after 0s
Native and manual checks / manual (push) Canceled after 0s
Windows editor and software Vulkan / windows-graphics (push) Canceled after 0s

This commit is contained in:
Emil
2026-09-18 06:23:32 +03:00
parent 4cb82556de
commit dd02f9cae8
52 changed files with 4228 additions and 99 deletions
@@ -0,0 +1,61 @@
# Final Linux source checks — 2026-09-18
Engine source: **`4cb82556de31268d2bde73948dd1ff1b6c02f162`**. Both Release games
were exported from a clean working tree at this commit, which remained unchanged
through completion. Editor SHA-256:
`05e2b40c6c05282af71a03990c98c89c673c48a3cf1da0e17a59f911a947049a`.
The [export report](playable-exports.json) records both checked-in projects, their
source hashes, package generations and relocation. The 2D package contains 17 files;
the 3D package contains 22, including the imported Blender arch. Each package passed
CPU validation and 120 offscreen frames after being moved into a `Faset Café 世界`
directory outside the SDK, with the disposable source-project paths hidden. No scene
or asset-directory override was supplied. Package hashes are preserved in the
[2D manifest](collect-2d-manifest.json) and [3D manifest](collect-3d-manifest.json).
Both ran on the physical NVIDIA RTX 2080 Ti with the Khronos validation layer active
and zero reported errors. The [2D run](collect-2d-run.json) and
[3D run](collect-3d-run.json) retain the observed device and counters. Capture hashes
match the preceding checkpoint 5 candidate exactly. These runs are functional
acceptance evidence; the timings retained in the export report are not a controlled
performance benchmark. The separately scoped
[240-frame baseline](../linux-release-2026-09-18/README.md) remains historical evidence.
A further [SDK-unavailable check](sdk-unavailable.json) ran these same packages in a
private user/mount namespace with an empty read-only filesystem covering the entire
Faset checkout, including Editor, builds, cached tools and project copies. Each used
an unrelated empty working directory and fresh home/config/cache directories. Both
passed validation and another 120 frames, with active Vulkan validation, zero errors
and identical capture hashes. File/process tracing found no SDK path accesses or
helper executables; dynamic dependencies resolved to system libraries, with no ELF
RPATH/RUNPATH. The outer SDK was never renamed or hidden and remained unchanged.
The report preserves namespace/mount details and hashes of the retained local traces
and harness. This establishes SDK independence on this Linux host, not universal
distribution or driver compatibility; Windows has separate package checks.
[Test results](tests.json) record 34 passed, one explicit native Wayland restore skip
and zero failed in the 35-test integrated suite with optional diagnostics enabled.
The compositor declined programmatic restore; the skip does not establish that
operation's correctness. XWayland has its own passing
[window record](../native-window-linux-2026-09-18.json). Full ASan/UBSan passed 18/18
on `0f34b03`; the two affected asset/cook tests passed again after the source-location
correction at `4cb8255`.
The preceding [checkpoint 5 record](../checkpoint5-linux-2026-09-18/README.md)
retains the clean offline build, first project launch, all seven recovery scenarios
and live Blender reimport with their exact source/harness provenance. These checks
were not silently relabeled as runs of a later commit. Physical OS IME composition,
mixed-monitor transitions and other GPU/driver families need separate coverage.
Reproduce the export check from the repository root:
```sh
python3 tools/verify_playable_exports.py --editor build/linux-debug/faset_editor \
--output .cache/playable-verification
```
Actual standalone captures:
![2D standalone game](collect-2d.png)
![3D standalone game with the imported Blender arch](collect-3d.png)
@@ -0,0 +1,143 @@
{
"asset_generations": {},
"build_fingerprint": "0adaba82211a3869537b75939521e2877834b23fb06c1d8d0fdd37446c2704ee",
"configuration": "Release",
"executable": "faset_player",
"files": [
{
"path": "scene.fscene",
"sha256": "0d7b221abc1cae5e9f1d04357c684ac6993f5878d634b4b950eec66dd8e55b2a",
"size": 6214
},
{
"path": "faset_player",
"sha256": "f7902f414ab64573a697a8f36b59e203370779990f63c63fbd90c88a7eb1397b",
"size": 5829824
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "f5c4f289917ecab5d00d543c053aac1d10e6cca311fd172daf06d315160a3505",
"size": 7436
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "c584f3b957ebf194a292451362a98590f85ff3cfbfd8f917b1c1265039381777",
"size": 2639
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "72ebf8d32452830650416dc4717d89a4324e97ece7028dfb97c66803c8dce71f",
"size": 2649
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "e3fd0889cd2f569d410f5d7558a4091d9f57f247a1dcf1788462f67525340819",
"size": 2645
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "Notices/dependencies.json",
"sha256": "a54639ad2d9ad13c2e5f1ec90d6775f5dfc493656789b78c7e44debe2a378fdc",
"size": 2206
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "README.txt",
"sha256": "4dc2f0271c69fe39017ff96aa2dfa00b625bec1401d924dc396193ce71c09f3e",
"size": 225
}
],
"format": "faset.export",
"generation": "a0bc193b-3d79-4372-98c2-8875621d4ab3",
"platform": "linux",
"prerequisites": [
"Linux x86_64",
"Vulkan 1.3 driver",
"Compatible glibc and libstdc++ runtime"
],
"renderer_profile": {
"api": "Vulkan 1.3",
"materials": [
"base-color factor and texture",
"metallic and roughness factors"
],
"required_features": [
"dynamicRendering",
"synchronization2"
],
"shadow_map": {
"resolution": 1024,
"world_extent": 40
},
"texture_sampling": "linear clamp, one mip level",
"unsupported_material_features": [
"normal maps",
"metallic-roughness maps",
"emissive and occlusion maps",
"alpha mode selection",
"unlit mode",
"per-material face culling"
]
},
"scene_hash": "fdfa1c49cf78a1cf52cd41b201c35bb0b5f852c90b7626b2a7f17da3e2e3e24c",
"simulation": {
"fixed_delta": 0.016666666666666666,
"gravity": [
0,
-9.81,
0
],
"max_catch_up_ticks": 4,
"physics_substeps": 4
},
"units": {
"angle": "radian",
"coordinates": "right-handed Y-up",
"distance": "metre"
},
"validation_log": "{\"dimension\":2,\"validated\":true}\n",
"version": 1
}
@@ -0,0 +1,18 @@
{
"arguments": [
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-2d/faset_player",
"--headless",
"--frames",
"120",
"--capture",
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-2d/verification.ppm",
"--profile",
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-2d/profile.json"
],
"cwd": "/tmp/faset-playable-exports-rnbvn4tk/empty-working-directory",
"seconds": 0.5882121719987481,
"exit_code": 0,
"timed_out": false,
"stdout": "New round: collect the three gold cubes, then reach the green exit. E resets.\n{\"device\":\"NVIDIA GeForce RTX 2080 Ti\",\"dimension\":2,\"frames\":120,\"ticks\":120,\"validation_errors\":0}\n",
"stderr": ""
}
@@ -0,0 +1,12 @@
{
"arguments": [
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-2d/faset_player",
"--validate"
],
"cwd": "/tmp/faset-playable-exports-rnbvn4tk/empty-working-directory",
"seconds": 0.004741746000945568,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":2,\"validated\":true}\n",
"stderr": ""
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

@@ -0,0 +1,170 @@
{
"asset_generations": {
"5832763b-3ed0-44d6-9088-0b524f196a91": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2"
},
"build_fingerprint": "36eac0c6901b352478ec474b922d0543fb0a4ccbf33bd5fa49cca887cf8e7a74",
"configuration": "Release",
"executable": "faset_player",
"files": [
{
"path": "scene.fscene",
"sha256": "21c364140669ec82c6886102667b255df5ccdf0ec77e0ca64060f84dd7b86632",
"size": 8639
},
{
"path": "faset_player",
"sha256": "5537942ff7cd999de044168420b730c772a6f21c3cf81ece389e9495c9eae974",
"size": 5834840
},
{
"path": "shaders/vertexMain.spv",
"sha256": "1ad2631c35d654f48166321ae43d4165043e1b919b14f1dc61caf97b1ada0898",
"size": 1224
},
{
"path": "shaders/fragmentMain.spv",
"sha256": "f5c4f289917ecab5d00d543c053aac1d10e6cca311fd172daf06d315160a3505",
"size": 7436
},
{
"path": "shaders/shadowMain.spv",
"sha256": "7643b4d688492b5ee923b9606f0b0e70343ca05fa67673838206119a6f86d8d8",
"size": 784
},
{
"path": "shaders/vertexMain.reflection.json",
"sha256": "c584f3b957ebf194a292451362a98590f85ff3cfbfd8f917b1c1265039381777",
"size": 2639
},
{
"path": "shaders/fragmentMain.reflection.json",
"sha256": "72ebf8d32452830650416dc4717d89a4324e97ece7028dfb97c66803c8dce71f",
"size": 2649
},
{
"path": "shaders/shadowMain.reflection.json",
"sha256": "e3fd0889cd2f569d410f5d7558a4091d9f57f247a1dcf1788462f67525340819",
"size": 2645
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh",
"sha256": "3875c16ea628d4126373ebfe07816621fbad3961596a2fcd112f1eec0e378071",
"size": 928
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/generations/4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2/manifest.json",
"sha256": "ee3f68794c6dc44ab492b1ba4640aa74e4de79a5ec10aed8dcdd45a03afc508e",
"size": 4532
},
{
"path": "assets/5832763b-3ed0-44d6-9088-0b524f196a91/current.json",
"sha256": "b0732959808ce61ef5a3223fba2d9ad8c17a3ea7873d4a81c00aadee6c51032e",
"size": 134
},
{
"path": "Notices/sdl3/LICENSE.txt",
"sha256": "97f35b302b361680ec1e891e95d2d52097bb95abff361434916d99dc1305f127",
"size": 884
},
{
"path": "Notices/entt/LICENSE",
"sha256": "0785027ce472d7c61f05fba664a1d3ba6639c1593ced351ad9e4bed868765d99",
"size": 1097
},
{
"path": "Notices/box2d/LICENSE",
"sha256": "68a3e676d7e94093b102d5cba0d4e04af812040d6f230c3db67a6664574e43d2",
"size": 1067
},
{
"path": "Notices/box3d/LICENSE",
"sha256": "da5e31a26bf3cfd5ba5c96d6823e480128c81e76c107ef9d3ee5d94789184b90",
"size": 1067
},
{
"path": "Notices/json/LICENSE.MIT",
"sha256": "46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603",
"size": 1076
},
{
"path": "Notices/stb/LICENSE",
"sha256": "bebfe904b14301657e4e5d655c811d51fd31b97c455b9cc2d8600d6bac6cff63",
"size": 2510
},
{
"path": "Notices/dependencies.json",
"sha256": "a54639ad2d9ad13c2e5f1ec90d6775f5dfc493656789b78c7e44debe2a378fdc",
"size": 2206
},
{
"path": "Notices/Faset-NOTICE.txt",
"sha256": "30c2e7e80f5153b31ab57675e07246aef9165965d64e36022b426a26449ece3f",
"size": 204
},
{
"path": "README.txt",
"sha256": "4dc2f0271c69fe39017ff96aa2dfa00b625bec1401d924dc396193ce71c09f3e",
"size": 225
}
],
"format": "faset.export",
"generation": "66aa0bad-fb8a-424a-a82a-a41e58b4a13d",
"platform": "linux",
"prerequisites": [
"Linux x86_64",
"Vulkan 1.3 driver",
"Compatible glibc and libstdc++ runtime"
],
"renderer_profile": {
"api": "Vulkan 1.3",
"materials": [
"base-color factor and texture",
"metallic and roughness factors"
],
"required_features": [
"dynamicRendering",
"synchronization2"
],
"shadow_map": {
"resolution": 1024,
"world_extent": 40
},
"texture_sampling": "linear clamp, one mip level",
"unsupported_material_features": [
"normal maps",
"metallic-roughness maps",
"emissive and occlusion maps",
"alpha mode selection",
"unlit mode",
"per-material face culling"
]
},
"scene_hash": "ee12794145c14ba5b599c5d9ae21648cccdfa91c47ee7742549f60d5fe7bc3e0",
"simulation": {
"fixed_delta": 0.016666666666666666,
"gravity": [
0,
-9.81,
0
],
"max_catch_up_ticks": 4,
"physics_substeps": 4
},
"units": {
"angle": "radian",
"coordinates": "right-handed Y-up",
"distance": "metre"
},
"validation_log": "warning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n{\"dimension\":3,\"validated\":true}\n",
"version": 1
}
@@ -0,0 +1,18 @@
{
"arguments": [
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-3d/faset_player",
"--headless",
"--frames",
"120",
"--capture",
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-3d/verification.ppm",
"--profile",
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-3d/profile.json"
],
"cwd": "/tmp/faset-playable-exports-rnbvn4tk/empty-working-directory",
"seconds": 0.5726850880018901,
"exit_code": 0,
"timed_out": false,
"stdout": "New round: collect the three gold cubes, then reach the green exit. E resets.\n{\"device\":\"NVIDIA GeForce RTX 2080 Ti\",\"dimension\":3,\"frames\":120,\"ticks\":120,\"validation_errors\":0}\n",
"stderr": "warning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n"
}
@@ -0,0 +1,12 @@
{
"arguments": [
"/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-3d/faset_player",
"--validate"
],
"cwd": "/tmp/faset-playable-exports-rnbvn4tk/empty-working-directory",
"seconds": 0.005225719000009121,
"exit_code": 0,
"timed_out": false,
"stdout": "{\"dimension\":3,\"validated\":true}\n",
"stderr": "warning: material material-bb63b094febbf90bb7049c9bcf7587bc has features beyond the initial base-color/PBR renderer\n"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1,455 @@
{
"format": "faset.playable-export-verification",
"version": 1,
"started_utc": "2026-09-18T02:56:47.916086+00:00",
"platform": "linux",
"engine": "/home/emil/Desktop/Faset_Engine",
"editor": "/home/emil/Desktop/Faset_Engine/build/linux-debug/faset_editor",
"standalone_root": "/tmp/faset-playable-exports-rnbvn4tk",
"frames_per_game": 120,
"status": "passed",
"projects": [
{
"name": "collect-2d",
"dimension": 2,
"source_inputs": [
{
"path": ".gitignore",
"sha256": "53aa4d7124d4c8d93b8d7c4cb470b6c82b844e019a660d6243ffeadc50602de1"
},
{
"path": "README.md",
"sha256": "d6c35206b10ee28efd5cc02da77a3ce9b6e1f8ce085793150bbf2f23bd925d65"
},
{
"path": "Scenes/main.scene.json",
"sha256": "be48a6d21385e717b6c8ebf9a3b4322eebbeff6bb067428e089ab5214be79854"
},
{
"path": "Scripts/Gameplay.cpp",
"sha256": "6b581b24da613e1915819de0a0f0ea820dd3333efa62c4b479a9ea7ffdbc6bcc"
},
{
"path": "Scripts/Gameplay.hpp",
"sha256": "4121587182ed4f74901b1c0757c53daadbf309af1d6bb5dd87fef142130ccbbe"
},
{
"path": "project.faset.json",
"sha256": "36e2acd32210f5489372a2331346a3294ead2395f0713e3e5fd2da4e83263689"
}
],
"generation": "a0bc193b-3d79-4372-98c2-8875621d4ab3",
"configuration": "Release",
"standalone_directory": "/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-2d",
"executable": "faset_player",
"package_file_count": 17,
"asset_generations": {},
"device": "NVIDIA GeForce RTX 2080 Ti",
"validation_enabled": true,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 0.580928,
"min": 0.558752,
"p50": 0.561056,
"p95": 0.577536,
"samples": 120
},
"render_call": {
"max": 4.353283,
"min": 1.355868,
"p50": 1.575242,
"p95": 1.779117,
"samples": 120
},
"renderer_cpu": {
"max": 4.349596,
"min": 1.354355,
"p50": 1.572978,
"p95": 1.777063,
"samples": 120
},
"renderer_readback_cpu": {
"max": 2.542697,
"min": 0.357785,
"p50": 0.393262,
"p95": 0.477721,
"samples": 120
},
"simulation": {
"max": 0.256133,
"min": 0.12707,
"p50": 0.136477,
"p95": 0.187975,
"samples": 120
},
"snapshot": {
"max": 0.263748,
"min": 0.120477,
"p50": 0.12702,
"p95": 0.16401,
"samples": 120
},
"wall": {
"max": 4.772504,
"min": 1.625006,
"p50": 1.861853,
"p95": 2.054506,
"samples": 120
}
},
"capture": {
"width": 1280,
"height": 720,
"sampled_colors": 7,
"sha256": "f9d74067d87c1ebf30c6db372a26d93b7285791c8cb0307a24af5adb23bf201a"
},
"source_project_paths_unavailable": true,
"status": "passed"
},
{
"name": "collect-3d",
"dimension": 3,
"source_inputs": [
{
"path": ".gitignore",
"sha256": "53aa4d7124d4c8d93b8d7c4cb470b6c82b844e019a660d6243ffeadc50602de1"
},
{
"path": "Assets/exit-arch/create.py",
"sha256": "9c7291124fb1498a3f992ef74afc39cd98f9cc3e2ff4687c633bece85d580905"
},
{
"path": "Assets/exit-arch/manifest.json",
"sha256": "7a13347adc89761fb02ebeab3c58ba87f319cd62f53ec87a3bb61bcd066ffa55"
},
{
"path": "Assets/exit-arch/manifest.json.faset-import.json",
"sha256": "ef4eef28a18a0cc40a40df75db34c97faa5d783b891265f862633f3aec514afc"
},
{
"path": "Assets/exit-arch/payload/ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3.glb",
"sha256": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3"
},
{
"path": "Assets/exit-arch/source.blend",
"sha256": "ff2676bec97ab778e531e87a185ad716049ea3b05b4a4f0027a6345737735035"
},
{
"path": "README.md",
"sha256": "2df5ca4df47ab5d3d05d41508201296d4ad5ec876245f19f061767ade6a30e8f"
},
{
"path": "Scenes/main.scene.json",
"sha256": "61b65baf79e52f07ac386a7f98acf985a1b09e88770cdde37ef461dc94b9dcd7"
},
{
"path": "Scripts/Extensions/Beacon.hpp",
"sha256": "c60d56161eead16f541835053ad32ac3333383d83015709c060b7d45e0af5a97"
},
{
"path": "Scripts/Gameplay.cpp",
"sha256": "5d419786a6861d7f14ed4eca54634694d8cd43be5dbbd60a2c6790db665c3a6a"
},
{
"path": "Scripts/Gameplay.hpp",
"sha256": "4121587182ed4f74901b1c0757c53daadbf309af1d6bb5dd87fef142130ccbbe"
},
{
"path": "project.faset.json",
"sha256": "43d273b1054ec9069369073f54cc1fc7efb3d6b699dcd342c552a2dc2ef852ef"
}
],
"import": {
"asset_id": "5832763b-3ed0-44d6-9088-0b524f196a91",
"cache_hit": false,
"diagnostics": [],
"generation": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2",
"manifest": {
"asset_id": "5832763b-3ed0-44d6-9088-0b524f196a91",
"files": [
{
"path": "meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh",
"sha256": "98b38aca7d2786c58a2265ba4d1f2255123f03d31d947e239232cf55bfdc2c97",
"size": 928
},
{
"path": "meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh",
"sha256": "3875c16ea628d4126373ebfe07816621fbad3961596a2fcd112f1eec0e378071",
"size": 928
}
],
"generation": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2",
"importer": "faset-gltf-1/cgltf-1.15",
"input_key": {
"bundle_sha256": "7a13347adc89761fb02ebeab3c58ba87f319cd62f53ec87a3bb61bcd066ffa55",
"dependencies": {},
"importer": "faset-gltf-1/cgltf-1.15",
"settings": {},
"source": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3",
"target_profile": "desktop-static-pbr-v1",
"toolchain": {
"cgltf": "360db1a95480fe102ae9c69b27c5d101167ff5ba",
"stb": "2c980bb59875b0d32144a71867fbdebb2f77cd20"
}
},
"kind": "scene",
"materials": [
{
"alpha_cutoff": 0.5,
"alpha_mode": "OPAQUE",
"base_color": [
0.2199999988079071,
0.28999999165534973,
0.3400000035762787,
1.0
],
"base_color_texture": -1,
"double_sided": true,
"emissive": [
0.0,
0.0,
0.0
],
"emissive_texture": -1,
"format": "faset.material",
"id": "material-bb63b094febbf90bb7049c9bcf7587bc",
"metallic": 0.07999999821186066,
"metallic_roughness_texture": -1,
"name": "Weathered stone",
"normal_texture": -1,
"occlusion_texture": -1,
"roughness": 0.800000011920929,
"unlit": false,
"version": 1
}
],
"meshes": [
{
"id": "mesh-fc069a07a87e0f831fd92efdbc4efa1f",
"name": "Cube.001",
"primitives": [
{
"material": 0,
"path": "meshes/mesh-fc069a07a87e0f831fd92efdbc4efa1f-0.fmesh"
}
]
},
{
"id": "mesh-0961e2a3f92977836a3aa80cab09277e",
"name": "Cube.002",
"primitives": [
{
"material": 0,
"path": "meshes/mesh-0961e2a3f92977836a3aa80cab09277e-0.fmesh"
}
]
},
{
"id": "mesh-93b5b3e52cb6bb120fefb80e2d8e222b",
"name": "Cube.003",
"primitives": [
{
"material": 0,
"path": "meshes/mesh-93b5b3e52cb6bb120fefb80e2d8e222b-0.fmesh"
}
]
}
],
"nodes": [
{
"id": "node-cec6e8cea80cf5a98ba3263a0156bee4",
"local_transform": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.4500000476837158,
1.2999999523162842,
1.0
],
"mesh": 0,
"name": "Left post",
"parent_id": "",
"stable_source_id": true
},
{
"id": "node-5f8a90a6c4d27020d20bd4fa81d1d958",
"local_transform": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.4500000476837158,
-1.2999999523162842,
1.0
],
"mesh": 1,
"name": "Right post",
"parent_id": "",
"stable_source_id": true
},
{
"id": "node-482463e486a8d1fd741340c653cd128f",
"local_transform": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
3.0,
0.0,
1.0
],
"mesh": 2,
"name": "Lintel",
"parent_id": "",
"stable_source_id": true
}
],
"outputs": [
"node-cec6e8cea80cf5a98ba3263a0156bee4",
"node-5f8a90a6c4d27020d20bd4fa81d1d958",
"node-482463e486a8d1fd741340c653cd128f",
"mesh-fc069a07a87e0f831fd92efdbc4efa1f",
"mesh-0961e2a3f92977836a3aa80cab09277e",
"mesh-93b5b3e52cb6bb120fefb80e2d8e222b",
"material-bb63b094febbf90bb7049c9bcf7587bc"
],
"payload_source": "/home/emil/Desktop/Faset_Engine/.cache/playable-release-final/Faset Café 世界/collect-3d/Assets/exit-arch/payload/ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3.glb",
"schema_version": 1,
"settings": {},
"source": "/home/emil/Desktop/Faset_Engine/.cache/playable-release-final/Faset Café 世界/collect-3d/Assets/exit-arch/manifest.json",
"source_sha256": "ee6c748a212905fc9c465cbe95c033e94b80be643624f4f240ad5353761205b3",
"textures": []
},
"previous_generation": "",
"removed_output_ids": []
},
"generation": "66aa0bad-fb8a-424a-a82a-a41e58b4a13d",
"configuration": "Release",
"standalone_directory": "/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-3d",
"executable": "faset_player",
"package_file_count": 22,
"asset_generations": {
"5832763b-3ed0-44d6-9088-0b524f196a91": "4a5bfcc1437a7b4d65c388da2beace0308cceda8e16503d08ce676260f21d5c2"
},
"device": "NVIDIA GeForce RTX 2080 Ti",
"validation_enabled": true,
"validation_errors": 0,
"completed_frames": 120,
"summary_ms": {
"gpu": {
"max": 0.609888,
"min": 0.5784,
"p50": 0.580288,
"p95": 0.600416,
"samples": 120
},
"render_call": {
"max": 4.356229,
"min": 1.486144,
"p50": 1.670422,
"p95": 1.897079,
"samples": 120
},
"renderer_cpu": {
"max": 4.352772,
"min": 1.484541,
"p50": 1.668107,
"p95": 1.894835,
"samples": 120
},
"renderer_readback_cpu": {
"max": 2.37976,
"min": 0.36052,
"p50": 0.407479,
"p95": 0.460479,
"samples": 120
},
"simulation": {
"max": 0.282002,
"min": 0.164811,
"p50": 0.176523,
"p95": 0.235354,
"samples": 120
},
"snapshot": {
"max": 0.7686,
"min": 0.154722,
"p50": 0.166093,
"p95": 0.187914,
"samples": 120
},
"wall": {
"max": 5.493053,
"min": 1.819833,
"p50": 2.0303,
"p95": 2.317552,
"samples": 120
}
},
"capture": {
"width": 1280,
"height": 720,
"sampled_colors": 42,
"sha256": "914060401de93d08b33bf09a1e210859e491a0060c331e5e2044f517356f4980"
},
"source_project_paths_unavailable": true,
"status": "passed"
}
],
"finished_utc": "2026-09-18T03:00:21.028754+00:00",
"engine_commit": "4cb82556de31268d2bde73948dd1ff1b6c02f162",
"editor_sha256": "05e2b40c6c05282af71a03990c98c89c673c48a3cf1da0e17a59f911a947049a",
"engine_commit_at_completion": "4cb82556de31268d2bde73948dd1ff1b6c02f162",
"working_tree_changes_at_start": [],
"timings_are_benchmark_evidence": false,
"timing_note": "Final release source functional export/relocation/validation/profile completeness acceptance. Timings are retained as functional evidence, not a controlled performance benchmark.",
"capture_comparison_to_candidate": {
"collect-2d": {
"prior_engine_commit": "0f34b036313c011861dbfd5828ed45c4f7940b05",
"exact_capture_sha256_match": true
},
"collect-3d": {
"prior_engine_commit": "0f34b036313c011861dbfd5828ed45c4f7940b05",
"exact_capture_sha256_match": true
}
},
"png_previews": [
"evidence/collect-2d.png",
"evidence/collect-3d.png"
]
}
@@ -0,0 +1,115 @@
{
"format": "faset.sdk-unavailable-verification",
"version": 1,
"status": "passed",
"started_utc": "2026-09-18T03:10:58.685939+00:00",
"engine_commit": "4cb82556de31268d2bde73948dd1ff1b6c02f162",
"editor_sha256": "05e2b40c6c05282af71a03990c98c89c673c48a3cf1da0e17a59f911a947049a",
"sdk_paths_unavailable": {
"/home/emil/Desktop/Faset_Engine/CMakeLists.txt": true,
"/home/emil/Desktop/Faset_Engine/build/linux-debug/faset_editor": true,
"/home/emil/Desktop/Faset_Engine/build/linux-debug/shaders": true,
"/home/emil/Desktop/Faset_Engine/.cache/deps-src": true,
"/home/emil/Desktop/Faset_Engine/.cache/playable-release-final": true
},
"sdk_empty": true,
"mount_namespace": "mnt:[4026533743]",
"outer_mount_namespace": "mnt:[4026531832]",
"sdk_mount": [
"1374 111 0:82 / /home/emil/Desktop/Faset_Engine ro,nosuid,nodev,relatime - tmpfs faset-sdk-hidden ro,size=1024k,uid=1000,gid=1000,inode64"
],
"environment": {
"PATH": "/usr/bin:/bin",
"LANG": "C.UTF-8",
"HOME": "/tmp/faset-sdk-unavailable-fp5gnvp2/home",
"XDG_CACHE_HOME": "/tmp/faset-sdk-unavailable-fp5gnvp2/cache",
"XDG_CONFIG_HOME": "/tmp/faset-sdk-unavailable-fp5gnvp2/config",
"XDG_DATA_HOME": "/tmp/faset-sdk-unavailable-fp5gnvp2/data"
},
"timings_are_benchmark_evidence": false,
"projects": [
{
"name": "collect-2d",
"package": "/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-2d",
"player_sha256": "f7902f414ab64573a697a8f36b59e203370779990f63c63fbd90c88a7eb1397b",
"verified_package_files": 17,
"default_scene_and_assets": true,
"validation_passed": true,
"device": "NVIDIA GeForce RTX 2080 Ti",
"validation_enabled": true,
"validation_errors": 0,
"frames": 120,
"capture_sha256": "f9d74067d87c1ebf30c6db372a26d93b7285791c8cb0307a24af5adb23bf201a",
"capture_matches_final_release": true,
"status": "passed",
"trace_sdk_path_mentions": 0,
"traced_execve": [
"2514912 execve(\"/tmp/faset-playable-exports-rnbvn4tk/Faset Caf\\303\\251 \\344\\270\\226\\347\\225\\214/collect-2d/faset_player\", [\"/tmp/faset-playable-exports-rnbv\"..., \"--headless\", \"--frames\", \"120\", \"--capture\", \"/tmp/faset-sdk-unavailable-fp5gn\"..., \"--profile\", \"/tmp/faset-sdk-unavailable-fp5gn\"...], 0x7ffc06cf8bb0 /* 6 vars */) = 0"
],
"dependency_paths_outside_sdk": true,
"elf_has_rpath_or_runpath": false,
"dependencies": [
"\tlinux-vdso.so.1 (0x00007c4f9ae17000)",
"\tlibvulkan.so.1 => /usr/lib/x86_64-linux-gnu/libvulkan.so.1 (0x00007c4f9a7c5000)",
"\tlibm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007c4f9a69f000)",
"\tlibstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007c4f9a200000)",
"\tlibgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007c4f9a671000)",
"\tlibc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007c4f99e00000)",
"\t/lib64/ld-linux-x86-64.so.2 (0x00007c4f9ae19000)"
]
},
{
"name": "collect-3d",
"package": "/tmp/faset-playable-exports-rnbvn4tk/Faset Café 世界/collect-3d",
"player_sha256": "5537942ff7cd999de044168420b730c772a6f21c3cf81ece389e9495c9eae974",
"verified_package_files": 22,
"default_scene_and_assets": true,
"validation_passed": true,
"device": "NVIDIA GeForce RTX 2080 Ti",
"validation_enabled": true,
"validation_errors": 0,
"frames": 120,
"capture_sha256": "914060401de93d08b33bf09a1e210859e491a0060c331e5e2044f517356f4980",
"capture_matches_final_release": true,
"status": "passed",
"trace_sdk_path_mentions": 0,
"traced_execve": [
"2514989 execve(\"/tmp/faset-playable-exports-rnbvn4tk/Faset Caf\\303\\251 \\344\\270\\226\\347\\225\\214/collect-3d/faset_player\", [\"/tmp/faset-playable-exports-rnbv\"..., \"--headless\", \"--frames\", \"120\", \"--capture\", \"/tmp/faset-sdk-unavailable-fp5gn\"..., \"--profile\", \"/tmp/faset-sdk-unavailable-fp5gn\"...], 0x7ffe821118e0 /* 6 vars */) = 0"
],
"dependency_paths_outside_sdk": true,
"elf_has_rpath_or_runpath": false,
"dependencies": [
"\tlinux-vdso.so.1 (0x000071bca491d000)",
"\tlibvulkan.so.1 => /usr/lib/x86_64-linux-gnu/libvulkan.so.1 (0x000071bca42ca000)",
"\tlibm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x000071bca41a4000)",
"\tlibstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x000071bca3e00000)",
"\tlibgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x000071bca4176000)",
"\tlibc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x000071bca3a00000)",
"\t/lib64/ld-linux-x86-64.so.2 (0x000071bca491f000)"
]
}
],
"finished_utc": "2026-09-18T03:11:01.278406+00:00",
"outer_sdk_unchanged_after_namespace": true,
"outer_editor_sha256_after": "05e2b40c6c05282af71a03990c98c89c673c48a3cf1da0e17a59f911a947049a",
"retained_evidence_hashes": {
"collect-2d-dependencies.json": "c3882b5fec209be8e140b3a47bc4cd6e4c644baca4ce37308fb9420076fdd094",
"collect-2d-elf.json": "aa615e898a2ec9f7d68491d13f6bb5742a566ded87ce0d6c9c0ebe8fbe342de3",
"collect-2d-file-trace.log": "3fe847b2f8f8de66aeb04db69d02ba1b5bb311ffd64a057d405b527daa2e221d",
"collect-2d-profile.json": "5ab9c3e01d55e5f5a51d4e7d7d53bc1e39d3cac1d98544de246c8e1e05ef8a80",
"collect-2d-run.json": "b382c0582482d98c4c184949cb40d1c60939e18f772717b9c3d22f4ec94adba6",
"collect-2d-validate.json": "4fdf30c0fda6a275984a746b787f61c1ea50952558706da2232e97ca684a7bd1",
"collect-2d.ppm": "f9d74067d87c1ebf30c6db372a26d93b7285791c8cb0307a24af5adb23bf201a",
"collect-3d-dependencies.json": "0839c22cd4269a9461106b6f64c9d7255378639f571bec892ed189f0803cdfe6",
"collect-3d-elf.json": "c0f212cfec469cf493d517108f7859638b5aa4529216f42097170bfa0dbd49ba",
"collect-3d-file-trace.log": "3df4929e94c9b21e69f8a4dc3aed5d7182c60606af52840c9f945531cb54d6d0",
"collect-3d-profile.json": "e461b8c882f7ba487a0dc0704d20c96eafcbfe51785f50796bd70d611896ba27",
"collect-3d-run.json": "2a4703d596c1a3aa5450b205ee382cfed9578884bf63a965fde04e6e672c5ca8",
"collect-3d-validate.json": "15f128930142c0fc233eeb2b8e3b2a4d5d80e9e578f54f78538e6ce74c93d4cd",
"collect-3d.ppm": "914060401de93d08b33bf09a1e210859e491a0060c331e5e2044f517356f4980",
"inner.py": "a24ef1b36550a8f1944bda95b13c90eca5d2ddd81f49bfddbceba291c75d3857",
"outer-mount-namespace.txt": "b38992f03c046722594e95d6dcdbb4fb1b75a0f4f0156c26cb2059b1bafecdd4",
"prior.json": "d0d1ea7b6c4ffc8e6d1ac7dfe0e8dcfa1875780abd8eeb8377621db810c84883",
"run.sh": "dad0a2d008508eb2b2f2e0b4d7b86a6f38e3de1bdd6f0272d4d99bfcde201489"
}
}
@@ -0,0 +1,318 @@
{
"recorded_date": "2026-09-18",
"profiles": "Ubuntu 26.04 x86-64; Clang 21.1.8; NVIDIA RTX 2080 Ti 595.84; see docs/TOOLCHAINS.md",
"checks": [
{
"source_commit": "4cb82556de31268d2bde73948dd1ff1b6c02f162",
"description": "Full Debug with optional ImGui diagnostics",
"raw_log_sha256": "4f44fa2bc6b9cc560f89d0000b63cf87e200da237b432de87c5b64f299dc58a9",
"tests": [
{
"name": "authoring",
"status": "passed",
"seconds": 0.05
},
{
"name": "runtime_contracts",
"status": "passed",
"seconds": 0.12
},
{
"name": "assets_pipeline",
"status": "passed",
"seconds": 0.12
},
{
"name": "assets_blender_bundle",
"status": "passed",
"seconds": 0.07
},
{
"name": "render_graph",
"status": "passed",
"seconds": 0.01
},
{
"name": "render_offscreen",
"status": "passed",
"seconds": 0.35
},
{
"name": "render_sprite_alpha",
"status": "passed",
"seconds": 0.31
},
{
"name": "render_shader_reload",
"status": "passed",
"seconds": 2.47
},
{
"name": "render_window_lifecycle",
"status": "skipped",
"seconds": 4.02
},
{
"name": "player_scene_contracts",
"status": "passed",
"seconds": 0.01
},
{
"name": "player_shutdown_diagnostics",
"status": "passed",
"seconds": 0.37
},
{
"name": "editor_mcp",
"status": "passed",
"seconds": 0.02
},
{
"name": "process_and_cook",
"status": "passed",
"seconds": 0.29
},
{
"name": "build_schema_publication",
"status": "passed",
"seconds": 5.25
},
{
"name": "editor_plugins",
"status": "passed",
"seconds": 0.02
},
{
"name": "editor_session_settings",
"status": "passed",
"seconds": 0.01
},
{
"name": "ui_widgets",
"status": "passed",
"seconds": 0.12
},
{
"name": "ui_render",
"status": "passed",
"seconds": 0.43
},
{
"name": "editor_ui_import_conflicts",
"status": "passed",
"seconds": 0.71
},
{
"name": "editor_ui_project_settings",
"status": "passed",
"seconds": 0.83
},
{
"name": "editor_ui_reload",
"status": "passed",
"seconds": 3.9
},
{
"name": "editor_ui_launcher",
"status": "passed",
"seconds": 0.6
},
{
"name": "editor_ui_templates",
"status": "passed",
"seconds": 2.01
},
{
"name": "editor_ui_gizmos",
"status": "passed",
"seconds": 0.78
},
{
"name": "editor_ui_authoring",
"status": "passed",
"seconds": 1.2
},
{
"name": "editor_mcp_stdio",
"status": "passed",
"seconds": 0.28
},
{
"name": "editor_gui_mcp",
"status": "passed",
"seconds": 4.39
},
{
"name": "core",
"status": "passed",
"seconds": 0.1
},
{
"name": "tutorial_moving",
"status": "passed",
"seconds": 0.02
},
{
"name": "tutorial_following",
"status": "passed",
"seconds": 0.01
},
{
"name": "tutorial_spawning",
"status": "passed",
"seconds": 0.02
},
{
"name": "tutorial_physics",
"status": "passed",
"seconds": 0.06
},
{
"name": "playable_2d",
"status": "passed",
"seconds": 0.4
},
{
"name": "playable_3d",
"status": "passed",
"seconds": 0.88
},
{
"name": "editor_debug_overlay",
"status": "passed",
"seconds": 0.35
}
],
"counts": {
"passed": 34,
"skipped": 1,
"failed": 0
}
},
{
"source_commit": "4cb82556de31268d2bde73948dd1ff1b6c02f162",
"description": "Targeted ASan/UBSan after source-location correction",
"raw_log_sha256": "955813d41b1d28cf53df0af7bfe42d3b05009a1e00cfa266d75b8955f08003e1",
"tests": [
{
"name": "assets_pipeline",
"status": "passed",
"seconds": 0.59
},
{
"name": "process_and_cook",
"status": "passed",
"seconds": 0.54
}
],
"counts": {
"passed": 2,
"skipped": 0,
"failed": 0
}
},
{
"source_commit": "0f34b036313c011861dbfd5828ed45c4f7940b05",
"description": "Complete ASan/UBSan suite before the bounded source-location correction",
"raw_log_sha256": "fc34eb7195105c1cc7755eafa20580cdc23022c4edff86fe2f0571cb6cac8ba8",
"tests": [
{
"name": "authoring",
"status": "passed",
"seconds": 0.18
},
{
"name": "runtime_contracts",
"status": "passed",
"seconds": 0.76
},
{
"name": "assets_pipeline",
"status": "passed",
"seconds": 0.44
},
{
"name": "assets_blender_bundle",
"status": "passed",
"seconds": 0.07
},
{
"name": "editor_mcp",
"status": "passed",
"seconds": 0.08
},
{
"name": "process_and_cook",
"status": "passed",
"seconds": 0.53
},
{
"name": "build_schema_publication",
"status": "passed",
"seconds": 30.02
},
{
"name": "editor_plugins",
"status": "passed",
"seconds": 0.12
},
{
"name": "editor_session_settings",
"status": "passed",
"seconds": 0.09
},
{
"name": "ui_widgets",
"status": "passed",
"seconds": 0.35
},
{
"name": "editor_mcp_stdio",
"status": "passed",
"seconds": 0.58
},
{
"name": "core",
"status": "passed",
"seconds": 0.26
},
{
"name": "tutorial_moving",
"status": "passed",
"seconds": 0.14
},
{
"name": "tutorial_following",
"status": "passed",
"seconds": 0.06
},
{
"name": "tutorial_spawning",
"status": "passed",
"seconds": 0.14
},
{
"name": "tutorial_physics",
"status": "passed",
"seconds": 0.39
},
{
"name": "playable_2d",
"status": "passed",
"seconds": 2.16
},
{
"name": "playable_3d",
"status": "passed",
"seconds": 4.64
}
],
"counts": {
"passed": 18,
"skipped": 0,
"failed": 0
}
}
],
"skip_note": "The Wayland compositor declined programmatic restore. The XWayland lifecycle record is separate; this skipped invocation is not a passed native Wayland check."
}