prometeu-runtime/docs/runtime/agendas/006-asset-fault-semantics-and-surface.md
2026-03-24 13:40:49 +00:00

72 lines
2.6 KiB
Markdown

# Agenda - Asset Fault Semantics and Surface
## Problema
O dominio `asset` ja se comporta como dominio orientado a status em partes da surface, mas ainda promove erro operacional para `Panic` em pontos centrais.
Exemplo atual:
- `AssetLoad` transforma `Err(e)` de `hw.assets().load(...)` em `VmFault::Panic(e)`.
Ao mesmo tempo:
- `AssetStatus` ja expoe um status numerico do dominio;
- a spec `16a` ja aponta direcao `status-first` para falhas operacionais;
- a decisao `003` reforca a preferencia por status quando existir contrato funcional recuperavel.
## Dor
- falha de asset pode derrubar o app como se fosse bug estrutural do runtime;
- a surface do dominio fica incoerente: `status` para observar, `Panic` para operar;
- commit/cancel ainda nao deixam claro se handle desconhecido e status, no-op ou fault terminal.
## Hotspots Atuais
- [dispatch.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/console/prometeu-system/src/virtual_machine_runtime/dispatch.rs#L461)
- [dispatch.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/console/prometeu-system/src/virtual_machine_runtime/dispatch.rs#L478)
- [dispatch.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/console/prometeu-system/src/virtual_machine_runtime/dispatch.rs#L490)
## Alvo da Discussao
Fechar a taxonomia de fault e, se necessario, ajustar a surface publica de `asset` para que:
- falhas operacionais virem `status`;
- `Trap` fique reservado para erro estrutural da chamada;
- `Panic` fique restrito a invariantes quebradas.
## O Que Precisa Ser Definido
1. `AssetLoad`.
Decidir o que retorna quando:
- `asset_id` nao existe;
- slot esta ocupado/conflita;
- backend falha;
- o asset manager entra em estado invalido.
2. `AssetStatus`.
Confirmar se o enum atual e suficiente ou se precisa crescer.
3. `AssetCommit` e `AssetCancel`.
Decidir o shape de fault/status para:
- handle desconhecido;
- handle ja finalizado;
- transicao invalida.
4. Surface.
Decidir se `commit`/`cancel` continuam `void` ou se precisam de retorno explicito.
5. Relacao com `bank`.
Definir se erros de residency/slot entram em `asset` status ou em agenda separada de `bank`.
## Dependencias
- `../specs/16a-syscall-policies.md`
## Critério de Saida Desta Agenda
Pode virar PR quando houver decisao escrita sobre:
- matriz de `status`/`Trap`/`Panic` para `asset`;
- shape final de `AssetLoad`, `AssetStatus`, `AssetCommit` e `AssetCancel`;
- eliminacao dos `Panic` operacionais indevidos do dominio.