Skip to content

Quality Gates

Documenta os checks automáticos que protegem a qualidade do código. Atualizado em: 23/jun/2026

Cadeia de Qualidade

Cada commit passa por 3 camadas de verificação antes de chegar à produção:

[Commit] → pre-commit (5 gates, <120s) → [Push] → pre-push (E2E + doc audit + deploy check) → CI (full suite) → [Deploy]

Pré-commit (local — .husky/pre-commit)

Roda a cada git commit. Bloqueia o commit se falhar. Deve completar em < 120s (limite do Reasonix sandbox).

#GateComandoO que verificaDesde
1Lint-stagednpx lint-stagedBiome apenas nos arquivos stagedProjeto
2as any regressionbash scripts/count-as-any.shNenhum as any novo no codebase (baseline: 41)issue #196
3Biome checkpnpm lintCódigo inteiro (formatação + lint)Projeto
4Type checkpnpm typechecktsc --build — toda a compilação TSissue #193
5Unit testspnpm -r test1050 unit tests (Workers + App + Packages)Projeto

Pré-push (local — .husky/pre-push)

Roda a cada git push. Mais lento que pre-commit — E2E smoke, validação de changelog, auditoria de drift.

#GateComandoO que verificaDesde
1Changelogbash scripts/validate-changelog.shTag v* tem entry no CHANGELOGProjeto
2Lintpnpm lintBiome check fullProjeto
3Type checkpnpm typechecktsc --buildProjeto
4Unit testspnpm -r test1050 testesProjeto
5Smoke E2Eplaywright test --config=playwright.smoke.config.ts23 specs críticosProjeto
6Pre-deploybash scripts/pre-deploy-check.shValida config antes do deployProjeto
7Doc driftbash scripts/doc-audit.shAuditoria semântica de docsissue #230

E2E smoke foi movido para pre-push em Jun/2026 porque excedia o timeout de 120s do Reasonix sandbox durante git commit. CI sempre roda a suite completa (integração + 23 E2E + cobertura).


CI (GitHub Actions — .github/workflows/ci.yml)

Roda em todo push para main e em todo pull_request.

#GateComandoO que verifica
1Lint + Formatpnpm lintBiome — formatação + regras de qualidade
2Type checkpnpm typechecktsc --build — compatibilidade de tipos
3as any regressionbash scripts/count-as-any.shBaseline 0 — sem as any no código
4Unit testspnpm -r testWorkers (67 unit + 17 events + 22 integration) + App (313) + Packages (42)
5Documentationpnpm docs:check + pnpm docs:links + pnpm docs:stalenessJob docs — markdownlint (incl. docs/en), check:i18n (mirror no-partial + freshness), build do VitePress, lychee (dead links no site built, páginas drifted isentas) e staleness (lastReviewed, incl. docs/en)
6Build frontendpnpm build:appBuild de produção do Vite (verifica se compila)

O job docs do CI é o seam único da documentação: pnpm docs:lintpnpm docs:i18npnpm docs:build → lychee (binário fixado, v0.24.2) → pnpm docs:staleness. Qualquer falha bloqueia merge/push.

⚠️ O CI não passa --coverage ao pnpm -r test porque o @vitest/coverage-v8 é incompatível com o runtime workerd usado nos testes de integração do Workers. O app já tem coverage.enabled: true no próprio vitest.config.ts.

Submódulos no CI

O CI clona submódulos via actions/checkout@v7 com submodules: true. Após o neemias-modules se tornar público (21/jun/2026), não é necessário PAT — o clone funciona sem autenticação.

Total de testes no CI

⚠️ Contagem via scripts/verify-test-counts.sh. Baseline mantida em .test-count-baseline.

SuiteTestesNota
Workers (unit)232workers/src/__tests__/
Workers (events)47Event sourcing
Workers (integration)56D1 com cloudflare:test
Workers (services)122workers/src/services/__tests__/
App (vitest)696React + MemoryVFS SQLite
Packages (vitest)158schemas + permissions + plugin-registry
E2E (Playwright)29full suite, 1 worker
Total1344contagem de it()/test() blocks

Code Coverage

ℹ️ Informativo — não bloqueia merge. Thresholds por diretório no app/vitest.config.ts. Baseline versionada em .coverage-baseline.json — cheque local via bash scripts/check-coverage.sh.

PacoteLinesBranchesMeta 30dMeta 90d
app/32.8%27.3%35%40%
workers/78.4%73.1%80%80%
packages/100%100%100%100%

Per-directory thresholds (app): src/db/ ≥ 80% · src/modules/auth/ ≥ 25% · src/modules/sync/ ≥ 40% · src/storage/ ≥ 45%


Pré-push (local — .husky/pre-push)

Atualmente vazio — o pre-commit já valida tudo. Mensagem exibida:

✅ Pre-push: pre-commit already validated. Skipping.

neemias-modules

O repositório barateza/neemias-modules não possui CI standalone. A validação dos módulos é feita pelo CI do core monorepo, que roda pnpm lint + pnpm typecheck + pnpm -r test com o código do submódulo incluído.

Isso evita duplicação de configuração e garante que os módulos sempre são testados no contexto real do monorepo (com as dependências corretas de @neemias/plugin-registry, @neemias/schemas, etc.).


Deploy (GitHub Actions — .github/workflows/deploy.yml)

Roda em todo push de tag (v*). Executa os mesmos 6 gates do CI + wrangler deploy para produção.

Documentação detalhada: Deployment


Histórico

DataMudançaIssue
2026-06-21Submódulo modules adicionado ao CI (submodules: true)#200
2026-06-21CI standalone do neemias-modules removido (validado via core)#200
2026-06-21Typecheck adicionado ao pre-commit#193
2026-06-21count-as-any adicionado ao pre-commit + CI#196
2026-06-21Baseline as any ajustada para 0#196
2026-06-19CI workflow inicial

Distribuído sob licença MIT.