SYNERGO OS

← voltar

correcao-classificacao-status-zero-erros.md

🟡 AGUARDANDO APROVAÇÃO
# Correcao Classificacao Status - Falsos Positivos "zero erros"

## STATUS: FEITO

## Arquivo Alterado
`/root/synergo-os/server.js` — funcao `status()` (linhas 92-121)

## Backup
`/root/synergo-os/server.js.bak-20260503` (ja existia de hoje)

## Regra Antiga Encontrada
```javascript
function status(content){
  const c = content.toLowerCase();
  if(c.includes('status: feito') || c.includes('[sucesso]') || ...) return CONCLUIDO;
  if(c.includes('sucesso') || ...) return CONCLUIDO;
  if(c.includes('status: parcial')) return PARCIAL;
  const falsePositives = /(\bzero erros?\b|\bsem erros?\b|\b0 erros?\b|\bnenhum erro\b)/;
  const cleaned = c.replace(falsePositives, '');
  if(cleaned.includes('status: erro') || cleaned.includes('erro:') || cleaned.includes('exit code') || cleaned.includes('failed') || cleaned.includes('falhou') || cleaned.includes('timeout')) return ERRO;
  if(c.includes('parcial')) return PARCIAL;
  return PROCESSADO;
}
```

### Problemas da regra antiga:
1. Regex de falsos positivos incompleta (faltava "nenhum erro encontrado", "nenhum erro critico", "erros corrigidos", "sem falhas")
2. `timeout` classificava como ERRO mesmo sem contexto de falha
3. Faltavam indicadores reais de erro como `exception`, `traceback`, `permission denied`, `ECONNREFUSED`, `HTTP 500`
4. STATUS explícito não tinha prioridade absoluta (STATUS: FEITO era checado junto com outros sinais)

## Regra Nova Aplicada
```javascript
function status(content){
  const c = content.toLowerCase();

  // 1. Explicit STATUS line takes absolute priority
  if(c.includes('status: feito')) return CONCLUIDO;
  if(c.includes('status: erro')) return ERRO;
  if(c.includes('status: parcial')) return PARCIAL;

  // 2. Strong positive signals
  if(c.includes('[sucesso]') || c.includes('build ok') || c.includes('deploy ok') || c.includes('nada mais a fazer')) return CONCLUIDO;
  if(c.includes('sucesso') || c.includes('concluido')) return CONCLUIDO;

  // 3. ERRO heuristic — clean false positives THEN check real indicators
  const falsePositives = /(\bzero erros?\b|\bsem erros?\b|\b0 erros?\b|\bnenhum erro\b|\bnenhum erro encontrado\b|\bnenhum erro cr[ii]tico\b|\berros? corrigidos?\b|\bsem falhas?\b|\bteste ok\b|\bhttp 200\b)/g;
  const cleaned = c.replace(falsePositives, '');
  const realErrors = [
    'erro:', 'erro critico', 'falhou', 'failed', 'exception', 'traceback',
    'command not found', 'permission denied', 'build failed', 'deploy failed',
    'http 500', 'econnrefused', 'exit code', 'fatal error', 'stack trace'
  ];
  const hasRealError = realErrors.some(indicator => cleaned.includes(indicator));
  const hasTimeout = cleaned.includes('timeout') && (cleaned.includes('fail') || cleaned.includes('erro') || cleaned.includes('abort'));
  if(hasRealError || hasTimeout) return ERRO;

  // 4. PARCIAL generico
  if(c.includes('parcial')) return PARCIAL;
  return PROCESSADO;
}
```

### Melhorias:
1. STATUS explicito agora tem prioridade absoluta (primeiro check)
2. Regex de falsos positivos expandida com flag /g para limpar todas as ocorrencias
3. Lista explicita de indicadores reais de erro (15 patterns)
4. `timeout` so conta como erro se acompanhado de fail/erro/abort
5. Heuristica nunca marca ERRO apenas pela palavra "erro" isolada

## Testes Executados

| Caso | Input | Esperado | Resultado | Status |
|------|-------|----------|-----------|--------|
| 1 | STATUS: FEITO + zero erros encontrados | CONCLUIDO | CONCLUIDO | PASS |
| 2 | STATUS: FEITO + 0 erros criticos | CONCLUIDO | CONCLUIDO | PASS |
| 3 | STATUS: ERRO + build failed | ERRO | ERRO | PASS |
| 4 | Build finalizado com sucesso, sem erros | CONCLUIDO | CONCLUIDO | PASS |
| 5 | Exception: database connection failed | ERRO | ERRO | PASS |
| 6 | HTTP 200, nenhum erro encontrado | NAO-ERRO | PROCESSADO | PASS |

Nota: Caso 6 retorna PROCESSADO (neutro) pois nao ha sinal positivo explicito nem erro real. O importante e que NAO marca como ERRO.

## Como Validar no /ops e /report

1. Acessar /ops — verificar que tarefas com "zero erros" ou "sem erros" na resposta NAO aparecem como ERRO (vermelho)
2. Acessar /report — verificar que o contador de erros diminuiu (tarefas antes falsamente marcadas agora sao PROCESSADO ou CONCLUIDO)
3. Verificar que tarefas com "STATUS: ERRO" real continuam aparecendo como ERRO
4. Para reverter: `cp /root/synergo-os/server.js.bak-20260503 /root/synergo-os/server.js && systemctl restart synergo-os`

## Pendente
- `systemctl restart synergo-os` precisa ser executado para aplicar (aguardando aprovacao)
- Arquivo de teste em `/root/test-status.js` pronto para validacao via `node /root/test-status.js`