4.6 KiB
4.6 KiB
Decision Record - Host Fault Taxonomy
Status
Accepted
Contexto
A fronteira host-backed do runtime misturava quatro coisas diferentes:
- fault recuperavel de servico;
- quebra terminal do app/VM;
- falha estrutural grave do runtime;
- indisponibilidade do host.
Ao mesmo tempo, a decisao 003-vm-owned-byte-transfer-protocol.md ja fixou uma direcao importante:
- quando existir contrato funcional de retorno, o protocolo deve preferir
status; Trapnao deve ser usado para carregar erro operacional comum;Panicdeve ficar restrito a inconsistencia interna.
O codigo atual ainda revela severidade errada em varios pontos, por exemplo:
AssetLoadpromovendo erro operacional paraPanic;- helpers de extracao promovendo argumento ausente para
Panic; VmFault::Unavailablesendo degradado paraPanicno loop da VM.
Decisao
1. Classes canonicas
A taxonomia canonica na fronteira host-backed passa a ser:
statusTrapPanic
Unavailable deixa de ser classe desejada do modelo.
2. status
statusrepresenta fault recuperavel do servico.- Cada dominio pode ter seus proprios codigos/status.
- Nao sera criado enum global unico de status para todos os dominios.
- Quando a surface da operacao comportar retorno funcional, deve-se preferir
statusao maximo.
Exemplos:
- recurso ausente;
- handle desconhecido de dominio;
- path nao encontrado;
- permissao negada;
- EOF;
- escrita parcial/falha operacional;
- indisponibilidade funcional recuperavel.
3. Trap
Trapquebra a VM/app atual.- O firmware assume a partir da tela de crash.
Trapdeve ser usado para erro estrutural de chamada, uso incorreto da ABI ou contrato que o guest nao recupera em runtime.
Exemplos:
- tipo de argumento errado;
- aridade invalida;
- syscall ou intrinsic invalido;
- capability ausente;
- shape de chamada impossivel para a ABI.
4. Panic
Panicrepresenta falha estrutural grave do runtime.Panicnao descreve erro do app, e sim risco de quebra do proprio Prometeu/runtime/host integration.Panicfica reservado para bug interno ou inconsistencia de implementacao.
Exemplos:
- metadata incoerente;
- mismatch entre
ret_slotsdeclarados e retorno efetivo; - invariantes internas quebradas;
- branch impossivel do runtime.
5. Unavailable
Unavailabletorna-se candidato a remocao do modelo.- A direcao aceita e:
- indisponibilidade funcional recuperavel deve virar
status; - colapso estrutural de integracao host/runtime deve virar
Panic; Unavailablenao deve ser expandido para novos dominios.
- indisponibilidade funcional recuperavel deve virar
Aplicacao por Dominio
Assets
assetse dominiostatus-first.AssetLoadnao deve promover erro operacional comum paraPanic.AssetStatusconfirma que o dominio ja tem semantica de status.commit/cancelpodem precisar de surface mais rica para evitarPanicindevido.
Audio
audioe dominio command-driven.- A direcao aceita e
Trapestrutural + no-op/fallback deterministico oustatusquando a surface passar a expor isso. audionao deve serpanic-first.
Gfx
gfxe dominio command-style.- A direcao aceita e
Trappara erro estrutural de chamada e no-op/fallback/clamp para casos de dominio, conforme a semantica de cada comando. Panicemgfxdeve ficar restrito a colapso estrutural do runtime grafico.
System
systemdeve evitarPanicpara falhas funcionais normais.- A taxonomia final de
run_cartdepende da agenda009-system-run-cart.md.
Byte transfer
Para read/write e ops que reutilizem a decisao 003:
- erros observaveis do protocolo devem virar
status; Trappraticamente sai da jogada;Panicfica restrito a inconsistencia interna.
Consequencias
Positivas
- o runtime separa erro recuperavel de colapso terminal;
- dominios host-backed ficam livres para usar
HostReturnde forma rica; Panicencolhe e passa a carregar gravidade real;- crash reports e telemetria ficam semanticamente melhores.
Custos
- algumas surfaces publicas podem precisar mudar para devolver
status; - o uso atual de
VmFaultprecisara de limpeza por dominio; - o loop da VM precisara deixar de tratar
Unavailablecomo caminho normal.
Follow-up Obrigatorio
As seguintes agendas derivam desta decisao:
006-asset-fault-semantics-and-surface.md005-audio-fault-semantics-and-surface.md004-gfx-fault-semantics-and-command-contract.md010-system-fault-semantics-and-control-surface.md003-filesystem-fault-semantics.md
003-filesystem-fault-semantics.md so deve ser discutida depois da 002-filesystem-surface-and-semantics.md.