prometeu-runtime/discussion/workflow/plans/PLN-0102-introduce-game2d-frame-composer-service.md

83 lines
2.4 KiB
Markdown

---
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.