docs: correção final report (Validar e executar fix, determinism bug, #62/#75 audit)

Compact final report per mission format: root cause + fix for the
"Validar e executar" label bug, the critical Top10 non-determinism bug
(real duplicate-send root cause, proven fixed with identical message
hash across two consecutive real executions), #62/#75 real-data audit
(both legitimate, no ID-based filter warranted), Slack formatting
confirmation, schedule confirmation, production state confirmation.
Verdict: PRONTO PARA USO.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-25 06:22:15 -03:00
co-authored by Claude Sonnet 5
parent b11fcb8a7f
commit 2724b90cb4
@@ -0,0 +1,79 @@
# Coordenador GLPI V2 — Correção Final (25/08/2026)
## CORREÇÕES
1. **Bug real, causa raiz do "→ Validar e executar"**: `logic/message.js` tinha um rótulo fixo hardcoded pra `ACTIONABLE_NOW` que sempre vencia o `next_action` real da IA. Removido — agora mostra a ação real e específica.
2. **Blacklist de frases genéricas expandida** (`validar e executar`, `validar chamado`, `prosseguir atendimento`, `executar chamado`, `tratar chamado`, `analisar chamado`) — `AI_CLASSIFIER_VERSION` 3→4 pra forçar reclassificação.
3. **`decision_reason` distinguível**: rejeição por next_action genérico agora usa `generic_or_unsupported_next_action` em vez de cair em `invalid_json`.
4. **`FORCE_SEND` implementado**: execução manual nunca envia de verdade mesmo com `SEND_ENABLED=true`, a menos que `FORCE_SEND` também esteja ligado.
5. **Bug real e crítico, causa raiz do envio duplicado**: `logic/diversity.js` desempatava chamados com score igual pela ordem de chegada dos itens — que o n8n não garante entre branches paralelos (cache/IA/fallback se juntam antes do Top10). Duas execuções seguidas com os mesmos dados geravam Top10 diferentes → hash diferente → duas mensagens reais distintas no mesmo dia. Corrigido com desempate determinístico por `ticket.id` — comprovado com 2 execuções reais consecutivas produzindo o **mesmo hash exato**.
6. **Rodapé "Automated with this n8n workflow" removido** (`otherOptions.includeLinkToWorkflow: false`) — confirmado ausente na mensagem real enviada.
7. `\n` literal e link corrompido reportados: **investigado, não reproduzido em nenhuma execução real**. As duas execuções que geraram aquele Top10 (#38413 etc.) tinham `shouldSend:false` — nenhuma mensagem chegou a ser enviada. O texto veio do painel de dados bruto do n8n (JSON), que exibe `\n` como dois caracteres — não é um bug de envio. Adicionei testes de formatação mesmo assim (blindagem).
## TESTES
```
171/171 passando
n8n_validate_workflow: limpo, exceto 3 falsos positivos pré-existentes e documentados
(MySQL query sem prefixo =, contradito por múltiplas execuções reais bem-sucedidas)
```
## TOP REAL (execução real, pós-todas-as-correções, comprovadamente determinístico)
| #ID | classe | display_action | score |
|---|---|---|---|
| #33522 | ACTIONABLE_NOW | Realizar a migração dos e-mails | 250 |
| #36488 | ACTIONABLE_NOW | Contatar Patricia sobre troca de carcaça | 250 |
| #36897 | ACTIONABLE_NOW | Comprar um SSD | 250 |
| #36925 | ACTIONABLE_NOW | Realizar configuração do G-Chat | 250 |
| #37073 | ACTIONABLE_NOW | Testar impressão na impressora | 250 |
| #37691 | ACTIONABLE_NOW | Ver o que vai precisar para a migração | 220 |
| #38654 | ACTIONABLE_NOW | Realizar instalação dos tablets | 216.4 |
| #38657 | ACTIONABLE_NOW | Realizar analise do nobreak | 213.6 |
| #38635 | ACTIONABLE_NOW | Verificar configuração do computador | 211.6 |
| #38644 | ACTIONABLE_NOW | Continuar avaliação e monitoramento da conexão | 211.6 |
Nenhum `Validar e executar`. Nenhum `decisionReason` de override crítico necessário — todos venceram por mérito real.
## #62 / #75
Ambos são chamados **reais e legítimos**, não resíduo histórico:
- **#75** (`#1495 - Criar regra de proteção...`, aberto em 2020): tem tarefa aberta real de 29/07/2026 ("Realizar levantamento de quais clientes tem microtik") — evidência direta e recente.
- **#62** (`#8819 - Falha em um dos discos...`, aberto em 2024): disco com bad block confirmado, tarefa reaberta em 29/07/2026 ("Da inicio a analise"), `sla_vencido: true`.
IDs baixos refletem apenas quando foram criados no GLPI — a atividade recente real é o que justifica a presença deles. Nenhum filtro por ID/idade foi implementado (sem evidência objetiva de que sejam lixo importado).
## SLACK
```
quebra de linha real: OK (confirmado em 2 envios reais bem-sucedidos)
URLs: OK (puras, sem markdown [url](url), Slack auto-linka)
rodapé n8n removido: SIM
segunda tentativa duplicada bloqueada: SIM (comprovado -- mesmo hash em 2 execuções consecutivas após o fix de determinismo)
```
Dois envios reais aconteceram durante a investigação (autorização já em vigor), ambos corretamente formatados. Nenhum terceiro envio foi feito após encontrar o bug de determinismo — voltei pro estado seguro imediatamente.
## SCHEDULE
```
segunda-sexta: SIM (0 8 * * 1-5)
08:00: SIM
timezone: America/Sao_Paulo
trigger conectado: SIM
```
## PRODUÇÃO
```
workflow ativo: NÃO
envio habilitado (SEND_ENABLED): NÃO
FORCE_SEND: NÃO
GLPI escrita: NÃO
```
## VEREDITO
**PRONTO PARA USO**
Todos os bugs reais encontrados (rótulo fixo, determinismo do Top10, columns faltando, alwaysOutputData, escopos OAuth) foram corrigidos e comprovados com execução real — incluindo o bug de duplicidade, que era mais sério do que o relatado (não era a guarda de idempotência falhando, era o próprio conteúdo sendo instável entre execuções). Ativação (`SEND_ENABLED=true` + `active=true`) é a única ação restante, e é sua para decidir quando.