2026-06-27_cadencia-deploy-blocked-git-author-luiz¶
Incidente: Deploy de produção do cadencia-app travado em BLOCKED por git author não-membro do time Vercel¶
Data: 27/06/2026 Severidade: Alta Projeto: Cadência (cadencia-app) Duração do impacto: ~38h (27/06 23:27 BRT → 29/06 ~13:32 BRT) Tags: #deploy #vercel #git #regressao #silenciosa #cliente
O que aconteceu¶
A feature do PR #78 (38efe4f — timeline real por-email, DEV-841) foi aprovada e mergeada na master do cadencia-app, mas nunca chegou à produção. A Vercel criou o deployment de produção (webhook disparou normalmente), mas ele ficou em estado BLOCKED — nunca buildou nem assumiu o domínio cadencia.ia.br. Produção continuou servindo o commit anterior (19b8899, 27/06 18h) por ~38h sem nenhum alerta.
Felipe percebeu ao notar que "aprovou o PR mas o deploy não subiu na Vercel". Investigação cruzou GitHub × API Vercel e revelou que todos os deploys com git author = felipeluissalgueiro ficavam READY+alias; o único com author = luizsidiao ficava BLOCKED.
Auditoria da semana (24–27/06, ~30 PRs): só o #78 estava travado. 2 deploys CANCELED em 24/06 eram fila normal (superseded — código entrou em builds posteriores).
Causa raiz¶
- Vercel Hobby bloqueia deploy de produção cujo git author do commit HEAD não seja membro do time Vercel. Mensagem exata da API (
/v13/deployments/<id>→readyStateReason): "Git author284100496+luizsidiao@users.noreply.github.commust have access to the team felipeluissalgueiro's projects on Vercel to create deployments." O Luiz não é membro do time Vercel do Felipe. - O modo de merge do PR #78 preservou o author do Luiz no HEAD. Os PRs #74/#75/#76 subiram porque foram mergeados com "Create a merge commit" → o merge commit ficou author=
felipeluissalgueiro. O #78 foi mergeado de forma que manteve38efe4f(author=Luiz) como HEAD damaster→ BLOCKED. - A checagem de git author vale também para deploy via CLI (
vercel --prod), não só webhook — a Vercel lê o git author do diretório/commit. Por isso uma primeira tentativa de destravar via CLI a partir do checkout parado em38efe4ftambém ficou BLOCKED.
Por que não foi detectado¶
- Estado
BLOCKEDé silencioso: não gera erro de build, não notifica, e o deployment "existe" no painel — fácil confundir com sucesso. O domínio segue no ar (servindo a versão antiga), então nada parece quebrado. - Sem gate de validação pós-merge: nada confirmava que o deploy efetivamente ficou READY e assumiu o alias após aprovar o PR.
- A skill
/aprovar-pr(que mergeia pela conta do Felipe garantindo merge commit de owner) não foi usada nesse PR.
Como foi corrigido¶
- Diagnóstico via API Vercel cruzando
state×meta.githubCommitAuthorLogin×aliasAssignedde todos os deploys de produção da semana. - Confirmada a razão exata no campo
readyStateReason. - No clone
/c/dev/cadencia-app: criadogit commit --allow-emptyautorado pelo Felipe (-c user.email=felipeluissalgueiro@gmail.com) sobreorigin/master— commitc895383, árvore idêntica ao38efe4f. - Push direto na master foi (corretamente) barrado pelo classificador de segurança; deploy disparado via
vercel --proda partir do commitc895383local (author=Felipe) — sem pushar nada ao remote. - Deploy
dpl_Dzu7UqKuP7sXfTuQWGf1dCyew6hBficou READY, assumiucadencia.ia.br(Aliased). Runtime validado:curl https://cadencia.ia.br/→ HTTP 200. - Clone restaurado na branch de trabalho
dev-933, working tree limpo.
Prevenção¶
Checklist / regras pra evitar recorrência¶
- [ ] Ao aprovar PR do Luiz no GitHub: usar SEMPRE "Create a merge commit" — nunca "Squash and merge" nem "Rebase and merge" (esses carimbam o author do Luiz no HEAD → BLOCKED).
- [ ] Preferir a skill
/aprovar-pr(mergeia pela conta do Felipe garantindo merge commit de owner). - [ ] Após aprovar PR, confirmar o deploy:
vercel ls cadencia-appou API → estado deve serREADYealiasAssigned: true. EstadoBLOCKED/UNKNOWN= não subiu. - [ ] Diagnóstico de BLOCKED:
curl .../v13/deployments/<id>→ camporeadyStateReason. - [ ] Destravar sem novo PR: commit vazio de owner +
vercel --proddesse commit (não precisa pushar).
Pattern correto¶
# Destravar deploy BLOCKED por git author (sem tocar o remote):
cd /c/dev/cadencia-app
git fetch origin master
git checkout -B master origin/master
git -c user.name="Felipe Luis Salgueiro" -c user.email="felipeluissalgueiro@gmail.com" \
commit --allow-empty -m "chore(deploy): destrava produção via owner"
vercel --prod --yes --scope felipeluissalgueiros-projects # author=Felipe → READY
# validar: aliasAssigned:true + curl https://cadencia.ia.br → 200
Regra atualizada em¶
- [x] Memória do agente:
feedback_vercel_hobby_git_author.md - [ ] Considerar: adicionar gate de confirmação de deploy READY na skill
/aprovar-pr
Commits relacionados¶
38efe4f— feat(performance): timeline real por-email via scoring_events.post_id (DEV-841) — commit que ficou BLOCKEDc895383— chore(deploy): commit vazio de owner que destravou (local, não pushado)- Deploy:
dpl_Dzu7UqKuP7sXfTuQWGf1dCyew6hB(READY, cadencia.ia.br)
Links relacionados¶
- PR #78: https://github.com/felipeluissalgueiro/cadencia-app/pull/78
- Issue: DEV-841
- Inspect: https://vercel.com/felipeluissalgueiros-projects/cadencia-app/Dzu7UqKuP7sXfTuQWGf1dCyew6hB
Registrado via sistema de incidentes. Ver INDEX.md para histórico completo.