Cerebro Studio · Backlog · Changelog
Cerebro • /root/cerebro/docs/changelog/2026/CL-2026-03-17-BK-129.md • 2026-03-17T07:09:13.173Z

CL-2026-03-17-BK-129

  • Status: (P)
  • Escopo: multi-projeto
  • Projetos afetados: cerebro-kernel, cerebro-studio, rionoteatro
  • Aprovacao humana obrigatoria: nao
  • Revisor IA: auto-revisao

Resumo

Slice inicial do runtime de browser control no cerebro-kernel, abrindo a trilha oficial para automacao real por navegador em casos onde API publica nao resolve mais o fluxo.

Este changelog ja registra um fechamento parcial da Fase 1, suficiente para mergear a fundacao tecnica agora e retomar depois sem perder o plano operacional.

Motivacao

  • o BK-104 do rionoteatro fechou a RCA da Graph API de Facebook Page Events como bloqueada por code 100 / subcode 33;
  • insistir em payload Graph API nao e mais a trilha correta;
  • faltava no cerebro um contrato canonico para perfis de browser control, catalogo e preview deterministico de plano.

Entregas

  • modulo kernel/browser_control.js com:
  • leitura de perfis em kernel/config/browser_profiles/;
  • validacao estrutural da definicao;
  • preview deterministico com placeholders resolvidos.
  • perfil inicial rnt-facebook-page-event-create-v1.
  • handlers WS minimos:
  • studio_browser_catalog
  • studio_browser_plan_preview
  • executor real kernel/browser_executor.js, usando playwright-core com Chromium do host.
  • dependencia playwright-core adicionada em kernel/package.json para reutilizar o browser do sistema sem baixar runtime extra.
  • suporte a storage state no runtime para fluxos que exigem sessao autenticada.
  • runner CLI kernel/scripts/browser_profile_runner.js para preview/execucao controlada de browser profiles.
  • overrides operacionais no runner CLI para --storage-state e --output-root, evitando depender de env e reduzindo risco de artefato dentro do repo.
  • capturador guiado kernel/scripts/browser_capture_storage_state.js para preparar sessao autenticada fora do repo.
  • handler WS adicional:
  • studio_browser_run_start
  • cobertura unitario em kernel/tests/unit/browser-control.test.js.
  • teste local de execucao real em kernel/tests/unit/browser-executor.test.js.
  • perfil read-only rnt-facebook-page-events-probe-v1 para coletar evidencia segura da superficie real do Facebook.
  • backlog/spec/lock alinhados ao novo BK.

Validacoes executadas

  • node --check kernel/browser_control.js
  • node --check kernel/browser_executor.js
  • node --check kernel/index.js
  • node --check kernel/tests/unit/browser-control.test.js
  • node --check kernel/tests/unit/browser-profile-runner.test.js
  • node --check kernel/tests/unit/browser-executor.test.js
  • npx jest --runInBand tests/unit/browser-control.test.js
  • npx jest --runInBand tests/unit/browser-profile-runner.test.js
  • npx jest --runInBand tests/unit/browser-executor.test.js
  • git diff --check
  • node scripts/browser_profile_runner.js --profile rnt-facebook-page-events-probe-v1 --input-json '{"page_slug":"rionoteatro"}'
  • node scripts/browser_profile_runner.js --profile rnt-facebook-page-events-probe-v1 --input-json '{"page_slug":"rionoteatro"}' --execute --confirmed
  • node --check kernel/scripts/browser_capture_storage_state.js
  • smoke local via node chamando listProfiles() e buildPlanPreview() com o perfil rnt-facebook-page-event-create-v1
  • execucao real contra HTML temporario local usando Chromium do host
  • probe read-only externo em https://www.facebook.com/rionoteatro/events, gerando screenshot e HTML preservados fora do repo em /tmp/cerebro-bk129-artifacts/rnt-facebook-page-events-probe-v1-1773727313219/

Observacao operacional

Este slice ja executa browser real em ambiente local controlado, usando playwright-core com o Chromium do host e artefatos de screenshot.

O probe externo mostrou um estado hibrido importante:

  • o <title> veio como Rio No Teatro | Facebook;
  • a URL /rionoteatro/events foi carregada;
  • o HTML ainda traz sinais de login (CAALoginCometHeaderLoginForm.react e campo password).

Conclusao pratica:

  • a superficie publica e alcancavel pelo browser control;
  • para atingir controle de criacao de evento, o proximo passo precisa carregar sessao autenticada via storage state, nao apenas refinar seletor em contexto anonimo;
  • o runner ja consegue receber esse storage state por flag explicita e gravar artefatos fora do repo, reduzindo atrito para a primeira prova autenticada.

Proximos passos canonicos apos o merge parcial

  1. Capturar storage state autenticado da Meta fora do repo com kernel/scripts/browser_capture_storage_state.js.
  2. Rodar o perfil rnt-facebook-page-events-probe-v1 com --storage-state e --output-root /tmp/cerebro-browser-runs.
  3. Confirmar em artefatos que a sessao autenticada alcanca os controles corretos de Facebook Page Events.
  4. Evoluir rnt-facebook-page-event-create-v1 para um create-flow controlado, primeiro sem publicar e depois com gate humano.
  5. Reaplicar a trilha no BK-104 do rionoteatro e, por ultimo, expor acionamento seguro no Studio.

O script global npm test -- --runInBand tests/unit/browser-control.test.js do kernel continua puxando a suite inteira do projeto; neste worktree ele bateu em dependencia ausente de ambiente (better-sqlite3) fora do escopo do BK-129. Por isso a evidencia canônica deste slice ficou no jest isolado do novo modulo.