teqo-backup/docs/plans/ops54-pnpm-warning-onlybuiltdependencies.md

80 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Acabar com o warning do pnpm sobre `pnpm.onlyBuiltDependencies` ignorado
Status: registrado
Atualizado em: 2026-08-17
Issue: #12
Priority: P2
Model: composer-2.5
Impeccable: A — N/A (sem UI)
Rascunho UI: N/A — sem UI
Appetite: ~2–4 h eng; um outcome verificável
Responsável: —
## Intenção
Todo comando pnpm no terminal imprime, antes de executar:
```
[WARN] The "pnpm" field in package.json is no longer read by pnpm.
The following keys were ignored: "pnpm.onlyBuiltDependencies".
See https://pnpm.io/settings for the new home of each setting.
```
Desde o pnpm 10, o campo `pnpm` do `package.json` não é mais lido — os
settings migraram para `pnpm-workspace.yaml` (ou `.npmrc`). Além do ruído em
toda sessão de terminal (dev, CI, builds do Docker), o warning diz que a
allowlist `onlyBuiltDependencies` (`sharp`, `esbuild`, `unrs-resolver`) está
**sendo ignorada hoje**: a intenção original de permitir os build scripts
desses pacotes não chega ao pnpm. Queremos o warning sumindo e a allowlist
voltando a valer, no lugar canônico que o próprio pnpm aponta.
## Persona e fluxo
- **Persona / contexto:** dev e agentes (pool, worktrees) — todo comando pnpm, incluindo CI e build da imagem do homeserver (OPS53).
- **Job principal:** rodar qualquer comando pnpm sem a linha de warning, com a config de build scripts honrada.
- **Fluxo desejado:** `pnpm install` / `pnpm dev` / CI / `docker build` → sem `[WARN]`; `pnpm config get onlyBuiltDependencies` retorna os 3 pacotes; `sharp`/`esbuild`/`unrs-resolver` continuam com seus builds permitidos.
- **Anti-goals de produto:** reconfigurar pnpm além do que o warning cita; mudar versão/packageManager; mexer em `.npmrc` (`legacy-peer-deps`, `include`) ou na política de approve de build scripts de outros pacotes.
## Objetivo e aceite
- Nenhum comando pnpm (install/dev/scripts, CI Forgejo, estágio `deps` do Dockerfile) imprime mais o warning do campo `pnpm` em package.json.
- `pnpm config get onlyBuiltDependencies` retorna `sharp`, `esbuild`, `unrs-resolver` (a allowlist passa a ser honrada — ela não é hoje).
- Build e suíte completa verdes (mesmos passos do checklist local do `AGENTS.md`), incluindo `pnpm install --frozen-lockfile` sem tocar o grafo de dependências.
- Imagem Docker continua construindo o app (estágio `deps` copia o novo arquivo de config).
- Guardrail: `.npmrc`, `packageManager` e o restante do `package.json` ficam intocados.
## Dados (intenção)
Dados: N/A — configuração de ferramenta; nenhuma métrica/UI envolvida.
## Direção no codebase (hipótese)
- **Áreas prováveis:** raiz do repo — `package.json` (remover o campo `pnpm`), novo `pnpm-workspace.yaml` (raiz, com `onlyBuiltDependencies`), `Dockerfile` (estágio `deps` copia `pnpm-workspace.yaml` para a imagem).
- **Precedente a olhar:** pnpm docs (https://pnpm.io/settings — novo home dos settings); planos OPS50/51/53 (que tocaram CI/Dockerfile recentemente).
- **Risco de acoplamento:** `Dockerfile` é compartilhado com OPS53 (deploy homeserver, ainda `blocked`) — se os dois executarem próximos, coordenar o estágio `deps`. Verificado: nenhum script/skill lê o campo `pnpm` do package.json além do próprio pnpm; nada referencia `pnpm-workspace.yaml` hoje; `pnpm install --frozen-lockfile` deve seguir passando (grafo inalterado).
## Dependências
- Nenhuma. (OPS53 só se sobrepõe no arquivo Dockerfile se executar em paralelo.)
## Fora de escopo
- Mover outros settings (`legacy-peer-deps`, `include`) do `.npmrc` para `pnpm-workspace.yaml` — sem item, só se um warning futuro pedir.
- Atualizar pnpm / `packageManager` — fora de escopo.
- Renomear ou re-approvar build scripts de outros pacotes — fora de escopo.
## Rabbit holes de produto
- **Migração ampla de config.** Se alguém "só completar", move tudo que existe para o YAML novo e muda comportamento não reclamado. **Corte neste item:** apenas `onlyBuiltDependencies`, que é exatamente o que o warning cita.
- **Mudar a política de build scripts.** A tentação de trocar a allowlist por `dangerouslyAllowAllBuilds` etc. **Corte:** manter a allowlist como está, só realocada.
## Questões em aberto (produto)
- **Onde hospedar a config?** **Opções:** (A) `pnpm-workspace.yaml` — novo home canônico, é o destino que o próprio warning aponta; (B) `.npmrc` — ainda suportado, mas caminho legado para esse tipo de setting. **Recomendação:** A. _(assumido — validar com produto)_
- **ID OPS54 ok?** Último OPS usado é o 53 (registrado 2026-08-17). **Recomendação:** sim, próximo da trilha. _(assumido — validar)_
## Referências
- pnpm settings: https://pnpm.io/settings
- `package.json` (campo `pnpm` nas linhas 187–193), `Dockerfile` (estágio `deps`), `.npmrc`
- `docs/plans/ops53-ci-deploy-homeserver.md` (compartilha o Dockerfile)