3.0 KiB
3.0 KiB
014 Tile Bank Loader Packed Nibbles and Palette Boundary
Briefing
O codigo do runtime hoje ainda decodifica tile bank como:
1 bytepor pixel indexado;2048bytes fixos de paleta;- validacao efetiva de
palette_idem0..63.
Se o contrato v1 sera u4 packed + RGB565 u16, o loader e os pontos de validacao do runtime precisam ser corrigidos antes de seguir com o packer-side materialization.
Decisions de Origem
013-tile-bank-runtime-contract-alignment.mddocs/packer/decisions/Pack Wizard Pack Execution Semantics Decision.md
Alvo
Atualizar o codigo do runtime para consumir tile bank v1 como:
- indices de pixel
u4packed no payload serializado; - paletas
RGB565 (u16 little-endian); 64paletas por bank no primeiro wave;- representacao expandida em memoria para
Vec<u8>somente apos decode; - validacao coerente de
palette_idno ABI/runtime.
Escopo
- atualizar decode de
tile bankemprometeu-drivers/src/asset.rs - revisar comentarios e invariantes em
prometeu-hal/src/tile_bank.rs - revisar pontos de validacao e range de
palette_idno runtime path - ajustar testes existentes do runtime que assumem payload
u8por pixel
Fora de Escopo
- introduzir compressao para
tile bank - ampliar
palette_countpara256 - mudar o modelo de
TileBankpara armazenar nibbles packed em memoria - mudar o contrato de
sound bank - definir ou implementar
tilemap bank
Plano de Execucao
- Alterar o decode do payload de
tile bankpara calcular o tamanho esperado de indices como(width * height + 1) / 2. - Implementar unpack deterministico de nibbles para a representacao em memoria
Vec<u8>. - Preservar a leitura das paletas como
u16 little-endian. - Tornar explicita a quantidade de paletas suportadas em v1 no codigo, evitando magic numbers soltos.
- Revisar comentarios/documentacao inline em
TileBankpara diferenciar:- payload serializado
- representacao expandida em memoria
- Ajustar testes para cobrir:
- unpack correto de nibbles
- transparencias (
0) - limites de paleta
- rejeicao de buffer curto
Criterios de Aceite
- o loader de
tile banknao assume mais1 bytepor pixel no payload serializado - o runtime reconstrui corretamente
pixel_indices: Vec<u8>a partir de nibbles packed - o bloco de paletas continua sendo lido como
RGB565 u16 little-endian - o range efetivo de
palette_idfica coerente com o contrato v1 de64paletas - os testes do runtime cobrem o novo layout e falhas de tamanho insuficiente
Tests / Validacao
- testes unitarios do decode de
tile bank - testes de roundtrip do loader usando payload sintetico
- validacao de compatibilidade com o contrato normativo atualizado em
docs/runtime/specs
Riscos
- unpack incorreto de nibbles gerar corrupcao visual silenciosa
- confusao entre
decoded_sizelogico e tamanho serializado do payload - deixar o codigo parcialmente alinhado com a spec, mas com ranges de ABI ainda antigos ou contraditorios