7.2 KiB
Agenda - Asset Packer Runtime-Facing Contract
Contexto
Hoje o runtime ja consome uma superficie de assets relativamente clara:
asset_tablenomanifest.json;assets.pacomo blob packed de bytes frios;preloadopcional para residency inicial.
Essa superficie esta descrita em 13-cartridge.md e 15-asset-management.md, mas ainda do ponto de vista do consumidor runtime.
Falta fechar a fronteira do produtor de assets.pa.
Para o repositorio, a nomenclatura precisa ficar explicita:
shippermonta o cart distribuivel e e responsavel pelo.pmc;packerempacota somente os assets e produz a superficie que alimentaasset_table+assets.pa;compilere outros workers entram como dependencias doshipper, nao como substitutos dopacker.
Sem essa separacao, a discussao de .pmc tende a misturar container de distribuicao com contrato de bytes/metadata dos assets.
Problema
O runtime conhece assets.pa, mas o projeto ainda nao decidiu qual e a facing do packer que produz esse artefato.
Hoje nao esta fechado:
- qual e a entrada canonica do packer;
- qual e a saida normativa alem do blob cru;
- como
asset_id,asset_name,offset,size,decoded_size,codecemetadatadevem ser gerados e validados; - quais invariantes o runtime pode assumir sobre ordenacao, alinhamento, identidade e compatibilidade dos assets;
- o que pertence ao contrato do packer vs o que pertence ao
shipper.
Sem essa decisao:
assets.pacorre o risco de virar artefato acidental em vez de contrato;- o
shippernao tem base normativa para montar.pmcde forma deterministica; - specs de asset continuam descrevendo so consumo, nao producao;
- tooling pode introduzir heuristica local para ids, offsets, metadata e codecs.
Pontos Criticos
Fatos
- o runtime atual consome
asset_table+assets.pa, nao uma API do packer; AssetEntryhoje exigeasset_id,asset_name,bank_type,offset,size,decoded_size,codecemetadata;- o loader atual so carrega cart em formato de diretorio;
.pmcainda nao esta implementado; - o runtime hoje aceita apenas
RAWparaTILESeSOUNDS; - o decode atual depende de metadata especifica por bank:
TILES:tile_size,width,height;SOUNDS:sample_rateopcional, com default.
Riscos
- deixar
asset_idou ordenacao dependentes de detalhes de filesystem; - acoplar o formato interno de
assets.paao container.pmc; - permitir metadata insuficiente ou ambigua e empurrar validacao para o runtime;
- introduzir codec/versionamento sem registry ou politica de compatibilidade;
- permitir que packer e shipper dupliquem responsabilidade sobre manifest e tabela de assets.
Tradeoffs
- packer minimalista e simples agora vs contrato mais rigido e extensivel depois;
asset_idderivado automaticamente vs declarado/estavel;- blob puro com offsets vs envelope com header interno proprio;
- metadata livre em JSON vs schema normativo por
bank_typeecodec; - validacao forte no packer vs tolerancia maior no runtime.
Hipoteses
- o
shipperdeve tratarasset_table+assets.pacomo output fechado do packer, sem reinterpretar layout interno; - o packer deve produzir resultado deterministico para a mesma entrada;
- a compatibilidade futura de codecs fica melhor se a facing do packer declarar registry e schema desde o inicio.
Opcoes
Opcao 1 - Packer como gerador de blob opaco + tabela
O packer recebe fontes de asset, decide ids/layout e entrega:
assets.pa;asset_table;- eventualmente um relatorio de build nao normativo.
Vantagens:
- encaixa direto no runtime atual;
- separa bem packer de shipper;
- reduz trabalho inicial.
Desvantagens:
- pode esconder heuristicas importantes dentro do tooling;
- tende a deixar
asset_ide metadata sem contrato claro.
Opcao 2 - Packer com manifest proprio normativo
O packer recebe uma spec de entrada dedicada de assets e produz uma saida formal com:
assets.pa;asset_table;- manifesto/intermediate proprio do packer.
Vantagens:
- deixa ownership editorial mais claro;
- facilita reproducibilidade e testes de golden output;
- prepara evolucao de codecs e validadores.
Desvantagens:
- aumenta escopo antes de fechar o minimo necessario;
- corre risco de criar artefato intermediario normativo demais cedo.
Opcao 3 - Packer como biblioteca interna do shipper
O packer nao ganha fronteira propria; o shipper absorve a logica de assets e so expomos o contrato final do cart.
Vantagens:
- menos moving parts no curto prazo.
Desvantagens:
- conflita com a separacao conceitual desejada;
- embaralha discussao de
assets.pacom.pmc; - dificulta testes focados na superficie de assets.
Sugestao / Recomendacao
Fechar o packer como produtor normativo de asset_table + assets.pa, com fronteira propria e independente do shipper.
Recomendacao objetiva para avancar:
- O contrato do packer deve ser definido em torno da saida observavel consumida pelo runtime, nao em torno do
.pmc. - O
shipperdeve consumir o output do packer como artefato fechado e so cuidar de empacotar o cart final. - O v1 do packer deve assumir:
assets.pacomo blob sequencial deterministico;asset_tablecomo mapa normativo da segmentacao do blob;- registry inicial de codecs/banks suportados pelo runtime atual;
- schema minimo de metadata por combinacao
bank_type+codec.
- A decisao precisa fixar explicitamente:
- estrategia de
asset_id; - ordenacao canonica dos assets no blob;
- regras de alinhamento, se existirem;
- politica para duplicatas de nome;
- responsabilidades de validacao entre packer e runtime.
- estrategia de
Essa direcao reduz ambiguidade sem antecipar o design completo do shipper.
Perguntas em Aberto
- Qual e a entrada canonica do packer: arquivos soltos, manifesto de assets, API de biblioteca, ou combinacao?
asset_idprecisa ser estavel entre builds identicos e entre reorganizacoes de input?- O packer deve ordenar assets por declaracao, por nome, por bank, ou por politica explicita de layout?
assets.pacontinua sendo blob puro sem header proprio ou o packer deve ter envelope/versionamento interno?- Qual e o schema normativo minimo de
metadatapor tipo de asset no v1? - O v1 deve aceitar so
RAWou ja reservar namespace/registry para codecs futuros? - Quem rejeita inconsistencias de
decoded_size, metadata faltante e offset invalido: packer, shipper, runtime, ou todos em camadas diferentes? - Preload pertence ao dominio do packer, do shipper, ou apenas do cart manifest?
Criterio para Encerrar
Esta agenda pode virar decision quando houver definicao escrita de:
- fronteira formal entre
packereshipper; - input e output canonicos do packer;
- contrato normativo de producao de
asset_tableeassets.pa; - politica de identidade, ordenacao e layout dos assets no blob;
- schema minimo de metadata e registry inicial de codecs/banks;
- matriz de validacao e erro entre packer, shipper e runtime;
- estrategia de teste de compatibilidade entre output do packer e consumo do runtime.
Referencias
../specs/13-cartridge.md../specs/15-asset-management.md008-packed-cartridge-loader-pmc.md../../crates/console/prometeu-hal/src/asset.rs../../crates/console/prometeu-drivers/src/asset.rs