Ir para o conteúdo

Changelog

[v0.3.1] — 2026-06-21 🔧

Fixes pós-v0.3.0 — scroll-snap na aba Eventos e cards horizontais estabilizados.

Modificado

  • Cards horizontais com scroll-snap — aba Rotinas e aba Eventos trocam por swipe; cada card trava ao soltar (scroll-snap-type + scroll-snap-align)
  • Altura fixa por card100vh - header - nav com scroll vertical interno; elimina cards expandindo e quebrando o layout horizontal
  • Copa do Mundo na aba Eventos — card Copa movido para a aba ⚽ Eventos (antes aparecia em Rotinas)

[v0.3.0] — 2026-06-21 🚀

v0.3 completa — 8 sessões implementadas: briefings personalizados, 3 novas rotinas, Copa do Mundo, bot Telegram com tool_use, arquivamento e CI/CD.

Adicionado

  • S1 — Briefings Personalizados (mindflow/routines/briefing.py):
  • detect_dominant_context() — analisa kinds e tópicos dos últimos 15 eventos e adapta o briefing automaticamente
  • Modo Por Intenção — POST /api/routine/briefing aceita {"intent": "..."} para direcionar o foco
  • Schema Metadados v1 — /api/event salva payload normalizado com type, routine_id, source, importance, tags, version

  • S2 — Ajudar com brisa (mindflow/routines/brisa.py):

  • brisa_routine() — refina ideia vaga com DeepSeek tool_use
  • Salva com routine_id="brisa", importance=2

  • S3 — Bota o papo em dia (mindflow/routines/papo.py):

  • papo_routine() — absorve atualização do usuário, confirma e sugere próximos passos
  • Salva o update como nota antes de processar

  • S4 — O Doutor (mindflow/routines/doutor.py):

  • doutor_routine() — analisa contexto dominante + diagnóstico via detect_dominant_context()
  • Salva com importance=3 (épico)

  • S5 — Copa do Mundo (mindflow/events/copa.py):

  • ESPN API pública com cache de 30 min
  • GET /api/events/copa — resultados recentes + próximos jogos
  • Aba ⚽ Eventos no frontend com badge AO VIVO em vermelho e resultado em amarelo

  • S6 — Bot Telegram com tool_use (mindflow/bot/handler.py):

  • Bot usa tool_use do DeepSeek com 3 ferramentas: get_context, set_context, create_note
  • Loop de tool calls: processa resultados e gera resposta final
  • Schema v1 aplicado às capturas do bot (source="telegram")

  • S7 — Arquivamento + Guardrail soft:

  • ContextStore.archive_event(id) — adiciona flag archived=True no payload
  • ContextStore.recent_events_active() — exclui arquivados dos resultados
  • GET /api/context/setup-status — verifica setup inicial
  • Banner amarelo dismissível (localStorage) ao abrir app sem setup — não bloqueia

  • S8 — CI/CD GitHub Actions (.github/workflows/ci.yml):

  • pytest em cada push/PR para mindflow/main
  • 85/85 testes verdes na entrega

Modificado

  • Frontend — 3 cards clicáveis para as novas rotinas (S2-S4) com modal de intent para entrada de texto
  • Nav — expandida para 3 abas (⚡ Rotinas | ⚽ Eventos | ⏱ Histórico)
  • GET /api/context/reindex — corrigido endpoint duplicado no server.py

[v0.2.2] — 2026-06-21 🎨

Novo design Neo-brutalism Light Mode — gerado com Gemini, implementado pelo Tech Lead.

