teqo-backup/docs/changelog/2026-09-16-ops124.md
Francisco Solla 067857a03a fix(OPS124): desabilita o plugin Payload do knip e explicita as exclusões (Closes #1094)
O `pnpm knip` imprimia `ERROR: Error loading src/payload.config.ts
(...server-only...)` e saía 0 — gate verde com o ERROR silencioso, no CI
(`ci-pr.yml`/`deploy.yml`) e local. O plugin embutido do Payload carregava
`src/payload.config.ts` via jiti sob as condições Node padrão e o import
transitivo de `server-only` lançava (só o `react-server` traz o `empty.js`);
o `paths.server-only` do `knip.json` alimenta apenas o resolver estático, não
o carregamento jiti (e o `tsconfig` alias, que funcionaria no load, foi
rejeitado por re-apontar a guarda server/client — classe OPS69).

Fix: `"payload": false` e as contribuições do plugin explicitadas no
`knip.json` (`!src/payload-types.ts` load-bearing; `!src/migrations/**`
paridade), removendo o bloco `paths` inerte. Provado: `pnpm knip` sai 0 sem o
ERROR, um export morto plantado é detectado, e a corrida de controle com
`server-only` neutralizado dá findings idênticos.

Plano: docs/plans/ops-knip-importmap-artifact-impl.md
2026-09-16 19:55:07 -03:00

2 KiB

OPS124 — knip para de carregar o payload.config.ts e some o ERROR silencioso (2026-09-16): o pnpm knip imprimia ERROR: Error loading src/payload.config.ts (This module cannot be imported from a Client Component module...) e saía 0 — gate verde com um ERROR que ninguém lia, no CI (ci-pr.yml/deploy.yml) e local. Causa-raiz (correção de rumo em relação à primeira descrição): o plugin embutido do Payload (node_modules/knip/dist/plugins/payload) carrega src/payload.config.ts via jiti sob as condições Node padrão, e o import transitivo de server-only resolve para o entry que lança (só o react-server devolve o empty.js); o paths.server-only do knip.json alimenta apenas o resolver estático do knip, não o carregamento jiti. O ERROR é independente do importMap.js: sem o arquivo, o knip sai 1 com Unresolved imports (2) ../importMap + os componentes admin órfãos; com o arquivo commitado, o mesmo ERROR sai 0 (o arquivo só trocava o relatório pelo exit 0). Corrigido por A: desabilitar o plugin do Payload ("payload": false) — ele só derivava o importMap, que já é entry explícito, e as exclusões de projeto — promovendo !src/payload-types.ts (load-bearing: sem ela, 74 "unused exported types" espúrios) e !src/migrations/** (paridade com o escopo de história congelada) para o project, e removendo o bloco paths inerte. Rejeitados: alias de server-only no tsconfig (funcionaria no load — o jiti do knip usa tsconfigPaths: true — mas re-apontaria a guarda para um no-op na toolchain inteira, risco da classe OPS69) e destrackear o importMap (não remove a causa e reabre o admin em branco). Provado: pnpm knip sai 0 sem o ERROR, um export morto plantado é detectado, e uma corrida de controle com server-only neutralizado para o plugin carregar produz findings idênticos. Fecha a linha do docs/TECH-DEBT.md; knip:production segue fora de escopo (32 unused-deps pré-existentes). Sem schema, sem UI, sem deploy. Issue #1094.