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).
| # | Gate | Comando | O que verifica | Desde |
|---|---|---|---|---|
| 1 | Lint-staged | npx lint-staged | Biome apenas nos arquivos staged | Projeto |
| 2 | as any regression | bash scripts/count-as-any.sh | Nenhum as any novo no codebase (baseline: 41) | issue #196 |
| 3 | Biome check | pnpm lint | Código inteiro (formatação + lint) | Projeto |
| 4 | Type check | pnpm typecheck | tsc --build — toda a compilação TS | issue #193 |
| 5 | Unit tests | pnpm -r test | 1050 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.
| # | Gate | Comando | O que verifica | Desde |
|---|---|---|---|---|
| 1 | Changelog | bash scripts/validate-changelog.sh | Tag v* tem entry no CHANGELOG | Projeto |
| 2 | Lint | pnpm lint | Biome check full | Projeto |
| 3 | Type check | pnpm typecheck | tsc --build | Projeto |
| 4 | Unit tests | pnpm -r test | 1050 testes | Projeto |
| 5 | Smoke E2E | playwright test --config=playwright.smoke.config.ts | 23 specs críticos | Projeto |
| 6 | Pre-deploy | bash scripts/pre-deploy-check.sh | Valida config antes do deploy | Projeto |
| 7 | Doc drift | bash scripts/doc-audit.sh | Auditoria semântica de docs | issue #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.
| # | Gate | Comando | O que verifica |
|---|---|---|---|
| 1 | Lint + Format | pnpm lint | Biome — formatação + regras de qualidade |
| 2 | Type check | pnpm typecheck | tsc --build — compatibilidade de tipos |
| 3 | as any regression | bash scripts/count-as-any.sh | Baseline 0 — sem as any no código |
| 4 | Unit tests | pnpm -r test | Workers (67 unit + 17 events + 22 integration) + App (313) + Packages (42) |
| 5 | Documentation | pnpm docs:check + pnpm docs:links + pnpm docs:staleness | Job 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) |
| 6 | Build frontend | pnpm build:app | Build de produção do Vite (verifica se compila) |
O job docs do CI é o seam único da documentação: pnpm docs:lint → pnpm docs:i18n → pnpm docs:build → lychee (binário fixado, v0.24.2) → pnpm docs:staleness. Qualquer falha bloqueia merge/push.
⚠️ O CI não passa
--coverageaopnpm -r testporque o@vitest/coverage-v8é incompatível com o runtimeworkerdusado nos testes de integração do Workers. O app já temcoverage.enabled: trueno própriovitest.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.
| Suite | Testes | Nota |
|---|---|---|
| Workers (unit) | 232 | workers/src/__tests__/ |
| Workers (events) | 47 | Event sourcing |
| Workers (integration) | 56 | D1 com cloudflare:test |
| Workers (services) | 122 | workers/src/services/__tests__/ |
| App (vitest) | 696 | React + MemoryVFS SQLite |
| Packages (vitest) | 158 | schemas + permissions + plugin-registry |
| E2E (Playwright) | 29 | full suite, 1 worker |
| Total | 1344 | contagem 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 viabash scripts/check-coverage.sh.
| Pacote | Lines | Branches | Meta 30d | Meta 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
| Data | Mudança | Issue |
|---|---|---|
| 2026-06-21 | Submódulo modules adicionado ao CI (submodules: true) | #200 |
| 2026-06-21 | CI standalone do neemias-modules removido (validado via core) | #200 |
| 2026-06-21 | Typecheck adicionado ao pre-commit | #193 |
| 2026-06-21 | count-as-any adicionado ao pre-commit + CI | #196 |
| 2026-06-21 | Baseline as any ajustada para 0 | #196 |
| 2026-06-19 | CI workflow inicial | — |