fix(S6-FOLLOWUP): test:e2e:affected filtra de verdade — --no-deps desliga o closure de deps dos projects #76

Merged
fsolla merged 1 commit from S6-FOLLOWUP-e2e-cli-playwright-ignora-filtros-grep-posiciona into main 2026-08-18 22:44:33 +00:00
Owner

Closes #58

O que muda

pnpm test:e2e:affected rodava a suíte completa silenciosamente em runs selecionados (ex.: -- tests/e2e/campaignHomeActions.e2e.spec.ts → 173 testes). Causa raiz medida com o binário do repo (playwright 1.58.2, config real): o commander parseia posicionais corretamente e -g/--list funcionam — o que arrastava a suíte era o closure de dependências dos projects no dev mode (setup ← campaign ← frontend ← admin em playwright.config.ts): collectProjectsAndTestFiles filtra os arquivos por project, mas buildProjectsClosure repõe todos os arquivos de cada project-dependência. Filtrar um spec do frontend puxava campaign (160) + setup (2) = 177; admin puxava a suíte inteira. Em prod mode (CI=1) não há deps → o job selecionado do CI sempre funcionou.

  • scripts/run-e2e-affected.mjs: gera test:e2e <passthrough verbatim> --no-deps -- <paths> via helpers puros novos (scripts/lib/playwright-e2e-args.mjs, unit-pinned em tests/unit/playwrightE2eArgs.unit.spec.ts). --no-deps desliga o closure em runs filtrados (path de escopo, positional no passthrough ou flag de filtro --project/-g/--grep); suíte completa mantém a cadeia OPS34 de prewarm. Passthrough corrigido: pnpm test:e2e:affected -- tests/x.spec.ts descartava o path (pnpm consome o --; agora parsePassthroughArgs só remove um -- líder e repassa o resto verbatim — -g grade intacto).
  • Hardening: scripts/run-e2e-affected.mjs entrou em HIGH_RISK_EXACT (+ invariant ciSkipInvariants) — era o espelho local do job e2e sem gate; um PR só de runner escaparia do e2e.
  • Docs: receitas de filtro no playwright.config.ts (posicional exige --no-deps; --project=<família> --no-deps; -g/--list funcionam), header do script, nota no AGENTS.md, changelog docs/changelog/2026-08-18-s6-followup.md.

Sem mudança de specs, CI (--shard), gate:ci ou runner.

Verificação

  • Unit 2349 verdes; contagem por --list do binário com as formas finais: positional --no-deps → 18 (spec exato), --project=campaign --no-deps → 160 (família exata), -g agenda --no-deps → 24 (título exato).
  • CI do PR roda o e2e completo (o diff toca playwright.config.ts e run-e2e-affected.mjs, ambos high-risk).

Impl plan: docs/plans/s6-followup-playwright-filtros-cli-ignorados-impl.md (gate humano aprovado; causa raiz diverge da hipótese da intenção — evidenciado no plano).

