feat(#231): Omega Prism Fatia 1 — Segundo Cérebro por usuário (notas na conta)#299
Draft
Lucas-Belucci-Bellini wants to merge 4 commits into
Draft
feat(#231): Omega Prism Fatia 1 — Segundo Cérebro por usuário (notas na conta)#299Lucas-Belucci-Bellini wants to merge 4 commits into
Lucas-Belucci-Bellini wants to merge 4 commits into
Conversation
…na conta) Fecha o L1 Conhecimento da Fatia 1: o /cerebro deixa de ser só leitura e ganha notas do operador, que viram nós no grafo ligados aos conceitos. - knowledge-cloud.js: CRUD da tabela knowledge_notes por usuário (RLS dono-só), sem SDK, no-op sem login/Supabase (mesmo padrão do memory-cloud). - knowledge.js: store local-first (localStorage) com dedup por conteúdo e espelho best-effort na conta (syncNotes pull+push). Cross-device logado. - cerebro.js: compositor (título+corpo) + lista de notas (apagar) + botão ☁️ Conta; notas/memórias viram nós de 1ª classe (cor/legenda) e o grafo remonta ao mudar as notas. initGraph agora devolve cleanup (sem leak ao remontar). Deslogado segue 100% local. Verificado (Playwright): criar nota → card + nó no grafo (29→32 nós, 3 notas); build limpo + smoke ok.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
O label/corpo da nota é conteúdo do usuário; com innerHTML, um título como <img src=x onerror=...> executaria ao passar o mouse no nó. Agora o tooltip é montado via h()/textContent — sem sink de HTML. Resolve o alerta high do CodeQL na PR #299. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WVGexdsK5EK86CD3QWkHoQ
… binário)
keyOf() usava um caractere NUL (0x00) como separador entre título e corpo,
o que fazia o git/file classificarem knowledge.js como binário ('data') e,
provavelmente, confundia o extractor do CodeQL (alerta high sem sink real
localizável no código). Troca por '\n' — separador de texto, mesmo efeito
de dedup, arquivo volta a ser texto UTF-8 limpo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WVGexdsK5EK86CD3QWkHoQ
…uest-forgery) O user.id (da sessao em localStorage) e o id da nota (de linhas da rede) entravam na querystring do PostgREST via dbFetch -> fetch(). CodeQL trata isso como request-forgery (CWE-918, high): o sink fetch() vive no supabase.js (inalterado), por isso o alerta nao aparecia em nenhum sink dos arquivos do diff. Passa a validar formato UUID estrito antes de interpolar na URL — barreira que o CodeQL reconhece; fora do formato vira no-op. Mantem o mesmo comportamento (ids do Supabase sao UUID). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WVGexdsK5EK86CD3QWkHoQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 Omega Prism · Fatia 1 — Segundo Cérebro por usuário
Fecha o L1 Conhecimento da Fatia 1 (o L2 Memória saiu em #297/#298). O
/cerebrodeixa de ser só leitura: o operador cria notas que viram nós no grafo, ligados aos conceitos — e, logado, sincronizam com a conta (cross-device), igual à Memória.O que entrou
src/core/knowledge-cloud.js— CRUD da tabelaknowledge_notespor usuário (RLS dono-só), sem SDK, no-op sem login/Supabase. Mesmo padrão domemory-cloud.js.src/core/knowledge.js— store local-first (localStoragebaluarte:knowledge:notes):listNotes(local+conta, dedup por conteúdo),addNote/deleteNote(espelho best-effort na conta),syncNotes(pull da nuvem + push das locais).src/pages/cerebro.js— compositor (título + corpo) + lista de notas (apagar) + botão ☁️ Conta (logado: sincroniza; deslogado: leva ao/perfil). As notas (📝) e memórias (🧠) viram nós de 1ª classe (cor própria + entrada na legenda); o grafo remonta ao adicionar/apagar.initGraphagora devolve umcleanup(cancela o loop/observers) — sem leak ao remontar.🛟 Zero regressão / web leve (#238)
indexinalterado (193,7 KB), nada pesado novo no boot./cerebrosegue caindo no cockpit unificado (via olazyLevede feat(#231): Omega Prism Fatia 1 na web — /memoria e /cerebro acessíveis no navegador #298) — inalterado.Verificação (Playwright, modo web)
npm run buildlimpo ·smokeOK (boot + editor intactos). ✅knowledge_notesjá estava aplicada/verificada (REST anon: GET→[], POST→401) em feat(#231): Omega Prism Fatia 1 — Memória por usuário (banco + cliente) #297.🛡️ Backup pré-merge:
backup/2026-06-24-pre-fatia1-web.🤖 Generated with Claude Code
https://claude.ai/code/session_01WVGexdsK5EK86CD3QWkHoQ
Generated by Claude Code