mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
5.4 KiB
5.4 KiB
Impl: Acabar com o warning do pnpm sobre pnpm.onlyBuiltDependencies ignorado
Status: aprovado Atualizado em: 2026-08-18 Issue: #12 Intenção: docs/plans/ops54-pnpm-warning-onlybuiltdependencies.md Appetite restante: herdado (~2–4 h; executável em bem menos — mudança de 3 arquivos)
Leitura da intenção
- Outcome: nenhum comando pnpm (terminal, CI, Dockerfile) imprime o
[WARN]do campopnpm; a allowlistonlyBuiltDependencies(sharp,esbuild,unrs-resolver) volta a ser honrada no lugar canônico que o pnpm 10 aponta. - O que NÃO negociar:
.npmrcintocado (legacy-peer-deps,include);packageManagerintocado; grafo de dependências inalterado (pnpm install --frozen-lockfilecontinua passando); nada além do que o warning cita é migrado. - O que reavaliar: a hipótese da intenção já é a abordagem correta (pnpm-workspace.yaml). Ponto novo verificado empiricamente com a versão pinada (10.11.0):
pnpm-workspace.yamlsem o campopackagesfunciona (single-package repo vira workspace de raiz, default['.']); o lockfile existente só tem um importer raiz — consistente.
Abordagem recomendada
flowchart LR
A[package.json\nremove campo pnpm] --> C[pnpm-workspace.yaml\nonlyBuiltDependencies]
B[Dockerfile deps\n+ COPY pnpm-workspace.yaml] --> D[pnpm install --frozen-lockfile\nsem warning, allowlist honrada]
C --> D
Opções consideradas: A (pnpm-workspace.yaml — recomendado) | B (.npmrc) | C (manter campo + ignorar)
Recomendação: A — é o novo home canônico de settings do pnpm 10 e o destino que o próprio warning aponta; validado empiricamente com a versão pinada (10.11.0): sem warning, pnpm config get onlyBuiltDependencies → sharp,esbuild,unrs-resolver, --frozen-lockfile limpo.
Rejeitadas:
- B (.npmrc): ainda suportado, mas caminho legado para este tipo de setting; o guardrail da intenção proíbe tocar
.npmrc(e não há warning pedindo isso). - C (ignorar): falha o aceite (warning persiste + allowlist continua ignorada).
- (implicita) manter o campo
pnpm: o warning só some com a remoção do campo — a config no novo lugar não silencia o aviso.
Componentes / mudanças
pnpm-workspace.yaml(novo, raiz):onlyBuiltDependencies: [sharp, esbuild, unrs-resolver]. Sem campopackages(default['.']em pnpm 10.7+; repo single-package — validado). Sem comentários.package.json: remover o bloco"pnpm": { "onlyBuiltDependencies": [...] }(linhas 186–192). Nada mais no arquivo muda.Dockerfile(estágiodeps, linha atualCOPY package.json pnpm-lock.yaml ./): passar a copiar tambémpnpm-workspace.yaml— opnpm install --frozen-lockfileda imagem precisa da config para honrar a allowlist (sem ela, local e Docker divergiriam: local rodaria os builds desharp/esbuild/unrs-resolver, Docker não). Estágiosbuilder/migratorusamCOPY . .— o.dockerignorenão exclui o YAML, já cobertos.- Changelog:
docs/changelog/2026-08-18-ops54.md+pnpm changelog:build(OPS44). - Migration: sem migration (config de ferramenta).
- Access / Consent / UI: N/A.
Dados → forma (se aplicável)
N/A — sem métricas/UI.
Fases verificáveis
- Config + Dockerfile — criar
pnpm-workspace.yaml, remover campopnpm, ajustar COPY dodeps. - Verificação local —
pnpm install --frozen-lockfile(sem warning, sem diff no lockfile —git statuslimpo depois);pnpm config get onlyBuiltDependencies→ 3 pacotes; rodada de gates:typecheck,lint,format:check,knip,check:cycles,test:unit. - Docker —
docker build --target deps .(não precisa de secrets) provando o estágio deps com a config nova. - Gates —
pnpm gate:fast; push viapnpm push; CI Forgejo verde (o CI rodapnpm install --frozen-lockfileem todos os jobs — é a prova final do warning sumindo).
Rabbit holes / Não escopo (engenharia)
- Mover
legacy-peer-deps/includedo.npmrcpara o YAML — fora de escopo (nenhum warning pede). dangerouslyAllowAllBuildsou re-approve de outros pacotes — fora de escopo.- Atualizar pnpm /
packageManager— fora de escopo. - Comentários no YAML — não adicionar (convenção do repo); o plano + changelog documentam o porquê.
Riscos e mitigação
pnpm-workspace.yamlsempackagesmuda semântica de workspace? Baixo: pnpm 10.7+ defaultapackages: ['.']; lockfile atual tem um único importer raiz; validado no sandbox com a versão pinada (install + frozen-lockfile limpos). Sepnpm installlocal apontar drift, o passo 2 pega na hora.- Docker build sem a config no
depssilenciosamente bloquearia os builds dos 3 pacotes na imagem (regressão de comportamento local×Docker): mitigado pelo COPY explícito + verificação comdocker build --target deps. - OPS53 compartilha o Dockerfile: já resolvido — OPS53 está merged em
main(6a3f61f9); sem concorrência em andamento. - CI com cache pnpm (pnpm/action-setup): o cache é por lockfile — inalterado — então
cache: pnpmsegue batendo. Sem risco.
Aceite de engenharia
- Aceite de produto da intenção ainda coberto (warning some; allowlist honrada;
.npmrc/packageManager/grafo intactos) - Invariantes AGENTS/engineering-standards (sem código runtime tocado; sem migration; sem DB)
- Testes de domínio previstos: N/A (sem access/write paths); verificação empírica local + estágio Docker deps + CI como prova