Cerebro Studio · Backlog · Changelog
Cerebro • /root/cerebro/docs/changelog/2026/CL-2026-05-02-BK-CORE-008-runtime-hygiene.md • 2026-05-02T15:38:36.856Z

CL-2026-05-02-BK-CORE-008-runtime-hygiene

Escopo

  • Projeto: cerebro-kernel
  • Projetos afetados: cerebro-kernel
  • Aprovação humana necessária: não

Contexto

Necessidade de utilitário para detectar e remover runtime artifacts stale (locks e sessões CLI) usando as mesmas regras do heartbeat existente, evitando acúmulo de arquivos órfãos que consomem espaço e confundem o operacional.

Entrega

Componentes criados

| Arquivo | Descrição |

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

| kernel/runtime_hygiene.js | Modulo principal com funções scanLocks, scanCliSessions, buildHygieneSnapshot, applyHygiene, reaproveitando as regras do heartbeat_readonly |

| kernel/scripts/runtime_hygiene.js | CLI wrapper com parsing de argumentos --dry-run / --apply / --json |

| kernel/tests/unit/runtime-hygiene.test.js | Suite de testes unitários (12 casos cobrindo ageInfo, pidExists, detecção stale) |

| docs/specs/BK-CORE-008-runtime-hygiene.md | Especificação técnica do BK |

Scripts npm adicionados

```json

{

"hygiene:dry-run": "node scripts/runtime_hygiene.js --dry-run",

"hygiene:apply": "node scripts/runtime_hygiene.js --apply"

}

```

Regras de stale (iguais ao heartbeat_readonly.js)

  1. PID morto: process.kill(pid, 0) falha (processo não existe mais)
  2. Idade > 6h: age_ms > 6 60 60 * 1000 (21600000ms)

Diretórios monitorados

  • Locks: /root/.cerebro-locks/ (arquivos .lock)
  • Sessões CLI: /root/cerebro/.runtime/cli-sessions/ (arquivos .session)

Modos de operação

dry-run (default)

  • Executa detecção de stale
  • Lista locks e sessões stale detectados
  • NÃO remove nenhum arquivo
  • Retorna JSON estruturado com summary

apply

  • Mesma deteccao do dry-run
  • Remove apenas arquivos stale detectados
  • Retorna JSON com removed.locks[] e removed.sessions[]

Validação

  • Sintaxe JS: node --check em todos os arquivos criados
  • Testes: npm --prefix kernel test -- --runInBand tests/unit/runtime-hygiene.test.js tests/unit/heartbeat-readonly.test.js
  • Dry-run inicial detectou 1 lock stale e 7 sessoes stale
  • Apply real removeu 1 lock stale e 7 sessoes stale
  • Dry-run final voltou com total_locks=0 e total_sessions=0

Evidencias

  • node --check kernel/runtime_hygiene.js - OK
  • node --check kernel/scripts/runtime_hygiene.js - OK
  • node --check kernel/heartbeat_readonly.js - OK
  • npm --prefix kernel test -- --runInBand tests/unit/runtime-hygiene.test.js tests/unit/heartbeat-readonly.test.js - verde
  • npm --prefix kernel run hygiene:apply -- --json removeu 1 lock e 7 sessoes stale
  • npm --prefix kernel run hygiene:dry-run -- --json voltou zerado