chore: ignora graphify-out gerado
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
---
|
||||
type: Brainstorm
|
||||
title: 'Brainstorm — bi-descomplicar'
|
||||
timestamp: 2026-06-30
|
||||
layer: wiki
|
||||
---
|
||||
|
||||
# BRAINSTORM — bi-descomplicar
|
||||
|
||||
Estrutura padrão aplicada.
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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>
|
||||
@@ -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
Carregar contexto AGENTS.md
+ 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
Executar MCPs
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
validate-structure.sh
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
REGISTAR MEMORY.md
+ 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|
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
type: Note
|
||||
title: 'Pesquisa — bi-descomplicar'
|
||||
timestamp: 2026-06-30
|
||||
layer: wiki
|
||||
---
|
||||
|
||||
# Pesquisa
|
||||
|
||||
Documentar pesquisa aqui.
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user