-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Maturity Reeval
O que é este documento. Uma re-medição da maturidade do sistema de quality-gates após as Ondas 0–3 do programa Quality-Gate v2, comparada ao baseline registrado em
QUALITY_GATE_PLAYBOOK.md(2026-06-16). Mede o que mudou, contra DSOMM L5 / OpenSSF Scorecard 9 / SLSA L3, separando o que é CI-mensurável (já entregue / entregável por código) do que é processo/owner (settings de organização).Data: 2026-06-30. Gerado do estado real do repositório, não da memória. Régua: OWASP DSOMM · OpenSSF Scorecard · SLSA · SonarQube "Clean as You Code".
Nota geral: A− → A ("Avançado", topo ~5%). As duas maiores fraquezas estruturais do baseline 06-16 — o buraco fast-gates e o mutation-score-não-catraca — foram fechadas. Os gaps residuais para "máximo absoluto" são quase todos owner/infra-gated (branch-protection, SLSA L3, CodeQL advanced); o lado-código do programa está essencialmente completo.
| Framework de referência | Baseline 06-16 | Agora 06-30 | Movimento | Evidência |
|---|---|---|---|---|
| OWASP DSOMM (5 níveis) | L3→L4 | L4 em Test Intensity e Static Depth; L3 sólido nas demais | ▲ | mutation-ratchet bloqueante + suíte determinística no gate-de-merge |
| OpenSSF Scorecard | ~7–8/10 | ~7–8/10 (inalterado — gate é o owner) | = | falta Branch-Protection na main (setting do dono) + pin de actions |
| SLSA | L2→L3 | L2 (encostando em L3) | = | falta builder hermético/reprodutível (infra/owner) |
| SonarQube "Clean as You Code" | Alinhado c/ ressalva | Alinhado c/ ressalva | = | ressalva de sprawl (~46+ gates) permanece — review de ROI pendente |
| Quality-Ratchet pattern | Exemplar | Exemplar+ | ▲ | novo dedicatedGate de mutationScore (direction up) |
| Mutation testing | "Quase lá" (não-catraca) | Catraca ativa | ▲▲ |
check-mutation-ratchet.mjs + baseline semeado + job nightly bloqueante |
O baseline alertava: quality.yml (PR→release/**) rodava só gates de filesystem — sem
typecheck, testes ou build —, então regressões determinísticas só explodiam no PR→main.
Hoje .github/workflows/quality.yml roda, no job Fast Quality Gates: typecheck:core,
testes unitários impactados (TIA) bloqueantes com fail-safe para a suíte completa, o
fast-path do vitest, e shards de unit. O gate agora roda onde o merge acontece (shift-left),
exatamente o princípio transversal que o playbook prescreve.
O antídoto mais forte contra coverage-gaming estava advisory. Hoje:
-
scripts/check/check-mutation-ratchet.mjs(advisory por default,--ratchetbloqueante, skip gracioso); -
config/quality/quality-baseline.jsontem entradasmutationScore.<módulo>semeadas (direction: up,dedicatedGate); -
.github/workflows/nightly-mutation.ymltem o job "Mutation score ratchet (blocking)" que unifica os relatórios por-batch e ratcheteia os scores merged por-módulo.
Resultado: o score de mutação por-módulo não pode regredir — cobertura deixou de ser vanity-metric.
-
a11y axe-core "fake-green" corrigido:
@axe-core/playwrightem devDeps;a11y.spec.tscom skip condicionalREQUIRE_AXE; job nonightly-resilience.yml. -
complexity varre
bin/+electron:check-complexity.mjsinclui esses diretórios noESLINT_ARGS. -
tracked-artifacts no pre-commit + pre-push:
.husky/pre-commit+pre-pushbloqueiam artefato rastreado por engano.
| # | Categoria | Situação 06-30 |
|---|---|---|
| 1 | Estilo & formatação | ✅ inalterado (Prettier+ESLint lint-staged) |
| 2 | Tipos | ✅ reforçado — typecheck:core agora também no gate PR→release |
| 3 | Testes (intensidade) | ✅ reforçado — mutation testing virou catraca; suíte determinística no gate-de-merge |
| 4 | Política de testes (anti-gaming) | ✅ inalterado (pr-test-policy/test-masking/pr-evidence) |
| 5 | Complexidade & saúde | ✅ reforçado — complexity varre bin/electron |
| 6 | Segurança estática (SAST+segredos) | 🟡 CodeQL default-setup (advanced = owner); semgrep cloud não-versionado |
| 7 | Supply-chain (deps) | ✅ inalterado (osv/audit/Trivy/Dependabot + allowlist) |
| 8 | Supply-chain (build/release) | 🟡 SLSA L2 (L3 = builder hermético, owner/infra) |
| 9 | Contratos & API | 🟡 oasdiff/osv advisory (candidatos a bloqueante-com-escopo, P1) |
| 10 | Docs & i18n (anti-rot) | ✅ reforçado — fabricated-docs --strict bloqueante (verificado exit 0) |
| 11 | Anti-alucinação / consistência | ✅ inalterado (known-symbols/fetch-targets/docs-symbols/db-rules) |
| 12 | Resiliência & domínio | ✅ inalterado (chaos/heap/k6/promptfoo/garak nightly) |
-
P1 — osv/oasdiff → bloqueante com escopo certo: osv só
CRITICAL+fixable (two-step como o Trivy); oasdiff bloqueia breaking-change de contrato. -
P1 —
require-tightenbloqueante (fim de ciclo): trava ganhos de métrica (impede afrouxar baseline sem registrar). -
P1/P2 — review de ROI / sprawl de gates: consolidar micro-gates de doc-sync; medir timing por-gate no
ci-summary(combate a fadiga — ressalva do SonarQube/DORA). Os merges ROI deferidos (complexity unificada;/apianti-alucinação unificada) entram aqui. - P2 — CodeQL config commitado + semgrep versionado: mais controle/reprodutibilidade.
-
Branch-protection na
main(sobe Scorecard, fecha o gap DSOMM). VerBRANCH_PROTECTION_MAIN.md. - CodeQL Default → Advanced setup.
- SLSA L3 — builder hermético/reprodutível (gerador SLSA do GitHub). Stretch (diminishing returns).
- DSOMM L5 é majoritariamente org-level / processo (não CI-codificável).
- SLSA L4 (bit-a-bit reprodutível) é stretch declarado.
-
semcheck.yaml(camada LLM de drift semântico docs↔code) — REMOVIDO. Estava órfão (nenhum workflow/script o invocava) e com contagens stale nas regras. A cobertura determinística já existe (check:fabricated-docs --strict+check:docs-counts-sync+check:docs-symbols), e a ressalva de gate sprawl desaconselha adicionar um gate LLM advisory de custo recorrente. Pode ser re-introduzido no futuro como job nightly opt-in se o drift semântico virar problema real. -
agent-lspscaffold — DEFERIDO / opt-in não-ativado. Existe como menção em docs (docs/architecture/QUALITY_GATES.md, CHANGELOG) mas sem wiring e sem.mcp.json.exampleno repo. Permanece como scaffold opt-in documentado; não é um gate ativo nem um gap de maturidade.
OmniRoute · Website · npm · Docker Hub
- Setup Guide
- User Guide
- Features
- Quick Start (Docker)
- Electron Desktop App
- Termux (Android)
- PWA Guide
- MCP Server
- A2A Server
- Agent Protocols
- OpenCode Plugin
- Webhooks
- Cloud Agents
- Skills
- Memory
- Evals
- Gamification
- Guardrails
- Compliance
- Error Sanitization
- Public Credentials
- Route Guard Tiers
- Stealth Guide
- CLI Token Auth