prometeu-runtime/docs/runtime/decisions/008-gfx-status-first-fault-and-return-contract.md

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/Panic desnecessarios para erro operacional;
  • no-op silencioso;
  • chamadas void em 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 status explicito;
  • 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_name ausente/nao encontrado;
  • sprite_index fora de faixa;
  • palette_id/priority fora 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); ou
  • status (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 (especialmente ret_slots);
  • atualizar registry/loader/runtime em linha com a matriz final;
  • regenerar artefatos de stress test com o contrato novo.

Consequencias

Positivas

  • reduz Trap/Panic indevidos 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.md deve ser considerada absorvida e removida;
  • specs 04 e 16a devem absorver o contrato final quando a implementacao estiver estavel;
  • a matriz final por syscall (void vs status) e a tabela de codigos devem ser refletidas no registry de syscalls.