ADR 0267 — O E2E do brabo-qa é portão da main, com aceite justificado
- Status: aceito
- Data: 2026-11-06
- Tema:
git - Referencia: revisa o ADR 0255 (lista de checks obrigatórios), o ADR 0119 (imagem também no
-deve nosha-*) e o ADR 0120 (E2E contra as imagens publicadas). AT-765, decisões do dono de 06/11/2026. Os ADRs revisados não são editados.
Contexto
O brabo-qa não aprova nada: o E2E de navegador não roda em CI, não existe gatilho entre repositórios e uma PR não gera imagem. Um merge na main de brabo-api, brabo-engine, brabo-web, brabo-broker, brabo-infra ou do próprio brabo-qa podia quebrar a stack sem que o E2E fosse sequer executado.
Decisão
- Imagens (D1). Cada carimbo
vX.Y.Z-dev.Nde api, engine, web e broker publica imagem, com build, Trivy,cosign signkeyless eimagem.jsonpelo digest. A tag-devnão cria Release no GitHub: oimagem.jsonvai como artefato do run. A PR dehotfix/*para amainpublicaghcr.io/viralabs-dev/brabo-<app>:sha-<12 primeiros caracteres do head>. Limpeza no GHCR: as-dev.*guardam as 10 mais novas, assha-*saem quando a PR fecha evX.Y.Znunca sai. - Aceite (D2). O comando
/qa-aceitar <justificativa>, num comentário de PR com destinomain, é aceito só doOWNER_HANDLE, com pelo menos 20 caracteres de justificativa, e só vale comoissue_comment.created. Aceita apenas com o check do head atual vermelho porspecouambiente. Nunca aceita vermelho dedigestnem deassinatura. Ao aceitar, o check virasuccesscom o título "Aceito com justificativa", entra a labelqa-aceito-com-justificativae o bot responde. Commit novo gera check novo, e o aceite antigo não vale para ele. - Repositórios (D3). Exigem o E2E:
brabo-api,brabo-engine,brabo-web,brabo-broker,brabo-infraebrabo-qa. Obrabo-contractsfica de fora, porque api e web o fixam por tag e o E2E não testaria a mudança de contrato. - Check obrigatório (D4). O check
E2E do brabo-qa, publicado pelo Appviralabs-dev-brabo, é exigido por um ruleset novo, "main exige E2E": sórefs/heads/main, contextoE2E do brabo-qacom ointegration_iddo App e bypass só para o próprio App (decisão do dono na execução da AT-765, por causa do gate de hotfix; ativado em 07/11/2026). O rulesetmain e dev sem force pushnão muda. O gatilho resolve cada tag em digest e dispara o eventoe2e-prnobrabo-qa. O check em andamento vira órfão depois de 90 min, e uma varredura horária o fecha como vermelho. - Prova das imagens (D5). O E2E roda as imagens por digest (
@sha256:), confere que cada container de pé tem exatamente o digest esperado (basta umRepoDigestsigual; lista vazia reprova) e verifica a assinatura cosign desse digest. A espera por um digest ainda não publicado é de 30 min, consultando a cada 30 s. - Idioma (D6). Este ADR e a documentação do trabalho são em pt-BR (ADR 0266).
- A exceção registrada. O
rulesets.mddizia que check obrigatório não se burla. O aceite com justificativa é a única exceção, registrada aqui: vale para o vermelho despece deambiente, e nunca paradigestnemassinatura, porque aceitar uma imagem não provada não é escolha disponível. Os demais checks obrigatórios seguem sem exceção.
Consequências
- A lista de checks obrigatórios do ADR 0255 ganha um contexto, só na
maine só nos seis repositórios. - O ADR 0119 passa a valer também para
-dev.Nesha-*, que ficam sujeitas à retenção acima. - O ADR 0120 passa a valer em PR: o E2E roda contra as imagens publicadas, por digest, e não contra o build local.
- Se a instalação do App não tiver
checks: writenos seis repositórios econtents: writenobrabo-qa, ampliar é um gesto do dono na org.