--- layer: wiki type: Document tags: [projecto, modelo, organizacao, ecosystem] title: 2026 05 16 Ecosystem Alignment description: >- > For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:exec… timestamp: 2026-05-16T18:38:11.957939+00:00 --- # Ecosystem Alignment + PROC-DEV-STANDARD — Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [x]`) syntax for tracking. **Goal:** Alinhar os 4 agentes do ecossistema (Claude, Gemini, Hermes, OpenCode) para operarem de forma consistente, e criar o PROC-DEV-STANDARD como protocolo de desenvolvimento partilhado. **Architecture:** Criar ECOSYSTEM.md como fonte de verdade comum → actualizar cada config de agente com as secções em falta → criar PROC-DEV-STANDARD no Hub → criar resumo no modelo-organizacao. **Tech Stack:** Markdown, Bash (chmod, validação), ficheiros de config YAML/JSON/MD --- ## Ficheiros a Criar/Modificar | Acção | Ficheiro | Responsabilidade | |-------|----------|-----------------| | Criar | `Hub/06-Operacoes/Documentacao/ECOSYSTEM.md` | Fonte de verdade comum — regras partilhadas por todos os agentes | | Modificar | `~/.gemini/GEMINI.md` | Corrigir worklog HTML, adicionar STATUS.md, MEMORY.md criar, Gitea/Desk, Regra 48 | | Modificar | `~/.hermes/AGENTS.md` | Adicionar STATUS.md, MEMORY.md criar, Gitea/Desk, worklog, CARL, Regra 48 | | Modificar | `~/.config/opencode/AGENTS.md` | Adicionar tudo: MEMORY.md, STATUS.md, Sistema Triangular, CARL, Gitea/Desk, Regra 48 | | Modificar | `~/.claude/CLAUDE.md` | Adicionar STATUS.md ao protocolo de sessão | | Criar | `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-DEV-STANDARD.md` | Protocolo de desenvolvimento ciclo completo | | Criar | `Modelo-Organizacao-Proc-Dev/docs/SPECS/PROC-DEV-STANDARD-ref.md` | Resumo/referência do PROC | | Criar | `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-AUDIT-STANDARD.md` | Protocolo de auditoria (4 tipos) | | Criar | `[projecto]/docs/audit/` | Estrutura de auditoria por projecto (template) | --- ## Task 1: Criar ECOSYSTEM.md — Fonte de Verdade Comum **Files:** - Criar: `Hub/06-Operacoes/Documentacao/ECOSYSTEM.md` - [x] **Step 1: Criar o ficheiro ECOSYSTEM.md** ```bash cat > /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/ECOSYSTEM.md << 'EOF' --- title: Ecossistema Multi-Agente Descomplicar® type: reference status: active date: 2026-05-16 tags: [ecossistema, agentes, protocolo, standard] --- # ECOSYSTEM.md — Regras Comuns do Ecossistema Descomplicar® **Fonte de verdade** para todos os agentes: Claude Code, Gemini CLI, Hermes/Izito, OpenCode. Cada config de agente herda estas regras e pode adicionar as suas especificidades. --- ## 1. Identidade dos Agentes | Agente | Config principal | staff_id Desk | Papel | |--------|-----------------|---------------|-------| | Claude Code | `~/.claude/CLAUDE.md` | 25 | Desenvolvimento, automação, orquestração | | Gemini CLI | `~/.gemini/GEMINI.md` | — | Pesquisa, análise, tarefas longas | | Hermes/Izito | `~/.hermes/SOUL.md` + `AGENTS.md` | 28 | Braço direito técnico, wiki, delegação | | OpenCode | `~/.config/opencode/AGENTS.md` | — | Edição de código, contexto longo | | Emanuel | — | 1 | Owner — timesheets sempre com staff_id=1 | --- ## 2. Protocolo de Sessão (todos os agentes) ### Início de sessão 1. Verificar data/hora actual (MCP `mcp-time` ou `date`) 2. Ler `.desk-project` se existir na raiz do projecto 3. Ler `MEMORY.md` se existir — se **não existir**, **criar** com cabeçalho: ```markdown # MEMORY.md — [Nome do Projecto] ``` 4. Ler `STATUS.md` se existir — se **não existir**, **criar** com cabeçalho: ```markdown # STATUS.md — [Nome do Projecto] **Versão:** — | **Data:** YYYY-MM-DD | **Agente:** [nome] ## Estado actual - Em curso: — - Bloqueios: — - Próximos passos: — ``` ### Fim de sessão 1. Actualizar `MEMORY.md` (topo, ordem cronológica inversa) com: - Decisões tomadas - Paths/IDs relevantes descobertos - Workarounds aplicados 2. Actualizar `STATUS.md` com estado actual, bloqueios e próximos passos 3. Registar tempo no Desk CRM se aplicável --- ## 3. Sistema Triangular ``` DESK CRM (Fonte Verdade) → Clientes, projectos, tarefas, tempo, facturas HUB (Vault Obsidian) → /media/ealmeida/Dados/Hub/ (00-Inbox a 99-Arquivo) FICHEIROS (Local) → /media/ealmeida/Dados/Dev/ (código) ``` --- ## 4. Gitea vs Desk CRM — Routing Explícito | O quê | Sistema | Nunca em | |-------|---------|----------| | Bugs, issues técnicas, PRs, releases | **Gitea** | Desk CRM | | Código, commits, CI/CD | **Gitea** | — | | Projectos, sprints, tarefas de gestão | **Desk CRM** | Gitea | | Tempo (timesheets), facturação | **Desk CRM** | Gitea | | Cliente 360, propostas, leads | **Desk CRM** | Gitea | **Regra de sincronização:** - Bug descoberto → criar issue Gitea → comentar na task Desk com URL - Feature concluída → fechar issue Gitea → actualizar task Desk + registar tempo - Deploy prod → task Desk fechada → `MEMORY.md` regista versão --- ## 5. Formato de Worklog (standard markdown PT-PT) ```markdown ## [Projecto] — YYYY-MM-DD ### O que foi feito - [alteração concreta] ### Ficheiros alterados - `path/ficheiro.ext` ### Próximos passos - [próxima acção] ``` --- ## 6. Regras Core | Regra | Descrição | |-------|-----------| | **PT-PT Strict** | Português europeu SEMPRE — acentos, cedilhas, 95EUR. Zero brasileirismos em tudo | | **Zero Assumptions** | Verificar via ficheiros ou MCP antes de afirmar. Confiança <80% → dizer explicitamente | | **Dados Reais** | MCPs → Ficheiros → WebFetch. Nunca simular, nunca inventar URLs/paths/IDs | | **Causa Raiz** | Resolver sempre a causa, não o sintoma | | **Regra 48 — Dev Local** | Todo o desenvolvimento em `/media/ealmeida/Dados/Dev/` (desktop). CT 102 extinto em 20-04-2026. Nunca usar `ssh_execute(server="dev")` | | **PDCA** | Plan → Do → Check → Act. Nunca agir sem plano | | **Segurança** | Confirmação obrigatória antes de: `rm -rf`, `DROP TABLE`, force-push, comandos destrutivos em produção | --- ## 7. Sistema CARL Domínios contextuais em `/media/ealmeida/Dados/.carl/carl.json`. Consultar antes de responder sobre: desenvolvimento, CRM, WordPress, Hub, infraestrutura, qualidade, skills. --- ## 8. LLM Wiki `~/wiki/` — base de conhecimento compilada do stack. - **Ler:** qualquer agente pode ler (`~/wiki/index.md`, `grep -ril "termo" ~/wiki/`) - **Escrever:** apenas Hermes/Izito - **Protocolo ao iniciar:** `~/wiki/SCHEMA.md` → `~/wiki/index.md` → `~/wiki/log.md` (últimas 20 linhas) --- ## 9. MCPs Essenciais por Agente | MCP | Claude | Gemini | Hermes | OpenCode | |-----|--------|--------|--------|----------| | desk-crm-v3 | ✅ | ✅ | ✅ | activar | | gitea | ✅ | ✅ | ✅ | ✅ | | memory-supabase | ✅ | ✅ | ✅ | ✅ | | mcp-time | ✅ | adicionar | adicionar | ✅ | | ssh-unified | ✅ | ✅ | ✅ | ✅ | | notebooklm | ✅ | ✅ | — | ✅ (wrapper) | --- **Última actualização:** 2026-05-16 **Mantido por:** Emanuel Almeida EOF ``` - [x] **Step 2: Verificar que o ficheiro foi criado correctamente** ```bash wc -l /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/ECOSYSTEM.md head -5 /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/ECOSYSTEM.md ``` Esperado: >80 linhas, cabeçalho frontmatter visível. --- ## Task 2: Actualizar GEMINI.md **Files:** - Modificar: `~/.gemini/GEMINI.md` Problemas a corrigir: worklog HTML → markdown, adicionar STATUS.md, MEMORY.md criar se não existe, Gitea/Desk routing, Regra 48. - [x] **Step 1: Fazer backup** ```bash cp ~/.gemini/GEMINI.md ~/.gemini/GEMINI.md.bak-2026-05-16 ``` - [x] **Step 2: Ler o ficheiro actual** ```bash cat ~/.gemini/GEMINI.md ``` - [x] **Step 3: Substituir secção de Memória e adicionar secções em falta** Localizar a secção `## 3. Autonomia e Ferramentas` → subsecção `**Memória:**` e substituir: ``` **Memória:** - **Sessão:** `MEMORY.md` na raiz do projecto (partilhado com Claude Code e OpenCode). Ler ao iniciar, escrever ao terminar. Formato: secções por data, ordem cronológica inversa. ``` Por: ``` **Memória:** - **Sessão:** `MEMORY.md` na raiz do projecto (partilhado com todos os agentes). - Ler ao iniciar sessão - Se **não existir**, criar com cabeçalho `# MEMORY.md — [Nome Projecto]` - Escrever no fim com factos novos (topo, ordem cronológica inversa) - **STATUS.md:** ficheiro de estado vivo do projecto. - Ler ao iniciar sessão - Se **não existir**, criar com cabeçalho e campos: Versão, Data, Agente, Em curso, Bloqueios, Próximos passos - Actualizar no fim de sessão com estado actual - **Referência:** `Hub/06-Operacoes/Documentacao/ECOSYSTEM.md` — regras comuns a todos os agentes ``` - [x] **Step 4: Substituir formato de worklog (HTML → markdown)** Localizar: ``` `
Ficheiros: path
Data: YYYY-MM-DD
` ``` Substituir por: ``` ```markdown ## [Projecto] — YYYY-MM-DD ### O que foi feito - [alteração concreta] ### Ficheiros alterados - `path/ficheiro.ext` ### Próximos passos - [próxima acção] ``` ``` - [x] **Step 5: Adicionar secção Gitea vs Desk CRM** Após a secção `## 2. Sistema CARL`, adicionar: ```markdown ## 5. Gitea vs Desk CRM | O quê | Sistema | |-------|---------| | Bugs, issues, PRs, código | **Gitea** | | Tarefas gestão, tempo, facturação, clientes | **Desk CRM** | Bug descoberto → issue Gitea primeiro → comentar Desk com URL. Feature concluída → fechar Gitea → actualizar Desk + registar tempo. ``` - [x] **Step 6: Adicionar Regra 48** Na secção de regras core, adicionar: ```markdown - **Regra 48 — Dev Local:** Todo o desenvolvimento em `/media/ealmeida/Dados/Dev/` (desktop local). CT 102 extinto em 20-04-2026. **Nunca** usar `ssh_execute(server="dev")`. ``` - [x] **Step 7: Verificar resultado** ```bash grep -n "STATUS.md\|MEMORY.md\|Gitea\|Regra 48\|markdown" ~/.gemini/GEMINI.md ``` Esperado: todas as strings presentes. --- ## Task 3: Actualizar Hermes AGENTS.md **Files:** - Modificar: `~/.hermes/AGENTS.md` Problemas a corrigir: adicionar STATUS.md, MEMORY.md criar se não existe, Gitea/Desk routing, worklog, CARL domínios, Regra 48. - [x] **Step 1: Fazer backup** ```bash cp ~/.hermes/AGENTS.md ~/.hermes/AGENTS.md.bak-2026-05-16 ``` - [x] **Step 2: Actualizar secção MEMORY.md** Localizar: ```markdown ## MEMORY.md Cada projeto pode ter um `MEMORY.md` na raiz. Se existir: - **Ler** ao iniciar sessão no projeto - **Escrever** no final com factos novos (topo, ordem cronológica inversa) - **Formato:** secções por data, markdown simples, decisões + técnico + IDs ``` Substituir por: ```markdown ## Protocolo de Sessão ### MEMORY.md Cada projecto tem (ou deve ter) um `MEMORY.md` na raiz: - **Ler** ao iniciar sessão no projecto - Se **não existir**, **criar** com cabeçalho: `# MEMORY.md — [Nome Projecto]` - **Escrever** no final com factos novos (topo, ordem cronológica inversa) - **Formato:** secções por data, markdown simples, decisões + técnico + IDs ### STATUS.md Ficheiro de estado vivo do projecto: - **Ler** ao iniciar sessão - Se **não existir**, **criar** com estrutura: ``` # STATUS.md — [Nome Projecto] **Versão:** — | **Data:** YYYY-MM-DD | **Agente:** Izito ## Estado actual - Em curso: — - Bloqueios: — - Próximos passos: — ``` - **Actualizar** no fim de sessão com estado actual e próximos passos ``` - [x] **Step 3: Adicionar Gitea vs Desk CRM** Após a secção `## Sistema Triangular`, adicionar: ```markdown ## Gitea vs Desk CRM | O quê | Sistema | |-------|---------| | Bugs, issues técnicas, PRs, código | **Gitea** | | Tarefas gestão, tempo, facturação, leads | **Desk CRM** | **Fluxo:** Bug → issue Gitea → comentar Desk com URL → fix → fechar Gitea → actualizar Desk + tempo. ``` - [x] **Step 4: Adicionar worklog standard** Adicionar secção: ```markdown ## Worklog (formato standard) ```markdown ## [Projecto] — YYYY-MM-DD ### O que foi feito - [alteração concreta] ### Ficheiros alterados - `path/ficheiro.ext` ### Próximos passos - [próxima acção] ``` Registar também como comentário na task Desk CRM correspondente. ``` - [x] **Step 5: Actualizar referência CARL** Localizar referência ao CARL e expandir: ```markdown ## Sistema CARL Domínios contextuais em `/media/ealmeida/Dados/.carl/carl.json`. Usar MCP `carl` para recall por keyword antes de responder sobre: - DEVELOPMENT, CRM, WORDPRESS, HUB, INFRASTRUCTURE, QUALITY, SKILLS Consultar sempre que o prompt contiver keywords técnicas do stack. ``` - [x] **Step 6: Adicionar Regra 48** Adicionar à secção de Convenções ou Regras: ```markdown ## Regra 48 — Desenvolvimento Local Todo o desenvolvimento em `/media/ealmeida/Dados/Dev/` (desktop local). CT 102 extinto em 20-04-2026. **Nunca** usar `ssh_execute(server="dev")`. Automações migradas para systemd user timers no desktop. ``` - [x] **Step 7: Verificar resultado** ```bash grep -n "STATUS.md\|criar\|Gitea\|worklog\|Regra 48\|CARL" ~/.hermes/AGENTS.md ``` Esperado: todas as strings presentes. --- ## Task 4: Actualizar OpenCode AGENTS.md **Files:** - Modificar: `~/.config/opencode/AGENTS.md` O OpenCode é o mais nu — precisa de tudo. - [x] **Step 1: Fazer backup** ```bash cp ~/.config/opencode/AGENTS.md ~/.config/opencode/AGENTS.md.bak-2026-05-16 ``` - [x] **Step 2: Ler o ficheiro actual** ```bash cat ~/.config/opencode/AGENTS.md ``` - [x] **Step 3: Adicionar protocolo de sessão completo** Adicionar após o cabeçalho existente (PT-PT + Wiki): ```markdown ## Sistema Triangular ``` DESK CRM (Fonte Verdade) → Clientes, projectos, tarefas, tempo, facturas HUB (Vault Obsidian) → /media/ealmeida/Dados/Hub/ FICHEIROS (Local) → /media/ealmeida/Dados/Dev/ (código) ``` ## Protocolo de Sessão ### Início 1. Verificar data actual 2. Ler `.desk-project` se existir na raiz do projecto 3. Ler `MEMORY.md` — se **não existir**, criar: ``` # MEMORY.md — [Nome Projecto] ``` 4. Ler `STATUS.md` — se **não existir**, criar: ``` # STATUS.md — [Nome Projecto] **Data:** YYYY-MM-DD | **Agente:** OpenCode ## Estado actual - Em curso: — - Bloqueios: — - Próximos passos: — ``` ### Fim 1. Actualizar `MEMORY.md` (topo) com decisões, paths e IDs relevantes 2. Actualizar `STATUS.md` com estado actual e próximos passos ## Gitea vs Desk CRM | O quê | Sistema | |-------|---------| | Bugs, issues técnicas, PRs, código | **Gitea** | | Tarefas, tempo, facturação, leads | **Desk CRM** | Bug → issue Gitea → comentar Desk com URL → fix → fechar Gitea → actualizar Desk. ## Worklog (formato standard) ```markdown ## [Projecto] — YYYY-MM-DD ### O que foi feito - [alteração concreta] ### Ficheiros alterados - `path/ficheiro.ext` ``` ## Sistema CARL Domínios contextuais em `/media/ealmeida/Dados/.carl/carl.json`. Consultar antes de responder sobre: desenvolvimento, CRM, Hub, infraestrutura. ## Regra 48 — Desenvolvimento Local Todo o desenvolvimento em `/media/ealmeida/Dados/Dev/` (desktop). CT 102 extinto em 20-04-2026. **Nunca** usar SSH para servidor dev remoto. ## Staff IDs Desk CRM - **Emanuel:** staff_id=1 (timesheets sempre com este ID) - **Claude Code:** staff_id=25 - **Hermes/Izito:** staff_id=28 ``` - [x] **Step 4: Activar desk-crm-v3 no opencode.json** ```bash python3 -c " import json with open('/home/ealmeida/.config/opencode/opencode.json', 'r') as f: d = json.load(f) d['mcp']['desk-crm-v3']['enabled'] = True with open('/home/ealmeida/.config/opencode/opencode.json', 'w') as f: json.dump(d, f, indent=2) print('desk-crm-v3 activado') " ``` - [x] **Step 5: Verificar resultado** ```bash grep -n "STATUS.md\|MEMORY.md\|Gitea\|CARL\|Regra 48\|staff_id" ~/.config/opencode/AGENTS.md python3 -c "import json; d=json.load(open('/home/ealmeida/.config/opencode/opencode.json')); print('desk-crm-v3:', d['mcp']['desk-crm-v3']['enabled'])" ``` Esperado: todas as strings presentes; `desk-crm-v3: True`. --- ## Task 5: Actualizar CLAUDE.md — Adicionar STATUS.md **Files:** - Modificar: `~/.claude/CLAUDE.md` - [x] **Step 1: Localizar a Regra 19 (Data Sessão) no CLAUDE.md** ```bash grep -n "STATUS\|Data Sessão\|MEMORY\|sessão" ~/.claude/CLAUDE.md | head -20 ``` - [x] **Step 2: Adicionar STATUS.md à tabela de regras** Na tabela de REGRAS CORE, após a linha da Regra 19, adicionar: ```markdown | 20 | **STATUS.md** — Ler ao iniciar sessão de projecto. Criar se não existir. Actualizar no fim com estado actual, bloqueios e próximos passos | ``` - [x] **Step 3: Verificar** ```bash grep -n "STATUS.md" ~/.claude/CLAUDE.md ``` Esperado: pelo menos 1 ocorrência. --- ## Task 6: Criar PROC-DEV-STANDARD.md **Files:** - Criar: `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-DEV-STANDARD.md` - [x] **Step 1: Criar o PROC completo** ```bash cat > /media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Sistema/PROC-DEV-STANDARD.md << 'PROCEOF' --- title: Desenvolvimento Standard — Protocolo de Ciclo Completo type: procedure code: D7-SIS-006 department: D7-Tecnologia subdepartment: Sistema status: active date: 2026-05-16 tags: [desenvolvimento, ciclo, protocolo, standard, gitea, desk-crm] --- # PROC-DEV-STANDARD — Protocolo de Desenvolvimento (Ciclo Completo) **Última actualização:** 2026-05-16 **Aplicável a:** todos os projectos Descomplicar® **Fonte:** Extraído da experiência WhatSMS v2 + auditoria de ecossistema 2026-05-16 --- ## Princípios 1. **Pesquisa antes de spec** — nunca especificar sem investigar 2. **Spec antes de código** — nada entra em código sem spec aprovada (excepções: bugfix, operação unitária) 3. **CI verde é gate obrigatório** — nunca deployar sobre CI vermelho 4. **Issue-First para bugs** — todo o bug tem issue Gitea antes do fix 5. **Contexto partilhado** — MEMORY.md e STATUS.md actualizados em cada sessão 6. **Causa raiz** — resolver sempre a causa, não o sintoma --- ## Fluxo Completo ``` Ideia → Pesquisa (deep research + NLM) → Spec (SPEC.md aprovado) → Plan (docs/PLANS/) → Desenvolvimento (feat/* → commits atómicos) → Quality Gates (pre-commit → CI) → Code Review & PR (Gitea) → Deploy & Validação (PROC-DEPLOY-STANDARD D7-SIS-005) ``` --- ## Estrutura de Projecto Obrigatória ``` / (root) ├── docs/ │ ├── PLANS/ # Planos de implementação │ └── SPECS/ # Specs técnicas + notas de pesquisa ├── AGENTS.md # Directrizes para agentes (obrigatório) ├── CHANGELOG.md # Histórico de versões ├── MEMORY.md # Contexto cross-agent (obrigatório) ├── STATUS.md # Estado vivo do projecto (obrigatório) └── .desk-project # Ligação Desk CRM (JSON, obrigatório) ``` --- ## Ficheiros Cross-Agent | Ficheiro | Quem lê | Quem escreve | Quando | |----------|---------|--------------|--------| | `MEMORY.md` | Todos | Todos | Início (ler/criar) + fim (escrever) | | `STATUS.md` | Todos | Agente activo | Início (ler/criar) + fim (actualizar) | | `AGENTS.md` | Todos | Owner | Quando mudam as regras | | `CHANGELOG.md` | Todos | Agente activo | A cada versão/sprint | **Protocolo de sessão (qualquer agente):** 1. Início → ler `MEMORY.md` + `STATUS.md` (criar se não existem) 2. Durante → registar decisões relevantes em `MEMORY.md` 3. Fim → actualizar `STATUS.md` + `MEMORY.md` --- ## Fase 1 — Ideia **Entrada:** pedido ou ideia **Saída:** decisão de avançar + âmbito inicial - Verificar que não existe funcionalidade equivalente - Verificar alinhamento com MASTER-PLAN - Âmbito suficientemente claro para pesquisar --- ## Fase 2 — Pesquisa **Entrada:** ideia com âmbito definido **Saída:** `docs/SPECS/research-YYYY-MM-DD-tema.md` 1. Identificar domínio 2. Verificar NLMs existentes via `/knowledge` (65 notebooks) - Domínio coberto → usar NLM existente - Domínio novo + pesquisa extensa → criar NLM dedicado (apenas se estritamente necessário) 3. Deep research: WebSearch + WebFetch + NLM 4. Sintetizar: decisões, alternativas descartadas, riscos 5. Guardar nota em `docs/SPECS/` --- ## Fase 3 — Spec **Entrada:** nota de pesquisa aprovada **Saída:** SPEC.md aprovado em `docs/SPECS/` - Usar `/brainstorm` → `/spec` para trabalho não-trivial - Design doc salvo em `docs/SPECS/YYYY-MM-DD-tema-design.md` - Excepções: bugfix, operação unitária, continuação de plano --- ## Fase 4 — Plan **Entrada:** spec aprovada **Saída:** plano em `docs/PLANS/YYYY-MM-DD-tema.md` - Usar `/writing-plans` para decompor em tarefas executáveis - Cada tarefa com critério de aceitação claro --- ## Fase 5 — Desenvolvimento **Entrada:** plano aprovado **Saída:** commits atómicos em branch dedicada ### Branch strategy - `main` — produção (protegida) - `feat/N-descricao` — novas funcionalidades - `fix/N-descricao` — bugs (N = número da issue Gitea) ### Commits (Conventional Commits) ``` tipo(scope): descrição breve (#N) Closes #N Co-Authored-By: [Agente]