BS-JD-211 - Content workspace and import authoring refactor #59

Closed
opened 2026-07-13 16:50:43 -04:00 by Rbanh · 3 comments
Owner

Goal

Make Blacksite's Content Browser a user-organized project file manager and make imported static/skinned models first-class assets with editable, stable material defaults.

Product contract

  • Assets may live in any user-chosen folder beneath the project assets/ content root; folder names do not define asset type.
  • Import targets the current or explicit project folder and never silently sorts sources into visible type directories.
  • Imported model slots may keep source fallback, map to an existing project Material/Instance, extract an editable Material, or intentionally select the project/engine default.
  • Material precedence is: runtime MaterialPropertyBlock -> scene/prefab assignment -> model-asset default -> imported source -> project default -> built-in DefaultGrid.
  • Missing layers inherit downward; configured but broken authored references render the fallback with diagnostics.
  • Move, rename, reimport, validation, packaging, and headless processing preserve stable identity and never silently overwrite authored Materials.
  • Absolute linked assets outside the project are out of scope pending a separate portability/VFS decision.

Existing foundation

Reuse the shared Material Library (#16), exact material drops (#18), renderer slot/material foundation (#51), deterministic fingerprints (#56), and transactional FBX dependency handling (#58). Do not introduce a second catalog, material type, or renderer path.

Work breakdown

  • #60 Project content and derived-artifact contract
  • #62 Path-agnostic asset catalog, loading, validation, and packaging
  • #66 Built-in Default Grid fallback material
  • #20 Content Browser file operations and reference-safe moves
  • #61 Destination-first transactional asset import
  • #64 Static and skinned model-asset material slot mappings
  • #63 Editable imported-material extraction and per-slot import policy
  • #17 PBR texture-set auto-detection
  • #19 Live asset watcher and refresh
  • #21 Headless asset processing command
  • #53 Runtime material property blocks and promote-to-instance
  • #67 Editor asset dirty state and explicit save transactions
  • #68 Modular Editor UI Architecture and Debt Ratchet
  • #65 M2 migration and acceptance signoff

Exit condition

A representative project can organize arbitrary folders, import static and skeletal models in place, extract and assign editable Materials, use project/engine fallbacks, place and override models, apply/promote a property block, move the folder, reimport, save/reopen, validate, and package without losing UUIDs, slot mappings, scene overrides, thumbnails, authored Material edits, or visibility. Cancel/failure paths restore the exact prior state. Every issue assigned to M2 is closed before the milestone closes.

Source plan

.cursor/plans/content_workspace_and_import_authoring_2026-07-13.plan.md

## Goal Make Blacksite's Content Browser a user-organized project file manager and make imported static/skinned models first-class assets with editable, stable material defaults. ## Product contract - Assets may live in any user-chosen folder beneath the project `assets/` content root; folder names do not define asset type. - Import targets the current or explicit project folder and never silently sorts sources into visible type directories. - Imported model slots may keep source fallback, map to an existing project Material/Instance, extract an editable Material, or intentionally select the project/engine default. - Material precedence is: runtime MaterialPropertyBlock -> scene/prefab assignment -> model-asset default -> imported source -> project default -> built-in DefaultGrid. - Missing layers inherit downward; configured but broken authored references render the fallback with diagnostics. - Move, rename, reimport, validation, packaging, and headless processing preserve stable identity and never silently overwrite authored Materials. - Absolute linked assets outside the project are out of scope pending a separate portability/VFS decision. ## Existing foundation Reuse the shared Material Library (#16), exact material drops (#18), renderer slot/material foundation (#51), deterministic fingerprints (#56), and transactional FBX dependency handling (#58). Do not introduce a second catalog, material type, or renderer path. ## Work breakdown - [x] #60 Project content and derived-artifact contract - [x] #62 Path-agnostic asset catalog, loading, validation, and packaging - [x] #66 Built-in Default Grid fallback material - [x] #20 Content Browser file operations and reference-safe moves - [x] #61 Destination-first transactional asset import - [x] #64 Static and skinned model-asset material slot mappings - [x] #63 Editable imported-material extraction and per-slot import policy - [x] #17 PBR texture-set auto-detection - [x] #19 Live asset watcher and refresh - [x] #21 Headless asset processing command - [x] #53 Runtime material property blocks and promote-to-instance - [x] #67 Editor asset dirty state and explicit save transactions - [x] #68 Modular Editor UI Architecture and Debt Ratchet - [x] #65 M2 migration and acceptance signoff ## Exit condition A representative project can organize arbitrary folders, import static and skeletal models in place, extract and assign editable Materials, use project/engine fallbacks, place and override models, apply/promote a property block, move the folder, reimport, save/reopen, validate, and package without losing UUIDs, slot mappings, scene overrides, thumbnails, authored Material edits, or visibility. Cancel/failure paths restore the exact prior state. Every issue assigned to M2 is closed before the milestone closes. ## Source plan `.cursor/plans/content_workspace_and_import_authoring_2026-07-13.plan.md`
Rbanh added this to the M2 - Content workspace and asset pipeline milestone 2026-07-13 16:50:43 -04:00
Rbanh added the
roadmap:jackdaw
priority:P0
area:assets
type:epic
labels 2026-07-13 16:50:43 -04:00
Author
Owner

M2 candidate and design authority — commit cf6eaba

The complete M2 implementation is published on codex/m2-content-workspace. Consolidated acceptance: evaluation record. Pinned design authority: Penpot export index.

The export index highlights ownership explicitly: #68 owns Inspector/component/material/color geometry and responsive behavior; #67 owns live authored-document/save state; #65 owns consolidated native and candidate signoff. The current 620/420 Material boards, 760/480 Static Mesh Renderer boards, Foundation Components catalog, shared header contracts, material-state catalog, and all color-picker modes are committed alongside the implementation.

All implementation children are ready to close against this exact candidate. Closure proceeds implementation children → #67/#68 → #65 → this epic → milestone M2, with remote readback after each dependency boundary.

## M2 candidate and design authority — commit `cf6eaba` The complete M2 implementation is published on `codex/m2-content-workspace`. Consolidated acceptance: [evaluation record](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/src/commit/cf6eaba53473d2825d0109f5a18f44794af5bd48/docs/editor/evaluations/content-workspace-m2/README.md). Pinned design authority: [Penpot export index](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/src/commit/cf6eaba53473d2825d0109f5a18f44794af5bd48/docs/editor/evaluations/content-workspace-m2/penpot/README.md). The export index highlights ownership explicitly: #68 owns Inspector/component/material/color geometry and responsive behavior; #67 owns live authored-document/save state; #65 owns consolidated native and candidate signoff. The current 620/420 Material boards, 760/480 Static Mesh Renderer boards, Foundation Components catalog, shared header contracts, material-state catalog, and all color-picker modes are committed alongside the implementation. All implementation children are ready to close against this exact candidate. Closure proceeds implementation children → #67/#68 → #65 → this epic → milestone M2, with remote readback after each dependency boundary.
Rbanh closed this issue 2026-07-17 23:48:43 -04:00
Rbanh reopened this issue 2026-07-17 23:53:21 -04:00
Author
Owner

Acceptance reopened — visual proof incomplete

The prior closure was premature. Exported Penpot targets and automated geometry tests do not by themselves prove current native 1:1 conformance. Fresh implemented-UI captures were not attached beside each authoritative design target, and the latest user review identifies remaining visible Inspector work.

This item is reopened. Acceptance now requires current side-by-side design/implementation evidence for the applicable 620 px and 420 px Material layouts, shared component headers, Static Mesh Renderer compositions, material states, and color overlays. Each observed delta must be recorded and resolved before this item can return to Candidate-ready or Closed.

## Acceptance reopened — visual proof incomplete The prior closure was premature. Exported Penpot targets and automated geometry tests do not by themselves prove current native 1:1 conformance. Fresh implemented-UI captures were not attached beside each authoritative design target, and the latest user review identifies remaining visible Inspector work. This item is reopened. Acceptance now requires current side-by-side design/implementation evidence for the applicable 620 px and 420 px Material layouts, shared component headers, Static Mesh Renderer compositions, material states, and color overlays. Each observed delta must be recorded and resolved before this item can return to Candidate-ready or Closed.
Author
Owner

Epic accepted and closed — M2 candidate 634ec16

The complete content-workspace and import-authoring refactor is accepted on main at 634ec16c5e627d598aaccf130974224ba76b0e13.

  • Every implementation child in the epic checklist is closed.
  • Final migration/native/package signoff #65 is closed.
  • File-manager content organization, destination-first imports, stable catalog/runtime IDs, model material mappings/extraction, DefaultGrid/project fallback, watcher/headless processing, dirty authored documents, runtime property blocks, persistent thumbnails, and modular Penpot-led editor UI are present in the published candidate.
  • The exact commit passes architecture, full tests, strict lint, deterministic asset processing, level/sample validation, QA packaging, and documentation authority.
  • Canonical evidence: M2 evaluation and design export index.

Milestone #12 will close only after Gitea readback reports zero open assigned issues.

## Epic accepted and closed — M2 candidate `634ec16` The complete content-workspace and import-authoring refactor is accepted on [`main` at `634ec16c5e627d598aaccf130974224ba76b0e13`](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/commit/634ec16c5e627d598aaccf130974224ba76b0e13). - Every implementation child in the epic checklist is closed. - Final migration/native/package signoff #65 is closed. - File-manager content organization, destination-first imports, stable catalog/runtime IDs, model material mappings/extraction, DefaultGrid/project fallback, watcher/headless processing, dirty authored documents, runtime property blocks, persistent thumbnails, and modular Penpot-led editor UI are present in the published candidate. - The exact commit passes architecture, full tests, strict lint, deterministic asset processing, level/sample validation, QA packaging, and documentation authority. - Canonical evidence: [M2 evaluation](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/src/commit/634ec16c5e627d598aaccf130974224ba76b0e13/docs/editor/evaluations/content-workspace-m2/README.md) and [design export index](https://git.spacetrainclubhouse.com/Falling-Metal-Interactive/Blacksite/src/commit/634ec16c5e627d598aaccf130974224ba76b0e13/docs/editor/evaluations/content-workspace-m2/penpot/README.md). Milestone #12 will close only after Gitea readback reports zero open assigned issues.
Rbanh closed this issue 2026-07-22 18:13:11 -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#59
No description provided.