teqo-backup/docs/plans/migration-lock-colateral-pr-sem-schema.md

2.2 KiB
Raw Permalink Blame History

OPS43: migration-lock do CI bloqueia PRs sem schema quando 2+ PRs com schema estão abertos

Status: registrado Atualizado em: 2026-08-12 Issue: #723 (a registrar)

Intenção

O check migration-lock do ci-pr.yml conta todos os PRs abertos que tocam src/migrations/ ou payload-types.ts e falha quando o total é >1 — inclusive para PRs que não tocam schema nenhum. Observado em 2026-08-12: o PR #720 (OPS42, 100% test-infra, zero migrations) ficou BLOCKED por colateral — seus 12 checks próprios verdes, o merge só esperando o lock global segurar por 2+ PRs de schema (#709 C129 e #701 C115) que estavam travados entre si.

Objetivo e aceite

  • Um PR sem mudanças em schema passa no migration-lock independente de quantos PRs com schema estão abertos.
  • A serialização entre PRs com schema permanece (a proteção original: no máximo 1 cadeia de migração aberta).
  • Aceite verificável: com 2 PRs de schema abertos, um PR de teste/UI (sem schema) fica MERGEABLE; e um PR de schema continua BLOCKED quando outro PR de schema está aberto.

Dados (intenção)

N/A — CI workflow.

Direção no codebase (hipótese)

  • ci-pr.yml, job migration-lock: hoje conta o total global e falha se count > 1. Deve falhar só quando o PR que dispara o workflow toca schema e o total global é >1 (ou alternativamente: falhar quando count > 1 e o PR atual está no conjunto). A forma exata (jq com github.event.pull_request + o mesmo test) fica para o impl.

Dependências

  • Nenhuma (não depende do OPS42; observado na sessão dele).

Fora de escopo

  • Repensar o mecanismo de serialização em si (fila, lock por milestone etc.) — o fix mínimo restaura a intenção do guard.
  • PRs antigos de schema já abertos.

Rabbit holes

  • Blindar demais: deixar 2 PRs de schema mergearem por corrida (o guard global pega ambos no push-time). Corte: o fix condiciona a falha ao PR atual tocar schema — o guard original segue intacto para quem toca schema.

Questões em aberto

  • Nenhuma — infra de CI.

Referências

  • ci-pr.yml job migration-lock (falha global count > 1).
  • PR #720 observado BLOCKED com checks próprios verdes (2026-08-12 00:30–01:05 UTC-3).