All checks were successful
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 7s
CI (PR) / plans-only-closes (pull_request) Successful in 8s
CI (PR) / scope (pull_request) Successful in 34s
CI (PR) / lint (pull_request) Successful in 46s
CI (PR) / format (pull_request) Successful in 56s
CI (PR) / typecheck (pull_request) Successful in 38s
CI (PR) / knip (pull_request) Successful in 39s
CI (PR) / cycles (pull_request) Successful in 37s
CI (PR) / unit (pull_request) Successful in 53s
CI (PR) / int (pull_request) Successful in 2m37s
CI (PR) / build (pull_request) Successful in 3m39s
CI (PR) / e2e (2) (pull_request) Successful in 5m25s
CI (PR) / e2e (1) (pull_request) Successful in 5m43s
CI (PR) / checks (pull_request) Successful in 1s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 13s
Agent pool supervisor / tick (pull_request) Successful in 34s
CI / static (push) Successful in 2m35s
CI / int (push) Successful in 2m45s
CI / build (push) Successful in 3m31s
CI / e2e (1) (push) Successful in 5m28s
CI / e2e (2) (push) Successful in 4m14s
CI / checks (push) Successful in 1s
CI / deploy homeserver (teqo-1313) (push) Successful in 8m57s
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