4.3 KiB
Decision 013 - Asset Codec NONE vs RAW
Status
Accepted
Contexto
O runtime ja fechou o contrato de tile bank v1 com:
- layout normativo definido por
bank_type+ metadata do proprio bank; - payload serializado que pode diferir da forma residente;
- decode especifico do bank antes da materializacao em memoria.
Mesmo assim, o campo codec continua publicado como RAW em specs e codigo.
Isso gera ambiguidade semantica porque RAW pode sugerir:
- ausencia de compressao;
- ou bytes ja prontos para consumo direto.
Essa segunda leitura conflita com o modelo que o runtime quer preservar:
- layout pertence ao contrato do bank;
codecdeve representar a camada generica de transformacao do payload, sem substituir o contrato especifico de formato/layout de banks especializados.
Decisao
O valor canonico para ausencia de codec adicional passa a ser NONE.
Regras da decisao:
codecpassa a significar somente:- pipeline generico de transformacao do payload; e/ou
- transformacao de transporte/materializacao que nao pertence ao contrato especifico de um
bank_type.
- O layout serializado de um asset continua pertencendo ao contrato normativo do
bank_type, nao ao valor decodec. TILESv1 deve migrar decodec = RAWparacodec = NONE.SOUNDSv1 tambem deve migrar decodec = RAWparacodec = NONE, para manter semantica uniforme de assets sem codec adicional.- Durante uma janela curta de transicao, o runtime pode aceitar
RAWcomo sinonimo legado deNONE. - A especificacao publicada deve tratar
NONEcomo valor canonico eRAWcomo legado/deprecated durante a migracao.
Rationale
NONE comunica melhor a ausencia de codec adicional do que RAW.
Isso importa porque o runtime ja distingue com clareza:
- bytes de transporte em
assets.pa; - decode normativo do bank quando o bank ja define seu proprio formato;
- objeto residente em memoria.
Se codec continuar com nome que sugere "dados crus", ele enfraquece exatamente a separacao arquitetural que o modelo de assets quer proteger.
Ao mesmo tempo, codec nao deve ser reduzido conceitualmente a "compressao apenas".
Para banks especializados como TILES e SOUNDS, o contrato principal de formato/layout ja vive no proprio bank, entao codec tende a ficar restrito a uma camada adicional ou mesmo ausente.
Para banks mais genericos, como um futuro BLOB, codec pode desempenhar papel mais abrangente e carregar um pipeline generico de formato + transformacao + compactacao.
A opcao por uma compatibilidade curta evita uma segunda troca brusca no ecossistema, mas sem cristalizar dupla semantica por tempo indeterminado.
Invariantes / Contrato
codecnao define layout especifico debank_type.codecdefine apenas a camada generica de transformacao aplicavel ao payload.codec = NONEsignifica ausencia de codec generico adicional.codec = NONEnao significa ausencia de decode do bank.bank_type+ metadata normativa continuam definindo o layout serializado e a reconstrucao do asset.RAW, quando aceito durante a transicao, deve ser tratado como alias legado deNONE, nao como semantica diferente.- Novo material normativo nao deve publicar
RAWcomo valor canonico.
Impactos
- Specs:
docs/runtime/specs/15-asset-management.mddeve trocar o valor canonico paraNONEe explicitar a semantica de transicao.
- Runtime:
- o loader deve aceitar
NONEcomo valor principal; - durante a migracao, pode aceitar
RAWcomo alias legado.
- o loader deve aceitar
- Modelo de assets:
codeccontinua disponivel para desempenhar papel mais abrangente em banks genericos futuros, comoBLOB.
- Packer:
- deve publicar
NONEcomo valor canonico no mesmo ciclo de propagacao.
- deve publicar
- Tooling e fixtures:
- testes, exemplos e dados sinteticos devem migrar para
NONE.
- testes, exemplos e dados sinteticos devem migrar para
- Learn:
- guias pedagogicos devem refletir que
codecpertence ao eixo de compressao/transporte, nao ao layout do bank.
- guias pedagogicos devem refletir que
Referencias
docs/runtime/specs/15-asset-management.mddocs/runtime/specs/04-gfx-peripheral.md- agenda source:
023-asset-codec-none-vs-raw
Propagacao Necessaria
- Abrir PR de propagacao para:
- specs;
- runtime;
- testes/fixtures;
- packer.
- Publicar
NONEcomo canonico e marcarRAWcomo legado durante a janela curta de transicao. - Encerrar a compatibilidade com
RAWapos a migracao coordenada do runtime e do packer.