3.0 KiB
3.0 KiB
PR-013 [DEBUGGER]: Consume Structured Fault Events
Briefing
O runtime e o host agora produzem CrashReport e emitem evento fault estruturado no protocolo do debugger. Mas o lado consumidor do DevTools ainda nao foi ajustado para tratar esse evento como dado de primeira classe. Sem isso, o debugger continua dependente de logs gerais ou de texto livre para exibir falhas da VM.
Esta PR fecha a ponta do debugger: faults estruturados passam a ser recebidos, armazenados e renderizados como diagnostico explicito, separado de logs e telemetria numerica.
Problema
- o protocolo ja expõe
DebugEvent::Fault, mas o cliente do debugger ainda pode ignorar esse evento; - traps, panics e falhas de init continuam sem superficie dedicada no tooling;
- o operador do debugger nao consegue distinguir com clareza:
- log normal;
- violacao de certificacao;
- fault terminal da VM.
Alvo
- cliente do debugger / DevTools que consome
DebugEvent - componentes de UI/estado que exibem logs, telemetria e status de execucao
- testes do lado cliente do debugger, se existirem no repo
Escopo
- Consumir
DebugEvent::Faultcomo evento estruturado, nao como log generico. - Exibir pelo menos:
- tipo (
vm_trap,vm_panic,vm_init); - resumo;
pc, quando existir;trap_codeeopcode, quando existirem.
- tipo (
- Manter faults historicos recentes no estado do debugger de forma simples e deterministica.
- Garantir que um fault terminal fique visualmente distinguivel de log comum.
Fora de Escopo
- Redesenhar toda a UI do debugger.
- Alterar novamente o protocolo do host, salvo ajuste minimo estritamente necessario.
- Implementar crash screen dentro da VM/firmware.
- Introduzir persistencia em disco de faults do debugger.
Abordagem
- Auditar o cliente do debugger e localizar onde
DebugEvente desserializado e roteado. - Adicionar tratamento explicito para
fault, com estado proprio no cliente. - Renderizar o fault em area dedicada ou secao claramente separada de logs.
- Preservar os campos estruturados; nenhuma logica deve depender de parsear
summary. - Se houver historico, limitar o buffer de faults para manter simplicidade e previsibilidade.
Criterios de Aceite
- O debugger reconhece
DebugEvent::Fault. - Um
VmTrapaparece comtrap_code,opcode,pce resumo. - Um
VmPanicaparece distinto deVmTrap, sem depender de convencao textual. - Um
VmInitaparece distinto de fault de runtime. - O fluxo de logs continua funcionando sem regressao.
Tests
- Teste de desserializacao/roteamento do cliente cobrindo evento
fault. - Teste de estado/UI garantindo que
VmTrapeVmPanicaparecem em superficie dedicada. - Se houver suite de frontend/cliente, rodar a suite relevante do debugger.
- Se o cliente estiver no mesmo crate do host, incluir ao menos teste unitario do handler de eventos.
Risco
Baixo a medio. O maior risco e introduzir uma segunda representacao local de fault que volte a colapsar semantica em texto. A implementacao deve reaproveitar o protocolo estruturado ja existente e manter a taxonomia pequena e estavel.