101 lines
5.9 KiB
Markdown
101 lines
5.9 KiB
Markdown
# Deterministic Imported-Asset Fingerprints Evaluation
|
|
|
|
**Date:** 2026-07-13
|
|
|
|
**Issue:** [Gitea #56](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/issues/56)
|
|
|
|
**Content-addressed implementation:** `e1b2f86a495496da83947777d332d00a15a1779d`
|
|
|
|
**Stable publication ordering:** `cbd380a9413411667a83f74b66c5a2feda5e1af7`
|
|
|
|
**Release-candidate commit:** Not nominated
|
|
|
|
**Source validation:** **Pass**
|
|
|
|
**Fresh-checkout acceptance:** **Pass**
|
|
|
|
**Native acceptance:** **Pass**
|
|
|
|
This record covers imported model, texture, and audio source identity plus the animation, static-mesh,
|
|
and registry documents derived from those sources. The permanent contract is owned by
|
|
[ADR 0043](../../../adr/0043-content-addressed-import-fingerprints.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 | Workspace and all targets completed with warnings denied. |
|
|
| `cargo test --workspace --all-targets --no-fail-fast` | Pass | All workspace targets passed; editor reported 300 passing tests, scene reported 100 passing and one ignored manual-migration test, and shared reported 99 passing tests. |
|
|
| Fingerprint regressions | Pass | Exact-byte BLAKE3 identity, same-size byte changes, mtime-only drift, legacy timestamp tolerance, stable move recovery, imported-source coverage, semantic RON equality, and read-only validation are covered. |
|
|
| `cargo validate-levels --project .` | Pass | 81 dependencies, five known nonblocking import/platform findings, zero blocking errors. |
|
|
| `cargo validate-samples --project .` | Pass | Five samples, 86 dependencies, the same five nonblocking findings, zero blocking errors. |
|
|
| Packaged acceptance | Deferred | Explicitly deferred by project-owner direction; no packaged result is claimed. |
|
|
|
|
## Fresh Checkout
|
|
|
|
The first exact-commit run at `e1b2f86` exposed one remaining nondeterministic path: native startup
|
|
discovered catalog entries in filesystem order and rewrote `assets/.index/registry.ron`. That run
|
|
failed the clean-checkout gate. Commit `cbd380a` sorts records by normalized project path before
|
|
semantic comparison and adds a discovery-order regression test.
|
|
|
|
A new detached, LFS-hydrated worktree at `cbd380a` then completed native startup, asset scan,
|
|
`validate-levels`, and `validate-samples` with an empty `git status --short`. Touching
|
|
`assets/models/RobotExpressive.glb` while the editor was live also left the worktree clean. Its
|
|
original nanosecond timestamp was restored after the test.
|
|
|
|
The following SHA-256 values were identical before startup, after startup, after the mtime-only
|
|
change, and after both validators:
|
|
|
|
| Artifact | SHA-256 |
|
|
|----------|---------|
|
|
| `assets/.index/registry.ron` | `5beb11fb708729fb024e2e671596876bcf31b3c3fd2cea51da777db1d343644e` |
|
|
| `113f74df...static_mesh.ron` | `8d93e4d49c4f1d00ea8c482e8e1981f18d7a71224847c2b9f05f153982c5e80e` |
|
|
| `3f63f359...static_mesh.ron` | `e47099d59ec4ce9dc977ba6a08ddee36f1d99c0f13d9278998f21cba72571585` |
|
|
| `b98ef565...static_mesh.ron` | `edc77d61284c1010c8811d40bd7cedebfcbd6a3d88145e54d5c1ef7dc3a0a864` |
|
|
| `113f74df...animation.ron` | `0e678584aca470b36afd14b75a950d84a87d445438ba9b0a1e3416e863dda92a` |
|
|
| `3f63f359...animation.ron` | `45d3f9e9dcc64137f40a339c84512b6aba47102f7593aa6a9344891de68c0c07` |
|
|
| `b98ef565...animation.ron` | `691eb70ff05b2a4d03f51766f4c682a4171f7c76721f453c434f8de6fd936408` |
|
|
|
|
## Native Acceptance
|
|
|
|
| Workflow | Result | Evidence |
|
|
|----------|--------|----------|
|
|
| Main checkout startup | Pass | The exact debug editor at `e1b2f86` loaded the committed scene with populated hierarchy, viewport, Inspector, and Asset Browser, then exited with code 0. |
|
|
| Imported model browser | Pass | Opening `assets/models` rendered all three model rows and thumbnails; selecting the FBX exposed its registry-backed details without destabilizing the editor. |
|
|
| Fixed fresh checkout | Pass | The exact `cbd380a` editor launched from the detached worktree, rendered the complete editor frame, preserved every artifact byte, and exited with code 0. |
|
|
| Metadata-only drift | Pass | A live source `touch` produced no registry or manifest change and no Git diff. |
|
|
|
|
## Native Evidence
|
|
|
|

|
|
|
|
- Gitea attachment asset 39: `blacksite-issue56-fresh-fixed-cbd380a.png`, 3426x1384 sRGB PNG,
|
|
1,787,700 bytes.
|
|
- SHA-256: `2748ae3de31ff97933c9793b90475ffd38d54d7e9dd5d65937b699f81c73c9bc`.
|
|
|
|

|
|
|
|
- Gitea attachment asset 40: `blacksite-issue56-models-e1b2f86.png`, 3426x1384 sRGB PNG,
|
|
1,940,210 bytes.
|
|
- SHA-256: `064c0634ebac47b52516412b022247ba8aa6f155014db8f8d3cca86850509da7`.
|
|
|
|
Both images are ordinary Gitea issue attachments. This record does not use repository raw or Git LFS
|
|
pointer URLs.
|
|
|
|
## Separate Finding
|
|
|
|
Selecting the painted-chair FBX exposed missing external texture dependencies in the committed
|
|
fixture: `painted_wooden_chair_02_diff_2k.jpg`, `painted_wooden_chair_02_nor_gl_2k.exr`, and
|
|
`painted_wooden_chair_02_rough_2k.exr`. The asset server reported six load errors because the paths
|
|
were requested more than once. This is an FBX dependency/import-fixture defect, not a deterministic
|
|
fingerprint failure, and is tracked separately in
|
|
[Gitea #58](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/issues/58).
|
|
|
|
## Release Use
|
|
|
|
The #56 source, fresh-checkout, and native feature-level acceptance record is complete. A future
|
|
production candidate must rerun the clean-checkout protocol from the exact nominated commit. This
|
|
record does not nominate a candidate or establish production readiness.
|