4.5 KiB
| id | ticket | title | status | created | completed | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PLN-0022 | frame-composer-public-syscall-surface | Plan - Composer Syscall Domain and Spec Propagation | accepted | 2026-04-17 |
|
Objective
Introduce the canonical composer.* syscall domain, define ComposerOpStatus, and propagate the new public contract through the canonical spec, ABI documentation, and ISA_CORE artifacts where affected.
Background
DEC-0015 locks the public orchestration surface on composer.*, requires ComposerOpStatus for mutating composer-domain calls, and requires propagation beyond code into canonical spec, ABI-facing documentation, and ISA_CORE where the public syscall surface is described normatively.
Scope
Included
- add the
composersyscall domain and ids - define
ComposerOpStatus - remove
gfx.set_sprite(...)from the public ABI contract - update canonical spec documentation for the new public surface
- update ABI-facing documentation and
ISA_COREwherever the public syscall contract is described
Excluded
- runtime dispatch implementation
- cartridge and stress program migration
- final repository-wide CI execution
Execution Steps
Step 1 - Define the public composer syscall contract
What: Add the new canonical public syscall surface to the HAL syscall contract.
How:
- Extend the syscall enum, registry, metadata, and resolver with a new
composerdomain. - Allocate explicit syscall ids for:
composer.bind_scenecomposer.unbind_scenecomposer.set_cameracomposer.emit_sprite
- Remove
gfx.set_spritefrom the public syscall contract and registry. - Keep syscall metadata explicit for arg/ret slots and capability requirements.
File(s):
crates/console/prometeu-hal/src/syscalls.rscrates/console/prometeu-hal/src/syscalls/domains/*crates/console/prometeu-hal/src/syscalls/registry.rscrates/console/prometeu-hal/src/syscalls/resolver.rs
Step 2 - Introduce ComposerOpStatus
What: Create the status family for composer-domain mutating operations.
How:
- Define a
ComposerOpStatustype in HAL with explicit operational states needed by:- scene binding
- scene unbinding
- sprite emission
- Ensure the enum is semantically composer-domain specific rather than a rename wrapper around
GfxOpStatus. - Update public API references so composer syscalls return
ComposerOpStatuswhere required byDEC-0015.
File(s):
crates/console/prometeu-hal/src/*- any shared status exports used by runtime/VM code
Step 3 - Propagate the contract into spec, ABI docs, and ISA_CORE
What:
Update normative documentation so the public contract no longer describes legacy gfx.set_sprite.
How:
- Identify canonical spec files that describe VM graphics/composition syscalls.
- Replace public references to legacy sprite orchestration with
composer.*. - Update ABI-facing docs to pin:
- namespace
- names
- arg order
- return semantics
- Update
ISA_COREif and where it references the affected syscall surface. - Keep published spec content in English per repository policy.
File(s):
- canonical spec location(s)
- ABI contract documentation
ISA_COREartifact(s) if affected
Test Requirements
Unit Tests
- syscall registry tests pin the new
composer.*entries and reject removed legacy identities ComposerOpStatusvalues are pinned where public return semantics are asserted
Integration Tests
- declared syscall resolution accepts
composer.*declarations and rejects removedgfx.set_sprite
Manual Verification
- inspect canonical spec, ABI docs, and
ISA_COREreferences to confirm the public contract matchesDEC-0015
Acceptance Criteria
- The public syscall registry exposes
composer.bind_scene,composer.unbind_scene,composer.set_camera, andcomposer.emit_sprite. ComposerOpStatusexists as the canonical status family for composer-domain mutating syscalls.gfx.set_spriteis removed from the public ABI contract.- Canonical spec documentation is updated to describe
composer.*. - ABI-facing docs and
ISA_COREare updated wherever the affected public surface is documented.
Dependencies
- Source decision:
DEC-0015
Risks
- Missing a normative doc location would leave the code and published contract divergent.
- Reusing
GfxOpStatussemantics by accident would weaken the service-boundary separation required byDEC-0015. - Removing the legacy syscall contract incompletely could leave resolver or ABI ambiguity behind.