--- id: PLN-0102 ticket: real-render-worker-establishment title: Introduce Game2DFrameComposer Logical Service status: done created: 2026-06-06 completed: ref_decisions: [DEC-0032] tags: [runtime, composer, game2d, platform] --- ## Objective Introduce `Game2DFrameComposer` as the logical-side service/facade for Game2D frame preparation. ## Background `DEC-0032` states that `bind_scene`, `set_camera`, `emit_sprite`, and `close_game2d_packet` are logical frame preparation, not physical backend behavior. ## Scope ### Included - Define a `Game2DFrameComposer` facade. - Move or wrap existing `FrameComposer` behavior under logical-side naming. - Migrate composer syscalls to use the facade rather than generic hardware. ### Excluded - Do not rewrite scene cache internals. - Do not move viewport cache across threads. - Do not implement worker. ## Execution Steps ### Step 1 - Define composer facade **What:** Add `Game2DFrameComposer` trait or service contract. **How:** Include `begin_frame`, `bind_scene`, `unbind_scene`, `set_camera`, `emit_sprite`, `close_game2d_packet`, and required read checks. **File(s):** `crates/console/prometeu-hal/src/platform.rs` or composer-specific HAL module. ### Step 2 - Implement using current composer **What:** Make current local driver composer satisfy the new logical service. **How:** Reuse `FrameComposer` implementation under adapter/implementation. **File(s):** `crates/console/prometeu-drivers/src/frame_composer.rs`, `crates/console/prometeu-drivers/src/hardware.rs`. ### Step 3 - Migrate composer syscalls **What:** Dispatch composer syscalls through `Game2DFrameComposer`. **How:** Remove dependency on `HardwareBridge` methods for composer. **File(s):** `crates/console/prometeu-system/src/services/vm_runtime/dispatch.rs`. ## Test Requirements ### Unit Tests - Composer facade closes packets equivalent to previous `FrameComposer`. - Invalid scene/bank behavior remains unchanged. ### Integration Tests - Existing scene/composer runtime tests pass. ### Manual Verification - Composer syscalls no longer require `&mut dyn HardwareBridge`. ## Acceptance Criteria - [ ] `Game2DFrameComposer` exists as logical service/facade. - [ ] Composer syscalls route through it. - [ ] Existing Game2D scene rendering remains correct. ## Dependencies - `PLN-0098`. - `PLN-0101`. ## Risks - Scene cache ownership can be accidentally moved too early. Keep cache behavior local while changing the boundary.