ADR 0271 — Cada run do Actions mostra os vínculos entre os repositórios
- Status: aceito
- Data: 2026-11-07
- Tema:
engenharia - Referencia: complementa o ADR 0267 (o dispatch do gatilho para o
brabo-qa) e o ADR 0274 (o.git/irmaos-sha.lst). AT-773, decisões do dono de 06/11/2026.
Contexto
Com o Brabo em onze repositórios, ficou difícil ver, num run do Actions, quem de fato o disparou ou quem tem vínculo com aquela rodada. Nenhum workflow tinha run-name, nenhum Summary dizia a origem nem o SHA dos irmãos, o check publicado pelo App só apontava para o run do brabo-qa no fechamento, e o run de origem nunca recebia o link do run que ele disparou. O vínculo existia só no código: no payload do dispatch e nos ref: dev dos checkouts.
Decisão
- Uma action única,
vinculos, nobrabo-ci(.github/actions/vinculos, scriptscripts/ci/vinculos.ts). Escreve no topo do Summary de cada job a tabela## Vínculos(origem, irmãosrepo@SHA, destino e runs disparados, com links) e um diagrama Mermaid. Gravavinculos.mdpara o alarme e o resumo do check reaproveitarem. Entradas:origem(JSON, vazio é o próprio run),irmaos(caminho de checkout ouowner/repo@sha),destinoedisparados. - O helper nunca reprova um job. O step leva
continue-on-error. Todo valor passa por regex antes de entrar (repoviralabs-dev/brabo(-x)?, SHA de 40 hex, PR numérica, URL do GitHub da organização, ator); o que não casa vira?e um::warning::, nunca entra no Markdown nem no Mermaid. Aorigeminválida é só descartada, com aviso. Se o Summary não renderizar o Mermaid, é limite da plataforma: a tabela continua e o bloco aparece como código. run-namecom a origem no workflow de destino. Orun-namede um reutilizável é ignorado, o nome vem do chamador. Nobrabo-qaoe2e-pr.ymlviraE2E ← <repo>#<pr> · <sha> · <ator> · c=<correlação>; os runs de tag viramrelease <tag> ← tag do carimbo. PR e push já têm o título da PR ou do commit; só ganhamrun-nameos runs cujo gatilho esconde a origem (dispatch, agenda, tag).- Correlação
c=<run_id>-<attempt>. Orepository_dispatchresponde 204 sem id e oclient_payloadnão aparece na API de runs. O gatilho mandaorigem.correlacaono payload; ela entra norun-name; depois do dispatch oqa-e2e-disparar.tsconsulta os runs dobrabo-qae casa odisplay_titlecomc=<correlação>, a cada 5 s, por até 60 s. Achou, registra o run emdisparados; não achou, registra o link do check e um aviso. Oattempttorna a correlação única por re-run. - Link de volta pelo check. Um job
anunciar, semneedse em paralelo aoe2e, atualiza o check do App para apontar para o run dobrabo-qadesde o início (details_urle resumo), com o token do App só comchecks: write. Ofecharmantém odetails_urlno fim e anexa os Vínculos. Se oanunciarfalhar, só avisa. - A origem de um run disparado por tag vem da tag. O
tag-releasedobrabo-cigrava a linhaCarimbo: <url do run do carimbo>na mensagem da tag anotada, e ovinculosa lê (git for-each-ref refs/tags/<tag> --format='%(contents)'). O carimbo não procura o run que disparou: a tabela mora no run disparado. - No
braboomontar-layout.shjá grava.git/irmaos-sha.lst(ADR 0274); odocs-check, odocs-deploy, odocs-audite oregenera-geradoso passam à action. Orelease.ymlpassa oinfrapor caminho e a origem pela tag. Os chamadores fixam obrabo-ciem13f3697aaf3e4a151637755babb58422a44db303.
Consequências
- Todo run que lê outro repositório mostra, no primeiro bloco do Summary, quem o originou e quais SHAs de irmãos usou, sem abrir o código.
- Um payload antigo, sem
origem, gera campos vazios e não quebra nada. - O alarme (
alarmar-prova.sh) anexa ovinculos.mdao corpo da issue quando existir. - As provas ao vivo (run do
brabo-qacom nome e tabela, check apontando para o qa,← tag do carimbo) dependem de o App terchecks: write, gesto do dono, e rodam na mesma PRdev → maindas provas do ADR 0267.