Cerebro Studio · Backlog · Changelog
Cerebro • /root/cerebro/docs/changelog/2026/CL-2026-03-19-BK-145.md • 2026-03-19T16:56:16.734Z

CL-2026-03-19-BK-145 · Auditor Diário Read-Only do RioNoTeatro

Escopo: cerebro-kernel (multi-projeto)

Projetos afetados: cerebro-kernel

Aprovação humana obrigatória: não


Resumo

Criado um auditor diário read-only que analiza a árvore do repositório /www/wwwroot/rionoteatro.com.br e envia relatório para o WhatsApp do admin quando há achados. O auditor nunca move, apaga ou edita arquivos.


Entregas

1. Motor Node.js — scripts/auditor_rnt.js

Scanner com 5 categorias de detecção:

| Categoria | O que detecta | Status |

|---|---|---|

| md_fora_docs | .md fora de docs/ | ✅ implementado |

| bk_fora_backlog | BK-* fora de docs/backlog/ ou docs/changelog/ | ✅ implementado |

| sensivel_raiz | arquivos sensíveis na raiz (.env, .json suspeito, nomes com CREDENCIAL/SENHA/TOKEN/RELATORIO/EXPOSTA) | ✅ implementado |

| backup_fora_pasta | backups/temporários fora de backups/ ou admin/cron/backups/ | ✅ implementado |

| orfanhos | PHPs sem referência em require/include (capped a 10) | ✅ implementado |

  • Saída: JSON estruturado em stdout
  • Exit code 1 se houver achados, 0 se silêncio
  • Flags: --dry-run, --verbose, --report-file <path>

2. Wrapper Shell — scripts/auditor_rnt.sh

  • Log em /www/server/cron/auditor_rnt.log
  • Cooldown anti-duplicado: 23h por padrão (1x/dia)
  • WhatsApp via API local http://127.0.0.1:3033/send
  • --dry-run: análise sem envio
  • --force-report: resumo diário mesmo sem achados
  • Formatador de mensagem legível para WhatsApp

3. Whitelist — kernel/config/auditor_rnt_excludes.json

Configuração JSON com:

  • patterns: globs de exclusão (.bak, _bkp, .tmp, etc.)
  • paths: diretórios ignorados (tooling, vendor, uploads, etc.)
  • md_exceptions: .md individuais permitidos na raiz
  • size_threshold_kb: ignora arquivos grandes

Padrões já excluídos: .agent/, .context/, .github/, .claude/, AutoZap_Docs/, PagSeguroLibrary/, fancybox/, bot/, admin/js/ckeditor/, apps/Helpers/PHPMailer/, SQL/V2026/, etc.

4. Cron — /etc/cron.d/auditor_rnt

```

0 7 * root /root/cerebro/scripts/auditor_rnt.sh

```

Executa 1x ao dia às 7h. WhatsApp enviado apenas se houver achados ou com --force-report.


Achados encontrados na primeira execução

| Categoria | Quantidade |

|---|---|

| .md fora de docs/ | 2 (CREDENCIAIS_EXPOSTAS_RELATORIO.md, implementation_plan.md) |

| BK-* fora de docs/backlog/changelog/ | 9 |

| Arquivos sensíveis na raiz | 5 (.env, algolia_payload.json, BK-* com senha no nome) |

| Backups fora de pasta | 0 |

| Possíveis órfãos | 10 |

Total: 26 achados acionáveis


Validação

  • node --check scripts/auditor_rnt.js → ✅ OK
  • bash -n scripts/auditor_rnt.sh → ✅ OK
  • node scripts/auditor_rnt.js --dry-run → ✅ 26 achados, JSON limpo
  • bash scripts/auditor_rnt.sh --dry-run → ✅ log OK, silêncio no WhatsApp
  • git status antes/depois → ✅ idêntico (read-only confirmado)
  • Cron entry em /etc/cron.d/auditor_rnt → ✅ registrado

Arquivos criados/modificados

| Arquivo | Ação |

|---|---|

| scripts/auditor_rnt.js | novo (294 linhas) |

| scripts/auditor_rnt.sh | novo (183 linhas) |

| kernel/config/auditor_rnt_excludes.json | novo (47 linhas) |

| docs/backlog/BK-145-auditor-diario-rnt.md | novo (spec) |

| docs/BACKLOG.md | atualizado (BK-145) |

| docs/LOCK.md | atualizado (locks BK-145) |

| /etc/cron.d/auditor_rnt | criado (cron 7h) |


Correções pós-entrega (2026-03-19 tarde)

1. Remoção de segredo hardcoded

  • WHATSAPP_API_KEY removida do shell script — agora obrigatória via variável de ambiente
  • send_whatsapp() falha com log claro se a chave não estiver definida
  • curl agora detecta HTTP 4xx/5xx como falha (-w '%{http_code}' + http_code >= 400 → exit 1)

2. scanMdOutsideDocs() respeita md_exceptions do arquivo de config

  • implementation_plan.md agora é filtrado via config.md_exceptions (não mais por código hardcoded)
  • Qualquer .md listado em md_exceptions no JSON é исключён automaticamente

3. scanSensitiveAtRoot() restrito a alta confiança

  • Padrões genéricos removidos (SENHA, PASSWORD, TOKEN, RELATORIO, PRIVATE)
  • Padrões de alta confiança mantidos: .env, CREDENCIAIS_EXPOSTA, API_KEY, SECRET
  • BK-*.md removidos deste scanner (já cobertos por bk_fora_backlog)
  • Motivo justificado por item (não mais genérico "padrão sensível")

Resultado pós-correção (dry-run)

| Categoria | Antes | Depois |

|---|---|---|

| md_fora_docs | 2 | 1 (implementation_plan.md saiu) |

| sensivel_raiz | 5 | 3 (BK-*.md saiu, CREDENCIAIS_EXPOSTAS com razão explícita) |

| Total | 26 | 23 |

sensivel_raiz restante: .env (alta confiança), CREDENCIAIS_EXPOSTAS_RELATORIO.md (exposição explícita), algolia_payload.json (JSON na raiz)

Validações executadas

  • node --check scripts/auditor_rnt.js → ✅ OK
  • bash -n scripts/auditor_rnt.sh → ✅ OK
  • dry-run: implementation_plan.md fora de md_fora_docs → ✅ ausente
  • dry-run: BK-*.md fora de sensivel_raiz → ✅ nenhum aparece
  • dry-run: contagens verificadas → ✅ 23 achados em 5 categorias