.agent/rules/proibido-commit-ia.md

124 lines
5.5 KiB
Markdown

---
type: rule
name: proibido-commit-ia
description: Condições de commit pela IA (proibido comitar na master na aplicação; deve criar nova branch se em master); na Wiki (../wiki), commit, push e resolução de conflitos são permitidos direto na master
scope: global
trigger: always_on
updatedAt: "2026-10-01"
---
# Regra: Diretrizes de Versionamento Git — Commit Condicional na Aplicação e Gestão Direta em Master na Wiki
## Contexto
O ecossistema adota uma política de versionamento clara e segura que equilibra agilidade na documentação com proteção do código produtivo:
1. **Aplicação Principal (`<base_projeto>`)**: A IA pode comitar alterações, com a salvaguarda estrita e inegociável de **NUNCA comitar diretamente na branch `master` (ou `main`)**. Estando em `master`, a IA deve compulsoriamente criar e alternar para uma nova branch de trabalho antes de realizar qualquer commit.
2. **Repositório da Wiki (`<base_projeto>/../wiki` ou `wiki/`)**: Hospeda a base viva de documentação (Pilares 3 e 4). Na Wiki, a IA possui autonomia total para executar `git commit`, `git push` e resolver eventuais conflitos de sincronização diretamente na branch `master`.
---
## Regra
### 1. Na Aplicação Principal (`<base_projeto>`) — COMMIT CONDICIONAL E SALVAGUARDA DE MASTER
A IA **PODE** realizar commits na aplicação principal, **ESTRITAMENTE CONDICIONADA** às regras:
1. **NUNCA comitar diretamente na branch `master`**: É expressamente proibido rodar `git commit` quando a branch atual for `master` (ou `main`).
2. **Criação obrigatória de nova branch se estiver em `master`**:
Antes de qualquer commit, a IA deve inspecionar a branch atual:
```bash
BRANCH_ATUAL=$(git branch --show-current)
```
Se `BRANCH_ATUAL` for `master` ou `main`, a IA **DEVE** criar e alternar para uma nova branch semântica:
```bash
git checkout -b <tipo>/<descricao-curta>
```
Padrão de nomenclatura:
- `feat/<slug>`: novas funcionalidades
- `fix/<slug>`: correções de bugs
- `refactor/<slug>`: refatorações de código
- `docs/<slug>`: documentações técnicas no código
- `ia/<slug>`: planos e tarefas automatizadas de IA
3. **Commit em branch de trabalho**: Se o repositório já estiver em uma branch que NÃO seja `master`/`main`, a IA pode comitar diretamente nessa branch.
4. **Mensagens semânticas**: Usar o padrão Conventional Commits (`feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:`).
5. **Comandos PROIBIDOS na aplicação principal**:
- `git commit` diretamente na branch `master` ou `main` ❌
- `git push` direto na branch `master` ou `main` ❌
- `git push --force` ou `git push -f` ❌
- `git reset --hard` sem autorização explícita ❌
- `git branch -D` ❌
- `git stash drop` ❌
---
### 2. No Repositório da Wiki (`<modulo-wiki>`, padrão: `<base_projeto>/../wiki`) — COMMIT, PUSH E RESOLUÇÃO DE CONFLITOS DIRETO NA MASTER
Na Wiki (caminho resolvido dinamicamente via `modulo-wiki` em `memorias-ia/modulo.yml`, com fallback mandatório para `<base_projeto>/../wiki`), a IA possui permissão total e obrigação de manter a documentação atualizada diretamente na branch `master`:
1. **Commit e Push Diretos na Master**:
```bash
# <modulo-wiki> extraído de memorias-ia/modulo.yml (fallback padrão: ../wiki)
git -C <modulo-wiki> add -A
git -C <modulo-wiki> commit -m "docs(<modulo-id>): <descrição sucinta das alterações>"
git -C <modulo-wiki> push origin master
```
2. **Resolução de Conflitos Direto na Master**:
Se ao dar push houver rejeição ou divergência com o upstream remoto:
- A IA executa `git -C <modulo-wiki> pull --rebase origin master`.
- Havendo conflitos de merge, a IA resolve as marcações diretamente na `master`, preservando a coerência da documentação dos 6 pilares.
- Adiciona os arquivos resolvidos (`git -C <modulo-wiki> add -A`), finaliza o rebase (`git -C <modulo-wiki> rebase --continue` ou commit) e envia com `git push origin master`.
---
## Exemplos
### ❌ Errado — comitar diretamente na branch master da aplicação
```bash
# Branch atual: master
git add src/servicos/auth.ts
git commit -m "fix: ajustar token de auth" # PROIBIDO EM MASTER!
```
### ✅ Correto — ramificar antes de comitar se estiver em master
```bash
# Branch atual: master
git checkout -b fix/ajuste-token-auth
git add src/servicos/auth.ts
git commit -m "fix(auth): ajustar renovação de token"
# Notificar o operador: "Commit realizado na branch fix/ajuste-token-auth"
```
### ✅ Correto — comitar em branch secundária já existente
```bash
# Branch atual: feat/novo-painel (diferente de master)
git add src/paginas/Painel.vue
git commit -m "feat(painel): adicionar gráfico de métricas"
```
### ✅ Correto — ciclo completo na Wiki direto na master
```bash
git -C ../wiki add -A
git -C ../wiki commit -m "docs(quipo): atualizar manual de licenciamento"
git -C ../wiki pull --rebase origin master # Se houver conflitos, resolve e prossegue
git -C ../wiki push origin master
```
---
## Impacto
- **Segurança da Master**: A branch principal de produção fica totalmente protegida contra commits acidentais.
- **Rastreabilidade e Revisão**: Todas as alterações da IA na aplicação ficam isoladas em branches específicas, facilitando Pull Requests e revisões do operador.
- **Agilidade na Wiki**: A documentação viva nunca fica travada por divergências ou bloqueios manuais.
---
## Referências
- Rule: `rules/autonomia-agente.md`
- Rule: `rules/ddd-documentacao-primeiro.md`
- Skill: `skills/documentacao/SKILL.md`
- Skill: `skills/plano.executar/SKILL.md`