Closes #58 ## O que muda `pnpm test:e2e:affected` rodava a suíte completa silenciosamente em runs selecionados (ex.: `-- tests/e2e/campaignHomeActions.e2e.spec.ts` → 173 testes). Causa raiz medida com o binário do repo (playwright 1.58.2, config real): o commander parseia posicionais corretamente e `-g`/`--list` funcionam — o que arrastava a suíte era o **closure de dependências dos projects no dev mode** (`setup ← campaign ← frontend ← admin` em `playwright.config.ts`): `collectProjectsAndTestFiles` filtra os arquivos por project, mas `buildProjectsClosure` repõe todos os arquivos de cada project-dependência. Filtrar um spec do `frontend` puxava `campaign` (160) + `setup` (2) = 177; `admin` puxava a suíte inteira. Em prod mode (`CI=1`) não há deps → o job selecionado do CI sempre funcionou. - **`scripts/run-e2e-affected.mjs`**: gera `test:e2e <passthrough verbatim> --no-deps -- <paths>` via helpers puros novos (`scripts/lib/playwright-e2e-args.mjs`, unit-pinned em `tests/unit/playwrightE2eArgs.unit.spec.ts`). `--no-deps` desliga o closure em runs filtrados (path de escopo, positional no passthrough ou flag de filtro `--project`/`-g`/`--grep`); suíte completa mantém a cadeia OPS34 de prewarm. Passthrough corrigido: `pnpm test:e2e:affected -- tests/x.spec.ts` descartava o path (pnpm consome o `--`; agora `parsePassthroughArgs` só remove um `--` líder e repassa o resto verbatim — `-g grade` intacto). - **Hardening**: `scripts/run-e2e-affected.mjs` entrou em `HIGH_RISK_EXACT` (+ invariant `ciSkipInvariants`) — era o espelho local do job e2e sem gate; um PR só de runner escaparia do e2e. - **Docs**: receitas de filtro no `playwright.config.ts` (posicional exige `--no-deps`; `--project=<família> --no-deps`; `-g`/`--list` funcionam), header do script, nota no `AGENTS.md`, changelog `docs/changelog/2026-08-18-s6-followup.md`. Sem mudança de specs, CI (`--shard`), `gate:ci` ou runner. ## Verificação - Unit 2349 verdes; contagem por `--list` do binário com as formas finais: positional `--no-deps` → 18 (spec exato), `--project=campaign --no-deps` → 160 (família exata), `-g agenda --no-deps` → 24 (título exato). - CI do PR roda o e2e completo (o diff toca `playwright.config.ts` e `run-e2e-affected.mjs`, ambos high-risk). Impl plan: `docs/plans/s6-followup-playwright-filtros-cli-ignorados-impl.md` (gate humano aprovado; causa raiz diverge da hipótese da intenção — evidenciado no plano).
fsolla added 1 commit 2026-08-18 22:08:33 +00:00
fix(S6-FOLLOWUP): test:e2e:affected rodava a suíte completa — --no-deps desliga o closure de deps dos projects em runs filtrados
Some checks failed
CI (PR) / scope (pull_request) Successful in 42s
CI (PR) / lint (pull_request) Successful in 52s
CI (PR) / docs-guards (pull_request) Successful in 8s
CI (PR) / plans-only-closes (pull_request) Successful in 8s
CI (PR) / format (pull_request) Successful in 1m11s
CI (PR) / typecheck (pull_request) Successful in 44s
CI (PR) / knip (pull_request) Successful in 55s
CI (PR) / cycles (pull_request) Successful in 58s
CI (PR) / unit (pull_request) Failing after 1m15s
CI (PR) / int (pull_request) Has been skipped
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Failing after 1s
PR Ready + auto-merge / ready-automerge (pull_request) Failing after 4m25s
cbcbd1c071
Causa raiz (medida com o binário 1.58.2, config real): commander parseia
posicionais e -g/--list funcionam; o que arrastava a suíte era o closure de
dependências do dev mode (setup<-campaign<-frontend<-admin): filtrar um spec
do frontend puxava campaign(160)+setup(2). run-e2e-affected.mjs agora gera
test:e2e <passthrough verbatim> --no-deps -- <paths> via helpers puros em
scripts/lib/playwright-e2e-args.mjs (unit-pinned); passthrough corrigido
(pnpm consome o -- e o path era descartado); run-e2e-affected.mjs entrou em
HIGH_RISK_EXACT. Docs: receitas de filtro no playwright.config.ts, AGENTS.md,
changelog.
fsolla force-pushed S6-FOLLOWUP-e2e-cli-playwright-ignora-filtros-grep-posiciona from cbcbd1c071 to 8c915e59fc 2026-08-18 22:24:47 +00:00 Compare
fsolla merged commit 8c915e59fc into main 2026-08-18 22:44:33 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fsolla/teqo#76
No description provided.