6.6 KiB
| id | ticket | title | status | created | accepted | agenda | plans | tags | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DEC-0005 | pbs-game-facing-asset-refs-and-call-result-discard | PBS Asset Address Surface and Backend-Lowered Addressable Resolution | accepted | 2026-03-27 | 2026-03-27 | AGD-0006 |
|
|
Context
PBS precisava fechar a superfície author-facing de referência a assets depois que DSC-0008 fixou a base low-level em LowAssets e no contrato runtime asset_id + slot.
O ponto restante já não era o ABI low-level.
O ponto restante era como a autoria em PBS referencia assets de forma ergonômica sem reintroduzir lookup tardio por asset_name, sem acoplar o frontend diretamente ao packer, e sem mover para o frontend a ownership do lowering final.
O estado aceito desta discussão também reconhece que:
- o packer continua sendo a autoridade operacional do conjunto de assets;
- o backend do compiler expõe ao frontend apenas uma surface derivada, não o
PackerRuntimeSnapshotbruto; - o backend permanece owner da validação final do valor concreto e do lowering
address -> asset_id.
Decision
PBS SHALL adotar uma superfície author-facing baseada em Addressable e em addresses canônicos derivados do path relativo do asset root dentro de assets/.
O shape canônico da autoria PBS SHALL seguir uma árvore hierárquica:
assetscomo namespace raiz;- namespaces intermediários para prefixos estruturais;
- folhas terminais representando assets reais como valores
Addressable.
O address simbólico SHALL ser derivado do path relativo do asset root e SHALL substituir asset_name como identidade operacional de referência para compile-time asset lookup.
O compiler backend SHALL expor ao frontend uma FESurfaceContext derivada da surface operacional do backend.
Para v1, essa FESurfaceContext SHALL carregar apenas:
List<Addressable>
em que cada entrada Addressable contém:
addressasset_id
O frontend PBS MAY usar um tipo fake/public homônimo Addressable como surface editorial e de semântica local.
Esse tipo frontend-owned MUST NOT transferir ao frontend a responsabilidade de validação final ou de lowering operacional.
O backend SHALL continuar responsável por:
- validar o valor concreto referenciado no programa;
- resolver
address -> asset_id; - realizar o lowering final para o contrato low-level já fixado em
LowAssets.
PBS asset-facing APIs SHOULD permanecer simbólicas na surface pública.
Quando uma chamada exigir lowering asset-aware, o contrato host-backed SHALL carregar metadata reservada de lowering, e o backend SHALL usar essa metadata para reescrever a chamada para a forma operacional em asset_id.
PBS MUST NOT consultar o packer diretamente a partir do frontend para descobrir assets visíveis.
PBS MUST NOT tratar asset como superfície de addressing de membros internos carregados em runtime.
O contrato de members expostos por bank SHALL permanecer separado da política de asset references.
Asset-facing references SHOULD be resolved at compile time whenever possible. For the current policy, no runtime-dynamic exception is required.
Rationale
Essa decisão preserva três fronteiras importantes ao mesmo tempo:
- ergonomia de autoria no source;
- autoridade operacional no backend;
- lowering final alinhado ao runtime já consolidado.
Ela evita o pior dos dois extremos:
- um frontend cego que não consegue oferecer semântica/tooling razoáveis;
- ou um frontend acoplado ao packer e responsável por decisões que pertencem ao backend.
O uso de Addressable como nome em ambos os lados é aceitável porque:
- no backend, ele representa a entrada da
FESurfaceContext; - no PBS, ele representa a surface editorial/fake type consumida pelo frontend.
O nome é homônimo, mas a ownership continua explícita:
- a surface chega do backend;
- a validação final e o lowering permanecem no backend.
Technical Specification
1. Canonical Authoring Surface
- PBS SHALL treat
assetsas a compile-time hierarchical namespace root. - A terminal asset root SHALL map to a terminal
Addressableleaf. - Intermediate namespace nodes MUST NOT be treated as terminal assets.
- A terminal asset path MUST NOT also act as a namespace prefix for descendant assets.
2. Canonical Address Identity
- The canonical symbolic identity SHALL be the normalized address derived from the asset root path under
assets/. asset_nameMUST NOT remain the operational compile-time identity for asset lookup.- Rename or move operations MAY change the canonical address and thereby invalidate compile-time references.
3. Backend-To-Frontend Surface Contract
- The backend SHALL expose a
FESurfaceContextto the frontend. - The v1 asset slice of that context SHALL be
List<Addressable(address, asset_id)>. - The frontend MAY use this surface for parsing-adjacent semantics, typing, diagnostics, and tooling.
- The frontend MUST NOT be treated as the canonical resolver of operational asset identity.
4. Lowering Ownership
- Asset-aware lowering metadata SHALL be carried on the host-backed declaration surface.
- The backend SHALL validate the referenced
Addressablevalue against the backend-owned surface. - The backend SHALL lower the symbolic asset reference to the runtime-facing
asset_id. - The resulting low-level call SHALL target the
LowAssetscontract already fixed byDEC-0004.
5. Scope Boundary
This decision covers:
- symbolic asset references in PBS source;
- the minimal backend-to-frontend surface contract for assets;
- backend ownership of final validation and lowering.
This decision does NOT cover:
- bank-internal member addressing;
- richer future
FESurfaceContextstructures beyond assets; - suppression or editorial warning policy for rename fragility;
- the low-level
LowAssetsABI itself, already fixed elsewhere.
Constraints
- The frontend MUST NOT query packer services directly for asset discovery.
- The backend MUST NOT expose the raw
PackerRuntimeSnapshotas the frontend contract. - The backend-to-frontend contract MUST remain small and explicitly extensible.
- The source-level
Addressablesurface MUST preserve the backend as owner of executable semantics. - Any future richer asset APIs MUST still lower into backend-resolved
asset_idbefore the finalLowAssetshost call.
Revision Log
- 2026-03-27: Initial accepted decision from AGD-0006.
- 2026-03-27: Locked
FESurfaceContextv1 asset shape toList<Addressable(address, asset_id)>. - 2026-03-27: Locked backend ownership of final
Addressablevalidation and lowering.