# FBX External Texture Dependency Evaluation **Date:** 2026-07-13 **Issue:** [Gitea #58](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/issues/58) **Implementation commit:** `3e30c61c71fc942c33635aae3d922b70401fe7c7` **Release-candidate commit:** Not nominated **Source validation:** **Pass** **Native acceptance:** **Pass** This record covers path-safe FBX texture discovery, transactional bundle import, labeled runtime images, static-mesh dependency publication, read-only project validation, and stable Asset Browser states. The permanent contract is owned by [ADR 0044](../../../adr/0044-sandboxed-fbx-external-texture-dependencies.md). ## Automated Verification | Command or suite | Result | Evidence | |------------------|--------|----------| | `cargo fmt --all -- --check` | Pass | Formatting completed without changes. | | `git diff --check` | Pass | No whitespace errors. | | `cargo clippy --workspace --all-targets -- -D warnings` | Pass | Every workspace target completed with warnings denied. | | `cargo test --workspace --all-targets` | Pass | All workspace targets passed. Editor reported 309 passing tests; scene reported 103 passing tests and one ignored manual migration test. | | FBX dependency/import regressions | Pass | Six focused tests cover the committed chair, sibling `textures/`, `.fbm/`, missing bundles, parent traversal, and destination symlink containment. Thumbnail regressions cover terminal missing-texture state and first-render pipeline warmup. | | `cargo validate-levels --project .` | Pass | 84 dependencies, six known nonblocking findings, zero blocking errors. The chair contributes one informational Authoring Override finding. | | `cargo validate-samples --project .` | Pass | Five samples, 89 dependencies, the same six nonblocking findings, zero blocking errors. | | Controlled Source Materials validation | Pass | Changing only the chair registry and static-manifest policies on top of `3e30c61` produced one `import.external_texture_missing` blocker for all three paths, then restoration returned to zero blockers. | | Packaged acceptance | Deferred | Explicitly deferred by project-owner direction; no packaged result is claimed. | ## Native Acceptance The exact debug binary built from `3e30c61` was launched as `target/debug/editor --project .` under native Hyprland Wayland. | Workflow | Result | Evidence | |----------|--------|----------| | First model-folder visit | Pass | The painted-chair model rendered on the first visit without manual thumbnail regeneration; the first offscreen PBR capture remained active through render-pipeline warmup. | | Deliberately normalized chair | Pass | Selecting the committed Authoring Override chair showed one `3 missing \| override` dependency state and all three paths. Its mesh preview rendered neutrally, while source-material and missing-texture subassets settled to terminal warning icons instead of indefinite spinners. | | Runtime log | Pass | The exact committed run emitted no stdout/stderr output, including no `bevy_asset`, `bevy_ufbx`, or path-not-found errors, and exited with code 0. | | Checkout stability | Pass | Native startup, model browsing, thumbnail generation, and exit left `git status --short` empty. | | Controlled broken fixture | Pass | On top of `3e30c61`, only the two chair `material_policy` fields were changed to `SourceMaterials`. The editor showed `Source Materials`, one red `3 missing` state, and terminal warning subassets. No asset/FBX/path error appeared; only two unrelated egui multi-pass layout warnings occurred at startup. | | Fixture restoration | Pass | The two policy fields were restored to Authoring Override, `git status --short` returned empty, and `validate-levels` returned to zero blockers. | ## Native Evidence ![Authoring Override chair with a first-pass mesh thumbnail, terminal subasset warnings, and one visible dependency state](https://git.spacetrainclubhouse.com/attachments/a66b1844-2d17-4975-ba6e-1c0e00a02709) - Gitea attachment asset 43: `blacksite-issue58-chair-normalized-3e30c61.png`, 1426x3384 RGB PNG, 1,802,863 bytes. - SHA-256: `e492082f7eb3314bed6c97d424bc2281b125849552997f12931013a8e50630f2`. ![Controlled Source Materials fixture with three missing dependencies and terminal warning subassets](https://git.spacetrainclubhouse.com/attachments/a64cd69b-0fe7-4dc8-9f24-a333e018a682) - Gitea attachment asset 44: `blacksite-issue58-chair-broken-source-materials-3e30c61.png`, 1426x3384 RGB PNG, 2,042,528 bytes. - SHA-256: `759297276287a05bf678ea72e26159d5cb4613d917db447a1cbc1efa562fc831`. Both images are ordinary Gitea issue attachments. This record does not use repository raw or Git LFS pointer URLs. A direct header check returned HTTP 200, `Content-Type: image/png`, inline content disposition, and the recorded byte length for each attachment. ## Release Use The #58 source and native feature-level acceptance record is complete. A future production candidate must rerun representative sibling-folder and `.fbm` imports, the deliberate override case, and the broken Source Materials case from the exact nominated commit. This record does not nominate a candidate or establish production readiness.