feat(sync-docs): indexa docs de módulo declaradas pelo produto [INFRA-69868] #152

Merged
tmf-ia merged 1 commit from feat/INFRA-69868-sync-docs-modulos into develop 2026-10-27 16:59:16 -03:00
Owner

O quê

O reusável sync-docs-to-hub.yml passa a indexar no Hub também as docs de módulo (packages/<m>/docs/), regra nova da frota (ORG #414). [INFRA-69868]

  • Input novo module_dirs (string, padrão vazio): globs relativos à raiz do produto, ex. packages/*/docs.
  • Input vazio → o script lê docs.module_dirs do .claude/config.json do produto; sem os dois, só docs/, plano idêntico ao de antes.
  • O anonimizador (fail-closed) usa a mesma lista: pede as pastas ao próprio sync (--list-doc-dirs) e recebe cada uma num --raiz (agora repetível).
  • Categoria no Hub = nome do módulo, pela mesma tabela MODULOS_MAP; módulo fora da tabela cai em "Plataforma & Configurações".
  • Cabeçalho do reusável documenta o gatilho do caller: paths: ['docs/**', 'packages/*/docs/**'].

Testes

  • tests/sync-docs-filtro: 37 OK (16 novos em test_docs_modulo.py: doc de módulo entra no plano com a categoria certa e passa pelo anonimizador; produto sem module_dirs gera o mesmo plano).
  • Suíte inteira na imagem tmf-ci-python:3.12-20261009-2e51884: 19 suítes OK.

Fora deste PR

  • --prune/--dedup só tratam slugs docs:*: doc de módulo apagada não sai do Hub (follow-up).
  • Apagar as cópias legadas do sync em tmf-platform/DANI/TMF9 e pôr module_dirs + path no gatilho dos produtos: trabalho de cada repo, depois da release do ci-shared.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2

## O quê O reusável `sync-docs-to-hub.yml` passa a indexar no Hub também as **docs de módulo** (`packages/<m>/docs/`), regra nova da frota (ORG #414). [INFRA-69868] - Input novo `module_dirs` (string, padrão vazio): globs relativos à raiz do produto, ex. `packages/*/docs`. - Input vazio → o script lê `docs.module_dirs` do `.claude/config.json` do produto; sem os dois, **só `docs/`, plano idêntico ao de antes**. - O anonimizador (fail-closed) usa a **mesma lista**: pede as pastas ao próprio sync (`--list-doc-dirs`) e recebe cada uma num `--raiz` (agora repetível). - Categoria no Hub = nome do módulo, pela mesma tabela `MODULOS_MAP`; módulo fora da tabela cai em "Plataforma & Configurações". - Cabeçalho do reusável documenta o gatilho do caller: `paths: ['docs/**', 'packages/*/docs/**']`. ## Testes - `tests/sync-docs-filtro`: 37 OK (16 novos em `test_docs_modulo.py`: doc de módulo entra no plano com a categoria certa e passa pelo anonimizador; produto sem `module_dirs` gera o mesmo plano). - Suíte inteira na imagem `tmf-ci-python:3.12-20261009-2e51884`: 19 suítes OK. ## Fora deste PR - `--prune`/`--dedup` só tratam slugs `docs:*`: doc de módulo apagada não sai do Hub (follow-up). - Apagar as cópias legadas do sync em tmf-platform/DANI/TMF9 e pôr `module_dirs` + path no gatilho dos produtos: trabalho de cada repo, **depois da release do ci-shared**. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01ES1xwVdpQV69zEsuLLKzx2
feat(sync-docs): indexa docs de módulo declaradas pelo produto [INFRA-69868]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m41s
8d620dfab8
Author
Owner

security-reviewer: CLEAN 8d620dfab8

Revisão LGPD/anonimização (agent security-reviewer, só leitura do diff no head):

  • sync e anonimizador usam a mesma lista (--list-doc-dirs → mesmo doc_dirs()/ROOT); falha da listagem derruba o passo (bash -e); lista vazia sem docs → sync falha fechado (INFRA-64941).
  • module_dirs absoluto ou com .. → exit 2; pasta fora do ROOT por symlink é descartada.
  • anonimizador segue fail-closed com várias raízes (PII ou binário não escaneado em qualquer raiz → exit 1).
  • denylist legal/seguranca/compliance vale para docs de módulo (caminho inteiro a partir do ROOT); audiencia intacto.
  • inputs.module_dirs só via env, sempre entre aspas: sem injeção de shell.
    INFO: mensagem final do anonimizador ainda diz "em docs/" (só texto).
security-reviewer: CLEAN 8d620dfab89d891025ce2baff62f7f7071f37eb4 Revisão LGPD/anonimização (agent security-reviewer, só leitura do diff no head): - sync e anonimizador usam a mesma lista (`--list-doc-dirs` → mesmo `doc_dirs()`/ROOT); falha da listagem derruba o passo (bash -e); lista vazia sem docs → sync falha fechado (INFRA-64941). - `module_dirs` absoluto ou com `..` → exit 2; pasta fora do ROOT por symlink é descartada. - anonimizador segue fail-closed com várias raízes (PII ou binário não escaneado em qualquer raiz → exit 1). - denylist legal/seguranca/compliance vale para docs de módulo (caminho inteiro a partir do ROOT); `audiencia` intacto. - `inputs.module_dirs` só via env, sempre entre aspas: sem injeção de shell. INFO: mensagem final do anonimizador ainda diz "em docs/" (só texto).
tmf-ia merged commit d78afa9e24 into develop 2026-10-27 16:59:16 -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!152
No description provided.