BS-PR-702 - Content validation, dependency manifest, and release gate #45

Closed
opened 2026-07-10 04:04:44 -04:00 by Rbanh · 3 comments
Owner

Summary

Provide one authoritative preflight that decides whether a project is safe to build and ship.

Scope

  • Build a dependency manifest from scenes, prefabs, materials, models, textures, shaders, post effects, and project settings.
  • Validate missing references, schema versions, unsupported import features, prefab/subscene cycles, invalid brushes/colliders, and platform capability requirements.
  • Classify findings as blocking errors, warnings, or informational with source paths and repair actions.
  • Expose Validate Project in editor and a headless command with machine-readable output.
  • Make release builds require a clean blocking-error result.

Acceptance criteria

  • Validation reports every referenced missing asset with its owner.
  • Headless and editor validation produce equivalent results.
  • Release packaging refuses blocking content errors.
  • Findings link to or select the owning scene actor/asset when possible.
  • Regression fixtures cover valid, missing, cyclic, and incompatible content.
## Summary Provide one authoritative preflight that decides whether a project is safe to build and ship. ## Scope - Build a dependency manifest from scenes, prefabs, materials, models, textures, shaders, post effects, and project settings. - Validate missing references, schema versions, unsupported import features, prefab/subscene cycles, invalid brushes/colliders, and platform capability requirements. - Classify findings as blocking errors, warnings, or informational with source paths and repair actions. - Expose Validate Project in editor and a headless command with machine-readable output. - Make release builds require a clean blocking-error result. ## Acceptance criteria - [x] Validation reports every referenced missing asset with its owner. - [x] Headless and editor validation produce equivalent results. - [x] Release packaging refuses blocking content errors. - [x] Findings link to or select the owning scene actor/asset when possible. - [x] Regression fixtures cover valid, missing, cyclic, and incompatible content.
Rbanh added this to the M7 - Content production and shipping milestone 2026-07-10 04:04:44 -04:00
Author
Owner

Implemented the first authoritative validation slice locally.

Evidence:

  • scene::validate_project now owns a deterministic ProjectValidationReport consumed by both editor Diagnostics and cargo validate-levels.
  • Report fields include severity, stable code, source path, owning ActorId, referenced path, message, repair action, and dependency manifest entries.
  • Editor Diagnostics exposes Validate Project and Select for live owner-attributed findings.
  • Headless supports --project <path>, --json, and nonzero exit on blocking errors.
  • Missing-model regression proves source/actor/reference attribution.
  • Current checkout: 6 dependencies, 0 findings, 0 blocking errors in text and JSON modes.
  • Strict verification passed: focused all-target clippy with warnings denied, complete scene tests (24 passed, 1 ignored migration helper), formatter, and git diff --check.

Remaining acceptance work is intentionally open: registry-wide/material-document/project-settings dependencies, unsupported/platform capability and invalid collider/brush classification, complete valid/missing/cyclic/incompatible project fixtures, and release-package enforcement through #44.

Implemented the first authoritative validation slice locally. Evidence: - `scene::validate_project` now owns a deterministic `ProjectValidationReport` consumed by both editor Diagnostics and `cargo validate-levels`. - Report fields include severity, stable code, source path, owning `ActorId`, referenced path, message, repair action, and dependency manifest entries. - Editor Diagnostics exposes **Validate Project** and **Select** for live owner-attributed findings. - Headless supports `--project <path>`, `--json`, and nonzero exit on blocking errors. - Missing-model regression proves source/actor/reference attribution. - Current checkout: `6 dependencies, 0 findings, 0 blocking errors` in text and JSON modes. - Strict verification passed: focused all-target clippy with warnings denied, complete `scene` tests (24 passed, 1 ignored migration helper), formatter, and `git diff --check`. Remaining acceptance work is intentionally open: registry-wide/material-document/project-settings dependencies, unsupported/platform capability and invalid collider/brush classification, complete valid/missing/cyclic/incompatible project fixtures, and release-package enforcement through #44.
Author
Owner

Expanded the authoritative validator to project-wide coverage.

