Cerebro Studio · Backlog · Changelog
Cerebro • /root/cerebro/docs/changelog/2026/CL-2026-04-29-BK-WORKER-001-worker-hardening.md • 2026-04-29T13:13:16.976Z

CL-2026-04-29-BK-WORKER-001 - Worker Health Hardening

Status: (V)

Escopo: projeto

Projetos afetados: cerebro-kernel

Aprovacao humana obrigatoria: nao

Revisor IA: Gemini (gemini-3-flash-preview, modo plan, read-only) com auditoria final do Claude orquestrador. Codex foi o autor da implementacao.

Resumo

Os tres workers externos (Kimi, Gemini Pro, OpenCode) tinham defaults que produziam falhas recorrentes documentadas em kernel/logs/execution-observability.jsonl. Esta entrega corrige cada um deles na origem do problema:

  • Kimi nao depende mais do orcamento residual do STUDIO_SQUAD_TIMEOUT_MS; ganhou cap proprio de 180s configuravel.
  • Gemini default migrou para gemini-3-flash-preview em roles non-critical (R0/R1/R2), mantendo gemini-3.1-pro-preview em gates criticos (R3/R4).
  • OpenCode saiu do opencode/minimax-m2.5-free e foi para opencode/grok-code-fast-1 por default.

Alteracoes

  • kernel/router.js:
  • Novos helpers __private__: resolveKimiRequestTimeoutMs(env), buildKimiRequestOptions(callOptions, env), combineAbortSignals(signals), resolveOpenCodeModel(passedModel, env), applyGeminiDefaultModelOverride(decision, env).
  • Wiring no callLLM da chamada Kimi (NVIDIA NIM via OpenAI SDK) para combinar callOptions.signal com AbortSignal.timeout(CEREBRO_KIMI_REQUEST_TIMEOUT_MS || 180000).
  • Default OpenCode passou de opencode/minimax-m2.5-free para opencode/grok-code-fast-1 (env CEREBRO_OPENCODE_MODEL permanece como override primario).
  • Hook applyGeminiDefaultModelOverride no resolvePolicyDecision para aplicar CEREBRO_GEMINI_DEFAULT_MODEL quando setado.
  • kernel/config/model-routing-policy.json:
  • ~24 spots de risk R0/R1/R2 migraram de gemini-3.1-pro-preview para gemini-3-flash-preview.
  • Spots com gemini-3-flash (sem -preview) alinhados para gemini-3-flash-preview, casando com MODELS.pro_3.
  • gemini-3.1-pro-preview mantido em R3/R4 (deploy, schema_change, safety/policy).
  • kernel/tests/router-policy.test.js: 2 novos testes para CEREBRO_GEMINI_DEFAULT_MODEL (override aplicado e ausente).
  • kernel/tests/unit/router.test.js (novo): 5 testes cobrindo defaults OpenCode com/sem env, default Kimi 180s, combinacao AbortSignal.any com upstream, e desabilitar timeout proprio com CEREBRO_KIMI_REQUEST_TIMEOUT_MS=0.
  • Backlog/Changelog/Roadmap atualizados.

Comportamento entregue

  • Em callLLM(llm='kimi', ...), o NVIDIA NIM agora sempre tem cap proprio de 180s; squad runtime pode ter quanto orcamento global quiser sem ditar a janela do Kimi.
  • Em resolvePolicyDecision('gemini', agent, message), se CEREBRO_GEMINI_DEFAULT_MODEL estiver setado, a decisao da policy e sobrescrita; caso contrario, a policy nova ja entrega gemini-3-flash-preview em roles non-critical.
  • Em callLLM(llm='codex'|'opencode', ...), default sai do free tier instavel.
  • Documentos sem metadata.mtime (carryover do BK-CORE-006) continuam reprocessando — sem regressao.

Validacao

Comandos executados:

```bash

node --check kernel/router.js

node -e "JSON.parse(require('fs').readFileSync('kernel/config/model-routing-policy.json', 'utf8'))"

cd kernel && npm test -- --runInBand

```

Resultado observado:

  • sintaxe OK no router.js;
  • JSON valido em model-routing-policy.json;
  • Jest do kernel verde com 24 suites e 173 testes (7 novos cobrindo Gemini override, OpenCode default e Kimi timeout helpers, incluindo env=0 que desabilita o cap proprio).

Observacoes operacionais

  • Codex (codex exec --sandbox workspace-write) entregou patch + testes e isolou a origem dos 60s do Kimi (era resíduo do STUDIO_SQUAD_TIMEOUT_MS=180000 apos ~120s gastos nos steps anteriores; nao era cap do Kimi nem do tools/kimi_cli.js).
  • Codex reportou 8 falhas em tests/unit/browser-executor.test.js no sandbox dele (Chromium snap em FS read-only). Rodada local fora do sandbox confirmou 24 suites/173 testes verdes.
  • Gemini (gemini-3-flash-preview, modo plan, read-only) revisou o diff de 416 linhas. A revisao demorou >6min, sintoma do proprio problema atacado nesta entrega (Pro rate_limited, Flash sob carga). Aprovou com observacoes anexadas abaixo.
  • Workers OpenCode/Kimi diretos NAO foram acionados nesta rodada — Codex executou local e Gemini-Flash fez revisao remota como segunda opiniao.

Pareceres recebidos

  • Codex (autor): patch limpo, helpers em __private__ para testabilidade sem expor API publica, defaults seguros.
  • Gemini (revisor): aprovado, gravidade baixa. Observacoes/sugestoes anexadas no proprio diff.
  • Claude orquestrador (auditoria): diff hunk a hunk contra backup .backup/BK-WORKER-001-20260428-214601 confirmou que so foram tocados arquivos previstos no write set, sem regressao em codigo ou testes pre-existentes.

Proximo passo

Sequencia sugerida:

  • BK-OPS-001: reconciliar worktree de /www/wwwroot/legalizarj.com.br antes de evoluir o LegalizaRJ.
  • BK-WORKER-002 (a abrir se a operacao confirmar necessidade): monitorar com worker_health_report.js os novos defaults por 7 dias.
  • BK-CORE-009 (Gemini sugeriu): garbage collection de "ghost data" no FTS5 quando arquivo fonte e removido do disco.