--- id: LSN-0002 ticket: studio-docs-import title: Bank composition editor legacy lesson created: 2026-03-26 tags: - studio - legacy-import - bank-composition - staged-editing --- ## Context Legacy import from `docs/studio/learn/bank-composition-editor.md`. This lesson captures the first-wave `Bank Composition` model as a didactic Studio pattern inside `Asset Details`, with direct relevance to `docs/studio/specs/4. Assets Workspace Specification.md` and packer-facing integration boundaries. ## Key Decisions ### Bank composition should use a Studio DTO boundary and staged session coordinator **What:** `Bank Composition` should operate through Studio-owned DTOs, intentionally dumb visual components, one section-scoped coordinator built around `StudioFormSession`, minimal public workspace-bus notifications, and a persistence path that goes through packer rather than direct Studio writes. **Why:** Direct binding to raw packer/runtime shapes, rule-heavy generic controls, and direct `asset.json` writes would collapse family-specific rules into the wrong layer and duplicate authority that belongs to packer. **Trade-offs:** The section needs a dedicated coordinator and DTO projection layer, but that cost keeps component boundaries honest and makes family-specific capacity and transfer semantics easier to control. ## Patterns and Algorithms - Keep `available` and `selected` state in Studio-owned DTOs rather than raw packer objects. - Land the section shell early and follow the existing staged-edit rhythm: `change`, `apply`, `reset`, `cancel`. - Keep `StudioDualListView` and `StudioAssetCapacityMeter` state-driven rather than rule-driven. - Let the section-scoped coordinator own draft lifecycle, transfer/reorder effects, blockers, hints, and apply handling. - Submit ordered selected files to packer, then rebind from refreshed persisted state after apply. ## Pitfalls - Binding the section UI directly to raw snapshot rows or manifest shape. - Hiding bank-family rules inside the dual list or capacity meter. - Creating a second staged-edit model parallel to `StudioFormSession`. - Turning every local action into a public workspace-bus event. - Writing `asset.json` directly from Studio. ## Takeaways - The lasting lesson is not the specific first-wave editor controls; it is the ownership boundary between projection, orchestration, dumb components, and packer persistence. - Section-scoped coordinators are the right place for family-specific editing semantics in Studio. - Legacy source attribution: `docs/studio/learn/bank-composition-editor.md`.