# Bank Composition Section Shell Decision Status: Decided Cycle: 2026-03 Domain Owner: `docs/studio` Cross-Domain Impact: `docs/packer` ## Context The `Bank Composition` area needs a visible section shell inside `Asset Details` before behavior and persistence are wired. The section should not invent a parallel editing model. It needs to align with the existing `Asset Details` section rhythm, especially `Runtime Contract`. The DTO projection boundary and the first-wave component direction were already closed in: - [`Bank Composition Details DTO Projection Decision.md`](./Bank%20Composition%20Details%20DTO%20Projection%20Decision.md) - [`Bank Composition Base Components Decision.md`](./Bank%20Composition%20Base%20Components%20Decision.md) This decision closes the shell direction discussed in: - [`Agenda-03-Asset-Bank-Composition-Section-Shell.md`](../agendas/Agenda-03-Asset-Bank-Composition-Section-Shell.md) ## Decision Create the `Bank Composition` section shell early, before full behavior is implemented. The shell contract is: 1. `Bank Composition` is a `VBox` section inside `Asset Details`; 2. the section shell should mirror `Runtime Contract` as closely as practical at the JavaFX composition level; 3. the section should align with the existing `FormSession` staged-editing pattern; 4. the section header and action cluster must support `change`, `apply`, `reset`, and `cancel`; 5. the body layout must reserve the dual-list region on the left and the capacity-meter region on the right; 6. outside `change` mode, the section should render the current persisted state as read-only; 7. before middleware wiring exists, the section body should still render disabled or read-only internals rather than an empty placeholder. ## Justification This keeps the editing model of `Asset Details` coherent. The developer should not need to learn one staged-edit contract for `Runtime Contract` and another for `Bank Composition`. Using the same shell and `FormSession` rhythm lowers implementation risk and reduces UI inconsistency. Rendering the current persisted state in read-only mode is also the better default. It teaches the surface, shows that data exists, and avoids making the section look unfinished or absent whenever editing is not active. ## Invariants and Constraints The following constraints now apply: 1. `Bank Composition` must exist as a real section shell before middleware behavior is complete; 2. the shell must follow the same staged-edit interaction model already used by `Runtime Contract`; 3. `FormSession` is part of the expected section lifecycle; 4. the section must not collapse into a blank placeholder when behavior is still incomplete; 5. the shell layout must already reflect the intended dual-list plus capacity-meter structure. ## Explicit Non-Decisions This decision does not yet define: - the middleware/controller contract; - the `workspaceBus` event contract; - the exact disabled/read-only visuals of the early shell; - apply persistence behavior; - family-specific meter semantics beyond the already agreed general direction. ## Propagation Targets - Studio agendas: [`Agenda-04-Asset-Bank-Composition-Middleware-and-Staged-Editing.md`](../agendas/Agenda-04-Asset-Bank-Composition-Middleware-and-Staged-Editing.md) [`Agenda-05-Asset-Bank-Composition-WorkspaceBus-Interaction.md`](../agendas/Agenda-05-Asset-Bank-Composition-WorkspaceBus-Interaction.md) [`Agenda-06-Asset-Bank-Composition-Persistence-and-Snapshot-Propagation.md`](../agendas/Agenda-06-Asset-Bank-Composition-Persistence-and-Snapshot-Propagation.md) - Studio specs: [`4. Assets Workspace Specification.md`](../specs/4.%20Assets%20Workspace%20Specification.md) - Studio code: `AssetDetailsControl`, the future `Bank Composition` section control, and any `FormSession` integration needed for staged editing ## Validation Notes Examples implied by this decision: - the section can appear in the details view even before middleware logic exists; - the shell can show current selection state in read-only mode when the user has not entered `change`; - the same section-level action rhythm used by `Runtime Contract` should apply to `Bank Composition`.