From 1d0b2b5441e3f7bac38a37223ab97c3848837e5f Mon Sep 17 00:00:00 2001 From: Emanuel Almeida Date: Wed, 8 Apr 2026 17:01:44 +0100 Subject: [PATCH] =?UTF-8?q?feat(gestao/knowledge):=20v2.1.0=20router=20Fam?= =?UTF-8?q?=C3=ADlia=20A/B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correcção arquitectural 08-04-2026. A v2.0.0 tratava NotebookLM como fonte primária. Isso estava errado — NotebookLM não vê operações, só tem ebooks e transcripts. Racional em memory/feedback_knowledge-router- arquitectura.md. Nova arquitectura (não é fallback linear, é router por tipo): - Família A (operacional interna, paralelo): LightRAG + memory-supabase + grep ~/.claude/projects/*/memory/ cross-projecto + Obsidian/Hub + Desk CRM - Família B (externa, NotebookLM): só conceptual/teórico/research/mercado - Ambíguo: perguntar ao utilizador Tools LightRAG actualizadas para as reais (FastMCP file-based, confirmadas na recuperação sessão 3 do plano gaps): lightrag_query (hybrid), lightrag_stats, lightrag_get_entity, lightrag_get_graph. Grep cross-projecto obrigatório em ~/.claude/projects/*/memory/*.md (101 ficheiros em 34 projectos) porque o harness só carrega automaticamente a memória do cwd — este é um gap de contexto do CC que nenhum sistema anterior endereçava. Mantidas as tabelas de routing NotebookLM como Família B. Co-Authored-By: Claude Opus 4.6 (1M context) --- gestao/skills/knowledge/SKILL.md | 383 ++++++++++++++----------------- 1 file changed, 176 insertions(+), 207 deletions(-) diff --git a/gestao/skills/knowledge/SKILL.md b/gestao/skills/knowledge/SKILL.md index bad5b21..a6bb192 100644 --- a/gestao/skills/knowledge/SKILL.md +++ b/gestao/skills/knowledge/SKILL.md @@ -1,44 +1,84 @@ --- name: knowledge -description: Gestao unificada de conhecimento com routing por tema para 58 notebooks NotebookLM, Supabase, Context7 e documentacao local. Detecta lacunas e sugere criacao de conteudo. v2.0.0 +description: Router de conhecimento Família A/B. Família A (operacional interna) consultada em paralelo para qualquer pergunta sobre processos, projectos, decisões, histórico. Família B (NotebookLM externa) só para conhecimento conceptual/teórico. v2.1.0 --- -# /knowledge - Gestao Unificada de Conhecimento v2.0.0 +# /knowledge — Router Família A/B v2.1.0 -Pesquisa inteligente com routing automatico entre todas as fontes de conhecimento. -NotebookLM e a fonte primaria (substituiu Dify KB em 06-03-2026). +> **Correcção arquitectural 08-04-2026:** a v2.0.0 tratava NotebookLM como fonte primária. Isso estava errado — NotebookLM não vê operações, não vê estado real, só tem ebooks e transcripts. Em `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/feedback_knowledge-router-arquitectura.md` está o racional completo. -## Arquitectura +## Princípio de routing + +**Não é fallback linear.** É router por tipo de pergunta: + +- **Operacional / processual / histórico / decisões / projectos / código interno** → **Família A em paralelo**, consolidar com citação de origem. +- **Conceptual / teórico / externo / research / mercado / ebooks** → **Família B (NotebookLM)** com routing por tema (tabela em baixo). +- **Ambíguo** → perguntar ao utilizador qual o tipo. + +## Família A — Operacional interna (paralelo, complementares) + +| Fonte | Tool | Conteúdo | +|-------|------|----------| +| **LightRAG** | `mcp__lightrag__lightrag_query` (modo `hybrid`) | Knowledge graph interno. 337+ entidades. File-based em gateway (`/root/mcp-lightrag/data/`). **FastMCP directo** — tools reais: `lightrag_query`, `lightrag_insert`, `lightrag_stats`, `lightrag_get_entity`, `lightrag_get_graph`. | +| **memory-supabase** | `mcp__memory-supabase__search_memories(query, threshold=0.7, limit=10)` | Memórias persistentes cross-sessão com embeddings. Decisões, contexto, lacunas anteriores. | +| **Memória CC cross-projecto** | `Grep` recursivo em `~/.claude/projects/*/memory/*.md` | **101 ficheiros em 34 projectos (~261kB).** Harness só carrega automaticamente a memória do `cwd` — este grep é **obrigatório** para não perder contexto de outros projectos. | +| **Obsidian / Hub** | `Grep` em `/media/ealmeida/Dados/Hub/**/*.md` | PROCs, QRs, INDEX, frontmatter, procedimentos, histórico. | +| **Desk CRM** | `mcp__desk-crm-v3__*` (tasks, projects, tickets, customers) | Fonte de verdade operacional: tarefas, projectos, clientes, tickets, horas. | + +### Workflow Família A ``` -Pergunta -> Classificar Tema -> Seleccionar Notebooks -> Query NotebookLM -> Enriquecer (Supabase/Context7/Local) -> Resultado - | - Detecta Lacunas -> Sugere Criacao +1. Classificar pergunta como operacional (default para queries internas) +2. Disparar em PARALELO (mesma mensagem, vários tool calls): + - lightrag_query(query, mode="hybrid") + - search_memories(query, threshold=0.65, limit=8) + - Grep ~/.claude/projects/*/memory/*.md + - Grep Hub/**/*.md (limitar a pastas relevantes quando possível) + - Desk CRM search (se query menciona cliente/projecto/tarefa) +3. Consolidar resposta citando origem de cada fragmento +4. Se Família A insuficiente → perguntar ao utilizador ou escalar para Família B ``` -| Fonte | MCP | Tipo de Conhecimento | -|-------|-----|---------------------| -| **NotebookLM** | notebooklm | RAG Gemini 2.5, 58 notebooks tematicos (primario) | -| **Supabase** | memory-supabase | Memoria sessoes, decisoes, contexto | -| **Context7** | context7 | Docs bibliotecas externas | -| **Docs Locais** | filesystem | Ficheiros Hub, GDrive, Dev | +### Formato de resposta Família A + +```markdown +## [pergunta] + +**LightRAG:** [excerto] _(entidade X, score Y)_ +**memory-supabase:** [excerto] _(id N, tags)_ +**memory/:** [excerto] _(ficheiro)_ +**Hub:** [excerto] _(caminho:linha)_ +**Desk CRM:** [excerto] _(task #N, projecto #M)_ + +**Síntese:** [consolidação em 2-3 frases citando as fontes mais fortes] +``` + +**Regra:** nunca responder sem citar fonte. Se 0 fontes, dizer "sem hits em Família A" explicitamente. --- -## Comandos +## Família B — Conhecimento externo (NotebookLM) -| Comando | Uso | -|---------|-----| -| `/knowledge [termo]` | Pesquisa inteligente com routing | -| `/kb [termo]` | Alias curto | -| `/kb-save [tema]` | Guardar conhecimento na fonte adequada | -| `/kb-gaps` | Listar lacunas identificadas | +**Quando usar:** só para perguntas **conceptuais, teóricas, de research externo ou mercado**. Nunca para operacional. ---- +Exemplos de queries Família B: +- "Quais são as melhores práticas de Core Web Vitals em 2025?" +- "Como funciona o algoritmo de ranking do YouTube Shorts?" +- "Arquétipos de Jung aplicados a branding" +- "Stoicismo na gestão de equipas" -## Routing por Tema -> Notebooks NotebookLM +**Workflow Família B:** -### WordPress e Web +1. Classificar tema → tabela de routing +2. Consultar **max 3 notebooks** (performance) +3. `mcp__notebooklm-mcp__notebook_query({ notebook_id, query })` +4. Se score <70 → fallback a Context7 (docs bibliotecas) + +### Routing por tema (65 notebooks) + +> Inventário completo: `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md` + +**WordPress/Web** | Keywords | Notebook | ID | |----------|----------|----| @@ -48,9 +88,7 @@ Pergunta -> Classificar Tema -> Seleccionar Notebooks -> Query NotebookLM -> Enr | kivicare, ehr, clinica | KiviCare EHR WP | `78621405-a5bc-433f-856f-296260a80bd9` | | seguranca wp, malware, hardening | Ciberseguranca WordPress | `5f60adfd-2435-4725-8c12-9c11c5f51d75` | -**Fallback:** Context7 (docs oficiais plugins) -> Docs Locais (`/Dev/*/wp-content/`) - -### Marketing e Conteudo +**Marketing e Conteúdo** | Keywords | Notebook | ID | |----------|----------|----| @@ -65,238 +103,169 @@ Pergunta -> Classificar Tema -> Seleccionar Notebooks -> Query NotebookLM -> Enr | ecommerce, loja online | E-commerce Pratico | `226e384e-d4bc-48f4-bb82-7927360436cc` | | ecommerce portugal, marketplace | E-Commerce Portugal | `8a430cf2-ed99-413d-b4bf-a1400deaf49e` | -**Fallback:** Supabase (decisoes marketing) -> Docs Locais (Hub/) - -### Desenvolvimento e Codigo +**Desenvolvimento / Código (externo)** | Keywords | Notebook | ID | |----------|----------|----| -| programacao, codigo, api, php, react, node | Programacao | `24947ffa-0019-448a-a340-2f4a275d2eb1` | -| claude code, claude, mcp dev | Claude Code | `2876d1fe-5cea-4d98-8140-b0e1a81c6bc4` | -| claude code mini, snippets | Claude Code (mini) | `0be6f45b-8fd5-4a5e-8f80-e36a6f516ded` | -| mcp, mcp server, protocolo | Desenvolvimento de MCPs | `73102308-70ef-403e-9be9-eae0cfc62d55` | +| programacao externa, padroes, api design | Programacao | `24947ffa-0019-448a-a340-2f4a275d2eb1` | +| claude code, mcp dev externo | Claude Code | `2876d1fe-5cea-4d98-8140-b0e1a81c6bc4` | +| mcp protocolo | Desenvolvimento de MCPs | `73102308-70ef-403e-9be9-eae0cfc62d55` | | ai editor, cursor, copilot | AI Code Editors | `57d9c6c9-48ba-4d83-8f71-cc890f348a53` | -| github, trends, repos | GitHub Trends | `922b7532-ddf3-4dba-9d3c-6d5f83b89378` | -| open source, foss, self-hosted | Open Source Software and Platforms | `cabf9821-c1ff-44cb-9bfd-59bda3599792` | -| open webui, ollama | Open WebUI | `be6f72ac-f8ba-4337-912d-abd5dd448519` | +| github trends | GitHub Trends | `922b7532-ddf3-4dba-9d3c-6d5f83b89378` | +| open source, foss | Open Source Software and Platforms | `cabf9821-c1ff-44cb-9bfd-59bda3599792` | +| n8n, workflow automacao | n8n | `f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1` | +| perfex dev, hooks externos | Dev PerfexCRM | `80606de8-2783-4d36-b08d-5825e6f9a8da` | | remotion, video code | Remotion | `f2b75baa-1ab1-48d3-8f7c-a6a9e516934c` | -| perfex, perfexcrm, modulos | Perfex CRM: Gestao de Clientes e Projetos | `df4688bb-c2c0-4aba-98c1-38c3b50a353c` | -| perfex dev, hooks perfex | Dev PerfexCRM | `80606de8-2783-4d36-b08d-5825e6f9a8da` | -| erxes, xos | Erxes XOS | `10ea7de8-5777-4f18-bd2c-f58952b6047c` | -| n8n, automacao, workflow | n8n | `f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1` | -**Fallback:** Context7 (docs bibliotecas) -> Docs Locais (`/Dev/`) +> **Nota:** código do projecto (`/Dev/*`, plugins locais, MCPs desenvolvidos internamente) é **Família A** (grep Hub + filesystem), não Família B. -### Infraestrutura e Servidores +**Infraestrutura** | Keywords | Notebook | ID | |----------|----------|----| -| cwp, centos, servidor web | CWP | `0ded7bd6-69b3-4c76-b327-452396bf7ea7` | -| cloud, infraestrutura, devops | Cloud e Infraestrutura TI | `f9a79b5a-649f-4443-afaf-7ff562b6c2e7` | -| proxmox, virtualizacao, vm | Proxmox | `276ccdde-6b95-42a3-ad96-4e64d64c8d52` | +| cwp externo | CWP | `0ded7bd6-69b3-4c76-b327-452396bf7ea7` | +| cloud, devops patterns | Cloud e Infraestrutura TI | `f9a79b5a-649f-4443-afaf-7ff562b6c2e7` | +| proxmox | Proxmox | `276ccdde-6b95-42a3-ad96-4e64d64c8d52` | -**Fallback:** Supabase (configs anteriores) -> Docs Locais (Hub/06-Operacoes/) - -### Design e UX +**Design/UX** | Keywords | Notebook | ID | |----------|----------|----| -| design, branding visual, ai design | Design Profissional AItomatizado | `b568b13b-0eed-48c9-b513-5c5b7ec0b102` | -| ui, ux, interface, usabilidade | UI/UX Design | `081ca512-8279-4850-b2b9-dff090267482` | -| tipografia, cores, web design | Tipografia e Cor para Web | `f97a0d2b-a5b3-4640-b941-3cbb184b1b81` | +| design, branding externo | Design Profissional AItomatizado | `b568b13b-0eed-48c9-b513-5c5b7ec0b102` | +| ui, ux, wcag | UI/UX Design | `081ca512-8279-4850-b2b9-dff090267482` | +| tipografia, cores | Tipografia e Cor para Web | `f97a0d2b-a5b3-4640-b941-3cbb184b1b81` | -### Gestao e Estrategia +**Gestão e Estratégia** | Keywords | Notebook | ID | |----------|----------|----| | gestao projectos, agile, scrum | Gestao de Projectos e Agile | `0c9c079c-a426-486c-99eb-1564d42d37ad` | -| operacoes, processos, kpi | Gestao de Operacoes | `f9dc59c2-718b-4b12-bd06-095d4bfa3e34` | -| estrategia, empreendedorismo, negocio | Estrategia e Empreendedorismo | `79d43410-0e29-4be1-881d-84db6bdc239a` | +| operacoes externas, kpi | Gestao de Operacoes | `f9dc59c2-718b-4b12-bd06-095d4bfa3e34` | +| estrategia, empreendedorismo | Estrategia e Empreendedorismo | `79d43410-0e29-4be1-881d-84db6bdc239a` | | transformacao digital, ia negocio | Transformacao Digital e IA | `ab876d0d-12a8-43d9-bc62-59c1c8e9d0f8` | -| ai automation, stack ai | AI Automation Stack | `929ef67b-c131-4f01-abd0-8b078491a6b7` | -| ai agents, curso ai | AI Agents Intensive Course | `f4be0e3f-4d9e-4c5c-a743-9f14427f2e43` | +| ai automation stack | AI Automation Stack | `929ef67b-c131-4f01-abd0-8b078491a6b7` | +| ai agents curso | AI Agents Intensive Course | `f4be0e3f-4d9e-4c5c-a743-9f14427f2e43` | -**Fallback:** Supabase (decisoes) -> Docs Locais (Hub/01-Planeamento/) - -### Produtos e Clientes +**Produtos externos / Mercado** | Keywords | Notebook | ID | |----------|----------|----| -| zaia, chatbot, whatsapp bot | Zaia | `087d76f1-e929-49da-9e3c-4edc22b42b3f` | -| zender, sms, whatsapp api | Zender 3 | `7095e5fa-1465-4496-b1a3-48f2e6e07f79` | -| reonic, solar crm | Reonic | `b7e61158-0717-4582-8ef2-0301be3c73ae` | -| carstuff, automovel | CarStuff | `90f0bc77-b5e4-4ddd-a07c-013a1a30b247` | -| solar, fotovoltaico, engenharia | Solar FV Engenharia | `03d54e00-aefa-45dc-ba01-f3864a7c3112` | -| opensolar, dimensionamento | OpenSolar | `0082bcaf-1e17-4b84-87cc-2256b1719b55` | -| produtos, servicos, tabela precos | Produtos e Servicos: BD | `c451d7b4-79fd-4a67-9149-1da38d28345e` | -| descomplicar marketing | Descomplicar: Marketing Digital | `f29c8457-f16d-4fb3-979d-6e5901de1b20` | +| zaia, chatbot | Zaia | `087d76f1-e929-49da-9e3c-4edc22b42b3f` | +| zender, whatsapp api | Zender 3 | `7095e5fa-1465-4496-b1a3-48f2e6e07f79` | +| solar, fotovoltaico | Solar FV Engenharia | `03d54e00-aefa-45dc-ba01-f3864a7c3112` | +| opensolar | OpenSolar | `0082bcaf-1e17-4b84-87cc-2256b1719b55` | -### Sistema e Produtividade +**Pessoal / SelfRescueProtocol** (só se explicitamente pessoal) | Keywords | Notebook | ID | |----------|----------|----| -| obsidian, vault, notas | Obsidian + Claude | `ebee9fe1-78fd-4f85-8938-f19f3ea32131` | -| viral, filosofia, youtube channel | Building Viral AI Philosophy Channels | `7bb570b3-9dc4-4e6f-817c-aca68df59e6d` | - -### Pessoal / SelfRescueProtocol (9) - -| Keywords | Notebook | ID | -|----------|----------|----| -| jung, arquetipos, sombra | Jung | `d5c67d7f-7fe8-4542-9e5c-22403f3193ee` | -| emanuel, pessoal, perfil | Emanuel Almeida | `8c6c8257-bda2-433c-bf55-f40d98bfde8f` | -| taoismo, tao, wu wei | Taoism | `aea85baf-9ddf-4d79-bf07-81391a275b09` | -| adhd, phda, atencao | ADHD | `a4ff3fd7-fb7c-49a1-94ff-0433193e2338` | -| autismo, neurodivergencia | Autismo | `66eff78e-318f-4a8b-a3c7-039a4124b1ad` | -| heroi, jornada, mito | Essencia de Heroi | `6dcd08e8-79d9-4ae0-b6bf-b2ee96717bf2` | -| kintsugi, resiliencia | Auto Kintsugi | `82a95c2f-be56-4c4a-a96f-96f6677a6991` | -| somatica, corpo, trauma | Psicologia Somatica | `3410893b-16a3-4178-9091-42650a41086f` | -| estoicismo, marco aurelio, stoic | Marcus Aurelius / Stoic | `4b986ad4-49da-4604-a423-4fcdf20dd9da` | +| jung, arquetipos | Jung | `d5c67d7f-7fe8-4542-9e5c-22403f3193ee` | +| taoismo, wu wei | Taoism | `aea85baf-9ddf-4d79-bf07-81391a275b09` | +| adhd, phda | ADHD | `a4ff3fd7-fb7c-49a1-94ff-0433193e2338` | +| autismo | Autismo | `66eff78e-318f-4a8b-a3c7-039a4124b1ad` | +| heroi, jornada | Essencia de Heroi | `6dcd08e8-79d9-4ae0-b6bf-b2ee96717bf2` | +| kintsugi | Auto Kintsugi | `82a95c2f-be56-4c4a-a96f-96f6677a6991` | +| somatica, trauma | Psicologia Somatica | `3410893b-16a3-4178-9091-42650a41086f` | +| estoicismo | Marcus Aurelius / Stoic | `4b986ad4-49da-4604-a423-4fcdf20dd9da` | --- -## Workflow +## Classificador de pergunta (heurística) -### Passo 1: Classificar Tema +Usar estes sinais para decidir Família A vs B: + +| Sinal na pergunta | Família | +|---|---| +| Nome de cliente, projecto, tarefa #N, ticket #N | **A** | +| "quando", "histórico", "última vez", "decisão", "porque fizemos" | **A** | +| Nome de ficheiro, path, skill, plugin, MCP interno | **A** | +| "como funciona (abstracto)", "melhores práticas", "teoria de" | **B** | +| Nome de biblioteca externa + versão | **B** (+ Context7) | +| Pessoal explícito (jung, adhd, estoicismo, …) | **B** pessoal | +| Ambíguo | **perguntar** | + +--- + +## Comandos + +| Comando | Uso | +|---------|-----| +| `/knowledge [pergunta]` | Router automático A/B com paralelismo | +| `/kb [pergunta]` | Alias curto | +| `/kb-save [conteúdo]` | Guardar na fonte adequada (LightRAG se operacional, Supabase se decisão, NotebookLM source_add se externo) | +| `/kb-gaps` | Listar lacunas detectadas em `memory-supabase` | + +--- + +## Gravar conhecimento (/kb-save) + +Router inverso por tipo: + +| Tipo | Destino | Tool | +|---|---|---| +| Decisão / contexto / lacuna | memory-supabase | `mcp__memory-supabase__save_memory` com tags | +| Entidade / relação / doc interno | LightRAG | `mcp__lightrag__lightrag_insert(content, source)` | +| Procedimento operacional | Hub/06-Operacoes/Procedimentos/ | `Write` PROC-*.md | +| Conhecimento externo | NotebookLM notebook adequado | `mcp__notebooklm-mcp__source_add` | + +--- + +## Detecção e reporte de lacunas + +Quando query retorna 0 hits úteis em Família A (o caso relevante) ou <30% score em Família B: ```javascript -// Input: "/knowledge como configurar crocoblock filters" -// 1. Extrair keywords: ["crocoblock", "filters", "configurar"] -// 2. Match routing: wordpress (crocoblock) -// 3. Notebooks primarios: WordPress Config CLI, WordPress e Elementor -// 4. Notebooks secundarios: Ciberseguranca WordPress (se relevante) +mcp__memory-supabase__save_memory({ + content: `LACUNA: "${query}" — Família A 0 hits, classificada como ${classificacao}.`, + tags: ["lacuna-kb", classificacao], + metadata: { query, timestamp, source_families: ["A","B"] } +}); ``` -### Passo 2: Query NotebookLM (Primario) - -```javascript -// Consultar 1-3 notebooks relevantes (max 3 para performance) -mcp__notebooklm__notebook_query({ - notebook_id: "fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d", // WordPress Config CLI - query: "crocoblock filters configuracao" -}) - -// Se score < 70, consultar notebook secundario -mcp__notebooklm__notebook_query({ - notebook_id: "5be0d1a6-00f2-4cd9-b835-978cb7721601", // WordPress e Elementor - query: "crocoblock filters" -}) -``` - -### Passo 3: Enriquecer (Opcional) - -```javascript -// Supabase - contexto/decisoes anteriores -mcp__memory-supabase__search_memories({ query, tags: ["wordpress", "crocoblock"] }) - -// Context7 - docs bibliotecas externas -mcp__plugin_context7_context7__resolve-library-id({ libraryName: "crocoblock" }) - -// Filesystem - codigo local -// Grep/Glob em /media/ealmeida/Dados/Dev/ e /media/ealmeida/Dados/Hub/ -``` - -### Passo 4: Resposta Estruturada - -```markdown -## Resultado: [termo] - -### Encontrado em [Notebook] -[Conteudo encontrado] - -### Relacionado -- [Links relevantes] - -### Qualidade -- Score: XX/100 -- Fonte: NotebookLM ([notebook]) -- Enriquecido: [Supabase/Context7/Local] (se aplicavel) -``` - -### Passo 5: Detectar e Reportar Lacunas - -```javascript -if (resultado.score < 50 || !resultado.encontrado) { - await mcp__memory-supabase__save_memory({ - content: `LACUNA: Query "${query}" sem informacao adequada.`, - metadata: { type: 'lacuna-kb', categoria, query, score: resultado.score } - }); -} -``` +Depois sugerir acção: criar PROC, adicionar ao LightRAG, adicionar fonte ao notebook adequado. --- -## Regras de Routing +## Regras operacionais -1. **Max 3 notebooks** por query (performance) -2. **Notebooks especificos primeiro** (ex: KiviCare antes de WordPress generico) -3. **Fallback hierarquico:** NotebookLM -> Supabase -> Context7 -> Docs Locais -4. **Multi-tema:** Se query cruza temas, consultar 1 notebook de cada tema -5. **Pessoal:** So consultar notebooks pessoais se query explicitamente pessoal +1. **Família A é default.** Só escalar para B quando classificador sinalizar externo. +2. **Paralelismo obrigatório em Família A.** Todas as tools na mesma mensagem (regra global #1: "NEVER run independent tool calls sequentially"). +3. **Grep cross-projecto obrigatório** em `~/.claude/projects/*/memory/*.md` — o harness só carrega a memória do `cwd`, este grep compensa esse gap. +4. **Nunca responder sem citar fonte.** Se 0 hits, dizer explicitamente. +5. **Max 3 notebooks** por query Família B. +6. **PT-PT sempre** na consolidação. +7. **Se a pergunta é sobre estado presente** (tarefas abertas, tickets, horas, facturas), ir **directo ao Desk CRM**, não a LightRAG/NotebookLM. --- -## Guardar Conhecimento (/kb-save) +## Anti-patterns -``` -1. Analisar tipo de conhecimento -2. Determinar destino: - - Decisao/Contexto -> Supabase (memory-supabase) - - Conhecimento tematico -> NotebookLM (via source_add ao notebook adequado) - - Procedimento -> Hub/06-Operacoes/Procedimentos/ (PROC-*.md) -3. Formatar conteudo -4. Guardar com metadata adequada -``` +- ❌ Começar por NotebookLM para perguntas operacionais (era o erro da v2.0.0) +- ❌ Só consultar o `cwd` e ignorar memory cross-projecto +- ❌ Responder sem citar fonte +- ❌ Chamar Família A em série — tem de ser paralelo +- ❌ Classificar "como funciona o nosso router /knowledge?" como Família B (é Família A — é sobre infra interna) +- ❌ Fallback linear A→B quando a pergunta é claramente externa (vai directo a B) --- -## Deteccao de Lacunas +## Referências -```markdown -> [!warning] Lacuna Detectada -> Tema "[X]" nao tem documentacao adequada. -> -> Sugestao: -> - [ ] Adicionar fontes ao notebook NotebookLM: [notebook] -> - [ ] Guardar em Supabase: [se for decisao/contexto] -> - [ ] Criar PROC: [se for procedimento] -``` +- `references/routing-guide.md` — mapeamento detalhado de routing (pendente v2.1 — actualizar) +- `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/feedback_knowledge-router-arquitectura.md` — decisão arquitectural +- `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md` — inventário completo 65 notebooks +- `04-Stack/CHANGELOG.md` sessão 3 de 08-04-2026 — recuperação LightRAG e clarificação tools reais --- -## Gaps Conhecidos (P1) - -| Gap | Notebook alvo | Prompt | -|-----|---------------|--------| -| Next.js App Router/RSC | Programacao (24947ffa) | DR-nextjs-app-router.md | -| PHP 8+ / Laravel 11-12 | Programacao (24947ffa) | DR-php-laravel-moderno.md | -| Core Web Vitals / GA4 | Marketing Digital PT (4c595973) | DR-core-web-vitals-ga4.md | -| WCAG 2.2 / ARIA | UI/UX Design (081ca512) | DR-wcag-acessibilidade.md | - ---- - -## Checklist de Pesquisa - -- [ ] Tema correctamente classificado -- [ ] Notebooks prioritarios consultados (max 3) -- [ ] Score de relevancia >70 (ou >30 agregado) -- [ ] Lacunas detectadas e reportadas -- [ ] Resultados formatados correctamente - ---- - -## Referencias - -- `references/routing-guide.md` - Mapeamento detalhado com codigo de routing -- Inventario completo: `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md` - ---- - -## Healing Log - -Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar. +## Healing log ```jsonl -{"date":"","issue":"","fix":"","source":"user|auto"} +{"date":"2026-04-08","issue":"v2.0.0 tratava NotebookLM como fonte primaria para tudo","fix":"v2.1.0 router Familia A/B — NotebookLM so para externo","source":"user"} +{"date":"2026-04-08","issue":"tools MCP lightrag assumidas (get_pipeline_status, query_document) nao existem","fix":"tools reais sao lightrag_query, lightrag_stats, lightrag_get_entity — FastMCP file-based","source":"auto"} +{"date":"2026-04-08","issue":"memoria Claude Code fragmentada em ~/.claude/projects/*/memory/ (101 ficheiros, 34 projectos)","fix":"grep cross-projecto obrigatorio no router Familia A","source":"user"} ``` -*Adicionar nova linha após cada erro corrigido.* +--- + +**v2.1.0** | 08-04-2026 | Router Família A/B, LightRAG FastMCP tools reais, grep cross-projecto cwd→all