Compare commits

..
5 Commits
27 changed files with 3069 additions and 15 deletions
+12
View File
@@ -41,6 +41,18 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts
# Estado local de ferramentas
.aionrs/
.claude/settings.local.json
.claude/cache/
.claude/skills/
.gemini/
.ijfw/
graphify-out/
# Backups do editor draw.io
.xdp-*
# IJFW — working memory por-hook (Tier 1), nunca versionada
.ijfw/
ijfw/
+98
View File
@@ -0,0 +1,98 @@
---
type: Document
title: Agents
description: Este documento define o papel, limites e responsabilidades dos agentes
de IA (Gemini CLI, Claude Code, Hermes) a operar …
timestamp: 2026-05-13 11:28:03.523803+00:00
tags:
- dev
- codigo
- governance
- 5w2h
- roles
- escalacao
- relacionamentos
---
# AGENTS.md — Governance de Agentes IA
## Definição
Este documento define o papel, limites e responsabilidades dos agentes de IA (Gemini CLI, Claude Code, Hermes) a operar neste repositório.
## Identidade do Projecto
- **Repositório**: bi-descomplicar
- **Localização**: `/media/ealmeida/Dados/Dev/bi-descomplicar/`
- **CRM**: Ver `desk.project` para referência do projecto
- **Domínio CARL**: `BI-DESCOMPLICAR` (ou conforme CRM)
## Directrizes de Operação
### 1. PT-PT e Precisão
Toda a interacção, comentários, commits e documentação devem ser em português europeu, com acentos e cedilhas.
### 2. MCP-first
- **CRM (Desk Project Minimal)**: Consultar/actualizar task #2134 via MCP
- **Gitea (MCP Gitea)**: Commits e gestão de versões via MCP
- **CARL (MCP CARL)**: Consultar domínio `MODELO-ORGANIZACAO` para regras do modelo
- **SSH (MCP SSH Unificado)**: Apenas se necessário para validação remota
### 3. Ciclo de Trabalho Obrigatório
1. **Validar contexto** — ler AGENTS.md + MEMORY.md + desk.project
2. **Consultar CARL** — verificar regras do domínio `MODELO-ORGANIZACAO`
3. **Executar** — seguir o standard ESTRUTURA.md
4. **Validar** — correr `scripts/validate-structure.sh` se disponível
5. **Registar** — actualizar MEMORY.md e CRM
### 4. Validação Obrigatória
Nunca dar uma tarefa como concluída sem validar o estado via shell ou MCP.
Este projecto é o modelo canónico — qualquer alteração aqui propaga-se a todos os outros.
### 5. CARL
Respeitar o domínio `MODELO-ORGANIZACAO` no CARL. As regras lá definidas têm precedência sobre documentação local em caso de conflito.
## O Que Este Projecto Contém
| Ficheiro | Função |
|---|---|
| `ESTRUTURA.md` | Standard de hierarquia obrigatório para projectos |
| `GOVERNANCA.md` | Manifesto de qualidade e conduta DEV |
| `PROTOCOLO-CRM.md` | Integração Lean Gitea & Desk CRM |
| `INSTRUCOES.md` | Visão geral e próximos passos |
| `MEMORY.md` | Registo cronológico de sessões |
| `AGENTS.md` | (Este ficheiro) Governance de agentes |
| `desk.project` | Ancoragem CRM (task #2134) |
| `scripts/validate-structure.sh` | Validação automática de conformidade |
## Regra Anti-Pattern
- **Não** criar pastas `docs/PROC` ou `docs/RUNBOOK` — vivem no Hub centralizado
- **Não** duplicar procedimentos que existem em `06-Operacoes/Procedimentos/`
- **Não** saltar a validação MEMORY.md no final da sessão
## Relacionamentos Direccionais
### Depende De
- [[../../Hub/06-Operacoes]] - Hub operacional central com procedimentos
- [[../../Hub/04-Stack]] - Decisões técnicas e stack Descomplicar
### Suporta
- [[../../Hub/05-Projectos/Modelo-Organizacao-Proc-Dev/ESTRUTURA.md]] - Modelo de projectos
### Documenta
- [[../../Hub/06-Operacoes/Procedimentos/]] - Procedimentos operacionais
### Implementação
- [[.]] - Código-fonte e implementação do projecto
### Relacionado Com
- [[../../Hub/04-Stack]] - Stack técnico partilhado
### Procedimento
- [[../../Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-Desk-Subtarefas-Dependencias.md]] - Modelo de subtarefas
### Herança
- [[../../Hub/05-Projectos/Modelo-Organizacao-Proc-Dev/ESTRUTURA.md]] - Estrutura canónica
## Histórico de Intervenções
| Data | Agente | Acção |
|---|---|---|
| 2026-05-13 | Gemini CLI | Criação da estrutura base de governance |
| 2026-05-13 | Izito (Hermes) | Correção estrutural, criação CARL, script de validação |
+35 -15
View File
@@ -52,22 +52,42 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).
- Audit Report: `AUDIT-REPORT.md`
- Security Fix Details: `SECURITY-FIX.md`
- Regra #47: Security Audit Pre-Commit (CLAUDE.md v9.12)
---
layer: wiki
type: Changelog
tags: [projecto, modelo, organizacao, changelog]
title: Changelog
description: >-
`docs/audit/audit.md` — log de auditorias (AUDIT-ECO #001 registada)
timestamp: 2026-05-16T19:22:44.218347+00:00
---
# CHANGELOG — Modelo-Organizacao-Proc-Dev
## [0.1.0] - 2026-02-13
## 1.1.0 — 2026-05-16
### Adicionado
- Dashboard inicial com métricas GA4 e GSC
- Integração Prisma multi-schema (staging/production)
- Componentes shadcn/ui customizados
- Dockerfile multi-stage optimizado
- Health check endpoint
- ESLint + TypeScript strict mode
- `docs/audit/audit.md` — log de auditorias (AUDIT-ECO #001 registada)
- `docs/audit/findings/F-001-hermes-mcps-incompletos.md` (High)
- `docs/audit/findings/F-002-gemini-mcps-parciais.md` (Medium)
- `scripts/propagate-structure.sh` — script idempotente de propagação da estrutura standard
### Infraestrutura
- Next.js 16 App Router
- React 19
- Tailwind CSS 4
- Recharts para gráficos
- PostgreSQL com Prisma ORM
### Modificado
- `STATUS.md` v1.1 — próximos passos focados nos findings F-001/F-002
- `MEMORY.md` — entrada da sessão de auditoria
- `CARL` MODELO-ORGANIZACAO — recall expandido 7 → 27 keywords
## 1.0.0 — 2026-05-16
### Adicionado
- `ECOSYSTEM.md` — fonte de verdade comum do ecossistema multi-agente
- `PROC-DEV-STANDARD.md` (D7-SIS-006) — protocolo de desenvolvimento ciclo completo
- `PROC-AUDIT-STANDARD.md` (D7-SIS-007) — protocolo de auditoria (4 tipos)
- `docs/SPECS/PROC-DEV-STANDARD-ref.md` — referência rápida do PROC
- `STATUS.md` — estado vivo do projecto
- `CHANGELOG.md` — este ficheiro
### Modificado
- `GEMINI.md` — worklog markdown, STATUS.md, Gitea/Desk, Regra 48
- `Hermes/AGENTS.md` — STATUS.md, CARL, worklog, Regra 48
- `OpenCode/AGENTS.md` — protocolo completo + `opencode.json` desk-crm-v3 activado
- `CLAUDE.md` — Regra 20 STATUS.md adicionada
- `MEMORY.md` — entrada 2026-05-16
- `CARL` — domínio `MODELO-ORGANIZACAO` com 9 regras
+148
View File
@@ -0,0 +1,148 @@
---
layer: wiki
type: Document
title: "Ciclo de Vida de Projecto — Sequência Obrigatória"
description: >-
Sequência canónica de todas as fases de um projecto Descomplicar — da ideia
ao deploy. Obrigatória para todos os projectos, com ou sem código.
tags: [projecto, ciclo-vida, sequencia, obrigatorio, spec, brainstorming, deploy]
timestamp: 2026-06-29T23:00:00+01:00
status: active
---
# Ciclo de Vida de Projecto — Sequência Obrigatória
> **Regra de ouro:** Nunca saltar fases. Cada fase produz um artefacto concreto.
> Sem artefacto → fase não concluída → não avançar.
---
## A Sequência
```
1. IDEIA
↓
2. BRIEFING
↓
3. PESQUISA ← obrigatória (Web + NLM + Mem0 + Wiki)
↓
4. BRAINSTORMING
↓
5. SPEC (aprovada por Emanuel)
↓
6. PLAN (validado antes de tocar em código)
↓
7. REPO GIT (se projecto com código)
↓
8. IMPLEMENTAÇÃO
↓
9. CI/CD (se aplicável — paralelo ao deploy)
↓
10. DEPLOY
```
---
## Detalhe por Fase
### 1. Ideia
- Capturar em `00-Inbox/` do Hub ou comentário Desk
- **Artefacto:** nota de ideia (1 parágrafo mínimo)
### 2. Briefing
- Definir: contexto, problema, objectivo, stakeholders, restrições
- Registar no Desk CRM como tarefa ou ticket
- **Artefacto:** `docs/SPECS/BRIEF.md` ou comentário Desk
### **3. Pesquisa — OBRIGATÓRIA** ⚠️
Antes de qualquer decisão de arquitectura ou implementação:
| Fonte | O que pesquisar |
|-------|----------------|
| **Web** | Estado da arte, soluções existentes, benchmarks |
| **NotebookLM** | Notebooks temáticos relevantes |
| **Mem0** | `search_memories("contexto do projecto")` — o que já sabemos |
| **Wiki IJFW** | Conhecimento curado existente |
| **Hub** | PROCs, QRs, decisões anteriores relacionadas |
> **Regra:** Se a pesquisa revelar que a solução já existe → usar o que existe, não reinventar.
- **Artefacto:** notas de pesquisa em `docs/` ou resumo no BRIEF
### 4. Brainstorming
- Explorar abordagens alternativas
- Avaliar trade-offs com evidência da pesquisa
- Envolver Mem0 para contexto de decisões passadas
- **Artefacto:** `docs/PLANS/BRAINSTORM.md` com opções e decisão
### 5. SPEC
- Especificação completa: arquitectura, componentes, interfaces, critérios de aceitação
- **Aprovação explícita por Emanuel antes de avançar**
- **Artefacto:** `docs/SPECS/SPEC.md` com status `approved`
### 6. Plan
- Plano de implementação detalhado: fases, tarefas, dependências, estimativas
- Validação humana antes de tocar em código
- Registar tarefas no Desk CRM
- **Artefacto:** `docs/PLANS/PLAN.md` + tarefas Desk
### 7. Repo Git
- Criar repositório em `git.descomplicar.pt` (Gitea)
- Seguir PROC INF-EZP-001 para deploy no EasyPanel
- Configurar `.desk-project` na raiz
- **Artefacto:** repo criado, README.md inicial, estrutura XDP-PRJ-001
### 8. Implementação
- Seguir o PLAN por fases
- Registar progresso em `MEMORY.md` por sessão
- Cada decisão arquitectural → comentário Desk
- **Artefacto:** código funcional + testes
### 9. CI/CD *(se aplicável)*
- Configurar via Gitea Actions → EasyPanel webhook
- Ver `PROC-Gitea-Runners-CICD.md`
- **Artefacto:** pipeline funcional com deploy automático
### 10. Deploy
- Seguir PROC INF-EZP-001 (EasyPanel) ou PROC adequado
- Validar com E2E após deploy
- Actualizar `STATUS.md` → estado `deployed`
- **Artefacto:** serviço em produção + STATUS.md actualizado
---
## Artefactos por Fase (resumo)
| Fase | Artefacto obrigatório |
|------|----------------------|
| Ideia | Nota capturada |
| Briefing | BRIEF.md ou comentário Desk |
| **Pesquisa** | **Notas de pesquisa (Web + NLM + Mem0 + Wiki)** |
| Brainstorming | BRAINSTORM.md com decisão |
| SPEC | SPEC.md aprovada |
| Plan | PLAN.md + tarefas Desk |
| Repo Git | Repositório Gitea + estrutura |
| Implementação | Código + testes + MEMORY.md |
| CI/CD | Pipeline funcional |
| Deploy | Serviço em produção + STATUS.md |
---
## Anti-Padrões (proibido)
- ❌ Começar a implementar sem SPEC aprovada
- ❌ Saltar a pesquisa — "já sei o que fazer"
- ❌ Deploy sem testes passados
- ❌ Criar repositório antes do PLAN estar validado
- ❌ Reinventar o que já existe (Mem0 evita isto)
---
## Referências
- `PROC-Estrutura-Pasta-Projecto.md` (XDP-PRJ-001) — ficheiros obrigatórios por pasta
- `06-Operacoes/Procedimentos/D7-Tecnologia/Infraestrutura/PROC-EasyPanel-Deployment.md` — deploy
- `06-Operacoes/Procedimentos/D7-Tecnologia/Infraestrutura/PROC-Gitea-Runners-CICD.md` — CI/CD
---
*Criado: 29-06-2026 | Descomplicar® | Sequência obrigatória para todos os projectos*
+89
View File
@@ -0,0 +1,89 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, estrutura]
title: Estrutura
description: >-
Este documento define a estrutura de pastas e ficheiros obrigatória para todos os projectos do ecossistema Descomplicar®…
timestamp: 2026-05-13T11:27:31.572569+00:00
---
# ESTRUTURA.md — Standard de Hierarquia de Projectos
## Introdução
Este documento define a estrutura de pastas e ficheiros obrigatória para todos os projectos do ecossistema Descomplicar®. A consistência da estrutura permite que agentes de IA e programadores transitem entre projectos com atrito zero.
## Hierarquia Base (Root)
```text
/ (root)
├── docs/ # Documentação específica do projecto
│ ├── PLANS/ # Planos de acção e roadmaps específicos
│ └── SPECS/ # Especificações técnicas e requisitos do projecto
├── scripts/ # Scripts de automação local (opcional)
├── tests/ # Testes globais ou de integração
├── index.md # Navegação OKF — links only, minúsculas (Obsidian + Wayland)
├── AGENTS.md # Contexto para agentes IA — 5W2H + relacionamentos (Wayland, Hermes, Claude, OpenCode)
├── CLAUDE.md # Instruções específicas para Claude Code
├── GEMINI.md # Instruções específicas para Gemini CLI
├── STATUS.md # Estado actual — PDCA (Plan/Do/Check/Act)
├── CHANGELOG.md # Histórico de versões e decisões
├── MEMORY.md # Factos duráveis, decisões, workarounds (append-only)
├── README.md # Visão geral humana — o que é, porquê existe
├── desk.project # Ligação ao Desk CRM (JSON)
└── ... # Ficheiros de código (src, backend, frontend, etc.)
```
**Nota:** PROCs e RUNBOOKs NÃO residem aqui. Consultar `06-Operacoes/Procedimentos/` e `06-Operacoes/Runbooks/` no Hub — são a fonte de verdade centralizada.
## Definição de Directórios e Ficheiros Críticos
### 1. `/docs`
Documentação que vive e morre com o projecto.
- **PLANS/**: Documentos que descrevem "o que vamos fazer" neste projecto (ex: `PLANS/PLAN-MIGRACAO-DB.md`).
- **SPECS/**: Definições técnicas, diagramas de arquitectura e contratos de API específicos.
### 2. Documentação Centralizada (Externo ao Projecto)
Os procedimentos operacionais e manuais de manutenção não residem na pasta do projecto para evitar duplicação e garantir que todos seguem a versão mais recente (Single Source of Truth).
- **PROCs** no Hub em `06-Operacoes/Procedimentos/`
- **Runbooks** no Hub em `06-Operacoes/Runbooks/`
- **Quick References** no Hub em `06-Operacoes/Documentacao/Quick-Reference/`
**Nunca** criar pastas `docs/PROC` ou `docs/RUNBOOK` num projecto. A referência correcta é sempre o Hub.
---
### 3. Ficheiros de Governance de IA (`AGENTS.md`, `GEMINI.md`, `CLAUDE.md`)
Servem para alinhar o comportamento dos agentes neste repositório. Devem conter regras de estilo, convenções de código e restrições de segurança específicas do projecto. Pelo menos `AGENTS.md` é obrigatório.
### 4. `MEMORY.md`
**Obrigatório.** Deve ser actualizado no final de cada sessão.
- Formato: Secções por data (ordem cronológica inversa).
- Conteúdo: O que foi feito, problemas encontrados e o que ficou pendente.
### 4. `desk.project`
Ficheiro JSON que mapeia o repositório local à tarefa ou projecto correspondente no Desk CRM.
## Regras de Nomenclatura
- Pastas: `UPPERCASE` para categorias de documentação (`PLANS`, `SPECS`), `lowercase` para código.
- Ficheiros: `kebab-case.md` (letras minúsculas e hífens).
- Excepções: Ficheiros de sistema como `README.md`, `CHANGELOG.md` ou ficheiros de governance em `UPPERCASE`.
## Validação de Estrutura
Um projecto é considerado "em conformidade" se contiver, no mínimo:
1. `docs/` com as pastas `PLANS/` e `SPECS/` (mesmo que vazias).
2. `AGENTS.md` com directrizes específicas do projecto.
3. `MEMORY.md` com registo de sessões.
4. `desk.project` com task_id válido no Desk CRM.
> **Validação automática:** Executar `scripts/validate-structure.sh` na raiz do projecto para verificar conformidade.
---
## Convenção para Pastas Hub (Sistemas e Aplicações)
Para pastas de documentação no Hub (`04-Stack/02.04-Sistemas/`, `04-Stack/02.05-Aplicações/`, etc.) aplica-se uma convenção própria:
→ Ver **`06-Operacoes/Procedimentos/Cross-Departamental/PROC-Estrutura-Pasta-Projecto.md`** (XDP-PRJ-001)
**Diferença principal:** pastas Hub não têm `docs/`, `scripts/` nem `tests/` — são documentação pura. O `AGENTS.md` contém o 5W2H do sistema e os relacionamentos com o ecossistema.
+42
View File
@@ -0,0 +1,42 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, governanca]
title: Governanca
description: >-
Este documento estabelece as regras de ouro para o desenvolvimento de software na Descomplicar®. A conformidade com esta…
timestamp: 2026-05-13T10:46:34.903096+00:00
---
# GOVERNANCA.md — Manifesto de Qualidade e Conduta DEV
## Introdução
Este documento estabelece as regras de ouro para o desenvolvimento de software na Descomplicar®. A conformidade com estas regras é obrigatória para todos os contribuidores (humanos e agentes).
## 1. Regras de Ouro (Core Rules)
1. **PT-PT Strictly**: Código (comentários), documentação e mensagens de commit devem ser em Português Europeu.
2. **Zero Breaking Deploys**: Nenhum deploy pode ser efectuado com testes falhados ou vulnerabilidades críticas.
3. **Single Source of Truth**: Procedimentos (`PROC`) e `RUNBOOKS` são consultados centralmente no Hub. Não se criam cópias locais.
4. **Audit-First**: Todo o projecto deve ser auditado mensalmente seguindo o `DEV-AUDIT-001`.
O desenvolvimento segue a sequência obrigatória de 10 fases:
**Ideia → Briefing → Pesquisa (Web + NLM + Mem0 + Wiki) → Brainstorming → SPEC → Plan → Repo Git → Implementação → CI/CD → Deploy**
> ⚠️ **A Pesquisa é obrigatória antes de qualquer decisão.** Consultar sempre Mem0 (`search_memories`), NotebookLM, Wiki IJFW e Hub antes de arquitectar.
Ver detalhe completo em **`CICLO-VIDA-PROJECTO.md`** — artefactos, anti-padrões e referências por fase.
## 3. Gestão de Dependências e Upgrades
- Upgrades de frameworks seguem obrigatoriamente o `DEV-UPGRADE-001`.
- Proibida a utilização de dependências "stale" ou sem licença activa em projectos de produção.
## 4. Interacção com o ecossistema (CRM & Git)
- Toda a alteração técnica deve ter um rastro no Desk CRM (Comentário na tarefa correspondente).
- Commits devem ser atómicos e descritivos.
- Uso obrigatório de ficheiros `desk.project` para ancorar o contexto.
## 5. Compliance de Agentes IA
Agentes devem reportar o seu estado e decisões em `MEMORY.md` e respeitar as directrizes em `AGENTS.md`. Em caso de falha repetida (3x), o agente deve parar e solicitar intervenção humana.
## 6. Penalizações e Bloqueios
O incumprimento da governação (especialmente deploys sem auditoria) resulta no bloqueio imediato do pipeline de produção até à resolução da causa raiz.
+20
View File
@@ -0,0 +1,20 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, instrucoes]
title: Instrucoes
description: >-
Este diretório é a fonte de verdade para o modelo de organização de projetos. A partir de agora, todas as definições est…
timestamp: 2026-05-13T10:34:35.758090+00:00
---
# Instruções para o Modelo de Organização (HUB)
Este diretório é a fonte de verdade para o modelo de organização de projetos. A partir de agora, todas as definições estruturais e procedimentos padrão do ecossistema Descomplicar® devem ser mantidos e versionados aqui.
## Próximos Passos
1. **Documentação Master:** Criar os ficheiros ESTRUTURA.md, GOVERNANCA.md e PROTOCOLO-CRM.md baseados no modelo aprovado.
2. **Templates:** Criar templates de documentos em docs/SPECS e docs/PLANS.
3. **Sincronização:** Manter a paridade entre este diretório e os repositórios individuais dos projetos (via git submodules ou simples cópia/script de deploy).
## Como editar
Pode editar este repositório diretamente com o agente de IA, desde que a sessão esteja configurada com o root correto no Hub.
+69
View File
@@ -0,0 +1,69 @@
---
type: Document
title: Memory
description: 'AUDIT-ECO #001 executada: 4 agentes validados. 2 findings abertos'
timestamp: 2026-05-16 19:22:27.808202+00:00
tags:
- dev
- codigo
- historico
- sessoes
- proximos-passos
- '2026-06-30'
- reorganizacao
layer: wiki
---
# MEMORY.md
## 2026-05-16 (sessão Claude — auditoria pós-OpenCode)
- **AUDIT-ECO #001 executada:** 4 agentes validados. 2 findings abertos.
- F-001 (High): Hermes sem `desk-crm-v3`, `mcp-time`, `memory-supabase`, `ssh-unified`, `notebooklm` — só tem `mcp-gitea` local
- F-002 (Medium): Gemini sem `desk-crm-v3` (usa `desk-project-minimal`) e sem `mcp-time`
- **CARL recall expandido:** 7 → 27 keywords no domínio MODELO-ORGANIZACAO (backup `.carl/carl.json.bak-2026-05-16`)
- **Script criado:** `scripts/propagate-structure.sh` — aplica estrutura standard a outro projecto, idempotente, com dry-run. Testado: CONFORME
- **Estrutura audit/:** `docs/audit/audit.md` + `docs/audit/findings/F-001.md` + `F-002.md`
- **Worklog HTML:** zero ocorrências em todos os 4 agentes — confirmado migrado para markdown
- **Permissões 600:** confirmadas em opencode-secrets, claude.json, claude/settings.json, opencode.json, hermes/config.yaml
## 2026-05-16
- **Auditoria ecossistema:** questionários directos a Gemini, Hermes, OpenCode via aionui. Relatório em `docs/SPECS/2026-05-16-ecosystem-audit.md`
- **Segurança OpenCode:** credenciais NotebookLM movidas para `~/.opencode-secrets` (600). Wrapper em `~/.opencode-wrappers/`. Permissões claude.json + settings.json corrigidas para 600.
- **ECOSYSTEM.md criado:** `Hub/06-Operacoes/Documentacao/ECOSYSTEM.md` — fonte de verdade comum
- **PROC-DEV-STANDARD criado:** D7-SIS-006 em `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/`
- **PROC-AUDIT-STANDARD criado:** D7-SIS-007 em `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/`
- **PROC-DEV-STANDARD-ref criado:** em `docs/SPECS/PROC-DEV-STANDARD-ref.md`
- **Configs actualizadas:** GEMINI.md, Hermes/AGENTS.md, OpenCode/AGENTS.md + desk-crm-v3 activado, CLAUDE.md
- **Task Desk #2134:** Em Curso
## 2026-05-13
- **Formalização de Estrutura**: Criado `ESTRUTURA.md` definindo a hierarquia padrão.
- **Centralização de Documentação**:
- Movidos procedimentos locais (`DEV-AUDIT`, `DEV-UPGRADE`, `PROC-DEPLOY`) para `06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/`.
- Criada estrutura central de `Runbooks` no Hub com guia de utilização.
- Removidas pastas locais `docs/PROC` e `docs/RUNBOOK`.
- **Governação**: Criado `GOVERNANCA.md` como manifesto de qualidade.
- **Protocolo de Gestão**: Criado `PROTOCOLO-CRM.md` definindo a integração Lean entre Gitea (execução) e Desk CRM (visibilidade).
- **Identidade**: Criado `AGENTS.md` e `desk.project` (Tarefa #2134).
## 2026-05-13 (Sessão 2 — Correções Izito)
- **Análise Crítica:** Identificados 8 problemas estruturais no modelo, incluindo falta de dogfooding, contradição interna no ESTRUTURA.md, CRM desactualizado, e ausência de integração CARL.
- **Correções Aplicadas:**
- `ESTRUTURA.md` — removida contradição docs/PROC e docs/RUNBOOK vs Hub centralizado, corrigida numeração de secções, actualizada validação para 2 subpastas (PLANS + SPECS).
- `AGENTS.md` — reescrito com directrizes específicas, referência ao CARL, tabela de projectos, e histórico de intervenções.
- `scripts/validate-structure.sh` — criado script de validação automática (exit code 0 = conforme).
- `docs/PLANS/` e `docs/SPECS/` — criadas pastas em falta.
- **CARL:** Criado domínio `MODELO-ORGANIZACAO` com 6 regras e 9 recall keywords para descoberta por agentes.
- **CRM:** Task #2134 actualizada de "Não iniciado" para "Em Curso". Comentário de registo adicionado.
- **Validação:** Script corre contra o próprio projecto — **CONFORME** (0 falhas, 0 avisos).
- **Pendente:** Templates em docs/PLANS e docs/SPECS, sincronização com outros projectos via script/hook.
- **PROC-DEPLOY-STANDARD:** Criado standard genérico de deploy (PROC-DEPLOY-STANDARD.md) extraído do PROC-DEPLOY-PROD (WhatSMS v2). O WhatSMS-specific foi simplificado e passou a referenciar o standard como base.
- **Diagrama:** Adicionado F5 (Deploy) ao workflow.drawio — fluxo branch → CI → PR → merge → auto-deploy → validação + rollback.
## 2026-05-13 (Sessão 3 — Fecho)
- **MCP EasyPanel:** Instalado no Hermes (`~/.hermes/config.yaml`). Endpoint: `gateway.descomplicar.pt/v1/easypanel/mcp` (type: http). Disponível após restart de sessão.
- **Diagrama:** Fontes uniformizadas para sans-serif (Helvetica) em todo o Workflow-Fluxo.drawio. Adicionado F5 (Deploy) com Deploy Guard + Rollback Plan.
- **PROC-DEPLOY-STANDARD:** Criado `PROC-DEPLOY-STANDARD.md` como standard genérico de deploy. `PROC-DEPLOY-PROD.md` simplificado com referência ao standard e apenas detalhes WhatSMS.
- **CARL:** Adicionada regra #7 ao domínio MODELO-ORGANIZACAO — deploy segue PROC-DEPLOY-STANDARD.
- **Pendente:** Templates docs/PLANS e docs/SPECS. Sincronização com outros projectos.
---
+48
View File
@@ -0,0 +1,48 @@
---
layer: wiki
type: Document
tags: [projecto, modelo, organizacao, protocolo]
title: Protocolo Crm
description: >-
No ecossistema Descomplicar®, a gestão de projectos segue uma hierarquia de granularidade distinta:
timestamp: 2026-05-13T11:01:24.047410+00:00
---
# PROTOCOLO-CRM.md — Integração Lean Gitea & Desk CRM
## Princípio Fundamental: O Contentor de Tempo
No ecossistema Descomplicar®, a gestão de projectos segue uma hierarquia de granularidade distinta:
- **Desk CRM**: É o **Contentor de Tempo e Custos**. Utiliza-se apenas uma (ou poucas) "Tarefa Master" para registar horas e dar visibilidade financeira.
- **Gitea**: É a **Oficina Técnica**. É aqui que reside a complexidade granular (Issues, Milestones, Projects).
## 1. Mapeamento de Entidades
| Entidade Desk CRM | Entidade Gitea | Finalidade |
| :--- | :--- | :--- |
| **Tarefa Master** | Repositório / Milestones | Registo de horas (Timer) e Faturação. |
| **Comentário de Task** | Resumo de Sessão | Visibilidade para o Cliente/Gestor. |
| **(Inexistente)** | **Issues / Pull Requests** | Detalhe técnico, bugs e histórico de código. |
## 2. Fluxo Operacional Simplificado
### A. Início da Sessão
1. O Agente/Developer identifica a **Tarefa Master** no CRM via `desk.project`.
2. Inicia o timer: `mcp__desk-project-minimal__start_task_timer(task_id=XXXX)`.
3. Toda a exploração de tarefas granulares é feita no Gitea.
### B. Durante a Execução
- As discussões técnicas, especificações de bugs e estados de desenvolvimento (To Do/Done) ocorrem exclusivamente nas **Issues** e **Projects** do Gitea.
### C. Final da Sessão (Obrigatório)
1. Parar o timer no CRM.
2. Adicionar um comentário de fecho no CRM que faça a ponte entre os mundos:
*"Concluída sessão de desenvolvimento. No Gitea, foram fechadas as Issues #10 e #11 relativas à Milestone [Nome]."*
3. Actualizar o `MEMORY.md` local.
## 3. Onde Documentar o Quê?
- **Hub (`06-Operacoes/`)**: Padrões que se aplicam a TODOS os projectos (ex: "Como configurar um servidor").
- **Gitea Wiki**: Documentação específica deste código (ex: "Esquema da API deste projecto").
- **`MEMORY.md`**: Registo cronológico da vida do repositório.
## 4. Conclusão
Este protocolo elimina a necessidade de duplicar o quadro de tarefas do Gitea no Desk CRM. O CRM mantém-se limpo, focado em resultados e tempo, enquanto o Gitea retém toda a riqueza técnica.
+25
View File
@@ -0,0 +1,25 @@
---
layer: wiki
type: Status
tags:
- dev
- codigo
- estado
- versao
- conformidade
- '2026-06-30'
- reorganizacao
title: Status
description: 'Versão: 1.1 | Data: 2026-05-16 | Agente: Claude Code'
timestamp: 2026-05-16 19:22:18.276118+00:00
---
# STATUS.md — bi-descomplicar
**Versão:** 1.0 | **Data:** 2026-06-30 | **Agente:** DevStructure-WorkerC
- **Em curso:** Estruturação inicial — cópia de modelo Descomplicar
- **Bloqueios:** Nenhum
- **Próximos passos:**
- Validar estrutura conforme ESTRUTURA.md
- Revisar frontmatter em AGENTS.md
- Próxima revisão: TBD
+6
View File
@@ -0,0 +1,6 @@
{
"task_id": 2134,
"project_name": "Modelo-Organizacao-Proc-Dev",
"rel_type": "project_documentation",
"updated_at": "2026-05-13"
}
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
+9
View File
@@ -0,0 +1,9 @@
# bi-descomplicar
## Documentação
- [README](README.md)
- [AGENTS](AGENTS.md)
- [STATUS](STATUS.md)
- [MEMORY](MEMORY.md)
- [CHANGELOG](CHANGELOG.md)
+3
View File
@@ -0,0 +1,3 @@
## 2026-06-30 init | Estrutura padrão aplicada
- Estrutura PROC-DEV-STANDARD propagada