BS-PR-701 - Build and package profiles with one-click game export #44

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

Summary

Turn the current workspace into reproducible playable builds without requiring editor users to know Cargo internals.

Scope

  • Project build profiles for development, QA, and release with target platform, feature set, rendering tier, default scene, and output directory.
  • Editor Build, Build and Run, and Reveal Output commands backed by a non-blocking job queue.
  • Package required assets and project settings while excluding editor-only files, caches, recovery data, and source-only content.
  • Stream compiler/packager progress and actionable failures into a Build panel.
  • Record exact toolchain, commit, content manifest, and settings in build metadata.

Acceptance criteria

  • A clean checkout can produce and launch a playable development package from the editor.
  • Repeated builds with unchanged content reuse safe intermediates.
  • Missing tools/assets fail before packaging with clear remediation.
  • Editor-only helpers and recovery files never enter packages.
  • Headless CI can invoke the same build profile.
## Summary Turn the current workspace into reproducible playable builds without requiring editor users to know Cargo internals. ## Scope - Project build profiles for development, QA, and release with target platform, feature set, rendering tier, default scene, and output directory. - Editor Build, Build and Run, and Reveal Output commands backed by a non-blocking job queue. - Package required assets and project settings while excluding editor-only files, caches, recovery data, and source-only content. - Stream compiler/packager progress and actionable failures into a Build panel. - Record exact toolchain, commit, content manifest, and settings in build metadata. ## Acceptance criteria - [x] A clean checkout can produce and launch a playable development package from the editor. - [x] Repeated builds with unchanged content reuse safe intermediates. - [x] Missing tools/assets fail before packaging with clear remediation. - [x] Editor-only helpers and recovery files never enter packages. - [x] Headless CI can invoke the same build profile.
Rbanh added this to the M7 - Content production and shipping milestone 2026-07-10 04:04:44 -04:00
Rbanh added the
type:feature
priority:P0
roadmap:production
area:build-release
labels 2026-07-10 04:04:44 -04:00
Author
Owner

Implemented the shared build/profile/package foundation and editor workflow locally.

Headless/package:

  • Versioned development, qa, and release RON profiles.
  • Dedicated compact optimized package Cargo profiles; normal editor iteration remains on dev.
  • cargo package-project --profile <name> runs authoritative project validation before build/output.
  • Deterministic runtime inclusion, stale-file pruning, byte-identical reuse, preserved executable permissions.
  • Excludes registry cache, trash, thumbnails, build profiles, recovery/autosave, temp/backup, and source-authoring formats.
  • Metadata records exact commit + dirty state, Rust/Cargo, target, features, rendering tier/default scene, executable, and sorted BLAKE3 content manifest.
  • Output paths and asset references reject lexical and symlink escapes.

Editor:

  • New dockable Build panel and top-level Build menu.
  • Profile selection, live stdout/stderr, background execution, Build, Build and Run, Cancel, Reveal Output.
  • Cancellation terminates the entire compiler process group; regression completes in 0.15s.
  • Live UI QA confirmed the panel opens below the viewport, remains responsive, and streams cold package compilation.

Evidence:

  • Validation-gate package regression fails an owner-attributed missing asset before binary lookup/output creation.
  • First cached release package wrote 25 files; identical second package reused all 25.
  • Exclusion scan was clean; release package launched from dist/release and stayed alive during smoke.
  • Editor-produced development output exists at dist/development, is executable, is 136 MB, and contains 25 metadata entries.
  • Strict clippy, project validation, package tests (4), build-panel tests (2), symlink safety, formatter, and diff checks pass.

Four acceptance criteria are complete. The final box remains open because the current GUI execution quota blocked launching the newly editor-produced development binary; the equivalent release export already passed runtime smoke, but that is not being substituted for the explicit development-package acceptance wording.

