# PR-10a Bank Composition Details DTO Projection Domain owner: `docs/studio` Cross-domain impact: `docs/packer` ## Briefing Introduce the Studio-owned DTO projection boundary for `Bank Composition` inside `Asset Details`. This slice converts runtime/details source data into section-facing DTOs before any new section UI or middleware is added. The goal is to land the data boundary first, so the UI work that follows does not bind directly to snapshot rows or raw `asset.json` shapes. ## Objective After this PR: - `Asset Details` has a Studio-owned DTO family for `Bank Composition`; - snapshot-derived data feeds `available` rows; - persisted selection data feeds `selected` rows; - only non-blocking files reach the `available` DTO list; - selected ordering is represented in a way that can later map to explicit persisted indexes. ## Dependencies - [`../decisions/Bank Composition Details DTO Projection Decision.md`](../decisions/Bank%20Composition%20Details%20DTO%20Projection%20Decision.md) - [`./PR-07c-asset-details-and-form-lifecycle.md`](./PR-07c-asset-details-and-form-lifecycle.md) - [`../specs/4. Assets Workspace Specification.md`](../specs/4.%20Assets%20Workspace%20Specification.md) ## Scope - add the Studio DTO family for bank-composition rows and section data - map details/snapshot source data into: - `available` - `selected` - start the DTO field set with: - `path` - `displayName` - `size` - `lastModified` - `fingerprint` - `metadata` - filter blocking files out of the `available` projection - ensure selected ordering is available to the UI as ordered row state ## Non-Goals - no new section UI yet - no dual-list component yet - no capacity meter yet - no staged-edit coordinator yet - no persistence/apply integration yet ## Execution Method 1. Introduce the DTO types for bank-composition details data. 2. Extend the details projection path to populate `available` and `selected`. 3. Filter blocking files before DTO emission. 4. Preserve selected ordering in the section-facing projection. 5. Add regression tests around DTO mapping and filtering. ## Acceptance Criteria - `Asset Details` can provide Studio-owned `Bank Composition` DTOs without exposing raw packer internals to the section - `available` rows come from current runtime/details data - blocking files do not appear in `available` - `selected` rows are available as ordered data - the new DTO projection is ready for subsequent section and component slices ## Validation - unit tests for DTO mapping from details/snapshot source data - unit tests for blocking-file exclusion - unit tests for selected-row ordering preservation ## Affected Artifacts - `prometeu-studio/src/main/java/p/studio/workspaces/assets/details/...` - `prometeu-studio/src/main/java/p/studio/workspaces/assets/messages/...` - tests for details projection and DTO mapping - cross-domain touchpoint: packer-facing details DTO shaping if source data is still missing