CL-2026-03-01-BK-62 · Persistência e Histórico do Studio Terminal (Kernel + Studio)
- Status: (V) conferido e aprovado
- Escopo: multi-projeto
- Projetos afetados: cerebro-studio, cerebro-kernel
- BK relacionado: BK-62
- Aprovação humana obrigatória: não
- Data: 2026-03-01
- Autor: Codex (GeJoRei-VPS)
Resumo
Implementação de infraestrutura de persistência real para o Studio Terminal, eliminando a dependência exclusiva de memória e logs JSONL para a UI. Agora, as conversas são salvas em um banco de dados relacional (SQLite/Postgres) e recuperadas dinamicamente via WebSocket ao selecionar sessões no sidebar.
Entregas Técnicas
1. Kernel (Backend)
- Módulo de Dados: Criado
kernel/studio_chat_store.jsusandobetter-sqlite3. - Suporte a modo WAL (concorrência leitura/escrita).
- Schema com tabelas
studio_chat_sessionsestudio_chat_messages. - Ordenação determinística via coluna
seq. - Persistência de metadados JSON (request_id, model, workflow_phase).
- Integração:
- Dual-write mantido (SQLite + logs JSONL legados).
- Sincronização de status de aprovação (
has_pending_approval) em tempo real. - Protocolo WS: Novos handlers:
studio_chat_sessions_list: Listagem com previews e contagem de msgs.studio_chat_session_history: Recuperação de histórico completo porsessionKey.
2. Studio (Frontend)
- UI de Sidebar:
- Exibição de metadados reais (contagem de mensagens, badges de pendência).
- Previews de mensagens no seletor de thread.
- Fluxo de Recuperação:
- Carregamento assíncrono ao trocar de sessão.
- Deduplicação inteligente via
requestIdpara mesclar histórico do DB com mensagens locais pendentes. - Tratamento de estados de loading e erro inline no feed.
Limites e Configurações
- Paginação: Default de 50 sessões e 100 mensagens por requisição (configurável).
- Retenção: Ilimitada no SQLite local nesta fase.
- Caminho DB:
/root/cerebro/kernel/data/studio-chat.db(override viaSTUDIO_CHAT_DB_PATH).
Plano de Rollback
- O sistema é resiliente: se o banco de dados falhar na inicialização, o Kernel loga o erro e continua operando (apenas o histórico histórico na UI ficará indisponível, mas o chat em tempo real e logs JSONL continuam).
- Para reverter completamente: remover a dependência
better-sqlite3e apagar o diretóriokernel/data/.
Evidências Objetivas
- Bateria de Integração: 7 cenários validados com 100% de sucesso.
- Output do Teste:
```text
[2026-03-01T16:02:32.791Z] [TEST] INICIANDO BATERIA BK-62...
[1] Cenário: Sessão Nova + Salvar no DB -> OK
[2] Cenário: Kernel Restart + Recuperação WS -> OK
[3] Cenário: Isolamento de Sessões -> OK
[4] Cenário: Reset de Sessão -> OK
[5] Cenário: Falha de DB (Resiliência) -> OK
[6] Cenário: Deduplicação (requestId) -> OK
[7] Cenário: Ordem Temporal (seq) -> OK
[2026-03-01T16:02:36.855Z] [RESULTADO] 7/7 VERDE
```
- Log Bruto:
docs/runs/bk62-history-battery-2026-03-01.txt