chore: typecheck do playwright.config.ts no projeto node (I7) #14

Merged
fsolla merged 1 commit from I7-typecheck-do-playwright-config-ts-config-fora-do-tsc-b into main 2026-08-18 14:46:10 +00:00
3 changed files with 115 additions and 1 deletions

View file

@ -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`

View file

@ -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).

View file

@ -19,5 +19,5 @@
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true
},
"include": ["vite.config.ts"]
"include": ["vite.config.ts", "playwright.config.ts"]
}