New coverage:

  • assets/project.ron: schema/template compatibility, default scene, asset roots, duplicate capability tags, and explicit Solari fallback QA.
  • Asset registry: source assets, imported dependencies, generated manifests, duplicate/empty IDs and paths, and unsupported model formats.
  • Generated static mesh manifests: schema/asset identity, source, external dependencies, and unsupported-feature warnings.
  • Material assets, shader schemas/default textures, post-effect shaders, rendering profiles, scene-authored materials/textures/models.
  • Brush geometry diagnostics and collider dimension/static-mesh validation.

Regression matrix now directly exercises valid, owner-attributed missing, cyclic composition, and incompatible project/collider cases.

The validator exposed a genuinely broken, unreferenced metal_stool_01_2k.gltf: its 216 KB external geometry buffer was never committed and its texture URIs pointed at a nonexistent directory. The orphaned model, registry record, and generated manifest were removed; valid standalone textures remain.

Verification:

  • strict affected-crate clippy with warnings denied
  • scene: 27 passed, 1 ignored migration helper
  • editor check
  • text and JSON headless parity
  • current checkout: 30 dependencies, 1 informational finding, 0 blocking errors
  • formatter and diff checks

Four of five acceptance criteria are now complete. The remaining packaging-refusal criterion is the integration boundary with #44.

Expanded the authoritative validator to project-wide coverage. New coverage: - `assets/project.ron`: schema/template compatibility, default scene, asset roots, duplicate capability tags, and explicit Solari fallback QA. - Asset registry: source assets, imported dependencies, generated manifests, duplicate/empty IDs and paths, and unsupported model formats. - Generated static mesh manifests: schema/asset identity, source, external dependencies, and unsupported-feature warnings. - Material assets, shader schemas/default textures, post-effect shaders, rendering profiles, scene-authored materials/textures/models. - Brush geometry diagnostics and collider dimension/static-mesh validation. Regression matrix now directly exercises valid, owner-attributed missing, cyclic composition, and incompatible project/collider cases. The validator exposed a genuinely broken, unreferenced `metal_stool_01_2k.gltf`: its 216 KB external geometry buffer was never committed and its texture URIs pointed at a nonexistent directory. The orphaned model, registry record, and generated manifest were removed; valid standalone textures remain. Verification: - strict affected-crate clippy with warnings denied - `scene`: 27 passed, 1 ignored migration helper - editor check - text and JSON headless parity - current checkout: `30 dependencies, 1 informational finding, 0 blocking errors` - formatter and diff checks Four of five acceptance criteria are now complete. The remaining packaging-refusal criterion is the integration boundary with #44.
Rbanh closed this issue 2026-07-10 20:42:45 -04:00
Author
Owner

Final acceptance completed through the #44 packaging boundary.

cargo package-project invokes scene::validate_project before any Cargo build, binary lookup, output creation, or asset copy. A direct packager regression supplies an owner-attributed missing model and proves packaging fails before binary lookup with the source document and missing reference in the error.

Release package smoke evidence:

  • First cached package: 25 files written.
  • Identical second package: 25 files reused, 0 rewritten.
  • Metadata: schema/profile/Cargo profile/target/features/rendering tier/default scene/exact commit/dirty state/rustc/cargo plus BLAKE3 hashes.
  • Exclusion scan found no registry cache, trash, thumbnails, build profiles, recovery/autosave, temp/backup, or source-authoring files.
  • Exported executable retained execute permissions.
  • dist/release/blacksite launched from the package directory, stayed alive cleanly for the runtime window, and stopped normally.

All #45 acceptance criteria are now satisfied.

Final acceptance completed through the #44 packaging boundary. `cargo package-project` invokes `scene::validate_project` before any Cargo build, binary lookup, output creation, or asset copy. A direct packager regression supplies an owner-attributed missing model and proves packaging fails before binary lookup with the source document and missing reference in the error. Release package smoke evidence: - First cached package: 25 files written. - Identical second package: 25 files reused, 0 rewritten. - Metadata: schema/profile/Cargo profile/target/features/rendering tier/default scene/exact commit/dirty state/rustc/cargo plus BLAKE3 hashes. - Exclusion scan found no registry cache, trash, thumbnails, build profiles, recovery/autosave, temp/backup, or source-authoring files. - Exported executable retained execute permissions. - `dist/release/blacksite` launched from the package directory, stayed alive cleanly for the runtime window, and stopped normally. All #45 acceptance criteria are now satisfied.
Sign in to join this conversation.
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Falling-Metal-Interactive/Blacksite#45
No description provided.