Modificado

  • Design system completo — dark mode substituído por Light Mode Neo-brutalism:
  • Fundo areia (#f4f4eb) com padrão de bolinhas
  • Bordas grossas 3px pretas em todos os elementos
  • Sombras duras deslocadas (5px offset), hover com sombra menor
  • Cards com personalidade própria: Briefing (sombra roxa), Nota (sombra laranja)
  • Mascote SVG animado (flutuando) no card de Escrever nota
  • Grid 2x2 para cards "em breve" com badges rotacionados (+4°)
  • Nav flutuante estilo pill com sombra dura
  • Histórico de briefings: expand/collapse com fundo amarelo no item ativo

  • Briefing history — novo padrão visual com time-tag + preview colapsável

  • Fontes — JetBrains Mono 800 para labels, Space Grotesk 800 para títulos

Não modificado

  • Toda a lógica JS e endpoints backend — funcionalidade 100% intacta

[v0.2.1] — 2026-06-20 🛡️

Bug hunt pós-v0.2.0 — XSS crítico, race condition, CSS e limites ausentes corrigidos.

Corrigido

  • XSS via innerHTMLescHtml() adicionado no JS + html.escape() no Python para todo conteúdo injetado no DOM
  • action_id "go_notas" em loop — renomeado para "open_note_capture" com navegação direta, sem reentrada
  • Race condition feedback/form — timing ajustado de 1500ms vs 1000ms para 800ms vs 1000ms, evitando sobreposição de animações
  • type-btn state ao reabrir form — estado dos botões de tipo resetado via CustomEvent 'nota-kind-reset'
  • nota-recent sem limite — lista de notas recentes limitada a máximo 5 itens
  • DEEPSEEK_API_KEY ausente silencioso — agora emite warning explícito se a chave não está definida
  • CSS --void-2 (typo) — corrigido para --void2 em todos os seletores

[v0.2 — S2-S4] — 2026-06-20

Adicionado

  • Quick Action Cards — Rotinas (aba ⚡ Rotinas como foco principal):
  • Briefing: resume notas recentes via DeepSeek tool_use, salva histórico expansível
  • Escrever nota: formulário inline que mostra nota capturada imediatamente
  • Ajudar com brisa / Configurar setup: cards documentados como "em breve"
  • Histórico de Briefings: expansível por data, carrega no DOMContentLoaded
  • Descrições nos cards: cada rotina tem título + explicação do que faz
  • /api/routine/{id}: endpoint POST que executa rotina com tool_use e retorna HTML
  • /api/routine/history/{id}: endpoint GET que retorna histórico de execuções

Modificado

  • Chat: desabilitado como aba (mantido como template comentado para uso futuro)
  • Notas: integrada dentro da aba Rotinas como card "Escrever nota"
  • Nav: reduzida para 2 abas (⚡ Rotinas | ⏱ Histórico)
  • Rotinas como aba padrão (abre primeiro)
  • Briefing sem ações inventadas: removido actions[] do schema (LLM retorna só texto)
  • MINDFLOW_DB=/data/brisa.db: corrigido bug onde servidor escrevia em arquivo errado

Corrigido

  • Histórico não carregava no load inicial (DOMContentLoaded fix)
  • Nota capturada sumia sem confirmação visual
  • Briefing retornava botões genéricos gerados pelo LLM (removidos)
  • DB path errado (mindflow.db → brisa.db)

[v0.2 — S1] — 2026-06-20

Corrigido

  • BUG-SESSION-001 — Token agora persistido no localStorage do browser. Ao visitar com ?token=X, o token é salvo e enviado como X-Mindflow-Token header em todas as requisições. Sessão não depende mais de cookie — recarregar a página não pede login. Backend aceita header X-Mindflow-Token como alternativa ao cookie de sessão.

Bugs conhecidos (mindflow v0.1.0)

BUG-SESSION-001 — Sessão perdida ao atualizar página / trocar aba

Sintoma: Usuário é redirecionado para /login ao atualizar a página ou voltar de outra aba.

Root cause: SessionMiddleware usa cookie de sessão que pode ser descartado por: - iOS/Android agressivo com memória de abas em background - Traefik não propagando Set-Cookie corretamente em alguns casos - Cookie expirando antes do max_age de 90 dias

Fix planejado (v0.2.0): - Armazenar token em localStorage no frontend - Enviar token como header X-Mindflow-Token em cada requisição API - Eliminar dependência de cookie de sessão - Verificar token no middleware sem precisar de sessão server-side

Workaround atual: Acessar via URL com token: https://mural.srv1723096.hstgr.cloud/?token=SEU_TOKEN



— BrisaVerse / mind-flow

Cada entrada marca o que mudou, quando e por quê. Mais recente no topo.


[v0.1.0-dev] — 2026-06-20 🌱

Novo ambiente limpo — mindflow v0.1.0 em construção.

Adicionado

  • mindflow/ — novo projeto em /workspace/mindflow/ (Python, FastAPI, TDD)
  • Sessão 1 — context layer migrado: embeddings, VectorStore, ContextStore, reindex, auto_index, timeline (47 testes)
  • Sessão 2 — API layer: 5 endpoints (chat, event, timeline, reindex), auth token+cookie (61 testes)
  • Sessão 3 — Frontend mínimo: Chat + Notas + Histórico, 220 linhas total (HTML+CSS+JS)
  • Container mindflow rodando na porta 8090 com Gemini embeddings reais

Decisão de produto

Brisa-core (v0.0.2) foi arquivado na branch backup/v0.0.x-full-mural. O desenvolvimento principal continua no mindflow v0.1.0 com base limpa e TDD desde o início. O backend legado (VectorStore, embeddings, timeline) foi migrado e simplificado. O frontend complexo (nexus, mapa, flows) foi descartado em favor do mínimo funcional.


[Sessão 5] — 2026-06-20

Bug fixes

  • BUG-003: render() agora passa todo_path em todos os 16 endpoints de flow (antes 9 chamadas omitiam o argumento)
  • BUG-004: IDs de stage gerados com UUID hex ({flow_id}-{uuid4().hex[:8]}), eliminando colisão quando flow_id já contém -s
  • BUG-006: vstore._conn encapsulado — adicionados get_indexed_fingerprints() e get_indexed_todo_texts() ao VectorStore; reindex.py migrado para usar os métodos públicos
  • _TODO_PATH: Hardcoded em bot/handler.py (/workspace/todo.md) — documentado como tech debt; BrisaConfig não tem campo todo_path, migração seria invasiva (config.yml + propagação), adiada

Verificação E2E

  • Todos os 159 testes verdes após os fixes
  • Embedding Gemini: dependência google-genai ausente no container (issue de infra, não de código)

[v0.0.2] — 2026-06-20 🔧

Patch de qualidade — bug hunt das Sessões 4 e 5.

Corrigido

  • BUG-001 — Teste test_resposta_html_tem_estrutura_bubble usava classe CSS antiga (chat-bubble) — corrigido para brisa-says
  • BUG-002 — Crash de JS no erro de rede: querySelector('.chat-msg') retornava null → fallback com .bubble
  • BUG-003 — 16 chamadas render() em endpoints de flow sem todo_path → passam todo_path agora
  • BUG-004 — Colisão de ID em /api/flow/{id}/stage/add → IDs com uuid4().hex[:8]
  • BUG-005 — XSS via innerHTML no bubble do usuário → substituído por textContent
  • BUG-006 — Acesso direto a vstore._conn em reindex.py → encapsulado em get_indexed_fingerprints() e get_indexed_todo_texts()
  • Chat alucinando — VectorStore com mock embeddings retornava contexto aleatório → todo.md sempre injetado no system prompt com dados reais

Adicionado

  • Gemini Embeddings reaisBRISA_EMBEDDING_MODEL=gemini/gemini-embedding-001 usando GEMINI_API_KEY já disponível no .env. Busca semântica com 3072 dims reais em vez de hash aleatório.
  • VectorStore.get_indexed_fingerprints() e get_indexed_todo_texts() — métodos públicos para dedup (encapsulamento)
  • handle_voice() no bot Telegram — feedback "Brisa está ouvindo 🎙️⏳" ao receber áudio
  • Chat visual .brisa-says — respostas da Brisa usam orb roxo + bubble, mensagens do usuário alinhadas à direita
  • google-genai>=1.0 no pyproject.toml — Gemini embeddings persistem no rebuild

Tech Debt Documentado

  • _TODO_PATH hardcoded em bot/handler.py — migração para BrisaConfig.todo_path adiada para v0.2.0

2026-06-20 (limpeza pós v0.0.2)

Corrigido

  • CLEAN-002 — _TODO_PATH centralizado em BrisaConfig.todo_path (antes hardcoded em 4 módulos: cmd_runner.py, bot/handler.py, server/mcp.py)
  • SYSTEM_PROMPT do bot — categorias atualizadas para a nova estrutura (Vida Pessoal, Stronda Cup, BrisaVerse, Infra, Casa, Saúde, Horizonte)
  • Import duplicado em handler.py (BrisaConfig importado duas vezes após sed) — removido

Sem mudança (CLEAN-001)

  • Comando gcal já não estava no help do Terminal — sem ação necessária

[v0.0.1] — 2026-06-20 🎉

Primeira versão funcional do mind-flow — Guardião de Contexto Pessoal.

O que está no ar

  • Nexus — mapa dinâmico com 8 nós (categorias de vida), painel inline por nó com flows + tasks
  • Chat da Brisa — perguntas em texto respondidas com contexto real do todo.md e histórico
  • Timeline de vida — visualização cronológica de eventos + done tasks com filtros
  • VectorStore — 135 itens indexados, busca semântica pronta para embeddings reais
  • Bot Telegram — captura tasks/notas, feedback de voz ("Brisa está ouvindo")
  • Documentação online — MkDocs em https://docs.srv1723096.hstgr.cloud
  • 7 categorias por projeto: Vida Pessoal, Stronda Cup, BrisaVerse, Infra, Casa, Saúde, Horizonte
  • 159/159 testes verdes

O que vem a seguir (v0.1.0)

  • Streaming SSE no chat (respostas token por token)
  • Captura de voz via Whisper
  • Embeddings reais (OpenAI/Ollama) para busca semântica precisa
  • CI/CD GitHub Actions
  • Onboarding docker run < 5 min

2026-06-20 (sessão tarde)

Modificado

  • Chat da Brisa (Nexus) — respostas usam o componente visual .brisa-says (orb roxo + bubble dark, igual ao "Brisa diz" do mural). Mensagens do usuário alinhadas à direita com bubble roxo sutil. Loading usa o mesmo componente.
  • Documentação — sumários adicionados ao Plano Técnico e Plano UX; metadados na Pesquisa de Mercado; nav reordenada (Vocabulário → Frentes → BrisaVerse → Changelog); home reescrita com dois caminhos de leitura.
  • Frentes + Vocabulário — criados em /docs/frentes.md e /docs/vocabulario.md com as 7 frentes temáticas (Superfície, Corrente, Frequência, Pulso, Espectro, Lores, Horizonte) e o vocab BrisaVerse.
  • Cores docs — tema MkDocs atualizado para Copa 2026 (vermelho + âmbar).

Corrigido

  • Chat da Brisa alucinando — raiz: VectorStore com mock embeddings retornava contexto aleatório, LLM inventava detalhes. Fix: todo.md sempre injetado no system prompt (atrasadas, vence hoje, resumo por categoria). VectorStore usado apenas como contexto adicional.

Adicionado

  • Feedback de voz no Telegramhandle_voice(): ao receber áudio, Brisa responde imediatamente com "Brisa está ouvindo... 🎙️⏳" antes de processar. Placeholder pronto para integração Whisper.
  • Changelog em /docs/CHANGELOG.md — sempre atualizado antes do commit.
  • Review da doc em /docs/doc-review.md — análise do Technical Writer com plano de melhorias.

2026-06-20

Removido

  • Crônicas Seladas (código legado) — seção duplicada na aba Lores que mostrava done tasks no formato antigo. Substituída pela Timeline de vida.

Adicionado

  • Timeline de vida (brisa/timeline/builder.py, /api/timeline) — visualização cronológica unificada de eventos do ContextStore + done tasks do todo.md. Filtros de importância (Tudo / Marcantes / Épicos) e tipo (Selados / Brisas / Ideias / Gratidão). Acessível na aba 📖 Lores.
  • Chat contextual (/api/chat) — busca contexto no VectorStore e responde via DeepSeek. Componente de chat no Nexus (JS vanilla, fetch POST). Cold start com mock embeddings.
  • VectorStore (brisa/context/vector_store.py) — banco vetorial com sqlite-vec + cosine similarity fallback. 135 itens indexados no startup (tasks + eventos do ContextStore).
  • EmbeddingProvider (brisa/context/embeddings.py) — abstração com Mock (testes), LiteLLM (produção). Troca de modelo via BRISA_EMBEDDING_MODEL env var.
  • Re-indexação (brisa/context/reindex.py) — reindex_context_store() e reindex_todo() idempotentes. Endpoint /api/context/reindex on-demand.
  • Auto-indexação (brisa/context/auto_index.py) — AutoIndexContextStore: qualquer log_event() indexa automaticamente no VectorStore (degradação silenciosa).
  • Documentação online — MkDocs Material em https://docs.srv1723096.hstgr.cloud com pesquisa de mercado, roadmap, plano técnico e plano UX.

Modificado

  • Aba Lores — virou Timeline de vida (antes: lista de Crônicas Seladas)
  • mural_serve.py — inicializa VectorStore no startup + montado via bind mount (hot-reload)
  • docker-compose.ymlBRISA_EMBEDDING_MODEL=mock, mural_serve.py montado :ro
  • CSS — extraído de index.html para style.css externo (34KB → arquivo separado)
  • pyproject.toml — adicionado litellm>=1.40

Corrigidos

  • import json/hashlib movidos pro topo do reindex.py (estavam dentro de funções)
  • Flag _use_vec sem efeito removida do vector_store.py
  • restore_sched_css.py e index.html.bak2 deletados (lixo no repo)

2026-06-19

Adicionado

  • Mapa dinâmico Nexus — 8 nós gerados das categorias do todo.md (layout circular). Toca no nó → painel inline com flows + tasks do domínio.
  • 7 categorias por projetoVida Pessoal, Stronda Cup, BrisaVerse, Infra, Casa, Saúde, Horizonte (substituiu a genérica "Projetos Técnicos")
  • Flow brisaverse.json — roadmap das 4 fases como flow navegável no mapa
  • Editor de itens — ✏️ em cada etapa do painel abre sheet com título, data, prioridade e nota
  • Ações por estado — Selar / Bolsão / Ativar / Retomar com swipe gestual (→ selar, ← bolsão)
  • Modal "Nova Brisa" — ponto único de captura (Brisei / Ideia / Tarefa / Novo mundo)
  • Oráculo — movido para logo após o mapa no Nexus (voz da Brisa, dinâmica)

Modificado

  • Aba Hoje — virou glance rápido (TAPs + urgentes + Copa). Sem lista completa de tarefas.
  • Aba Nexus — gestão central com mapa + painel inline. Seções colapsáveis.
  • Hot-reload — bind mount /workspace/brisa-core/brisa:/app/brisa:ro (sem rebuild)
  • todo.md — reorganizado: categorias limpas, tags padronizadas, flows obsoletos arquivados

Corrigidos

  • Bug "nenhuma etapa ativa" em flows com datas futuras (store.py fallback)
  • taEdit() substituído por modal de edição (antes usava window.prompt())
  • filterTasks() apontava para view inexistente (JS morto removido)
  • /api/category/add ganhou guard de duplicata
  • Docker mount sem :ro (segurança)
  • if tasks_clean or True: sempre-verdadeiro no generator
  • 9 bugs identificados no code review e corrigidos

Como ler

  • Adicionado — nova feature ou arquivo
  • Modificado — mudança em algo existente
  • Corrigido — bug fix
  • Removido — código deletado