Test Coverage Matrix
Matriz de aplicabilidade — quais categorias de teste fazem sentido para cada tipo de componente (`app/`, `backend/`, `engine/`, `cli/`, `landing/`, `tui/`, `tv/`, `sdk/`). Consultada por `/k-test` na Fase 2 para decidir quais geradores acionar por padrão.
Spec: Test Coverage Matrix
Tipo de componente determina quais categorias /k-test aciona por padrão. *✅** = obrigatória; **◑** = recomendada (skip OK com
justificativa em koder.toml [testing.skip]); **—`*= não se aplica.
| Categoria | app/mobile |
app/desktop |
app/web |
app/tv |
app/cli |
app/tui |
backend/ |
engine/ |
landing/ |
sdk/ |
|---|---|---|---|---|---|---|---|---|---|---|
| *nit* | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ◑ | ✅ |
| *unctional* | ✅ | ✅ | ✅ | ◑ | ✅ | ◑ | ✅ | ✅ | ◑ | ✅ |
| *ntegration* | ◑ | ◑ | ◑ | — | ◑ | — | ✅ | ◑ | — | ◑ |
| *i* | ✅ | ✅ | ✅ | ✅ | — | ✅ | — | — | ✅ | ◑ |
| *low* | ✅ | ✅ | ✅ | ✅ | ◑ | ◑ | — | — | ◑ | — |
| *egression* | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ◑ | ✅ |
| *erformance* | ◑ | ◑ | ◑ | ◑ | ◑ | — | ✅ | ✅ | — | ◑ |
| *tress* | — | — | ◑ | — | — | — | ✅ | ✅ | — | — |
| *oak* | — | — | — | — | — | — | ✅ | ✅ | — | — |
| *haos* | — | — | — | — | — | — | ✅ | ◑ | — | — |
| *ecurity* | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| *uzz* | ◑ | ◑ | ◑ | — | ◑ | — | ✅ | ✅ | — | ◑ |
| *utation* | ◑ | ◑ | ◑ | — | ◑ | — | ◑ | ◑ | — | ✅ |
| *11y* | ✅ | ✅ | ✅ | ✅ | — | — | — | — | ✅ | — |
| *18n* | ✅ | ✅ | ✅ | ✅ | ✅ | ◑ | ◑ | — | ✅ | — |
| *ompat* | ✅ | ✅ | ✅ | ✅ | ◑ | ◑ | ◑ | ◑ | ✅ | ✅ |
| *moke* | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ◑ | ✅ | ◑ |
| *pi* | — | — | — | — | — | — | ✅ | — | — | — |
| *ules* | ◑ | ◑ | ◑ | — | ◑ | — | ✅ | ◑ | — | — |
| *nstall* | ✅ | ✅ | — | ✅ | ✅ | ✅ | — | — | — | — |
| *sability* | ✅ | ✅ | ✅ | ✅ | ◑ | ◑ | — | — | ✅ | — |
Notas por dimensão
Por que landing/ quase tudo é ◑?
Landings são páginas estáticas (HTMLCSSJS). Têm pouca lógica para unit-testar, mas precisam de *11y, i18n, compat, smoke, ui (golden) e usability*porque são a primeira impressão. Skip rules: marcar [testing.skip] reason="static landing" para unitfunctionalintegration.
Por que engine/ recebe chaos como ◑?
Engines são embarcáveis (importadas + executadas em-processo). Falhas externas (rede caindo) raramente importam, mas falhas internas — OOM no host, GC pause, FD exhaustion — sim. O modo chaos do engine tipicamente injeta panic/raise em pontos estratégicos para verificar cleanup.
Por que cli/ recebe flow como ◑?
CLIs têm fluxos (login → search → install). Mas o "browser headless" da CLI é o terminal — testes ficam mais próximos de E2E shell que de browser-driver. tests/e2e/cli_*.sh é o lugar canônico.
Por que backend/ não recebe uia11yflow/usability?
Backend é consumido via API. A11y/usability se aplicam a /landing e ao admin dashboard quando este existir como UI separada. Backend recebe *pi*como ✅ — esse é o equivalente estrutural.
Por que sdk/ recebe mutation como ✅?
SDKs são consumidos por dezenas de módulos. Um bug não pego pelos testes do SDK propaga em escala. Mutation score ≥ 80 % é *brigatório*para qualquer SDK (gate em /k-housekeep).
Por que tv/ raramente recebe integration/flow?
TV apps (Tizen / WebOS) têm ferramental de teste primitivo. UI golden + smoke + i18n + a11y dão cobertura razoável; integração real precisa do device físico (caso de flow em ◑).
Como /k-test consulta esta matriz
/k-test <module>
→ lê <module>/koder.toml para descobrir o `kind` (app/backend/...)
→ consulta esta matriz para o `kind`
→ aciona apenas as categorias ✅ + ◑ (a menos que o módulo opte
por skip via [testing.skip] = ["soak", "chaos"])
→ respeita --category <cat> para modo cirúrgico, ignorando a
matrizOverride por módulo
Em <module>/koder.toml:
[testing]
# Adicionar categoria não-default (ex.: cli rodando soak):
extra = ["soak"]
# Pular categoria default com justificativa:
skip = [
"compat", # tem que ser justificada em texto livre abaixo
]
[testing.justification]
compat = "Componente shipped só para Linux x86_64; cross-platform N/A"Auditoria
/k-housekeep Fase X audita cada módulo:
- Lê
kindemkoder.toml. - Compara categorias presentes em
tests/com a matriz. - Para cada
✅ausente sem[testing.skip]justificado, abreticket
<module>/backlog/pending/NNN-add-<cat>-tests.md. - Para cada
◑ausente, anota WARN (não abre ticketautomaticamente).
A matriz aqui é a fonte da verdade — qualquer descumprimento exige RFC ou skip justificado.