3.1 KiB
Decision Record - Asset Status-First Fault and Return Contract
Status
Accepted
Contexto
A agenda 006-asset-fault-semantics-and-surface.md evidenciou inconsistencia no dominio asset:
asset.statusja usa status numerico;asset.loadainda escalava erro operacional paraPanic;asset.commit/asset.canceleramvoidcom no-op silencioso para varios casos.
Para alinhar o dominio com 16a, foi fechado contrato status-first para asset.
Decisao
1. Fronteira de fault class em asset
asset segue:
Trap: violacao estrutural de ABI/chamada (tipo, aridade, capability, shape).status(inteiro): erro operacional recuperavel de dominio.Panic: apenas quebra de invariante interna de runtime/host.
2. Surface canonica do dominio
A surface final do MVP fica:
asset.load(name, kind, slot) -> (status:int, handle:int)asset.status(handle) -> status:intasset.commit(handle) -> status:intasset.cancel(handle) -> status:int
Regras:
handleso e valido quandostatus == ASSET_OK;- em falha de
load,handledeve ser0.
3. No-op silencioso proibido
No-op silencioso nao e permitido para operacoes com erro operacional possivel.
Casos como:
- handle desconhecido;
- transicao invalida de lifecycle;
- slot invalido;
- asset ausente;
devem retornar status explicito.
4. asset.load (request path)
Falhas operacionais de request devem virar status, incluindo:
ASSET_NOT_FOUND;SLOT_KIND_MISMATCH;SLOT_INDEX_INVALID;BACKEND_ERROR.
Panic nao deve ser usado para falha operacional de load.
5. asset.status (lifecycle path)
asset.status permanece a fonte de verdade do lifecycle assíncrono.
Codigos de lifecycle devem cobrir:
PENDINGLOADINGREADYCOMMITTEDCANCELEDERRORUNKNOWN_HANDLE
6. asset.commit e asset.cancel
Ambas operacoes devem retornar status.
Tabela minima de resposta:
ASSET_OK(acao aceita/concluida para o estado atual)UNKNOWN_HANDLEINVALID_STATE
7. Relacao com dominio bank
Erros de residency/slot permanecem no dominio asset.
bank permanece dominio de inspecao (info, slot_info) e nao absorve erros operacionais de mutacao de asset lifecycle.
8. Compatibilidade e migracao
Nao ha requisito de compatibilidade retroativa para esta mudanca.
E permitido:
- alterar
ret_slotsdeasset.load,asset.commit,asset.cancel; - ajustar registry/loader/dispatch/runtime com o novo contrato;
- regenerar stress test com as assinaturas novas.
Consequencias
Positivas
- remove
Panicoperacional indevido do dominioasset; - torna fluxo de lifecycle observavel e consistente;
- elimina ambiguidade de no-op em
commit/cancel.
Custos
- exige migracao de ABI das syscalls
asset; - exige atualizacao de testes e artefatos gerados.
Follow-up Obrigatorio
- agenda
006-asset-fault-semantics-and-surface.mddeve ser considerada absorvida e removida; - specs
15e16adevem absorver o contrato final quando a implementacao estiver estavel; - registry de syscall deve refletir o shape final (
ret_slots) das operacoesasset.