prometeu-runtime/docs/runtime/pull-requests/PR-011d-asset-manager-on-demand-payload-and-op-mode.md
2026-03-24 13:40:53 +00:00

71 lines
2.6 KiB
Markdown

# PR - Asset Manager On-Demand Payload and OP_MODE
## Briefing
Com bootstrap e `open_slice` ja estabilizados, o `AssetManager` pode ser migrado do modelo atual baseado em blob inteiro residente para o modelo decidido na `011`:
- `asset_table` viva durante toda a execucao;
- `preload` apenas no boot;
- payload lido sob demanda;
- pipeline `ROM -> open_slice -> CODEX/decode -> Bank` ou `ROM -> open_slice -> blob temporario -> CODEX/decode -> Bank`.
Esta PR implementa a mudanca de comportamento interno do `AssetManager` sem reabrir o envelope de `assets.pa`.
## Decisions de Origem
- `../decisions/011-assets-pa-autocontained-runtime-contract.md`
## Alvo
Refatorar o `AssetManager` para consumir payload sob demanda e encapsular `OP_MODE` por codec/CODEX.
## Escopo
- remover o baseline de `Arc<RwLock<Vec<u8>>>` para payload inteiro residente;
- fazer `AssetManager` depender de `asset_table` viva + origem de payload por slice;
- tratar `preload` apenas na inicializacao;
- encapsular `OP_MODE` por codec/CODEX;
- suportar:
- leitura direta da ROM via slice;
- materializacao temporaria em memoria quando o codec exigir;
- preservar a superficie observavel do dominio `asset`.
## Fora de Escopo
- redefinir envelope de `assets.pa`;
- `.pmc`;
- novos codecs;
- rediscutir a policy de `asset` syscall status-first.
## Plano de Execucao
1. Substituir `assets_data` por origem de payload em slices.
2. Adaptar preload para usar a nova origem de payload apenas durante o boot.
3. Adaptar `load()` e o caminho assíncrono para consumir slices sob demanda.
4. Introduzir `OP_MODE` derivado de `codec`/CODEX.
5. Garantir que o resultado continue indo para staging/resident/bank como hoje.
## Criterios de Aceite
- `AssetManager` nao depende mais de payload inteiro residente em RAM.
- preload usa a nova origem de payload e nao permanece vivo depois do boot.
- `asset_table` continua sendo a fonte da verdade para resolucao de asset.
- `asset.load/status/commit/cancel` preservam a superficie observavel atual.
- o pipeline para decode/bank suporta leitura direta ou blob temporario conforme o `OP_MODE`.
## Tests / Validacao
- testes de `AssetManager` para:
- preload no boot;
- leitura por offsets relativos ao payload;
- ausencia de dependencia em blob inteiro residente;
- path de leitura direta;
- path de blob temporario;
- smoke tests de `asset.load/status/commit/cancel` para garantir ausencia de regressao observavel.
## Riscos
- regressao de preload ao trocar a origem do payload;
- encapsulamento ruim entre source/view, codec e bank;
- reintroduzir copia excessiva por atalho local no caminho assíncrono.