Test Coverage Matrix

mandatory

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
    matriz

Override 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:

  1. kind em koder.toml.
  2. Compara categorias presentes em tests/ com a matriz.
  3. Para cada ausente sem [testing.skip] justificado, abre

    ticket <module>/backlog/pending/NNN-add-<cat>-tests.md.

  4. Para cada ausente, anota WARN (não abre ticket

    automaticamente).

A matriz aqui é a fonte da verdade — qualquer descumprimento exige RFC ou skip justificado.

Source: ../home/koder/dev/koder/meta/docs/stack/specs/testing/coverage-matrix.md