Implemented the shared build/profile/package foundation and editor workflow locally. Headless/package: - Versioned `development`, `qa`, and `release` RON profiles. - Dedicated compact optimized package Cargo profiles; normal editor iteration remains on `dev`. - `cargo package-project --profile <name>` runs authoritative project validation before build/output. - Deterministic runtime inclusion, stale-file pruning, byte-identical reuse, preserved executable permissions. - Excludes registry cache, trash, thumbnails, build profiles, recovery/autosave, temp/backup, and source-authoring formats. - Metadata records exact commit + dirty state, Rust/Cargo, target, features, rendering tier/default scene, executable, and sorted BLAKE3 content manifest. - Output paths and asset references reject lexical and symlink escapes. Editor: - New dockable Build panel and top-level Build menu. - Profile selection, live stdout/stderr, background execution, Build, Build and Run, Cancel, Reveal Output. - Cancellation terminates the entire compiler process group; regression completes in 0.15s. - Live UI QA confirmed the panel opens below the viewport, remains responsive, and streams cold package compilation. Evidence: - Validation-gate package regression fails an owner-attributed missing asset before binary lookup/output creation. - First cached release package wrote 25 files; identical second package reused all 25. - Exclusion scan was clean; release package launched from `dist/release` and stayed alive during smoke. - Editor-produced development output exists at `dist/development`, is executable, is 136 MB, and contains 25 metadata entries. - Strict clippy, project validation, package tests (4), build-panel tests (2), symlink safety, formatter, and diff checks pass. Four acceptance criteria are complete. The final box remains open because the current GUI execution quota blocked launching the newly editor-produced development binary; the equivalent release export already passed runtime smoke, but that is not being substituted for the explicit development-package acceptance wording.
Author
Owner

Final acceptance and hardening pass completed.

Runtime evidence:

  • The editor-produced dist/development/blacksite launched from its packaged working directory and remained alive for the full 8-second smoke window (timeout exit was the expected test stop).
  • The standalone runtime now loads the profile-selected authored assets/levels/editor_scene.scn.ron; development packaging applies Forward GI in packaged settings.
  • cargo validate-levels: 30 dependencies, 1 informational Solari fallback finding, 0 blocking errors.

Build/package evidence:

  • First post-change development export completed and published 25 manifest entries.
  • Immediate identical rebuild completed in 1.06s with 0 writes and all 25 files reused.
  • Real output is 136 MB, executable, and contains no staging/backup marker.
  • Final independent code audit found no P0-P3 blockers.

Correctness added during acceptance:

  • Cargo JSON artifact discovery, Windows QA PDB capture, supported-target enforcement, and OS/architecture launch checks.
  • Shared validator/packager runtime-inclusion policy, Git LFS detection, strict default-scene contract, non-following traversal, and unknown-newer-schema rejection.
  • OS-backed per-output locking, authenticated interrupted-build recovery, copy-based staging, atomic promotion/rollback, Windows read-only handling, and full BLAKE3 staged-content verification.
  • Editor dirty-tab guard, owned worker join, Unix TERM/KILL process-group cancellation, and Windows process-tree cancellation.

Verification:

  • Strict xtask clippy passed.
  • 23 package tests passed.
  • 37 scene tests passed (1 manual migration test ignored).
  • Editor lib check passed.
  • Focused cancellation, launcher default-level, cross-architecture launch, and 8 game startup tests passed.
  • cargo fmt --all -- --check and git diff --check passed.

All acceptance criteria are now satisfied.

Final acceptance and hardening pass completed. Runtime evidence: - The editor-produced `dist/development/blacksite` launched from its packaged working directory and remained alive for the full 8-second smoke window (timeout exit was the expected test stop). - The standalone runtime now loads the profile-selected authored `assets/levels/editor_scene.scn.ron`; development packaging applies Forward GI in packaged settings. - `cargo validate-levels`: 30 dependencies, 1 informational Solari fallback finding, 0 blocking errors. Build/package evidence: - First post-change development export completed and published 25 manifest entries. - Immediate identical rebuild completed in 1.06s with 0 writes and all 25 files reused. - Real output is 136 MB, executable, and contains no staging/backup marker. - Final independent code audit found no P0-P3 blockers. Correctness added during acceptance: - Cargo JSON artifact discovery, Windows QA PDB capture, supported-target enforcement, and OS/architecture launch checks. - Shared validator/packager runtime-inclusion policy, Git LFS detection, strict default-scene contract, non-following traversal, and unknown-newer-schema rejection. - OS-backed per-output locking, authenticated interrupted-build recovery, copy-based staging, atomic promotion/rollback, Windows read-only handling, and full BLAKE3 staged-content verification. - Editor dirty-tab guard, owned worker join, Unix TERM/KILL process-group cancellation, and Windows process-tree cancellation. Verification: - Strict xtask clippy passed. - 23 package tests passed. - 37 scene tests passed (1 manual migration test ignored). - Editor lib check passed. - Focused cancellation, launcher default-level, cross-architecture launch, and 8 game startup tests passed. - `cargo fmt --all -- --check` and `git diff --check` passed. All acceptance criteria are now satisfied.
Rbanh closed this issue 2026-07-10 22:37:58 -04:00
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#44
No description provided.