9.6 KiB
| id | ticket | title | status | created | resolved | decision | tags |
|---|---|---|---|---|---|---|---|
| AGD-0001 | runtime-edge-test-plan | Agenda - Runtime Edge Test Plan | done | 2026-03-27 | 2026-04-20 | DEC-0020 |
Agenda - Runtime Edge Test Plan
Problema
A borda do runtime deixou de ser "quase sem testes", mas continua sem contrato claro de suficiência por dominio.
Hoje já existe cobertura relevante para runtime edge, VirtualFS, asset/preload, status-first surfaces e parte do host. O problema atual não é ausência total de testes, e sim falta de uma régua explícita que diga quando um domínio está aceitavelmente coberto e que tipo de mudança deve obrigar novos testes.
Dor
- Coverage global do workspace não prova que os domínios de maior risco estão realmente cobertos.
- Regressões de firmware, boot, host integration e superfícies status-first ainda podem passar com números globais "bons".
- Sem gates por domínio, futuras PRs tendem a melhorar percentuais agregados sem fechar cenários obrigatórios.
- A suíte atual está funcional, mas concentrada demais, o que dificulta enxergar lacunas e manter responsabilidade por domínio.
Alvo da Discussao
Definir uma política mínima de cobertura para a borda do runtime proporcional ao risco da plataforma.
Essa agenda deve produzir uma visão clara de:
- quais domínios têm gate próprio;
- quais cenários mínimos cada domínio deve cobrir;
- como coverage entra como evidência operacional, sem substituir a matriz qualitativa;
- que mudanças devem obrigar teste novo antes de merge.
O Que Precisa Ser Definido
-
Matriz de cobertura por domínio.
- system/runtime
- fs
- asset/bank
- firmware transitions
- host-dependent surfaces quando aplicável
-
Tipos de teste.
- unitário puro
- integração entre runtime e VM
- testes de firmware
- testes host-dependentes isolados
-
Gates de aceitação por domínio. Cada domínio precisa definir ao menos:
- cenários obrigatórios;
- tipo de evidência esperada;
- leitura de coverage por domínio como evidência obrigatória de revisão;
- como o gate por domínio evolui ao longo do tempo sem bloquear a adoção inicial.
-
Critério de severidade. Que mudanças exigem teste novo obrigatório antes de merge, mesmo que o percentual global de coverage continue aceitável.
-
Organização. Onde os testes vivem para nao voltar a concentrar tudo em arquivos gigantes e para manter ownership claro por domínio.
O Que Ainda Precisa Ser Fechado
- definição dos domínios canônicos e seus respectivos gates;
- definição dos cenários mínimos obrigatórios por domínio;
- política mínima para testes host-dependentes e
#[ignore]; - regra de convivência entre gate global de coverage e leitura segmentada por domínio;
- diretriz de organização para quebrar suites monolíticas de runtime.
Opcoes
Opcao A - Gate apenas global de coverage
- Abordagem: manter somente o percentual agregado do workspace como barra de aceitação.
- Pro: simples de operar e fácil de automatizar no CI.
- Con: permite que domínios sensíveis continuem subcobertos enquanto o número global sobe.
- Manutenibilidade: boa operacionalmente, ruim como governança de risco.
Opcao B - Gate percentual rígido por domínio desde o início
- Abordagem: exigir percentuais mínimos por domínio já na primeira versão da política.
- Pro: força disciplina quantitativa explícita por área.
- Con: cria atrito alto de adoção, exige segmentação mais sofisticada e pode travar a convergência inicial por falta de baseline confiável.
- Manutenibilidade: média; forte no longo prazo, pesada demais para o ponto atual do projeto.
Opcao C - Gate global de coverage + gate por domínio com coverage como evidência incremental
- Abordagem: manter gate global obrigatório no CI e adotar gate por domínio baseado em cenários mandatórios e leitura de coverage segmentada como evidência. Baselines percentuais por domínio podem começar em
0e subir com o tempo conforme a suíte amadurece. - Pro: combina disciplina prática imediata com caminho realista para endurecer a barra por domínio sem bloquear a adoção.
- Con: exige revisão mais criteriosa, porque a aceitação não fica reduzida a um único número.
- Manutenibilidade: alta; permite endurecimento progressivo sem perder governança qualitativa.
Sugestao / Recomendacao
Fechar esta agenda com a Opcao C: uma matriz pequena de domínios canônicos, gate global obrigatório de coverage e gate por domínio baseado em cenários mandatórios, usando leitura segmentada de llvm-cov como evidência de revisão e baseline quantitativo incremental.
Domínios canônicos propostos
system/runtimefsasset/bankfirmwarehost-dependent
Gates propostos por domínio
system/runtime
Cenários mínimos:
initreset / cleanuptrap vs panicpause / breakpoint- fronteira de
FRAME_SYNCe budget
Regra de aceitação:
- qualquer mudança em lifecycle, tick, crash/report, pause/debug flow ou syscall de sistema deve adicionar ou ajustar testes desse domínio;
- coverage global não substitui a obrigação de cobrir o cenário alterado.
fs
Cenários mínimos:
- happy path;
- path inválido / traversal;
- backend unhealthy;
- cleanup de handles e estado após reset/unmount quando aplicável.
Regra de aceitação:
- qualquer mudança em normalização de path, mount/unmount, handles ou contrato guest-host de filesystem deve adicionar ou ajustar testes desse domínio.
asset/bank
Cenários mínimos:
- preload;
load / status / commit / cancel;- asset ausente;
- slot inválido;
- erro estrutural de bootstrap vs erro operacional em runtime.
Regra de aceitação:
- qualquer mudança em cartridge loader, preload, asset bridge, slot telemetry ou semântica status-first deve adicionar ou ajustar testes desse domínio.
firmware
Cenários mínimos:
- fluxo de load do cart;
- branch por
AppMode; - falha de init levando ao crash path;
- coordenação básica de boot target e transição de estado.
Regra de aceitação:
- qualquer mudança em boot flow, cartridge launch, state transition ou crash path deve adicionar ou ajustar testes desse domínio.
Observação:
- este é o domínio com maior lacuna atual e deve ser a prioridade principal de expansão da suíte.
host-dependent
Cenários mínimos:
- superfícies que dependem de socket, janela ou integração desktop devem ficar isoladas;
- quando possível, a parte determinística da regra deve existir também em teste console/runtime.
Regra de aceitação:
- testes
#[ignore]são permitidos quando dependem de infraestrutura local real, mas devem trazer justificativa explícita; - mudanças host-only não podem empurrar comportamento determinístico para testes exclusivamente desktop quando esse comportamento puder ser validado abaixo do host.
Observação:
host-dependentnão é um subsistema funcional paralelo afsoufirmware; é um corte transversal de testabilidade e execução que governa onde certos testes podem viver e como devem ser justificados.
Uso de coverage
coverageglobal viacargo llvm-covcontinua como gate operacional mínimo do CI;- leitura segmentada por domínio deve ser usada como evidência obrigatória de revisão quando uma mudança tocar área sensível;
- percentuais por domínio podem começar em baseline
0e subir progressivamente conforme o projeto estabiliza a segmentação e a matriz de testes; - percentual global aceitável não dispensa cobertura dos cenários mandatórios do domínio afetado.
Prioridades sugeridas
- expandir cobertura de
firmware; - consolidar política de
host-dependent; - quebrar a suíte monolítica de
system/runtimepor responsabilidade, conforme os domínios forem sendo tocados; - manter
fseasset/bankcomo domínios já relativamente encaminhados, mas ainda sob gate explícito.
Barra sugerida para PRs
- nenhum PR que altere domínio canônico deve entrar sem tocar testes do domínio afetado, ou sem justificar explicitamente por que o contrato observável não mudou;
- melhoria de coverage agregada é desejável, mas não conta como evidência suficiente sem cenário alinhado ao domínio alterado.
Perguntas em Aberto
- Nenhuma ambiguidade arquitetural substantiva restante para fechar a política base.
- O endurecimento quantitativo por domínio fica explicitamente como evolução incremental a partir de baseline inicial
0, sem bloquear a adoção imediata da política.
Estado Atual Relevante
- O repositório já possui targets de coverage com
cargo llvm-covnoMakefile. - O CI já aplica gate global mínimo de coverage via Jenkins.
- O runtime já possui cobertura relevante para traps, status-first, assets, composer, audio, memcard e reset.
VirtualFSjá cobre parte importante do contrato de path normalization e rejeições antes do backend.- Ainda falta tratar firmware transitions e superfícies host-dependent como domínios explicitamente governados pela agenda.
Fora de Escopo
- benchmark/performance suite;
- fuzzing completo de toda a ISA;
- troca de ferramenta de coverage;
- perseguir 100% global como objetivo primário;
- transformar coverage percentual em substituto de cenários normativos.
Critério de Saida Desta Agenda
Pode virar PR quando houver:
- matriz de gates por domínio aprovada;
- lista de cenários mínimos por domínio;
- política explícita para testes host-dependent /
#[ignore]; - uso de
llvm-covencaixado como evidência operacional; - barra clara para aceitar novas syscalls, mudanças de runtime e transições de firmware.