2.6 KiB
| id | ticket | title | created | tags | ||||
|---|---|---|---|---|---|---|---|---|
| LSN-0002 | studio-docs-import | Bank composition editor legacy lesson | 2026-03-26 |
|
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<BankCompositionDraft>, 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
availableandselectedstate 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<T>andStudioAssetCapacityMeterstate-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.jsondirectly 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.