6.5 KiB
| id | ticket | title | status | created | completed | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PLN-0053 | studio-frame-composer-syscall-and-sprite-alignment | Composer Spec and Stdlib Surface for Sprite Emission | review | 2026-04-18 |
|
Objective
Introduce the canonical @sdk:composer sprite-emission surface and remove Gfx.set_sprite from the normative stdlib/spec contract, exactly as required by DEC-0027.
Background
The runtime already moved public frame composition ownership to composer.* and removed the legacy public gfx.set_sprite path. This repository still teaches and packages sprite composition through @sdk:gfx, which creates ABI drift between runtime ownership and Studio-facing source surfaces.
DEC-0027 locks the following requirements for this wave:
@sdk:composeris the canonical Studio-side module for sprite composition.- The source shape must mirror the existing
@sdk:gfxpattern:LowComposerplus publicComposer. composer.emit_spritekeeps a rawintreturn for now.Gfx.set_spritemust be removed completely.bind_scene,unbind_scene, andset_cameraremain out of scope.
Scope
Included
- Add
stdlib/1/sdk/composer/main.pbs. - Add
stdlib/1/sdk/composer/mod.barrel. - Remove
set_spritefromstdlib/1/sdk/gfx/main.pbs. - Update stdlib/spec documentation to name
@sdk:composeras the canonical sprite-composition surface. - Document that scene/camera composer calls are deferred and not part of this wave.
Excluded
- Compiler implementation changes beyond what is necessary to consume the new stdlib files.
- Test fixture migration outside of spec/stdlib-focused assertions.
- Runtime changes in
../runtime. - Scene binding, scene unbinding, camera APIs, and scene-bank work.
Execution Steps
Step 1 - Add the reserved @sdk:composer module
What: Create the reserved stdlib module for sprite emission.
How:
Add a new sdk/composer directory that follows the established reserved-module layout. Define LowComposer.emit_sprite(...) with canonical host metadata Host(module = "composer", name = "emit_sprite", version = 1) and the canonical capability metadata. Define a public Composer.emit_sprite(...) service method that forwards to LowComposer.
File(s):
prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/stdlib/1/sdk/composer/main.pbsprometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/stdlib/1/sdk/composer/mod.barrel
Step 2 - Remove the old public sprite path from @sdk:gfx
What:
Delete the legacy set_sprite public path from the GFX stdlib module.
How:
Remove the LowGfx.set_sprite(...) host declaration, remove the Gfx.set_sprite(...) service method, and leave the remaining primitive/overlay-oriented GFX surface intact.
File(s):
prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/stdlib/1/sdk/gfx/main.pbsprometeu-compiler/frontends/prometeu-frontend-pbs/src/main/resources/stdlib/1/sdk/gfx/mod.barrelif export adjustments become necessary
Step 3 - Update PBS stdlib and host-binding specs
What:
Rewrite the normative docs so they stop teaching sprite composition through @sdk:gfx.
How:
Update the PBS specs that describe reserved stdlib modules, interface-module examples, host-binding examples, and logical stdlib mapping. Add @sdk:composer to the reserved-module inventory and update examples that currently import Gfx for host-backed illustration when those examples are used to explain sprite composition or SDK host ownership. Document that this wave covers only sprite emission, while scene/camera composer members are deferred.
File(s):
docs/specs/compiler-languages/pbs/5. Manifest, Stdlib, and SDK Resolution Specification.mddocs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.mddocs/specs/compiler-languages/pbs/8. Stdlib Environment Packaging and Loading Specification.mddocs/specs/compiler/18. Standard Library Surface Specification.md- Any additional compiler/PBS spec file whose examples currently name
Gfx.set_spriteas canonical
Step 4 - Align syntax/interface examples with the new owner
What: Remove spec examples that preserve the old mental model for sprite composition.
How:
Review interface-module and host-declaration examples in the PBS syntax/spec set. Keep gfx examples where they demonstrate primitives generically, but change any sprite-composition-oriented illustration to composer so the docs no longer imply that gfx owns frame-composition policy.
File(s):
docs/specs/compiler-languages/pbs/3. Core Syntax Specification.mddocs/specs/compiler-languages/pbs/5. Manifest, Stdlib, and SDK Resolution Specification.mddocs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.md
Test Requirements
Unit Tests
- Add or update stdlib-loading tests so
@sdk:composerresolves successfully. - Add or update PBS SDK-interface tests so
LowComposerandComposer.emit_sprite(...)are part of the reserved stdlib contract.
Integration Tests
- Existing compiler/frontend integration tests that load the stdlib must pass with the new module present and the old sprite path removed.
Manual Verification
- Inspect the generated stdlib resource tree and confirm
sdk/composeris present andsdk/gfxno longer exposesset_sprite. - Read the updated spec sections and confirm they document only sprite emission for this wave and explicitly defer scene/camera composer calls.
Acceptance Criteria
@sdk:composerexists under stdlib line1withLowComposerandComposer.Composer.emit_sprite(...)uses canonical host metadata for("composer", "emit_sprite", 1).@sdk:gfxno longer exposesset_sprite.- PBS/compiler specs name
@sdk:composeras the canonical sprite-composition surface. - Specs do not claim that
bind_scene,unbind_scene, orset_cameraare part of this wave.
Dependencies
- Depends directly on
DEC-0027. - Should complete before broad compiler/test/example migration so downstream work can reference the final stdlib surface.
Risks
- Spec examples may accidentally over-generalize
composerand imply that deferred scene/camera members are already available. - Removing
set_spritefrom@sdk:gfxmay break more frontend tests than expected if hidden fixtures still import the old API. - If capability metadata or parameter shape drifts from runtime expectations, later compiler/test work will encode the wrong ABI under a new module name.