Backlog Unificado
Fonte principal: /root/cerebro/docs/BACKLOG.md. Detalhes (quando existirem): /root/cerebro/docs/specs.
- BK-36 · MCP Bridge: Integração com o Model Context Protocol com catálogo de permissões por ferramenta. (detalhe pendente)
- BK-38 · Gate B — Núcleo útil da inspiração: executar BK-38 em fase segura (heartbeat 30 min read-only + alerta + sugestão; sem execução automática R2+). (detalhe pendente)
- BK-40 · Builder Engine (Specs): Implementar orquestração baseada em arquivos de especificação (TDD/PRD automáticos). (detalhe pendente)
- BK-41 · Evals e Benchmark: Sistema para medir a qualidade das respostas e evitar regressões de inteligência. (detalhe pendente)
- BK-42 · Gate C — Pipeline oficial do Cerebro: concluir BK-42 + BK-55 (peer review gate) + BK-41 (evals). (detalhe pendente)
- BK-46.1 · Gate A — Governança primeiro (OBRIGATÓRIO): concluir BK-46.1 + BK-47 antes de qualquer autonomia contínua. (detalhe pendente)
- BK-47 · [PASSO-03 | Orquestrador] Executar BK-47 (rollback templates): automatizar script de reversão por alteração para reduzir risco operacional em jobs R2+. (detalhe pendente)
- BK-48 · Auto-Tuning: Agente que analisa logs de performance e sugere melhorias na configuração do Kernel. (detalhe pendente)
- BK-50 · Versionamento de Memória: Snapshotting do MEMORY.md para evitar corrupção de contexto a longo prazo. (detalhe pendente)
- BK-52 · WhatsApp SaaS (Extração do RNT): Transformar o microserviço/fluxo de WhatsApp do Rio no Teatro (helper PHP + fila + healthcheck + restart + telemetria) em componente reutilizável/multitenant para outros projetos da VPS e futura integração no Cerebro (canal alternativo ao Discord para alertas/testes). Inspirado em Mission Control HQ. (detalhe pendente)
- BK-55 · Peer Review Gate entre Agents: Adicionar etapa obrigatória de revisão cruzada antes de Done, com evidência em log/DB e bloqueio em caso de conflito crítico. (detalhe pendente)
- BK-56 · Gate D — Standup diário automático: concluir BK-56 para resumo diário de runs, bloqueios e próximos passos. (detalhe pendente)
- BK-61 · Terminal Multi-Sessão (Fase 1 e 2): Implementar gerenciador de sessões paralelas por engine. (detalhe pendente)
- BK-62 · [PASSO-01 | Usuário/Admin] Fechar BK-62 (P0 de segurança): revogar tokens legados no Discord Developer Portal, atualizar CEREBRO_DISCORD_TOKEN na VPS e validar bot/kernel após restart. (detalhe pendente)
- BK-66 · Flag explícita planejar vs executar: (detalhe pendente)
- BK-128 · Copywriter multi-formato + Revisor comercial RNT (FOLLOW-UP RECONCILIADO em 2026-03-18): O RNT ja possui base parcial entregue no historico local BK-122, com copy contextual para story/reels, selecao manual e fallback operacional. O que ainda falta neste backlog central e expandir para feed/carrossel, scorecard comercial consistente e integracao completa com o fluxo WhatsApp -> agenda -> conferencia de rascunho. Detalhe: docs/specs/BK-128-rnt-copy-multiformato-review.md.
- BK-133 · Planejamento Antecipado (Greedy Planner): Ajustar o robô para gerar conteúdos de fim de temporada (Last Week/Last Session) no momento do cadastro da peça, permitindo aprovação e agendamento prévio. (detalhe pendente)
- BK-134 · Messenger Channel Integration: Automatizar postagem no canal do Messenger (rionoteatro) após inclusão de nova peça, com fluxo de aprovação via WhatsApp. (detalhe pendente)
- BK-135 · FB Events Auto-Creation: Integrar a criação de eventos do Facebook ao fluxo de "Peça Nova", parando no rascunho para conferência humana. (detalhe pendente)
- BK-136 · Meta Weekly Challenges Bot: Criar rotina para monitorar e sugerir postagens criativas (Reels/Posts) para cumprir os desafios de nível da Meta. (detalhe pendente)
- BK-153 · Refatoracao fase 1 de sync_facebook_events.php: Separar planner, dispatcher, montagem de aprovacao e fallback browser em modulos/testes controlados, sem reescrever tudo de uma vez. (detalhe pendente)
- BK-154 · Harmonizacao backlog central x backlog RNT x roadmap Squad: Consolidar a semantica indice central -> backlog local de execucao -> roadmap estrategico, sem texto divergente entre os tres. (detalhe pendente)
- BK-155 · Piloto de migracao de cron social para Node: Escolher um cron social menor para piloto controlado e validar contrato/rollback antes de considerar a frente grande de migracao do legado social. (detalhe pendente)
Especificações Disponíveis (fora da fila pendente)
Detalhe do BK Selecionado
SPEC: BK-129 Browser Control Runtime
Objetivo
Criar no cerebro-kernel a fundacao canonica para automacao real por navegador, deixando de depender apenas de API quando o canal operacional exigir interface web.
O primeiro caso de uso concreto deste BK e o desbloqueio do BK-104 do rionoteatro, cuja trilha via Graph API para Facebook Page Events foi fechada como bloqueada (GraphMethodException code 100 / subcode 33).
Escopo deste slice
- Adicionar modulo
kernel/browser_control.jscom:
- catalogo de perfis de browser control;
- validacao de definicoes;
- preview deterministico de plano com resolucao de placeholders.
- Criar o diretorio
kernel/config/browser_profiles/com um perfil inicial do RNT para Page Events. - Expor contrato WS minimo no
kernel/index.js:
studio_browser_catalogstudio_browser_plan_previewstudio_browser_run_start
- Adicionar executor real com Chromium do host para os tipos de passo ja suportados.
- Suportar sessao autenticada por
storage statequando o fluxo exigir contexto logado. - Disponibilizar runner CLI para preview/execucao controlada de profiles fora do Studio, com overrides operacionais para
storage statee diretório de artefatos. - Disponibilizar capturador guiado de
storage statepara preparar sessao autenticada fora do repo. - Cobrir o modulo com teste unitario.
- Atualizar backlog/changelog/lock do
cerebro.
Fora de escopo deste slice
- automacao invisivel 24/7 sem gate humano;
- publicacao direta em producao em superficie externa autenticada;
- UI dedicada no Studio;
- remocao do gate humano para
studio_browser_run_start.
Contrato WS minimo
studio_browser_catalog
Entrada:
```json
{
"type": "studio_browser_catalog",
"requestId": "abc",
"project": "rionoteatro"
}
```
Saida:
```json
{
"type": "studio_browser_catalog",
"ok": true,
"requestId": "abc",
"project": "rionoteatro",
"profiles": []
}
```
studio_browser_plan_preview
Entrada:
```json
{
"type": "studio_browser_plan_preview",
"requestId": "abc",
"profileId": "rnt-facebook-page-event-create-v1",
"inputPayload": {
"page_slug": "rionoteatro",
"event_title": "Titulo",
"event_url": "https://rionoteatro.com.br/evento/123",
"start_iso": "2026-03-20T20:00:00-03:00"
}
}
```
Saida:
```json
{
"type": "studio_browser_plan_preview",
"ok": true,
"requestId": "abc",
"profileId": "rnt-facebook-page-event-create-v1",
"plan": {}
}
```
studio_browser_run_start
Entrada:
```json
{
"type": "studio_browser_run_start",
"requestId": "abc",
"sessionKey": "studio-browser-rnt",
"profileId": "rnt-facebook-page-event-create-v1",
"confirmed": true,
"headless": true,
"storageState": "/root/.cache/cerebro/browser-storage-state/facebook-rnt.json",
"outputRoot": "/tmp/cerebro-browser-runs",
"inputPayload": {
"page_slug": "rionoteatro",
"event_title": "Titulo",
"event_url": "https://rionoteatro.com.br/evento/123",
"start_iso": "2026-03-20T20:00:00-03:00"
}
}
```
Runner CLI
Script: kernel/scripts/browser_profile_runner.js
Exemplo de preview:
```bash
node scripts/browser_profile_runner.js \
--profile rnt-facebook-page-events-probe-v1 \
--input-json '{"page_slug":"rionoteatro"}'
```
Exemplo de execucao:
```bash
node scripts/browser_profile_runner.js \
--profile rnt-facebook-page-events-probe-v1 \
--input-json '{"page_slug":"rionoteatro"}' \
--storage-state /root/.cache/cerebro/browser-storage-state/facebook-rnt.json \
--output-root /tmp/cerebro-browser-runs \
--execute --confirmed
```
Observacao:
--storage-stateinjeta caminho explicito para a sessao autenticada sem depender de env;--output-rootpermite desviar screenshots/HTML para fora do repositorio durante RCA e operacao.- o mesmo override operacional agora tambem pode ser passado no payload WS (
storageState/outputRoot) para o Studio.
Captura de storage state
Script: kernel/scripts/browser_capture_storage_state.js
Exemplo:
```bash
xvfb-run -a node scripts/browser_capture_storage_state.js \
--url https://www.facebook.com/rionoteatro/events \
--output /root/.cache/cerebro/browser-storage-state/facebook-rnt.json
```
Observacao:
- o script abre uma sessao headed quando houver display;
- o operador faz login manualmente;
- ao confirmar no terminal, o
storage statee salvo fora do repo para reutilizacao pelo runtime.
Fluxo alternativo recomendado: captura local + importacao segura
Quando a Meta entrar em loop de checkpoint/antibot na VPS, a captura deve ser feita na maquina local do operador e apenas importada para o Cérebro.
Importador na VPS:
```bash
node /root/cerebro/kernel/scripts/browser_import_storage_state.js \
--input /caminho/recebido/facebook-rnt-local.json
```
O importador:
- valida se o JSON tem estrutura de
storage statedo Playwright; - exige sessao Meta autenticada (
c_user+xs) por padrao; - cria backup do arquivo canonico anterior antes de sobrescrever;
- grava no caminho oficial
/root/.cache/cerebro/browser-storage-state/facebook-rnt.json.
Checklist operacional da captura local:
- Na maquina local, abrir um navegador normal e concluir login/checkpoint da Meta em ambiente humano.
- Gerar um
storage statedo Playwright nessa mesma maquina. - Enviar o JSON para a VPS por canal seguro.
- Rodar
browser_import_storage_state.jsna VPS. - Revalidar
probeecreate-flowno Cérebro.
Capturador local portavel:
```bash
node browser_capture_storage_state_local.js \
--url https://www.facebook.com/rionoteatro/events \
--output ./facebook-rnt-local.json
```
Observacao:
- o arquivo
kernel/scripts/browser_capture_storage_state_local.jsfoi criado exatamente para esse uso fora da VPS; - ele tenta carregar
playwrightprimeiro e cai paraplaywright-corese existir; - na maquina local, o caminho mais simples e
npm install playwrightantes de executar.
Resumo sem importar:
```bash
node /root/cerebro/kernel/scripts/browser_import_storage_state.js \
--input /caminho/recebido/facebook-rnt-local.json \
--summary-only
```
Saida inicial:
```json
{
"type": "studio_browser_run_ack",
"ok": true,
"requestId": "abc",
"runId": "browser-run-123"
}
```
Criterios de aceite deste slice
- o catalogo retorna perfis por projeto;
- o preview falha quando input obrigatorio faltar;
- o preview resolve placeholders nos passos do perfil;
- o executor roda um fluxo local real com Chromium do host;
- o executor aceita
storage statequando um profile exigir sessao autenticada; - o runner CLI consegue gerar preview e executar perfis com gate explicito;
- o contrato fica testado em unitarios do
kernel; - o backlog do
cerebropassa a referenciar o BK como trilha oficial para browser control.
Estado final das fases
- Fase 1 | Fundacao
- concluida com runtime base, executor real via Chromium do host, perfis declarativos, runner CLI e capturador guiado.
- Fase 2 | Captura autenticada
- concluida com
storage statereal preservado fora do repo em/root/.cache/cerebro/browser-storage-state/facebook-rnt.json; - screenshot da captura preservado ao lado do arquivo (
facebook-rnt.json.png).
- Fase 3 | Probe autenticado
- concluida com execucao real do perfil
rnt-facebook-page-events-probe-v1; - comando validado:
```bash
node /root/cerebro/kernel/scripts/browser_profile_runner.js \
--profile rnt-facebook-page-events-probe-v1 \
--input-json '{"page_slug":"rionoteatro"}' \
--storage-state /root/.cache/cerebro/browser-storage-state/facebook-rnt.json \
--output-root /tmp/cerebro-browser-runs \
--execute --confirmed
```
- artefatos gerados em
/tmp/cerebro-browser-runs/rnt-facebook-page-events-probe-v1-1773731903027/.
- Fase 4 | Create-flow controlado
- concluida no sentido operacional seguro: o perfil
rnt-facebook-page-event-create-v1agora exige sessao autenticada e para antes de qualquer submit/publicacao; - o output da run vira evidencia de draft (
draft.png+draft.html) para endurecimento iterativo dos seletores reais.
- Fase 5 | Integracao operacional
- concluida com ligacao direta ao
BK-104norionoteatro: quando o Graph API continuar bloqueando, o cron gera a fila runtimeadmin/runtime/facebook_page_events_browser_queue.jsone o payload sampleadmin/runtime/facebook_page_events_browser_sample_input.json; - a Central de Redes Sociais passou a expor o estado desse fallback e os comandos exatos para o Cérebro rodar probe/create-flow.
Blindagem adicional apos a primeira rodada
- foi confirmado em execucao real posterior que o
storage statesalvo pode expirar ou perder autenticacao sem aviso; - o runtime agora suporta
assert_not_selectorpara falhar cedo quando o browser cair em gate de login; - os perfis
rnt-facebook-page-events-probe-v1ernt-facebook-page-event-create-v1passaram a validar a ausencia dos camposemail/senhaantes de seguir para captura ou create-flow. - o fluxo operacional oficial agora inclui captura local + importacao segura quando a Meta bloquear a VPS com checkpoint.
Path List (lock-files)
docs/LOCK.mddocs/BACKLOG.mddocs/CHANGELOG.mddocs/specs/BK-129-browser-control-runtime.mddocs/changelog/2026/CL-2026-03-17-BK-129.mdkernel/browser_control.jskernel/browser_executor.jskernel/config/browser_profiles/rnt-facebook-page-event-create-v1.jsonkernel/config/browser_profiles/rnt-facebook-page-events-probe-v1.jsonkernel/index.jskernel/scripts/browser_profile_runner.jskernel/scripts/browser_capture_storage_state.jskernel/tests/unit/browser-control.test.jskernel/tests/unit/browser-profile-runner.test.jskernel/tests/unit/browser-executor.test.jskernel/package.jsonkernel/package-lock.jsonkernel/node_modules/.package-lock.json