From 4d0e36ea9072fb4f2c9c97ee67374bc64cb0eba9 Mon Sep 17 00:00:00 2001 From: Francisco Solla Date: Tue, 18 Aug 2026 11:45:33 -0300 Subject: [PATCH] chore: typecheck do playwright.config.ts no projeto node (I7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit playwright.config.ts nunca era typechecked: tsconfig.node.json só incluía vite.config.ts. Adiciona a config ao include — os dois arquivos de config raiz passam a ser cobertos pelo tsc -b. Plano do débito I9 (typecheck de tests/e2e) incluso para nascer em main. --- ...ght-config-ts-config-fora-do-tsc-b-impl.md | 81 +++++++++++++++++++ ...k-dos-specs-e2e-tests-e2e-fora-do-tsc-b.md | 33 ++++++++ tsconfig.node.json | 2 +- 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 docs/plans/typecheck-do-playwright-config-ts-config-fora-do-tsc-b-impl.md create mode 100644 docs/plans/typecheck-dos-specs-e2e-tests-e2e-fora-do-tsc-b.md diff --git a/docs/plans/typecheck-do-playwright-config-ts-config-fora-do-tsc-b-impl.md b/docs/plans/typecheck-do-playwright-config-ts-config-fora-do-tsc-b-impl.md new file mode 100644 index 0000000..8756b36 --- /dev/null +++ b/docs/plans/typecheck-do-playwright-config-ts-config-fora-do-tsc-b-impl.md @@ -0,0 +1,81 @@ +# Impl: I7 — Typecheck do playwright.config.ts (config fora do tsc -b) + +Status: aprovado +Atualizado em: 2026-08-18 +Issue: #7 +Intenção: body da Issue (sem plano de intenção — body é a spec) +Appetite restante: P3, escopo de config — sem corte necessário + +## Leitura da intenção + +- **Outcome:** `playwright.config.ts` passa a ser typechecked pelo `tsc -b` do + build — os dois arquivos de config raiz atuais (`vite.config.ts`, + `playwright.config.ts`) ficam cobertos. +- **O que NÃO negociar:** sem mudança de runtime/stack; gate local e CI + continuam iguais; e2e continua rodando só no CI. +- **O que reavaliar:** onde a config se encaixa — o body sugere "um projeto tsc" + sem especificar qual; os projetos candidatos são `tsconfig.node.json` + (vite.config.ts, node) e `tsconfig.test.json` (tests/unit + helpers, bun). + +## Abordagem recomendada + +```mermaid +flowchart LR + A[tsconfig.node.json] --> B[include + playwright.config.ts] + B --> C[tsc -b typechecka config] + C --> D[gate local e CI inalterados] +``` + +**Opções consideradas:** A) incluir no `tsconfig.node.json` existente | B) novo +projeto `tsconfig.playwright.json` cobrindo config + `tests/e2e` | C) incluir +no `tsconfig.test.json` +**Recomendação:** A — a config roda em Node (não em bun), então o projeto +semanticamente certo é o de configs de node, que já é o do `vite.config.ts` +(`module: nodenext`, `types: ["node"]`). É 1 linha de include e foi +**verificado empiricamente** (tsc 6.0 com as flags do `tsconfig.node.json`: +`playwright.config.ts` compila limpo). +**Rejeitadas:** B porque adiciona um 4º projeto + reference no solution para +cobrir além do escopo relatado — os specs `tests/e2e` também compilam limpo +com as flags do node config, então o buraco residual é só 2 linhas de include; +vira débito rastreado no fechamento (decidir lá, não agora). C porque o +`tsconfig.test.json` é do mundo bun (`types: ["bun"]`, `lib: DOM`, +`moduleResolution: bundler`) — o runtime do Playwright é Node; contaminar o +projeto de testes com uma config de node mistura dois runtimes num projeto. + +### Componentes / mudanças + +- **`tsconfig.node.json`**: `"include": ["vite.config.ts", "playwright.config.ts"]` + — nenhum outro arquivo/dependência muda. +- **Migration:** sem migration. **Access/Consent:** n/a (config sem dados). +- **UI:** n/a — sem mudança de produto. + +## Fases verificáveis + +1. **Config** — editar o include do `tsconfig.node.json` (1 linha). +2. **Gates** — `bun run build` (tsc -b) e `bun run gate` limpos; `tsc -b` + recompila o projeto node incrementalmente (tsbuildinfo) — validar que o + build inteiro continua green. + +## Rabbit holes / Não escopo (engenharia) + +- Typecheck de `tests/e2e/*.spec.ts` (mesma linha de include, barato de + revisitar) — débito a triar no fechamento, não agora. +- Projeto tsc dedicado / `tsconfig.playwright.json` — cerimônia sem + volatilidade para 1 arquivo. +- Mudar `module`/`moduleResolution` do `tsconfig.node.json` — quebraria o + `vite.config.ts` sem ganho. + +## Riscos e mitigação + +- **Baixo:** o include novo só adiciona um arquivo ao projeto existente; se o + Playwright trocar o shape do `defineConfig` no futuro, o erro aparece no + build (comportamento desejado) e o fix é local à config. +- CI não roda e2e local: o typecheck da config passa a acontecer no `build` + (CI e gate) em vez de só em runtime do Playwright — sem mudança de fluxo. + +## Aceite de engenharia + +- [x] Aceite de produto da intenção ainda coberto (config raiz typechecked) +- [x] Invariantes AGENTS/engineering-standards (zero mudança de runtime) +- [x] Testes de domínio previstos: n/a — change de tooling, verificação via + `bun run build`/`bun run gate` diff --git a/docs/plans/typecheck-dos-specs-e2e-tests-e2e-fora-do-tsc-b.md b/docs/plans/typecheck-dos-specs-e2e-tests-e2e-fora-do-tsc-b.md new file mode 100644 index 0000000..933d0a5 --- /dev/null +++ b/docs/plans/typecheck-dos-specs-e2e-tests-e2e-fora-do-tsc-b.md @@ -0,0 +1,33 @@ +# I9 — Typecheck dos specs e2e (tests/e2e fora do tsc -b) + +Status: blocked +Atualizado em: 2026-08-18 +Issue: #13 (id I9) +Intenção: achado do /simplify de I7 — mesma classe de buraco que I7 fechou na +config, um nível abaixo: `tests/e2e/*.spec.ts` não é typechecked por nenhum +projeto tsc (`tsconfig.test.json` cobre só `tests/unit` + `tests/helpers`). +Appetite: P3, fill-in de tooling (~1 linha + gates). + +## Plano curto + +**Fase 1 — cobertura:** adicionar `tests/e2e` ao include do +`tsconfig.test.json` (ou ao `tsconfig.node.json`, decidir na execução pelo +runtime do helper importado pelos specs — hoje importam só `@playwright/test`). +Verificado no simplify de I7: os 2 specs atuais compilam limpos sob as flags do +projeto node (module nodenext, types node). + +**Fase 2 — gates:** `bun run build` + `bun run gate` limpos; e2e segue só no CI. + +## Adiado com gatilho + +- **Glob `*.config.ts` no tsconfig.node.json** — config raiz futura cai fora do + typecheck de novo (o bug que I7 corrigiu). Gatilho: **3º arquivo + `*.config.ts` na raiz** → migrar o include para `["*.config.ts"]`. +- **`strict: true` nos projetos tsc** — repo inteiro roda sem strict + (pré-existente). Gatilho: decisão repo-wide de adoção de strict (pode abrir + erros em todos os projetos), fora de lote de tooling. + +## Explicitamente fora + +- Nada mais do simplify de I7: o resto foi absorvido no próprio I7 ou + descartado (sem achado acionável). diff --git a/tsconfig.node.json b/tsconfig.node.json index 8455dcb..6b008b3 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -19,5 +19,5 @@ "erasableSyntaxOnly": true, "noFallthroughCasesInSwitch": true }, - "include": ["vite.config.ts"] + "include": ["vite.config.ts", "playwright.config.ts"] } -- 2.45.2