AssetScope
The load entry: SVG assets load through it, arriving as ready scene-graph values.
Every load reads bytes through the reader the scope is built over. compose-resources generates its Res accessor per application module, so a running game supplies Res::readBytes; a headless session supplies plain file reads or an in-memory map and builds its world the same way, AssetScope(reader).run { … }. A failure thrown by the reader propagates unchanged. Assets arrive viewBox-centered on the CGA origin; world placement is the caller's to apply — a loaded node moves like any other scene-graph value, node * versor.