fix(ci): verificar-docs separa falha de setup de achado de docs [INFRA-68918] #64

Merged
tmf-ia merged 4 commits from fix/INFRA-68918-verificar-docs-setup-vs-achado into develop 2026-10-08 19:52:19 -03:00
Owner

O que

O reusável verificar-docs-produto.yml passa a distinguir falha de SETUP de achado de DOCS. Epic de gates falsos INFRA-68918 (frente de diagnóstico).

Hoje o check Verificar docs/ (ADR 0012) vermelho confunde:

  • (a) o verificador rodou e reprovou o docs/ (achado real), e
  • (b) o SETUP falhou (token do TMF/ORG ausente, clone do verificador, pip) e o verificador nem rodou.

Os dois viravam o mesmo "failure", mandando investigar o docs/ quando o problema era infra.

Caso real (HelpCor, hoje)

Verificar docs/ vermelho em todos os PRs do helpcor-admin era o secret ORG_LEITURA_TOKEN ausente no repo/usuário tarcisio — o docs/ está conforme (total 0 achados, confirmado por reprodução e independentemente pela sessão do HelpCor). Custou ~1h até isolar que não era documentação.

Mudança (aditiva — NÃO muda o resultado do job)

Passo Natureza da falha — setup ou documentação (if: failure()): lê steps.rodar.outcome. Se o verificador reprovou → mensagem DOCS (corrija o docs/). Se nem rodou → mensagem SETUP apontando a causa (token/clone/pip) e deixando claro que o docs/ não foi reprovado. Só rotula; o veredito do verificador é o mesmo.

Validação

tests/ci-unico (TestNaturezaDaFalha: existe, if: failure(), distingue por outcome, roda depois do verificador) + soberania verdes. YAML válido.

O fix do caso HelpCor em si (setar ORG_LEITURA_TOKEN) é do operador (owner do repo) — este PR não resolve aquele token; torna o próximo caso auto-explicativo.

Epic: INFRA-68918

🤖 Generated with Claude Code

## O que O reusável `verificar-docs-produto.yml` passa a **distinguir falha de SETUP de achado de DOCS**. Epic de gates falsos **INFRA-68918** (frente de diagnóstico). Hoje o check `Verificar docs/ (ADR 0012)` vermelho confunde: - (a) o verificador rodou e **reprovou o docs/** (achado real), e - (b) o **SETUP falhou** (token do TMF/ORG ausente, clone do verificador, pip) e o verificador **nem rodou**. Os dois viravam o mesmo "failure", mandando investigar o docs/ quando o problema era infra. ### Caso real (HelpCor, hoje) `Verificar docs/` vermelho em **todos** os PRs do helpcor-admin era o secret `ORG_LEITURA_TOKEN` ausente no repo/usuário `tarcisio` — o docs/ está **conforme** (total 0 achados, confirmado por reprodução e independentemente pela sessão do HelpCor). Custou ~1h até isolar que não era documentação. ## Mudança (aditiva — NÃO muda o resultado do job) Passo `Natureza da falha — setup ou documentação` (`if: failure()`): lê `steps.rodar.outcome`. Se o verificador reprovou → mensagem **DOCS** (corrija o docs/). Se nem rodou → mensagem **SETUP** apontando a causa (token/clone/pip) e deixando claro que o docs/ **não** foi reprovado. Só rotula; o veredito do verificador é o mesmo. ## Validação `tests/ci-unico` (TestNaturezaDaFalha: existe, `if: failure()`, distingue por `outcome`, roda depois do verificador) + soberania verdes. YAML válido. > O fix do caso HelpCor em si (setar `ORG_LEITURA_TOKEN`) é do operador (owner do repo) — este PR não resolve aquele token; torna o **próximo** caso auto-explicativo. Epic: **INFRA-68918** 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(ci): verificar-docs separa falha de setup de achado de docs [INFRA-68918]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 3m8s
c0404520d4
O check "Verificar docs/ (ADR 0012)" vermelho confundia duas coisas: (a) o
verificador rodou e reprovou o docs/ (achado real) e (b) o SETUP falhou (token do
TMF/ORG ausente, clone do verificador, pip) e o verificador NEM RODOU. Os dois
viravam o mesmo "failure", mandando investigar o docs/ quando o problema era infra.

Caso real (HelpCor, hoje): "Verificar docs/" vermelho em todos os PRs era o secret
ORG_LEITURA_TOKEN ausente no repo/usuário tarcisio — o docs/ está conforme (total 0
achados, verificado por reprodução). Custou ~1h até isolar.

- passo aditivo `Natureza da falha — setup ou documentação` (if: failure()): lê
  steps.rodar.outcome; se o verificador reprovou, diz DOCS; se nem rodou, diz SETUP
  e aponta a causa (token/clone/pip) e que o docs NÃO foi reprovado. NÃO muda o
  resultado do job — só rotula.
- tests/ci-unico: TestNaturezaDaFalha (existe, if: failure(), distingue por outcome,
  roda depois do verificador).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SCXwCdbp97ioN6p3rC3diT
fix(ci): caller DEVE declarar secrets: ORG_LEITURA_TOKEN (with: chega vazio) [INFRA-68918]
Some checks failed
PR checks (ci-shared) / testes (pull_request) Has been cancelled
b5c4bfa26a
Causa raiz do HelpCor (Lineu, medido): o token NÃO estava ausente — existe desde
05/10. O chamador do HelpCor passava só via `with: org_leitura_token: ${{ secrets.X }}`,
e o Forgejo NÃO resolve secret dentro de `with:` de workflow_call: chega vazio. Os 7
produtos verdes todos declaram `secrets: ORG_LEITURA_TOKEN:` no caller (caminho 2).
HelpCor: 18/18 falhas por usar só o caminho 1.

Atualiza o reusável para não gerar outro caso (aditivo, sem mudar comportamento):
- descrição do input org_leitura_token: alerta que with: chega vazio; o caller TEM
  de declarar secrets: (input mantido só por compat);
- cabeçalho (ordem do token): caminho 1 marcado como não-funcional sozinho, caminho 2
  (secrets:) é o que funciona e é obrigatório;
- mensagem do exit 1 (sem token) e do rótulo de SETUP: citam explicitamente
  "declare secrets: ORG_LEITURA_TOKEN: no caller".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SCXwCdbp97ioN6p3rC3diT
fix(ci): tira ${{ }} das mensagens do verificar-docs (expande antes do shell)
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 3m0s
42afe67d19
O commit anterior citava 'with: ... ${{ secrets.X }}' literalmente nas mensagens de
erro dentro de run: — e o test_script_do_clone_nao_tem_expressao_do_runner pegou: o
Forgejo expande ${{ }} ANTES do shell (o \ não escapa), então um ${{ secrets.X }}
numa mensagem injetaria o secret. Reescrito como "pelo input with: org_leitura_token
(interpolando o secret)", sem o literal ${{. Mesma informação, sem o risco que o
próprio teste existe para barrar. 84 testes verdes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SCXwCdbp97ioN6p3rC3diT
merge: origin/develop -> fix/INFRA-68918-verificar-docs-setup-vs-achado
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 3m1s
ee8de97b41
Atualiza a branch com a base (pr.py atualizar: merge --no-commit + commit como tmf-ia).
tmf-ia merged commit 24987a5ec4 into develop 2026-10-08 19:52:19 -03:00
Sign in to join this conversation.
No reviewers
No labels
seguranca
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
TMF/ci-shared!64
No description provided.