chore: ignora graphify-out gerado

This commit is contained in:
2026-10-28 15:59:30 +00:00
parent 0ff519f554
commit 75041136d2
26 changed files with 3023 additions and 1 deletions
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
---
type: Brainstorm
title: 'Brainstorm — bi-descomplicar'
timestamp: 2026-06-30
layer: wiki
---
# BRAINSTORM — bi-descomplicar
Estrutura padrão aplicada.
+10
View File
@@ -0,0 +1,10 @@
---
type: Plan
title: 'PLAN — bi-descomplicar'
timestamp: 2026-06-30
layer: wiki
---
# PLAN — bi-descomplicar
1. Estruturação\n2. Validação\n3. Manutenção
+106
View File
@@ -0,0 +1,106 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, ecosystem]
title: 2026 05 16 Ecosystem Audit
description: >-
Auditoria de ecossistema multi-agente — questionário directo a cada agente, alinhamento de MCPs e skills.
timestamp: 2026-05-16T17:54:53.917476+00:00
---
# Auditoria de Ecossistema — Alinhamento Multi-Agente
**Data:** 2026-05-16
**Método:** Questionário directo a cada agente (dados reais, sem interpretação)
**Agentes auditados:** Gemini CLI, Hermes/Izito, OpenCode
---
## Quadro Consolidado
| | Gemini | Hermes | OpenCode |
|--|--------|--------|----------|
| MEMORY.md lê/escreve | ✅ | ✅ (se existir) | ❌ |
| Cria MEMORY.md se não existe | ❌ | ❌ | ❌ |
| STATUS.md | ❌ | ❌ | ❌ |
| Gitea vs Desk (regras explícitas) | ❌ | ❌ | ❌ |
| Worklog format | ⚠️ HTML | ❌ ausente | ❌ ausente |
| CARL (carl.json) | ✅ path correcto | ⚠️ só MCP | ❌ |
| Regra 48 (dev local) | ❌ | ❌ | ❌ |
| Refs extintas | ✅ limpo | ✅ limpo | ⚠️ dify-kb |
| Credenciais plaintext | — | — | 🔴 resolvido |
---
## Achados por Prioridade
### P1 — Crítico
**1. STATUS.md — ausente em todos os agentes**
Nenhum agente conhece ou tem protocolo para o ficheiro de estado vivo do projecto.
Impacto: cada agente começa sessão sem saber o que o anterior fez.
**2. MEMORY.md — nenhum cria se não existir**
Gemini e Hermes lêem/escrevem se existir. OpenCode não menciona de todo.
Impacto: projectos novos ficam sem memória até alguém criar manualmente.
**3. Gitea vs Desk CRM — sem regras de routing**
Todos os agentes sabem que os sistemas existem mas nenhum tem regras explícitas
sobre o que vai para cada um.
Impacto: duplicação de registos, informação dispersa, dessincronia.
**4. OpenCode sem contexto de ecossistema**
Zero referências a MEMORY.md, CARL, Regra 48, Desk CRM activo.
Impacto: o OpenCode opera isolado do ecossistema.
### P2 — Médio
**5. Worklog divergente**
- Gemini: HTML (`<h4>`, `<ul>`, `<hr>`) — o único com formato diferente
- Hermes: sem template definido
- OpenCode: sem template definido
- Claude: markdown com /worklog — standard do ecossistema
**6. CARL incompleto**
- Gemini: conhece o caminho `/media/ealmeida/Dados/.carl/carl.json` ✅
- Hermes: apenas como nome de MCP, não conhece os domínios
- OpenCode: ausente
**7. Regra 48 ausente em todos**
Nenhum agente sabe que o CT 102 foi extinto em 20-04-2026 e que o
desenvolvimento é local em `/media/ealmeida/Dados/Dev/`.
### P3 — Melhoria
**8. Boas práticas únicas a standardizar**
- Tabela de delegação multi-agente (Hermes SOUL.md) → todos deviam conhecer
- LLM Wiki protocolo 3 passos (Gemini) → standardizar
- Perfil do utilizador PHDA+INFJ (Hermes) → adicionar ao Gemini e OpenCode
- Redução activa de opções (Hermes) → comportamento a standardizar
---
## Segurança — Resolvido em Sessão
| Acção | Estado |
|-------|--------|
| `opencode.json` → 600 | ✅ |
| `~/.claude/settings.json` → 600 | ✅ |
| Credenciais NotebookLM → `~/.opencode-secrets` (600) | ✅ |
| Wrapper `notebooklm-mcp-wrapper.sh` | ✅ |
| `dify-kb` removido do opencode.json | ✅ |
---
## Ficheiros a Criar/Actualizar
| Ficheiro | Acção | Prioridade |
|----------|-------|------------|
| `ECOSYSTEM.md` (Hub) | Criar — fonte de verdade comum | P1 |
| `~/.gemini/GEMINI.md` | Actualizar — STATUS.md, MEMORY.md criar, Gitea/Desk, worklog, Regra 48 | P1 |
| `~/.hermes/AGENTS.md` | Actualizar — STATUS.md, MEMORY.md criar, Gitea/Desk, worklog, CARL domínios, Regra 48 | P1 |
| `~/.config/opencode/AGENTS.md` | Actualizar — tudo: MEMORY.md, STATUS.md, Gitea/Desk, CARL, Regra 48, sistema triangular | P1 |
| `~/.claude/CLAUDE.md` | Actualizar — adicionar STATUS.md ao protocolo de sessão | P2 |
---
**Próximo passo:** implementar alinhamento — writing-plans
@@ -0,0 +1,347 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, proc]
title: 2026 05 16 Proc Dev Standard Design
description: >-
Design do PROC-DEV-STANDARD (D7-SIS-006) — standard de procedimentos de desenvolvimento, aprovado 2026-05-16.
timestamp: 2026-05-16T16:40:14.554151+00:00
---
# Design — PROC-DEV-STANDARD (D7-SIS-006)
**Data:** 2026-05-16
**Status:** Aprovado
**Autor:** Emanuel Almeida + Claude Code
**Baseado em:** WhatSMS v2 (`/media/ealmeida/Dados/Dev/WhatSMS/whatsms-v2`)
---
## Objectivo
Criar o `PROC-DEV-STANDARD` — protocolo de desenvolvimento de ciclo completo (ideia → produção) para todos os projectos Descomplicar®. Agnóstico de stack. Garante que qualquer agente (Claude, Gemini, Hermes, OpenCode, Antigravity) compreende o estado do projecto, nunca perde contexto e partilha toda a informação disponível.
---
## Localização
- **Fonte de verdade:** `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-DEV-STANDARD.md` (código D7-SIS-006)
- **Resumo/referência:** `Modelo-Organizacao-Proc-Dev/docs/SPECS/PROC-DEV-STANDARD-ref.md`
---
## Estrutura do Documento
```
1. Princípios
2. Fluxo Completo (visão geral)
3. Estrutura de Projecto Obrigatória
4. Ficheiros de Contexto Cross-Agent
5. Fase 1 — Ideia
6. Fase 2 — Pesquisa (deep research + NLM)
7. Fase 3 — Spec
8. Fase 4 — Plan
9. Fase 5 — Desenvolvimento (branch + commits)
10. Fase 6 — Quality Gates
11. Fase 7 — Code Review & PR
12. Fase 8 — Deploy & Validação
13. Gestão de Ferramentas: Gitea vs Desk CRM
14. Gates Obrigatórios (Issue-First, Deploy Guard)
15. Excepções (hotfix, re-deploy)
16. Referências
```
---
## Fluxo Completo
```
Ideia
→ Pesquisa (deep research + NLM existente ou novo se domínio novo)
→ Spec (SPEC.md aprovado)
→ Plan (implementação detalhada)
→ Desenvolvimento (feat/* → commits atómicos)
→ Quality Gates (pre-commit → pre-push → CI)
→ Code Review & PR (Gitea)
→ Deploy & Validação (PROC-DEPLOY-STANDARD)
```
Excepções ao pipeline completo: bugfix, operação unitária, continuação de plano existente.
---
## Estrutura de Projecto Obrigatória
```
/ (root)
├── docs/
│ ├── PLANS/ # Planos de acção e roadmaps
│ └── SPECS/ # Specs técnicas + notas de pesquisa
├── scripts/ # Automação local (opcional)
├── AGENTS.md # Directrizes por agente (obrigatório)
├── CHANGELOG.md # Histórico de versões
├── CLAUDE.md # Instruções Claude Code (se aplicável)
├── MEMORY.md # Contexto cross-agent (obrigatório)
├── STATUS.md # Estado vivo do projecto (obrigatório)
└── .desk-project # Ligação Desk CRM (JSON, obrigatório)
```
Validação automática: `scripts/validate-structure.sh` (já existente no modelo).
---
## Ficheiros de Contexto Cross-Agent
### MEMORY.md
- Partilhado entre Claude, Gemini, Hermes, OpenCode, Antigravity e outros
- Formato: secções por data, ordem cronológica inversa
- Conteúdo: decisões, paths, IDs, workarounds, factos de sessão
- **Não** usar `projects/*/memory/*.md` do Claude Code — usar sempre `MEMORY.md` local
### STATUS.md
- Estado instantâneo do projecto — actualizado no início e fim de cada sessão
- Conteúdo: sprint actual, versão, bloqueios, próximos passos, agente activo
- Formato sugerido:
```
# STATUS.md — [Nome Projecto]
**Versão:** vX.Y.Z | **Sprint:** #N | **Data:** YYYY-MM-DD
**Agente activo:** [nome] | **Sessão iniciada:** HH:MM
## Estado
- Em curso: [o que está a ser feito]
- Bloqueios: [impedimentos activos]
- Próximos passos: [próxima acção concreta]
```
### AGENTS.md
- Directrizes específicas do projecto para cada família de agentes
- Conteúdo: o que cada agente pode/não pode fazer, ferramentas disponíveis, restrições
- Actualizado pelo owner quando as regras mudam
### CHANGELOG.md
- Histórico de versões com data, sprint e impacto
- Actualizado pelo agente activo a cada versão/sprint concluído
- Formato: Conventional Changelog (## vX.Y.Z — YYYY-MM-DD)
### Protocolo de sessão (qualquer agente)
1. **Início** → ler `MEMORY.md` + `STATUS.md` + `.desk-project`
2. **Durante** → registar decisões relevantes em `MEMORY.md` em tempo real
3. **Fim** → actualizar `STATUS.md` + `MEMORY.md` com factos novos
---
## Fase 1 — Ideia
**Entrada:** ideia ou pedido de funcionalidade
**Saída:** decisão de avançar ou descartar + âmbito inicial definido
Verificar antes de avançar:
- Não existe já funcionalidade equivalente no projecto
- Alinhado com o MASTER-PLAN / objectivos do projecto
- Âmbito claro o suficiente para pesquisar
---
## Fase 2 — Pesquisa
**Entrada:** ideia com âmbito definido
**Saída:** nota de pesquisa em `docs/SPECS/research-YYYY-MM-DD-tema.md`
### Processo
1. Identificar domínio da ideia
2. Verificar NLMs existentes via `/knowledge` (65 notebooks inventariados)
- Se domínio coberto → usar NLM existente (adicionar fontes se necessário)
- Se domínio novo **e** pesquisa extensa → criar NLM dedicado ao projecto
- Criar NLM apenas se estritamente necessário
3. Executar deep research: WebSearch + WebFetch + NLM
4. Sintetizar: decisões técnicas, alternativas avaliadas, alternativas descartadas e porquê, riscos identificados
5. Guardar nota de pesquisa em `docs/SPECS/`
### Output mínimo da nota de pesquisa
- Pergunta de investigação
- Fontes consultadas
- Conclusões (o que fazer e porquê)
- Alternativas descartadas (com justificação)
- Riscos e mitigações
---
## Fase 3 — Spec
**Entrada:** nota de pesquisa aprovada
**Saída:** `SPEC.md` ou ficheiro em `docs/SPECS/` aprovado pelo owner
- Seguir skill `/brainstorm` → `/spec` para trabalho não-trivial (>3 ficheiros ou sistema novo)
- Excepções: bugfix, operação unitária, continuação de plano existente
- A spec é o contrato bilateral — nada entra em código sem spec aprovada
---
## Fase 4 — Plan
**Entrada:** spec aprovada
**Saída:** plano de implementação em `docs/PLANS/`
- Seguir skill `/writing-plans` para decompor em tarefas executáveis
- Cada tarefa com critério de aceitação claro
- Registar plano em `docs/PLANS/PLAN-YYYY-MM-DD-tema.md`
---
## Fase 5 — Desenvolvimento
**Entrada:** plano aprovado
**Saída:** commits atómicos em branch dedicada
### Branch strategy
- `main` — produção (protegida)
- `dev` — desenvolvimento (se aplicável)
- `feat/N-descricao` — novas funcionalidades
- `fix/N-descricao` — correções de bugs (N = número da issue Gitea)
### Commits
Formato Conventional Commits com referência à issue:
```
tipo(scope): descrição breve (#N)
Corpo opcional com contexto adicional.
Closes #N
Co-Authored-By: [Agente] <noreply@anthropic.com>
```
Tipos válidos: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`
**Regras:**
- Um commit = uma alteração lógica
- `#N` obrigatório (ref à issue Gitea)
- Pre-commit hooks automáticos: formatação + lint (apenas staged)
---
## Fase 6 — Quality Gates
**Entrada:** código desenvolvido
**Saída:** código validado pronto para PR
| Gate | Momento | Responsável | O que verifica |
|------|---------|-------------|----------------|
| Pre-commit | Automático | Hook | Formatação, lint |
| Pre-push | Manual | Agente | Build, testes, cobertura, auditoria segurança |
| CI | Automático (push) | Gitea Actions | Tudo + report cobertura |
Thresholds de cobertura e comandos concretos definidos por projecto no `CONTRIBUTING.md` do projecto — não no PROC genérico.
**Regra:** nunca fazer push sobre CI vermelho. Nunca fazer PR sem quality gates verdes.
---
## Fase 7 — Code Review & PR
**Entrada:** branch com CI verde
**Saída:** PR aprovado e merged para `main`
### Checklist PR
- [ ] Branch actualizada com `main`
- [ ] Todos os testes passam localmente
- [ ] Cobertura acima do threshold do projecto
- [ ] Build sem erros
- [ ] Auditoria de segurança sem vulnerabilidades críticas/altas
- [ ] `CHANGELOG.md` actualizado
- [ ] Documentação actualizada (se aplicável)
- [ ] `STATUS.md` reflecte o novo estado
### Reviewers verificam
- Código segue convenções do projecto (CLAUDE.md / AGENTS.md)
- Testes cobrem casos críticos
- Sem código duplicado
- Sem secrets hardcoded, inputs validados
- `MEMORY.md` actualizado com decisões relevantes
---
## Fase 8 — Deploy & Validação
**Entrada:** PR merged para `main`
**Saída:** versão em produção validada
Seguir `PROC-DEPLOY-STANDARD.md` (D7-SIS-005) na íntegra.
Após deploy:
- Actualizar `STATUS.md` com versão deployada
- Registar em `MEMORY.md`: versão, data, o que foi deployado
- Fechar task Desk CRM correspondente + registar tempo
---
## Gestão de Ferramentas: Gitea vs Desk CRM
### Divisão de responsabilidades
| O quê | Onde | Nunca em |
|-------|------|----------|
| Bugs, issues técnicas, PRs, releases | **Gitea** | Desk CRM |
| Projectos, sprints, tempo, facturação | **Desk CRM** | Gitea |
| Código, commits, CI/CD | **Gitea** | — |
| Cliente 360, propostas, pagamentos | **Desk CRM** | — |
**Regra geral:** Gitea = tracker técnico. Desk CRM = gestão de projecto e facturação.
### Sincronização manual (regras)
1. **Bug descoberto** → criar issue Gitea (Issue-First Gate) → comentar na task Desk com URL da issue Gitea
2. **Feature concluída** → fechar issue Gitea com `Closes #N` no commit → actualizar task Desk para "concluído" + registar tempo
3. **PR merged** → `CHANGELOG.md` actualizado → `STATUS.md` actualizado
4. **Deploy prod** → task Desk fechada → `MEMORY.md` regista versão deployada
### Referências cruzadas obrigatórias
- `.desk-project` contém: `task_id` Desk + `gitea_repo` + `gitea_project_id`
- `MEMORY.md` regista IDs relevantes de ambos os sistemas
- Commits referenciam `(#N)` da issue Gitea
- Comentários Desk referenciam URL completa da issue/PR Gitea
---
## Gate Obrigatório — Issue-First (Bugs)
**Regra não-negociável:** todo o bug passa por issue Gitea **antes** de qualquer commit de fix.
**Fluxo:**
1. Descoberta → criar issue com labels: `Bug` + severidade (`P: Critical/High/Medium/Low`) + área
2. Branch `fix/N-descricao-curta`
3. Commits com `(#N)` + `Fixes #N` no commit que fecha
4. **Excepção hotfix:** fix cirúrgico urgente em prod → criar issue *post-hoc* com label `Backfill`, fechada à criação, com link ao commit
---
## Gate Obrigatório — Deploy Guard
Ver `PROC-DEPLOY-STANDARD.md` (D7-SIS-005) — secção "Deploy Guard".
**Regra:** CI tem de estar verde no último commit de `main` antes de qualquer deploy. Se abortar, não fazer override — investigar, corrigir, empurrar, esperar verde.
---
## Excepções Documentadas
| Situação | Excepção permitida | Condições |
|----------|-------------------|-----------|
| Bug crítico em prod | Hotfix sem PR (push directo main) | Fix trivial e reversível; issue criada post-hoc |
| Re-deploy sem código novo | workflow_dispatch | Após mudança de env vars |
| Bugfix simples | Sem spec/plan | Apenas 1-2 ficheiros, causa raiz clara |
| Continuação de plano | Sem nova spec | Plano existente aprovado, âmbito inalterado |
---
## Referências
- `PROC-DEPLOY-STANDARD.md` — D7-SIS-005 (deploy para produção)
- `ESTRUTURA.md` — hierarquia de projecto standard
- `GOVERNANCA.md` — manifesto de qualidade
- `PROTOCOLO-CRM.md` — integração Lean Gitea ↔ Desk CRM
- `scripts/validate-structure.sh` — validação automática de estrutura
- WhatSMS v2 `CONTRIBUTING.md` — implementação de referência
---
**Criado:** 2026-05-16 | **Aprovado por:** Emanuel Almeida | **Próximo passo:** writing-plans
+10
View File
@@ -0,0 +1,10 @@
---
type: Brief
title: 'Briefing — bi-descomplicar'
timestamp: 2026-06-30
layer: wiki
---
# BRIEF — bi-descomplicar
Projecto bi-descomplicar do ecossistema Descomplicar.
+120
View File
@@ -0,0 +1,120 @@
---
layer: wiki
title: PROC-DEV-STANDARD — Referência Rápida
description: >-
> Este ficheiro é um resumo/índice do PROC-DEV-STANDARD.md completo
type: Reference
code: D7-SIS-006
date: 2026-05-16
timestamp: 2026-05-16T00:00:00+01:00
tags: [protocolo, referência, desenvolvimento]
---
# PROC-DEV-STANDARD — Referência Rápida
> Este ficheiro é um resumo/índice do PROC-DEV-STANDARD.md completo.
> **Versão completa:** `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-DEV-STANDARD.md`
---
## Código & Versão
- **Código:** D7-SIS-006
- **Versão:** 1.0
- **Data:** 2026-05-16
---
## Princípios Core
1. Pesquisa antes de spec
2. Spec antes de código
3. CI verde é gate obrigatório
4. Issue-First para bugs
5. Contexto partilhado (MEMORY.md + STATUS.md)
6. Causa raiz — resolver sempre a causa, não o sintoma
---
## Fluxo Completo
```
Ideia → Pesquisa → Spec → Plan → Desenvolvimento → Quality Gates → Code Review → Deploy
```
---
## Estrutura Obrigatória de Projecto
```
docs/
├── PLANS/ # Planos de implementação
├── SPECS/ # Specs + notas de pesquisa
└── audit/ # Auditorias (se activo)
├── audit.md
├── security.md
├── tech-debt.md
└── findings/
AGENTS.md, CHANGELOG.md, MEMORY.md, STATUS.md, .desk-project
```
---
## Ficheiros Cross-Agent
| Ficheiro | Acção no Início | Acção no Fim |
|----------|-----------------|--------------|
| `MEMORY.md` | Ler/Criar | Escrever decisão |
| `STATUS.md` | Ler/Criar | Actualizar estado |
| `CHANGELOG.md` | — | Actualizar versão |
---
## 8 Fases do Desenvolvimento
| Fase | Input | Output |
|------|-------|--------|
| 1. Ideia | Pedido | Decisão avançar |
| 2. Pesquisa | Âmbito | `docs/SPECS/research-*.md` |
| 3. Spec | Nota pesquisa | `SPEC.md` aprovado |
| 4. Plan | Spec | `docs/PLANS/YYYY-MM-DD-*.md` |
| 5. Desenvolvimento | Plano | Commits atómicos |
| 6. Quality Gates | Código | CI verde |
| 7. Code Review | PR | Aprovação |
| 8. Deploy | PR merge | Produção |
---
## Gitea vs Desk CRM
| Gitea | Desk CRM |
|-------|----------|
| Bugs, issues, PRs, código | Projectos, sprints, tempo, facturação |
---
## Auditoria (PROC-AUDIT-STANDARD — D7-SIS-007)
| Tipo | Frequência | Gatilho |
|------|------------|---------|
| AUDIT-CODE | Mensal | Pre-deploy prod |
| AUDIT-SEC | Mensal | Pre-deploy prod |
| AUDIT-ECO | Trimestral | Mudança agente |
| AUDIT-PROJ | Semanal/sprint | Início sprint |
**Ver:** `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-AUDIT-STANDARD.md`
---
## Referências
- `PROC-DEV-STANDARD.md` — D7-SIS-006 (completo)
- `PROC-AUDIT-STANDARD.md` — D7-SIS-007
- `PROC-DEPLOY-STANDARD.md` — D7-SIS-005
- `ECOSYSTEM.md` — regras partilhadas
---
**Modelo-Organizacao-Proc-Dev** — Template canónico
**Desk CRM:** Task #2134
+11
View File
@@ -0,0 +1,11 @@
---
type: Spec
title: 'SPEC — bi-descomplicar'
status: draft
timestamp: 2026-06-30
layer: wiki
---
# SPEC — bi-descomplicar
Projecto em estruturação.
+353
View File
@@ -0,0 +1,353 @@
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Modelo-Organizacao-Proc-Dev — Workflow</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'JetBrains Mono', monospace;
background: #020617;
min-height: 100vh;
padding: 2rem;
color: white;
}
.container { max-width: 1300px; margin: 0 auto; }
.header { margin-bottom: 2rem; }
.header-row { display: flex; align-items: center; gap: 1rem; margin-bottom: 0.5rem; }
.pulse-dot {
width: 12px; height: 12px; background: #22d3ee;
border-radius: 50%; animation: pulse 2s infinite;
}
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:0.5} }
h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.025em; }
.subtitle { color: #94a3b8; font-size: 0.875rem; margin-left: 1.75rem; }
.diagram-container {
background: rgba(15, 23, 42, 0.5);
border-radius: 1rem; border: 1px solid #1e293b;
padding: 1.5rem; overflow-x: auto;
}
svg { width: 100%; min-width: 1050px; display: block; }
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1rem; margin-top: 2rem;
}
.card {
background: rgba(15, 23, 42, 0.5);
border-radius: 0.75rem; border: 1px solid #1e293b; padding: 1.25rem;
}
.card-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; }
.card-dot { width: 8px; height: 8px; border-radius: 50%; }
.card-dot.cyan { background: #22d3ee; }
.card-dot.emerald { background: #34d399; }
.card-dot.violet { background: #a78bfa; }
.card-dot.amber { background: #fbbf24; }
.card-dot.rose { background: #fb7185; }
.card h3 { font-size: 0.875rem; font-weight: 600; }
.card ul { list-style: none; color: #94a3b8; font-size: 0.75rem; }
.card li { margin-bottom: 0.375rem; }
.footer { text-align: center; margin-top: 1.5rem; color: #475569; font-size: 0.75rem; }
</style>
</head>
<body>
<div class="container">
<!-- Header -->
<div class="header">
<div class="header-row">
<div class="pulse-dot"></div>
<h1>Modelo-Organizacao-Proc-Dev — Fluxo de Trabalho</h1>
</div>
<p class="subtitle">Workflow de projectos Descomplicar®: iniciação, sessão, registo e governança</p>
</div>
<!-- Main Diagram -->
<div class="diagram-container">
<svg viewBox="0 0 1050 780">
<defs>
<marker id="arrow" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
<polygon points="0 0, 10 3.5, 0 7" fill="#64748b" />
</marker>
<marker id="arrow-cyan" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
<polygon points="0 0, 10 3.5, 0 7" fill="#22d3ee" />
</marker>
<marker id="arrow-emerald" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
<polygon points="0 0, 10 3.5, 0 7" fill="#34d399" />
</marker>
<marker id="arrow-violet" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
<polygon points="0 0, 10 3.5, 0 7" fill="#a78bfa" />
</marker>
<marker id="arrow-rose" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
<polygon points="0 0, 10 3.5, 0 7" fill="#fb7185" />
</marker>
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#1e293b" stroke-width="0.5"/>
</pattern>
<filter id="glow">
<feGaussianBlur stdDeviation="2" result="blur"/>
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
<!-- Background Grid -->
<rect width="100%" height="100%" fill="url(#grid)" />
<!-- ================================================================
SECTION 1: FLUXO DE INICIAÇÃO DE PROJECTOS
================================================================ -->
<rect x="20" y="20" width="1010" height="155" rx="10" fill="transparent" stroke="#fbbf24" stroke-width="1" stroke-dasharray="8,4"/>
<text x="30" y="42" fill="#fbbf24" font-size="11" font-weight="600">F1: Iniciação de Projecto</text>
<!-- Step boxes -->
<rect x="40" y="60" width="100" height="50" rx="6" fill="rgba(30,41,59,0.5)" stroke="#94a3b8" stroke-width="1.5"/>
<text x="90" y="78" fill="white" font-size="10" font-weight="600" text-anchor="middle">Novo Projecto</text>
<text x="90" y="96" fill="#94a3b8" font-size="8" text-anchor="middle">Repositório</text>
<line x1="140" y1="85" x2="175" y2="85" stroke="#22d3ee" stroke-width="1.5" marker-end="url(#arrow-cyan)"/>
<rect x="180" y="60" width="130" height="50" rx="6" fill="rgba(8,51,68,0.4)" stroke="#22d3ee" stroke-width="1.5"/>
<text x="245" y="78" fill="white" font-size="10" font-weight="600" text-anchor="middle">desk.project</text>
<text x="245" y="96" fill="#94a3b8" font-size="8" text-anchor="middle">+ AGENTS.md</text>
<line x1="310" y1="85" x2="345" y2="85" stroke="#22d3ee" stroke-width="1.5" marker-end="url(#arrow-cyan)"/>
<rect x="350" y="60" width="140" height="50" rx="6" fill="rgba(8,51,68,0.4)" stroke="#22d3ee" stroke-width="1.5"/>
<text x="420" y="78" fill="white" font-size="10" font-weight="600" text-anchor="middle">docs/PLANS/</text>
<text x="420" y="96" fill="#94a3b8" font-size="8" text-anchor="middle">+ docs/SPECS/</text>
<line x1="490" y1="85" x2="525" y2="85" stroke="#22d3ee" stroke-width="1.5" marker-end="url(#arrow-cyan)"/>
<!-- Validation step -->
<rect x="530" y="55" width="130" height="60" rx="6" fill="rgba(136,19,55,0.2)" stroke="#fb7185" stroke-width="1.5" stroke-dasharray="4,3"/>
<text x="595" y="76" fill="#fb7185" font-size="10" font-weight="600" text-anchor="middle">validate-structure</text>
<text x="595" y="94" fill="#fb7185" font-size="8" text-anchor="middle">scripts/ .sh</text>
<line x1="660" y1="85" x2="695" y2="85" stroke="#34d399" stroke-width="1.5" marker-end="url(#arrow-emerald)"/>
<rect x="700" y="60" width="110" height="50" rx="6" fill="rgba(6,78,59,0.4)" stroke="#34d399" stroke-width="1.5"/>
<text x="755" y="80" fill="#34d399" font-size="11" font-weight="600" text-anchor="middle">CONFORME</text>
<text x="755" y="96" fill="#94a3b8" font-size="8" text-anchor="middle">Exit 0</text>
<!-- Error branch -->
<path d="M 595 115 L 595 130 Q 595 140 585 140 L 460 140 Q 450 140 450 130 L 450 112" fill="none" stroke="#fb7185" stroke-width="1.2" stroke-dasharray="4,3" marker-end="url(#arrow-rose)"/>
<text x="530" y="135" fill="#fb7185" font-size="8">FALHA (exit 1)</text>
<!-- Phase indicator -->
<circle cx="845" cy="85" r="20" fill="rgba(6,78,59,0.3)" stroke="#34d399" stroke-width="1.5"/>
<text x="845" y="90" fill="#34d399" font-size="12" font-weight="700" text-anchor="middle">DONE</text>
<!-- ================================================================
SECTION 2: FLUXO DE SESSÃO (Ciclo PDCA)
================================================================ -->
<rect x="20" y="195" width="1010" height="185" rx="10" fill="transparent" stroke="#34d399" stroke-width="1" stroke-dasharray="8,4"/>
<text x="30" y="217" fill="#34d399" font-size="11" font-weight="600">F2: Sessão de Trabalho (Agente/Humano)</text>
<!-- P - Plan -->
<rect x="40" y="240" width="130" height="55" rx="6" fill="rgba(8,51,68,0.4)" stroke="#22d3ee" stroke-width="1.5"/>
<text x="105" y="260" fill="white" font-size="10" font-weight="600" text-anchor="middle">1. PLAN</text>
<text x="105" y="278" fill="#94a3b8" font-size="8" text-anchor="middle">Contexto: AGENTS.md</text>
<text x="105" y="290" fill="#94a3b8" font-size="7" text-anchor="middle">+ MEMORY.md + CARL</text>
<line x1="170" y1="267" x2="205" y2="267" stroke="#22d3ee" stroke-width="1.5" marker-end="url(#arrow-cyan)"/>
<!-- D - Do -->
<rect x="210" y="240" width="130" height="55" rx="6" fill="rgba(6,78,59,0.4)" stroke="#34d399" stroke-width="1.5"/>
<text x="275" y="260" fill="white" font-size="10" font-weight="600" text-anchor="middle">2. DO</text>
<text x="275" y="278" fill="#94a3b8" font-size="8" text-anchor="middle">Executar (MCP/SSH)</text>
<text x="275" y="290" fill="#94a3b8" font-size="7" text-anchor="middle">Procurar dados reais</text>
<line x1="340" y1="267" x2="375" y2="267" stroke="#34d399" stroke-width="1.5" marker-end="url(#arrow-emerald)"/>
<!-- C - Check -->
<rect x="380" y="235" width="130" height="65" rx="6" fill="rgba(136,19,55,0.2)" stroke="#fb7185" stroke-width="1.5" stroke-dasharray="4,3"/>
<text x="445" y="256" fill="#fb7185" font-size="10" font-weight="600" text-anchor="middle">3. CHECK</text>
<text x="445" y="274" fill="#fb7185" font-size="8" text-anchor="middle">Validação estrutural</text>
<text x="445" y="286" fill="#94a3b8" font-size="7" text-anchor="middle">Testes / QG</text>
<text x="445" y="295" fill="#fb7185" font-size="7" text-anchor="middle">validate-structure.sh</text>
<line x1="510" y1="267" x2="545" y2="267" stroke="#fb7185" stroke-width="1.5" marker-end="url(#arrow-rose)"/>
<!-- Check fail branch back to Do -->
<path d="M 445 300 L 445 330 Q 445 345 435 345 L 275 345 Q 265 345 265 335 L 265 297" fill="none" stroke="#fb7185" stroke-width="1.2" stroke-dasharray="4,3" marker-end="url(#arrow-rose)"/>
<text x="340" y="340" fill="#fb7185" font-size="7">FALHA — corrigir</text>
<!-- A - Act -->
<rect x="550" y="240" width="150" height="55" rx="6" fill="rgba(76,29,149,0.4)" stroke="#a78bfa" stroke-width="1.5"/>
<text x="625" y="260" fill="white" font-size="10" font-weight="600" text-anchor="middle">4. ACT</text>
<text x="625" y="278" fill="#94a3b8" font-size="8" text-anchor="middle">REGISTAR: MEMORY.md</text>
<text x="625" y="290" fill="#94a3b8" font-size="7" text-anchor="middle">+ Comentário CRM</text>
<line x1="700" y1="267" x2="735" y2="267" stroke="#a78bfa" stroke-width="1.5" marker-end="url(#arrow-violet)"/>
<!-- Done -->
<circle cx="810" cy="267" r="20" fill="rgba(6,78,59,0.3)" stroke="#34d399" stroke-width="1.5"/>
<text x="810" y="272" fill="#34d399" font-size="12" font-weight="700" text-anchor="middle">OK</text>
<!-- ================================================================
SECTION 3: SEPARAÇÃO CRM | GITEA | HUB
================================================================ -->
<rect x="20" y="400" width="1010" height="165" rx="10" fill="transparent" stroke="#a78bfa" stroke-width="1" stroke-dasharray="8,4"/>
<text x="30" y="422" fill="#a78bfa" font-size="11" font-weight="600">F3: Separação de Responsabilidades (PROTOCOLO-CRM.md)</text>
<!-- CRM Column -->
<rect x="40" y="445" width="280" height="100" rx="8" fill="rgba(136,19,55,0.15)" stroke="#fb7185" stroke-width="1.5"/>
<rect x="40" y="445" width="280" height="22" rx="8" fill="rgba(136,19,55,0.3)"/>
<rect x="40" y="459" width="280" height="8" fill="rgba(136,19,55,0.3)"/>
<text x="180" y="461" fill="#fb7185" font-size="11" font-weight="600" text-anchor="middle">DESK CRM</text>
<text x="180" y="485" fill="#fb7185" font-size="10" font-weight="600" text-anchor="middle">Contentor de Tempo e Custos</text>
<text x="60" y="505" fill="#94a3b8" font-size="8">• Task Master (poucas, por projecto)</text>
<text x="60" y="519" fill="#94a3b8" font-size="8">• Timer — registo de horas</text>
<text x="60" y="533" fill="#94a3b8" font-size="8">• Comentários — visibilidade gestor/cliente</text>
<!-- Divider -->
<text x="340" y="495" fill="#475569" font-size="14" text-anchor="middle">|</text>
<text x="340" y="509" fill="#475569" font-size="14" text-anchor="middle">|</text>
<text x="340" y="523" fill="#475569" font-size="14" text-anchor="middle">|</text>
<!-- Gitea Column -->
<rect x="370" y="445" width="280" height="100" rx="8" fill="rgba(6,78,59,0.15)" stroke="#34d399" stroke-width="1.5"/>
<rect x="370" y="445" width="280" height="22" rx="8" fill="rgba(6,78,59,0.3)"/>
<rect x="370" y="459" width="280" height="8" fill="rgba(6,78,59,0.3)"/>
<text x="510" y="461" fill="#34d399" font-size="11" font-weight="600" text-anchor="middle">GITEA / REPO</text>
<text x="510" y="485" fill="#34d399" font-size="10" font-weight="600" text-anchor="middle">Oficina Técnica</text>
<text x="390" y="505" fill="#94a3b8" font-size="8">• Código, branches, PRs</text>
<text x="390" y="519" fill="#94a3b8" font-size="8">• Issues — detalhe técnico</text>
<text x="390" y="533" fill="#94a3b8" font-size="8">• Milestones + CI/CD</text>
<!-- Divider -->
<text x="670" y="495" fill="#475569" font-size="14" text-anchor="middle">|</text>
<text x="670" y="509" fill="#475569" font-size="14" text-anchor="middle">|</text>
<text x="670" y="523" fill="#475569" font-size="14" text-anchor="middle">|</text>
<!-- Hub Column -->
<rect x="690" y="445" width="320" height="100" rx="8" fill="rgba(120,53,15,0.15)" stroke="#fbbf24" stroke-width="1.5"/>
<rect x="690" y="445" width="320" height="22" rx="8" fill="rgba(120,53,15,0.3)"/>
<rect x="690" y="459" width="320" height="8" fill="rgba(120,53,15,0.3)"/>
<text x="850" y="461" fill="#fbbf24" font-size="11" font-weight="600" text-anchor="middle">HUB OBSIDIAN (06-Operacoes)</text>
<text x="850" y="485" fill="#fbbf24" font-size="10" font-weight="600" text-anchor="middle">Fonte de Verdade Centralizada</text>
<text x="710" y="505" fill="#94a3b8" font-size="8">• Procedimentos (PROC-*)</text>
<text x="710" y="519" fill="#94a3b8" font-size="8">• Quick References (QR-*)</text>
<text x="710" y="533" fill="#94a3b8" font-size="8">• Runbooks — troubleshooting</text>
<!-- ================================================================
SECTION 4: ECOSSISTEMA DE GOVERNANÇA
================================================================ -->
<rect x="20" y="585" width="1010" height="180" rx="10" fill="transparent" stroke="#fb7185" stroke-width="1" stroke-dasharray="8,4"/>
<text x="30" y="607" fill="#fb7185" font-size="11" font-weight="600">F4: Ecossistema de Governança</text>
<!-- CARL -->
<rect x="40" y="630" width="220" height="55" rx="6" fill="rgba(76,29,149,0.4)" stroke="#a78bfa" stroke-width="1.5"/>
<text x="150" y="650" fill="white" font-size="10" font-weight="600" text-anchor="middle">CARL — Regras Activas</text>
<text x="150" y="668" fill="#94a3b8" font-size="8" text-anchor="middle">MODELO-ORGANIZACAO</text>
<line x1="260" y1="657" x2="295" y2="657" stroke="#a78bfa" stroke-width="1.5" marker-end="url(#arrow-violet)"/>
<!-- ESTRUTURA.md -->
<rect x="300" y="630" width="160" height="55" rx="6" fill="rgba(8,51,68,0.4)" stroke="#22d3ee" stroke-width="1.5"/>
<text x="380" y="650" fill="white" font-size="10" font-weight="600" text-anchor="middle">ESTRUTURA.md</text>
<text x="380" y="668" fill="#94a3b8" font-size="8" text-anchor="middle">Hierarquia Standard</text>
<line x1="460" y1="657" x2="495" y2="657" stroke="#22d3ee" stroke-width="1.5" marker-end="url(#arrow-cyan)"/>
<!-- AGENTS.md -->
<rect x="500" y="630" width="160" height="55" rx="6" fill="rgba(8,51,68,0.4)" stroke="#22d3ee" stroke-width="1.5"/>
<text x="580" y="650" fill="white" font-size="10" font-weight="600" text-anchor="middle">AGENTS.md</text>
<text x="580" y="668" fill="#94a3b8" font-size="8" text-anchor="middle">Directrizes de Agentes</text>
<line x1="660" y1="657" x2="695" y2="657" stroke="#22d3ee" stroke-width="1.5" marker-end="url(#arrow-cyan)"/>
<!-- Script -->
<rect x="700" y="625" width="150" height="65" rx="6" fill="rgba(136,19,55,0.2)" stroke="#fb7185" stroke-width="1.5" stroke-dasharray="4,3"/>
<text x="775" y="646" fill="#fb7185" font-size="10" font-weight="600" text-anchor="middle">validate-structure.sh</text>
<text x="775" y="664" fill="#fb7185" font-size="8" text-anchor="middle">Validação automática</text>
<text x="775" y="676" fill="#94a3b8" font-size="7" text-anchor="middle">Exit 0 = OK</text>
<line x1="850" y1="657" x2="885" y2="657" stroke="#fb7185" stroke-width="1.5" marker-end="url(#arrow-rose)"/>
<!-- MEMORY.md -->
<rect x="890" y="630" width="120" height="55" rx="6" fill="rgba(6,78,59,0.4)" stroke="#34d399" stroke-width="1.5"/>
<text x="950" y="650" fill="white" font-size="10" font-weight="600" text-anchor="middle">MEMORY.md</text>
<text x="950" y="668" fill="#94a3b8" font-size="8" text-anchor="middle">Registo Final</text>
<!-- Bottom: AGENTS.md validation link -->
<path d="M 580 685 L 580 705 Q 580 715 570 715 L 150 715 Q 140 715 140 705 L 140 687" fill="none" stroke="#fb7185" stroke-width="1.2" stroke-dasharray="4,3" marker-end="url(#arrow-rose)"/>
<text x="360" y="712" fill="#fb7185" font-size="7">AGENTS.md referência o domínio CARL correspondente</text>
<!-- ================================================================
LEGEND
================================================================ -->
<rect x="20" y="780" width="1000" height="45" rx="8" fill="transparent" stroke="#1e293b" stroke-width="1"/>
<text x="36" y="797" fill="white" font-size="9" font-weight="600">Legenda:</text>
<rect x="120" y="787" width="14" height="9" rx="2" fill="rgba(8,51,68,0.4)" stroke="#22d3ee" stroke-width="1"/>
<text x="139" y="795" fill="#94a3b8" font-size="8">Governance</text>
<rect x="230" y="787" width="14" height="9" rx="2" fill="rgba(6,78,59,0.4)" stroke="#34d399" stroke-width="1"/>
<text x="249" y="795" fill="#94a3b8" font-size="8">Execução</text>
<rect x="330" y="787" width="14" height="9" rx="2" fill="rgba(76,29,149,0.4)" stroke="#a78bfa" stroke-width="1"/>
<text x="349" y="795" fill="#94a3b8" font-size="8">Registo</text>
<rect x="420" y="787" width="14" height="9" rx="2" fill="rgba(136,19,55,0.2)" stroke="#fb7185" stroke-width="1" stroke-dasharray="2,2"/>
<text x="439" y="795" fill="#94a3b8" font-size="8">Validação / Segurança</text>
<line x1="570" y1="791" x2="584" y2="791" stroke="#fb7185" stroke-width="1.2" stroke-dasharray="3,3"/>
<text x="589" y="795" fill="#94a3b8" font-size="8">Correcção (feedback loop)</text>
<rect x="710" y="787" width="14" height="9" rx="2" fill="transparent" stroke="#fbbf24" stroke-width="1" stroke-dasharray="4,2"/>
<text x="729" y="795" fill="#94a3b8" font-size="8">Fluxo/Fase</text>
</svg>
</div>
<!-- Info Cards -->
<div class="cards">
<div class="card">
<div class="card-header">
<div class="card-dot cyan"></div>
<h3>F1: Iniciação</h3>
</div>
<ul>
<li>• Criar repositório e desk.project</li>
<li>• Scaffold docs/PLANS + docs/SPECS</li>
<li>• AGENTS.md com directrizes do projecto</li>
<li>• Validar com scripts/validate-structure.sh</li>
<li>• Só é "conforme" com exit 0</li>
</ul>
</div>
<div class="card">
<div class="card-header">
<div class="card-dot emerald"></div>
<h3>F2: Sessão PDCA</h3>
</div>
<ul>
<li>• PLAN: Carregar AGENTS.md + MEMORY.md + CARL</li>
<li>• DO: Executar MCP/SSH — nunca assumir</li>
<li>• CHECK: validate-structure.sh + testes</li>
<li>• ACT: REGISTAR em MEMORY.md + CRM</li>
<li>• Se FALHA: loop back ao DO</li>
</ul>
</div>
<div class="card">
<div class="card-header">
<div class="card-dot violet"></div>
<h3>F3+F4: Governança</h3>
</div>
<ul>
<li>• CRM = tempo e custos (não granular)</li>
<li>• Gitea = código, issues, milestones</li>
<li>• Hub (06-Operacoes) = PROCs + Runbooks</li>
<li>• CARL regista decisões com recall keywords</li>
<li>• AGENTS.md aponta para CARL + MEMORY.md</li>
</ul>
</div>
</div>
<!-- Footer -->
<p class="footer">
Modelo-Organizacao-Proc-Dev • Descomplicar® • Task CRM #2134 • Domínio CARL: MODELO-ORGANIZACAO
</p>
</div>
</body>
</html>
+195
View File
@@ -0,0 +1,195 @@
1|<mxfile host="Electron">
2| <diagram name="Workflow - Modelo Organizacao" id="elohOo-F_ihNlNyifD_3">
3| <mxGraphModel dx="1178" dy="733" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="960" math="0" shadow="0">
4| <root>
5| <mxCell id="0" />
6| <mxCell id="1" parent="0" />
7| <mxCell id="3" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Helvetica;fontColor=#FBBF24;" value="F1: Iniciação de Projecto" vertex="1">
8| <mxGeometry height="30" width="280" x="60" y="30" as="geometry" />
9| </mxCell>
10| <mxCell id="4" parent="1" style="rounded=1;arcSize=12;fillColor=none;strokeColor=#FBBF24;strokeWidth=1;dashed=1;dashPattern=8 4;fontFamily=Helvetica;" value="" vertex="1">
11| <mxGeometry height="130" width="920" x="40" y="20" as="geometry" />
12| </mxCell>
13| <mxCell id="5" parent="1" style="rounded=1;arcSize=8;fillColor=#1E293B;strokeColor=#94A3B8;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="Novo Projecto" vertex="1">
14| <mxGeometry height="50" width="110" x="60" y="65" as="geometry" />
15| </mxCell>
16| <mxCell id="6" parent="1" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="desk.project + AGENTS.md" vertex="1">
17| <mxGeometry height="50" width="130" x="220" y="65" as="geometry" />
18| </mxCell>
19| <mxCell id="7" parent="1" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="docs/PLANS/ + docs/SPECS/" vertex="1">
20| <mxGeometry height="50" width="140" x="400" y="65" as="geometry" />
21| </mxCell>
22| <mxCell id="8" parent="1" style="rounded=1;arcSize=8;fillColor=#2D0A13;strokeColor=#FB7185;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;dashed=1;dashPattern=4 3;" value="validate-structure.sh" vertex="1">
23| <mxGeometry height="56" width="140" x="590" y="62" as="geometry" />
24| </mxCell>
25| <mxCell id="9" parent="1" style="rounded=1;arcSize=8;fillColor=#0A4E3B;strokeColor=#34D399;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="CONFORME" vertex="1">
26| <mxGeometry height="50" width="110" x="790" y="65" as="geometry" />
27| </mxCell>
28| <mxCell id="10" edge="1" parent="1" source="5" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="6" value="">
29| <mxGeometry relative="1" as="geometry" />
30| </mxCell>
31| <mxCell id="11" edge="1" parent="1" source="6" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="7" value="">
32| <mxGeometry relative="1" as="geometry" />
33| </mxCell>
34| <mxCell id="12" edge="1" parent="1" source="7" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="8" value="">
35| <mxGeometry relative="1" as="geometry" />
36| </mxCell>
37| <mxCell id="13" edge="1" parent="1" source="8" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="9" value="">
38| <mxGeometry relative="1" as="geometry" />
39| </mxCell>
40| <mxCell id="14" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=8;fontFamily=Helvetica;fontColor=#FB7185;" value="FALHA" vertex="1">
41| <mxGeometry height="16" width="60" x="630" y="128" as="geometry" />
42| </mxCell>
43| <mxCell id="15" edge="1" parent="1" source="8" style="endArrow=classic;endFill=1;strokeColor=#FB7185;strokeWidth=1;rounded=1;dashed=1;dashPattern=4 3;exitX=0.5;exitY=1;entryX=0.5;entryY=1;" target="6" value="">
44| <mxGeometry relative="1" as="geometry" />
45| </mxCell>
46| <mxCell id="16" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Helvetica;fontColor=#34D399;" value="F2: Sessão de Trabalho (PDCA)" vertex="1">
47| <mxGeometry height="30" width="340" x="60" y="180" as="geometry" />
48| </mxCell>
49| <mxCell id="17" parent="1" style="rounded=1;arcSize=12;fillColor=none;strokeColor=#34D399;strokeWidth=1;dashed=1;dashPattern=8 4;fontFamily=Helvetica;" value="" vertex="1">
50| <mxGeometry height="160" width="920" x="40" y="170" as="geometry" />
51| </mxCell>
52| <mxCell id="18" parent="1" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="1. PLAN&#xa;Carregar contexto AGENTS.md&#xa;+ MEMORY.md + CARL" vertex="1">
53| <mxGeometry height="60" width="150" x="60" y="220" as="geometry" />
54| </mxCell>
55| <mxCell id="19" parent="1" style="rounded=1;arcSize=8;fillColor=#0A4E3B;strokeColor=#34D399;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="2. DO&#xa;Executar MCPs&#xa;Procurar dados reais" vertex="1">
56| <mxGeometry height="60" width="140" x="260" y="220" as="geometry" />
57| </mxCell>
58| <mxCell id="20" parent="1" style="rounded=1;arcSize=8;fillColor=#2D0A13;strokeColor=#FB7185;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;dashed=1;dashPattern=4 3;" value="3. CHECK&#xa;validate-structure.sh&#xa;Testes / Quality Gate" vertex="1">
59| <mxGeometry height="64" width="150" x="450" y="218" as="geometry" />
60| </mxCell>
61| <mxCell id="21" parent="1" style="rounded=1;arcSize=8;fillColor=#4C1D95;strokeColor=#A78BFA;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="4. ACT&#xa;REGISTAR MEMORY.md&#xa;+ CRM" vertex="1">
62| <mxGeometry height="60" width="140" x="660" y="220" as="geometry" />
63| </mxCell>
64| <mxCell id="22" parent="1" style="ellipse;fillColor=#0A4E3B;strokeColor=#34D399;fontColor=#34D399;fontSize=12;fontStyle=1;fontFamily=Helvetica;" value="OK" vertex="1">
65| <mxGeometry height="40" width="46" x="850" y="230" as="geometry" />
66| </mxCell>
67| <mxCell id="23" edge="1" parent="1" source="18" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="19" value="">
68| <mxGeometry relative="1" as="geometry" />
69| </mxCell>
70| <mxCell id="24" edge="1" parent="1" source="19" style="endArrow=classic;endFill=1;strokeColor=#34D399;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="20" value="">
71| <mxGeometry relative="1" as="geometry" />
72| </mxCell>
73| <mxCell id="25" edge="1" parent="1" source="20" style="endArrow=classic;endFill=1;strokeColor=#FB7185;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="21" value="">
74| <mxGeometry relative="1" as="geometry" />
75| </mxCell>
76| <mxCell id="26" edge="1" parent="1" source="21" style="endArrow=classic;endFill=1;strokeColor=#A78BFA;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="22" value="">
77| <mxGeometry relative="1" as="geometry" />
78| </mxCell>
79| <mxCell id="27" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=8;fontFamily=Helvetica;fontColor=#FB7185;" value="FALHA — corrigir" vertex="1">
80| <mxGeometry height="16" width="100" x="490" y="300" as="geometry" />
81| </mxCell>
82| <mxCell id="28" edge="1" parent="1" source="20" style="endArrow=classic;endFill=1;strokeColor=#FB7185;strokeWidth=1;rounded=1;dashed=1;dashPattern=4 3;exitX=0.5;exitY=1;entryX=0.5;entryY=1;" target="19" value="">
83| <mxGeometry relative="1" as="geometry" />
84| </mxCell>
85| <mxCell id="29" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Helvetica;fontColor=#A78BFA;" value="F3: Separação de Responsabilidades" vertex="1">
86| <mxGeometry height="30" width="340" x="60" y="370" as="geometry" />
87| </mxCell>
88| <mxCell id="30" parent="1" style="rounded=1;arcSize=12;fillColor=none;strokeColor=#A78BFA;strokeWidth=1;dashed=1;dashPattern=8 4;fontFamily=Helvetica;" value="" vertex="1">
89| <mxGeometry height="160" width="920" x="40" y="360" as="geometry" />
90| </mxCell>
91| <mxCell id="31" parent="1" style="rounded=1;arcSize=6;fillColor=#881337;strokeColor=#FB7185;fontColor=#FB7185;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="DESK CRM" vertex="1">
92| <mxGeometry height="24" width="260" x="60" y="400" as="geometry" />
93| </mxCell>
94| <mxCell id="32" parent="1" style="rounded=1;arcSize=6;fillColor=#1A0A0E;strokeColor=#FB7185;fontColor=#94A3B8;fontSize=8;fontFamily=Helvetica;align=left;verticalAlign=top;whiteSpace=wrap;" value=" Contentor de Tempo e Custos • Task Master (poucas, por projecto) • Timer — registo de horas • Comentários — visibilidade" vertex="1">
95| <mxGeometry height="80" width="260" x="60" y="424" as="geometry" />
96| </mxCell>
97| <mxCell id="33" parent="1" style="rounded=1;arcSize=6;fillColor=#0A4E3B;strokeColor=#34D399;fontColor=#34D399;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="GITEA / REPO" vertex="1">
98| <mxGeometry height="24" width="260" x="370" y="400" as="geometry" />
99| </mxCell>
100| <mxCell id="34" parent="1" style="rounded=1;arcSize=6;fillColor=#0A1F0F;strokeColor=#34D399;fontColor=#94A3B8;fontSize=8;fontFamily=Helvetica;align=left;verticalAlign=top;whiteSpace=wrap;" value=" Oficina Técnica • Código, branches, PRs • Issues — detalhe técnico • Milestones + CI/CD" vertex="1">
101| <mxGeometry height="80" width="260" x="370" y="424" as="geometry" />
102| </mxCell>
103| <mxCell id="35" parent="1" style="rounded=1;arcSize=6;fillColor=#3D2800;strokeColor=#FBBF24;fontColor=#FBBF24;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="HUB OBSIDIAN 06-Operacoes/" vertex="1">
104| <mxGeometry height="24" width="260" x="680" y="400" as="geometry" />
105| </mxCell>
106| <mxCell id="36" parent="1" style="rounded=1;arcSize=6;fillColor=#0F2D0A;strokeColor=#FBBF24;fontColor=#94A3B8;fontSize=8;fontFamily=Helvetica;align=left;verticalAlign=top;whiteSpace=wrap;" value=" Fonte de Verdade Centralizada • Procedimentos (PROC-*) • Quick References (QR-*) • Runbooks — troubleshooting" vertex="1">
107| <mxGeometry height="80" width="260" x="680" y="424" as="geometry" />
108| </mxCell>
109| <mxCell id="37" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Helvetica;fontColor=#FB7185;" value="F4: Ecossistema de Governança" vertex="1">
110| <mxGeometry height="30" width="300" x="60" y="560" as="geometry" />
111| </mxCell>
112| <mxCell id="38" parent="1" style="rounded=1;arcSize=12;fillColor=none;strokeColor=#FB7185;strokeWidth=1;dashed=1;dashPattern=8 4;fontFamily=Helvetica;" value="" vertex="1">
113| <mxGeometry height="150" width="920" x="40" y="550" as="geometry" />
114| </mxCell>
115| <mxCell id="39" parent="1" style="rounded=1;arcSize=8;fillColor=#4C1D95;strokeColor=#A78BFA;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="CARL MODELO-ORGANIZACAO" vertex="1">
116| <mxGeometry height="50" width="160" x="60" y="600" as="geometry" />
117| </mxCell>
118| <mxCell id="40" parent="1" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="ESTRUTURA.md" vertex="1">
119| <mxGeometry height="50" width="140" x="270" y="600" as="geometry" />
120| </mxCell>
121| <mxCell id="41" parent="1" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="AGENTS.md" vertex="1">
122| <mxGeometry height="50" width="130" x="460" y="600" as="geometry" />
123| </mxCell>
124| <mxCell id="42" parent="1" style="rounded=1;arcSize=8;fillColor=#2D0A13;strokeColor=#FB7185;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;dashed=1;dashPattern=4 3;" value="validate-structure.sh" vertex="1">
125| <mxGeometry height="54" width="140" x="640" y="598" as="geometry" />
126| </mxCell>
127| <mxCell id="43" parent="1" style="rounded=1;arcSize=8;fillColor=#0A4E3B;strokeColor=#34D399;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" value="MEMORY.md" vertex="1">
128| <mxGeometry height="50" width="110" x="830" y="600" as="geometry" />
129| </mxCell>
130| <mxCell id="44" edge="1" parent="1" source="39" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="40" value="">
131| <mxGeometry relative="1" as="geometry" />
132| </mxCell>
133| <mxCell id="45" edge="1" parent="1" source="40" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="41" value="">
134| <mxGeometry relative="1" as="geometry" />
135| </mxCell>
136| <mxCell id="46" edge="1" parent="1" source="41" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="42" value="">
137| <mxGeometry relative="1" as="geometry" />
138| </mxCell>
139| <mxCell id="47" edge="1" parent="1" source="42" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="43" value="">
140| <mxGeometry relative="1" as="geometry" />
141| </mxCell>
142| <mxCell id="48" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=8;fontFamily=Helvetica;fontColor=#FB7185;" value="AGENTS.md referencia CARL" vertex="1">
143| <mxGeometry height="16" width="140" x="510" y="665" as="geometry" />
144| </mxCell>
145| <mxCell id="49" edge="1" parent="1" source="41" style="endArrow=classic;endFill=1;strokeColor=#FB7185;strokeWidth=1;rounded=1;dashed=1;dashPattern=4 3;exitX=0.5;exitY=1;entryX=0.5;entryY=1;" target="39" value="">
146| <mxGeometry relative="1" as="geometry" />
147| </mxCell>
148| <!-- ===== SECTION 5: DEPLOY ===== -->
<mxCell id="50" value="F5: Deploy para Produção" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Helvetica;fontColor=#34D399;" vertex="1" parent="1">
<mxGeometry x="60" y="730" width="300" height="30" as="geometry"/>
</mxCell>
<mxCell id="51" value="" style="rounded=1;arcSize=12;fillColor=none;strokeColor=#34D399;strokeWidth=1;dashed=1;dashPattern=8 4;fontFamily=Helvetica;" vertex="1" parent="1">
<mxGeometry x="40" y="720" width="920" height="150" as="geometry"/>
</mxCell>
<mxCell id="52" value="Feature Branch" style="rounded=1;arcSize=8;fillColor=#1E293B;strokeColor=#94A3B8;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" vertex="1" parent="1">
<mxGeometry x="60" y="760" width="100" height="50" as="geometry"/>
</mxCell>
<mxCell id="53" value="CI (lint + testes + segurança)" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" vertex="1" parent="1">
<mxGeometry x="210" y="760" width="130" height="50" as="geometry"/>
</mxCell>
<mxCell id="54" value="" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="52" target="53">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="55" value="PR → Merge (branch protection)" style="rounded=1;arcSize=8;fillColor=#082B44;strokeColor=#22D3EE;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" vertex="1" parent="1">
<mxGeometry x="390" y="760" width="150" height="50" as="geometry"/>
</mxCell>
<mxCell id="56" value="" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="53" target="55">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="57" value="Deploy Automático" style="rounded=1;arcSize=8;fillColor=#0A4E3B;strokeColor=#34D399;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" vertex="1" parent="1">
<mxGeometry x="590" y="760" width="120" height="50" as="geometry"/>
</mxCell>
<mxCell id="58" value="" style="endArrow=classic;endFill=1;strokeColor=#22D3EE;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="55" target="57">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="59" value="Validar + Smoke Tests" style="rounded=1;arcSize=8;fillColor=#2D0A13;strokeColor=#FB7185;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;dashed=1;dashPattern=4 3;" vertex="1" parent="1">
<mxGeometry x="760" y="758" width="150" height="54" as="geometry"/>
</mxCell>
<mxCell id="60" value="" style="endArrow=classic;endFill=1;strokeColor=#34D399;rounded=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="57" target="59">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="61" value="Deploy Guard (CI verde)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=8;fontFamily=Helvetica;fontColor=#FB7185;" vertex="1" parent="1">
<mxGeometry x="430" y="830" width="140" height="16" as="geometry"/>
</mxCell>
<mxCell id="62" value="REGRA: nunca deployar sobre CI vermelho" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=8;fontStyle=2;fontFamily=Helvetica;fontColor=#FB7185;" vertex="1" parent="1">
<mxGeometry x="630" y="830" width="200" height="16" as="geometry"/>
</mxCell>
<mxCell id="63" value="Rollback Plan" style="rounded=1;arcSize=8;fillColor=#4C1D95;strokeColor=#A78BFA;fontColor=#FFFFFF;fontSize=9;fontStyle=1;fontFamily=Helvetica;" vertex="1" parent="1">
<mxGeometry x="60" y="830" width="120" height="24" as="geometry"/>
</mxCell>
</root>
149| </mxGraphModel>
150| </diagram>
151|</mxfile>
152|
+10
View File
@@ -0,0 +1,10 @@
---
type: Note
title: 'Pesquisa — bi-descomplicar'
timestamp: 2026-06-30
layer: wiki
---
# Pesquisa
Documentar pesquisa aqui.
+49
View File
@@ -0,0 +1,49 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, audit]
title: Audit
description: >-
Registo cronológico de todas as auditorias executadas. Findings detalhados em `findings/`
timestamp: 2026-05-16T19:21:21.662617+00:00
---
# Audit Log — Modelo-Organizacao-Proc-Dev
Registo cronológico de todas as auditorias executadas. Findings detalhados em `findings/`.
---
## 2026-05-16 — AUDIT-ECO #001 (1ª trimestral)
**Auditor:** Claude Code (staff_id=25)
**Método:** validação directa de ficheiros de config + permissões + MCPs declarados
**Âmbito:** 4 agentes (Claude, Gemini, Hermes, OpenCode)
### Resultado global
| Dimensão | Estado |
|----------|--------|
| Protocolo de sessão (STATUS/MEMORY) | ✅ 4/4 agentes |
| Regra 48 (dev local) | ✅ 4/4 |
| Gitea vs Desk CRM | ✅ 4/4 |
| Worklog markdown (não HTML) | ✅ 4/4 |
| Credenciais com permissões 600 | ✅ 5/5 ficheiros |
| MCPs essenciais completos | ⚠️ 2/4 agentes |
| CARL domínio MODELO-ORGANIZACAO | ✅ 9 regras, 27 keywords |
### Findings
- **F-001** — Hermes sem MCPs essenciais (`desk-crm-v3`, `mcp-time`, `memory-supabase`, `ssh-unified`, `notebooklm`). Severidade: **High**.
- **F-002** — Gemini sem `desk-crm-v3` (tem apenas `desk-project-minimal`) e sem `mcp-time`. Severidade: **Medium**.
### Conformes
- Claude Code: protocolo completo, CARL activo, MCPs completos.
- OpenCode: protocolo adicionado nesta sessão, todos MCPs essenciais activos, credenciais movidas para `~/.opencode-secrets` (600).
- Worklog HTML eliminado em todos os agentes.
### Próxima AUDIT-ECO
Trimestral → **2026-08-16** (ou antes se mudança de agente/config).
---
@@ -0,0 +1,53 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, audit]
title: F 001 Hermes Mcps Incompletos
description: >-
Finding F-001: Hermes sem MCPs essenciais — desk-crm-v3, mcp-time, ssh-unified em falta, severidade High.
timestamp: 2026-05-16T19:21:33.900726+00:00
---
# F-001 — Hermes sem MCPs essenciais
**Data:** 2026-05-16
**Tipo:** ECO
**Severidade:** High
**Estado:** Open
## Descrição
O `~/.hermes/config.yaml` declara apenas `mcp-gitea` (local Node.js). Faltam:
- `desk-crm-v3` (planeado no ECOSYSTEM.md — "✅" para Hermes)
- `mcp-time`
- `memory-supabase`
- `ssh-unified`
- `notebooklm`
Apenas `memory_enabled: true` (memória interna do Hermes, não Supabase).
## Impacto
Hermes não consegue:
- Criar/actualizar tasks Desk CRM (Sistema Triangular comprometido)
- Consultar timestamps via MCP (cai para `date` local — sem timezone garantido)
- Persistir conhecimento no Supabase (memória só interna)
- Executar comandos em servidores remotos via SSH (operações de infra impossíveis)
- Consultar os 65 notebooks NotebookLM
## Resolução
Adicionar entradas MCP no `~/.hermes/config.yaml`. Endpoints já existem no gateway:
- `gateway.descomplicar.pt/v1/desk-crm/mcp` (3150)
- `gateway.descomplicar.pt/v1/memory/mcp` (3151)
- `gateway.descomplicar.pt/v1/mcp-time/mcp`
- `gateway.descomplicar.pt/v1/ssh-unified/mcp`
- `gateway.descomplicar.pt/v1/notebooklm/mcp`
Tipo: `http` (mesmo padrão do MCP EasyPanel adicionado em 2026-05-13 sessão 3).
## Referências
- Issue Gitea: a criar
- ECOSYSTEM.md §9 (tabela MCPs por agente)
- MEMORY.md (Hub) — `mcp-gateway.md`
@@ -0,0 +1,44 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, audit]
title: F 002 Gemini Mcps Parciais
description: >-
Finding F-002: Gemini sem desk-crm-v3 e mcp-time — MCPs parciais no agente Gemini, severidade Medium.
timestamp: 2026-05-16T19:21:44.099816+00:00
---
# F-002 — Gemini sem desk-crm-v3 e mcp-time
**Data:** 2026-05-16
**Tipo:** ECO
**Severidade:** Medium
**Estado:** Open
## Descrição
`~/.gemini/settings.json` declara 8 MCP servers, mas:
- Usa `desk-project-minimal` (Node.js local) em vez de `desk-crm-v3` (gateway HTTP, ferramentas completas)
- Não tem `mcp-time` (ECOSYSTEM.md §9 marca como "adicionar")
Restantes essenciais OK: `gitea`, `memory-supabase`, `notebooklm`, `filesystem`, `carl`.
## Impacto
- `desk-project-minimal` expõe ~10 ferramentas vs `desk-crm-v3` com >150. Gemini não consegue gerir leads, propostas, facturas, analytics CRM.
- Sem `mcp-time`, Gemini cai para `date` local — risco de timezone em conversões.
## Resolução
Adicionar ao `~/.gemini/settings.json > mcpServers`:
```json
"desk-crm-v3": {"httpUrl": "https://gateway.descomplicar.pt/v1/desk-crm/mcp"},
"mcp-time": {"httpUrl": "https://gateway.descomplicar.pt/v1/mcp-time/mcp"}
```
Manter `desk-project-minimal` se for ainda usado para projectos locais — caso contrário remover.
## Referências
- ECOSYSTEM.md §9