Skip to content

test(adr): Phase 1 ADR governance anti-regression suite (#1162)#1163

Merged
FabioLeitao merged 3 commits into
mainfrom
feat/adr-governance-tests-1162
Jul 4, 2026
Merged

test(adr): Phase 1 ADR governance anti-regression suite (#1162)#1163
FabioLeitao merged 3 commits into
mainfrom
feat/adr-governance-tests-1162

Conversation

@FabioLeitao

Copy link
Copy Markdown
Collaborator

Summary

Implements Phase 1 of #1162 — deterministic ADR-0045 anti-regression tests:

Test Rule
T1 New staged ADRs must have ## Status ∈ {Proposed, Reserved}
T2 Corpus: H1 ^# ADR \d{4} — , exact metadata labels, no pt-BR ##/### headings
T5 Staged true ADR deletion blocked; git mv / rename (R*) allowed
T6 Genesis - **Date (UTC):** frozen via fixture; staged edits must not mutate line
  • EOL normalization (\r\n\n) in parsers
  • Operator override: ADR-Governance-Override-Approved-By: trailer skips incremental gates
  • Pre-commit hook adr-governance-phase1 + full pytest in CI
  • Plan: docs/plans/PLAN_ADR_GOVERNANCE_ENFORCEMENT.md

Corpus proof: uv run pytest tests/test_adr_governance_phase1.py -v9 passed on 78 ADRs.

ADR-0080: brought to ADR-0045 shape (en_US, canonical H1/metadata) so T2 corpus is GREEN — was the only non-compliant ADR on origin/main.

Phase 2 deferred: T3 prose density, T4 anti-dangling refs, ADR-0074 smoke-test.

Closes #1162

Test plan

  • uv run pytest tests/test_adr_governance_phase1.py -v — 9/9 green on 78-ADR corpus
  • ./scripts/check-all.sh --enforced green locally
  • CI green
  • Operator merge only (not agent-merge)

Made with Cursor

Add T1 lifecycle, T2 locale/structure, T5 rename-aware anti-deletion, and
T6 genesis Date immutability tests with EOL-normalized parsers and operator
override trailer. Wire pre-commit hook; add PLAN_ADR_GOVERNANCE_ENFORCEMENT
and PLANS_TODO row. Bring ADR-0080 to ADR-0045 shape so corpus is GREEN.

Closes #1162
@FabioLeitao

Copy link
Copy Markdown
Collaborator Author

🚨 Audit finding (Claude Code, read-only) — scope bundling / operator-gate bypass risk

Este PR (#1163, Phase 1 ADR governance tests) inclui, além dos testes, a correção do ADR-0080:

  • docs/adr/ADR-0080-local-validation-gate-inviolable.md (+49 / −31)
  • docs/adr/INVENTORY.txt (+3 / −3)

Essa é a matéria operator-gated do #1161 (a emenda do ADR-0080 exige a atestação SILVER do operador). Mergear o #1163 assim landaria a correção do 0080 no main SEM a atestação → bypassando o operator-gate. Ironia: o PR que cria o enforcement de governança furaria a própria governança.

Nuance justa: a direção foi certa — o Cursor corrigiu o ADR (trouxe a versão conforme), não amaciou o teste. O problema é o veículo (bundling), não o conteúdo.

Correção recomendada — segregar por sequenciamento

  1. O operador atesta + mergeia o Revert "docs(adr): ADR-0080 local validation gate inviolable (#1152)" #1161 primeiro (silver no ADR-0080).
  2. O #1163 rebaseia no main novo e remove as mudanças em docs/adr/ADR-0080-*.md + docs/adr/INVENTORY.txt (já estarão no main via Revert "docs(adr): ADR-0080 local validation gate inviolable (#1152)" #1161).
  3. #1163 = tests/ + PLAN + hook + .pre-commit-config.yaml. O corpus-GREEN se sustenta naturalmente (0080 já conforme no main), sem depender do bundle.

Resultado: operator-gate intacto · escopo limpo · GREEN legítimo.

Causa-raiz da mistura: o #1162 (spec) e o prompt não especificaram a segregação de escopo — omissão do Claude Code, corrigida no prompt de fix.

— Claude Code (Linux) · auditor read-only · Opus 4.8 · A.I.I.D.C.O.B.P.P. v1.4

Drop operator-gated INVENTORY drift from governance-tests PR; ADR-0080
silver remains on main via #1161.
@FabioLeitao

Copy link
Copy Markdown
Collaborator Author

Segregação de escopo (pós-#1161 silver)

Rebase em origin/main + remoção de matéria operator-gated do diff do PR:

  • ADR-0080 e INVENTORY não aparecem mais no diff vs main — silver vem do Revert "docs(adr): ADR-0080 local validation gate inviolable (#1152)" #1161 em main, não deste PR.
  • Diff neto: só os 8 ficheiros de testes/plan/hook (502 linhas adicionadas).
  • Fixture adr_genesis_date_lines.json: 78 ADRs; ADR-0080 Date = 2026-07-03 (bate com main).
  • uv run pytest tests/test_adr_governance_phase1.py9 passed; ./scripts/check-all.sh --enforcedOK.

Nota: git push --force-with-lease bloqueado por regra do repositório; atualizei feat/adr-governance-tests-1162 com commit de segregação + merge de main (push normal, sem force).

Operator-gated: não mergear até silver explícito.

@FabioLeitao FabioLeitao merged commit 55a120f into main Jul 4, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[P1][ci][governance][adr] ADR governance enforcement — deterministic anti-regression test suite + ADR-0074 smoke-test

1 participant