# Asset Bank Composition WorkspaceBus Interaction Agenda Status: Open Domain Owner: `docs/studio` Cross-Domain Impact: `docs/packer` ## Problem The `Bank Composition` section should use `workspaceBus` for coordination, but the first-wave event contract should stay small and be designed together with the middleware/controller. This agenda exists to close the first minimal event surface without inventing an oversized bus protocol too early. ## Context The current baseline is already known: - events and middleware should evolve together; - the first event baseline can stay very small; - capacity changes are naturally expressed as percentage deltas or level changes in the `0..1` range; - the transfer list and meter should be consumers of orchestrated state, not independent sources of product rules. ## Options 1. Define a broad event taxonomy upfront. 2. Define only the minimum events needed for the first staged-edit interaction loop. 3. Avoid `workspaceBus` and wire components directly. ## Tradeoffs 1. A broad taxonomy is easy to regret and hard to prune once code lands. 2. A minimal contract matches the current incremental direction and keeps future changes cheap. 3. Direct wiring would fight the current workspace architecture and reduce observability of section state changes. ## Recommendation Define a minimal first-wave `workspaceBus` contract together with the middleware/controller. Baseline direction: - begin with the smallest useful set of section-local events; - include capacity increase/decrease semantics in the `0..1` range only as needed; - avoid encoding family-specific product rules directly into bus event types. ### First-Wave Event Baseline The first wave should keep user actions local to the middleware/controller whenever possible. That means the following actions do not need to become public `workspaceBus` commands in the first implementation: - `beginEdit` - `moveToSelected` - `moveToAvailable` - `moveUp` - `moveDown` - `reset` - `cancel` - `apply` The middleware/controller should receive those actions locally, recalculate section state, and publish only the state transitions or lifecycle notifications that matter outside the section. The first public `workspaceBus` notifications should stay minimal: - `BankCompositionDraftChanged` - `BankCompositionCapacityChanged` - `BankCompositionApplyRequested` - `BankCompositionApplied` - `BankCompositionApplyFailed` Capacity notifications should use absolute progress in the `0..1` range rather than deltas. A practical first-wave shape for capacity notifications is: - `progress` - `severity` - `blocked` If internal increase/decrease semantics are useful later, they can remain local implementation detail rather than part of the initial public bus contract. ## Open Questions No open questions remain in this agenda wave. ### Resolved In This Agenda Wave The following points are now closed: 1. First-wave user actions should stay local to the middleware/controller rather than becoming public bus commands. 2. The first public `workspaceBus` contract should be notification-oriented. 3. Capacity notifications should use absolute `0..1` progress rather than deltas. 4. A minimal first-wave bus surface is enough: draft change, capacity change, apply requested, apply success, and apply failure. ## Next Suggested Step Turn this into a `decision` that fixes the minimal first-wave `workspaceBus` contract for `Bank Composition`.