O pnpm install da camada deps do Dockerfile falha no homeserver porque o
postinstall do sharp@0.32.6 (dependência do @imgly/background-removal-node,
usado só pelo script local resize-images) baixa o libvips de
objects.githubusercontent.com, que não conclui downloads a partir do
homeserver (3 deploys falhos: 'sharp: Installation error: Request timed
out'). O cache do BuildKit já não esconde o problema: o builder prune do
pós-deploy limpa a camada deps a cada deploy bem-sucedido.
O override força o sharp transitivo para 0.34.2 (versão direta do app):
a partir do 0.33 os binários vêm de pacotes do npm registry
(@img/sharp-libvips-*), que o homeserver alcança — o install deixa de
depender de github releases. Lockfile regenerado: sai sharp@0.32.6 e toda
a subárvore prebuild-install (tar-fs, simple-get, bare-*, ...); imgly passa
a resolver sharp 0.34.2 (symlink conferido). Smoke do script
resize-images (import + processamento webp) verde; format/lint/tsc/unit
pin/guard do importMap verdes.
O deploy de fea6c645 falhou 2x: a mudança do script generate:importmap
em package.json invalidou a cache da camada deps do Dockerfile no
homeserver, e o pnpm install re-rodou do zero — o postinstall do
sharp@0.32.6 (transitivo) estourou o timeout baixando o libvips de
objects.githubusercontent.com ('sharp: Installation error: Request
timed out'; o git fetch de github.com funciona — o release vai por
outro hostname da CDN). Produção intocada (falha pré compose swap).
Reverte package.json ao byte do estado cacheado (a9f0c61e) — o install
nem roda. Remove o wrapper generate-importmap.mjs (desligado vira dead
code); proteção do importMap fica com o guard CI+deploy + pin unit +
contrato. Hardening do deps documentado no post-mortem (retry do
install / libvips via apk / proxy), changelog do follow-up incluído.
O importMap commitado perdeu a entrada do handler S3 no 1c865bd8
(regenerado sem as envs S3_*): com S3_* em prod, getFromImportMap
retorna undefined e a raiz do Payload não monta — tela branca, zero
erros de console, invisível no loop local (storage local em dev/test).
Fix da causa: regeneração com S3_* dummy (+2 linhas). Prevenção no
mesmo PR — o guard planejado no OPS69 (depends #77/#87) que nunca
existiu: pin unit, guard CI+deploy que regenera com envs dummy e falha
em divergência, wrapper do generate:importmap que injeta as envs, e
contrato compartilhado da chave. Post-mortem + changelog incluídos.
O dispatch manual do C139 montava new FormData(form) sem o submitter;
os botões de transição (name=status value=aprovada|rejeitada|…) nunca
viajavam e transitionDemandFormAction rejeitava toda decisão por status
vazio. submitterFrom (cast honesto nativeEvent as SubmitEvent) + segundo
arg do construtor nos handlers de transição e custo; C139 intacto.
Teste unit novo pina o glue FormData→status (SubmitEvent real, não
fireEvent.submit). E2e 'advisor opens a demand and decides it' verde
local (isolado e em runs de arquivo inteiro).