3.1 KiB
Decision Record - GFX Status-First Fault and Return Contract
Status
Accepted
Contexto
A agenda 004-gfx-fault-semantics-and-command-contract.md consolidou que o dominio gfx estava com ambiguidade entre:
Trap/Panicdesnecessarios para erro operacional;- no-op silencioso;
- chamadas
voidem operacoes que podem falhar operacionalmente.
Para alinhar com 16a, foi decidido fechar uma politica status-first no dominio gfx.
Decisao
1. Fronteira de fault class em gfx
gfx segue a taxonomia:
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. Politica de retorno por operacao
Nem toda syscall gfx precisa retornar status.
Regra canonica:
- se a operacao pode produzir erro operacional observavel, deve retornar
status: int(ret_slots >= 1); - se a operacao nao possui via real de erro operacional, pode permanecer
void.
3. Tabela de status por operacao
Cada operacao gfx que retorna status deve declarar tabela de codigos inteiros propria.
A tabela deve cobrir, quando aplicavel:
- recurso ausente (
asset_not_found); - indice invalido (
invalid_sprite_index); - argumento fora de faixa (
invalid_arg_range); - sem efeito operacional (
no_effect), quando houver.
4. Politica de no-op
No-op silencioso nao e permitido para operacoes com possibilidade de erro operacional.
Quando houver falha/ignoracao operacional:
- a chamada deve retornar
statusexplicito; - o resultado nao pode ser mascarado como sucesso implicito.
5. Contrato de gfx.set_sprite
set_sprite nao deve depender de fallback implicito para banco default.
Casos como:
asset_nameausente/nao encontrado;sprite_indexfora de faixa;palette_id/priorityfora da faixa;
devem ser reportados por status conforme a tabela da operacao.
6. Higiene de panic
Erros de argumento de app nao devem escalar para Panic.
Helpers e dispatch devem mapear esses casos para:
Trap(quando estrutural); oustatus(quando operacional, para operacoes com retorno de status).
7. Compatibilidade e migracao
Nao ha requisito de compatibilidade retroativa para esta mudanca.
E permitido:
- ajustar assinaturas de syscall
gfx(especialmenteret_slots); - atualizar registry/loader/runtime em linha com a matriz final;
- regenerar artefatos de stress test com o contrato novo.
Consequencias
Positivas
- reduz
Trap/Panicindevidos no dominio grafico; - elimina comportamento silencioso em comandos com erro operacional;
- torna contratos de retorno mais consistentes e testaveis.
Custos
- exige atualizacao de metadata de syscall e dispatch;
- exige atualizacao dos testes e do gerador de stress.
Follow-up Obrigatorio
- agenda
004-gfx-fault-semantics-and-command-contract.mddeve ser considerada absorvida e removida; - specs
04e16adevem absorver o contrato final quando a implementacao estiver estavel; - a matriz final por syscall (
voidvsstatus) e a tabela de codigos devem ser refletidas no registry de syscalls.