fix(sync-docs): raiz sem docs/ falha fechado + compliance/security na denylist (INFRA-64941) #66

Merged
tarcisio merged 1 commit from fix/INFRA-64941-sync-docs-fail-closed into develop 2026-10-08 19:57:44 -03:00
Owner

INFRA-64941 — sync docs → Hub: falha fechado em raiz vazia + denylist compliance/security

O que muda

  1. scripts/docs/sync_docs_to_hub.py: raiz sem docs/ (ou docs/ sem nenhum .md) agora sai com exit 2 e mensagem clara, em vez de imprimir Sync 0 arquivos com exit 0 (sucesso falso com --repo-root errada). A checagem roda antes também de --prune/--dedup (raiz vazia faria todo artigo do produto parecer órfão). Nova flag --allow-empty para quem não tem docs/ de propósito.
  2. DENY_PATH_DIRS recupera compliance e security (regressão da troca de SKIP_DIRS → denylist), case-insensitive como legal/seguranca.
  3. Reusável sync-docs-to-hub.yml: input allow_empty (default false) repassa --allow-empty. Callers conferidos (tmf-platform, tmf-management, tmf9, Fina, Priceshow): nenhum precisa dele hoje (Fina/Priceshow com gatilho desligado; tmf-management só por dispatch e exige docs/).

Testes (tests/sync-docs-filtro, 21 OK; 4 dos novos falham no script antigo):

  • raiz sem docs/ → 2; docs/ sem .md → 2; --allow-empty → 0; produto normal → 0
  • docs/compliance/x.md e docs/security/x.md (audiencia: interno) e Security/ maiúsculo → BARRADO
  • docs/area-nova/x.md com audiencia: confidencial → BARRADO (controle positivo)
  • doc público em guias/ → enviado (controle negativo); shim sem filtro enviaria compliance/

🤖 Generated with Claude Code

## INFRA-64941 — sync docs → Hub: falha fechado em raiz vazia + denylist compliance/security **O que muda** 1. `scripts/docs/sync_docs_to_hub.py`: raiz sem `docs/` (ou `docs/` sem nenhum `.md`) agora sai com **exit 2** e mensagem clara, em vez de imprimir `Sync 0 arquivos` com exit 0 (sucesso falso com `--repo-root` errada). A checagem roda antes também de `--prune`/`--dedup` (raiz vazia faria todo artigo do produto parecer órfão). Nova flag `--allow-empty` para quem não tem `docs/` de propósito. 2. `DENY_PATH_DIRS` recupera `compliance` e `security` (regressão da troca de `SKIP_DIRS` → denylist), case-insensitive como `legal`/`seguranca`. 3. Reusável `sync-docs-to-hub.yml`: input `allow_empty` (default `false`) repassa `--allow-empty`. Callers conferidos (tmf-platform, tmf-management, tmf9, Fina, Priceshow): nenhum precisa dele hoje (Fina/Priceshow com gatilho desligado; tmf-management só por dispatch e exige `docs/`). **Testes** (`tests/sync-docs-filtro`, 21 OK; 4 dos novos falham no script antigo): - raiz sem `docs/` → 2; `docs/` sem `.md` → 2; `--allow-empty` → 0; produto normal → 0 - `docs/compliance/x.md` e `docs/security/x.md` (`audiencia: interno`) e `Security/` maiúsculo → BARRADO - `docs/area-nova/x.md` com `audiencia: confidencial` → BARRADO (controle positivo) - doc público em `guias/` → enviado (controle negativo); shim sem filtro enviaria `compliance/` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(sync-docs): raiz sem docs/ falha fechado e compliance/security voltam à denylist (INFRA-64941)
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 3m23s
80d28e13f1
- sync_docs_to_hub.py: raiz sem docs/ (ou sem .md) sai com exit 2 e mensagem
  clara, em vez de 'Sync 0 arquivos' com exit 0; nova flag --allow-empty.
  Vale também para --prune/--dedup (raiz vazia faria tudo parecer órfão).
- DENY_PATH_DIRS recupera compliance e security (regressão da troca de
  SKIP_DIRS), case-insensitive como os demais.
- Reusável sync-docs-to-hub.yml: input allow_empty (default false) repassa
  --allow-empty; nenhum caller atual precisa dele.
- Testes: raiz sem docs/ -> 2, --allow-empty -> 0, compliance/security
  barrados, confidencial em pasta renomeada barrado, público enviado,
  controle sem filtro.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tarcisio merged commit ade2f7992e into develop 2026-10-08 19:57:44 -03:00
tarcisio deleted branch fix/INFRA-64941-sync-docs-fail-closed 2026-10-08 19:57:44 -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!66
No description provided.