@tavaressan/vetor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/bin/vetor.js +6 -0
- package/lib/banner.js +35 -0
- package/lib/commands/install.js +71 -0
- package/lib/commands/status.js +59 -0
- package/lib/commands/uninstall.js +119 -0
- package/lib/commands/update.js +63 -0
- package/lib/installer/command-exists.js +30 -0
- package/lib/installer/cursor-hooks.js +181 -0
- package/lib/installer/detector.js +79 -0
- package/lib/installer/manifest.js +76 -0
- package/lib/installer/prompts.js +97 -0
- package/lib/installer/writer.js +382 -0
- package/lib/router.js +50 -0
- package/package.json +39 -0
- package/templates/.gitkeep +0 -0
- package/templates/agents/code-review/agent.json +27 -0
- package/templates/agents/code-review/codex.toml +37 -0
- package/templates/agents/code-review.md +99 -0
- package/templates/agents/issue-worker/agent.json +33 -0
- package/templates/agents/issue-worker/codex.toml +57 -0
- package/templates/agents/issue-worker.md +112 -0
- package/templates/hooks/hooks-codex.json +48 -0
- package/templates/hooks/hooks.json +62 -0
- package/templates/opencode/agent/code-review.md +73 -0
- package/templates/opencode/agent/issue-coordinator.md +521 -0
- package/templates/opencode/agent/issue-worker.md +64 -0
- package/templates/opencode/mcp.jsonc +39 -0
- package/templates/opencode/plugin/vetor.ts +207 -0
- package/templates/opencode/scripts/agent-registration_test.ts +92 -0
- package/templates/opencode/scripts/check-edit.ts +147 -0
- package/templates/opencode/scripts/ensure-external-directory-permission.ts +110 -0
- package/templates/opencode/scripts/ensure-external-directory-permission_test.ts +142 -0
- package/templates/opencode/scripts/lib/guard.ts +45 -0
- package/templates/opencode/scripts/lib/model-health.ts +133 -0
- package/templates/opencode/scripts/lib/model-health_test.ts +181 -0
- package/templates/opencode/scripts/lib/project.ts +240 -0
- package/templates/opencode/scripts/lib/project_test.ts +45 -0
- package/templates/opencode/scripts/lib/status.ts +69 -0
- package/templates/opencode/scripts/lib/worktree.ts +41 -0
- package/templates/opencode/scripts/model-health.ts +50 -0
- package/templates/opencode/scripts/model-health_test.ts +80 -0
- package/templates/opencode/scripts/resolve-model.ts +112 -0
- package/templates/opencode/scripts/resolve-model_test.ts +185 -0
- package/templates/opencode/scripts/safety-check.ts +203 -0
- package/templates/opencode/scripts/vetor-checks.sh +217 -0
- package/templates/opencode/scripts/vetor-status.sh +99 -0
- package/templates/skills/architecture-review/SKILL.md +187 -0
- package/templates/skills/backlog-ideator/SKILL.md +277 -0
- package/templates/skills/design/SKILL.md +468 -0
- package/templates/skills/design/examples/design-contract-example.md +46 -0
- package/templates/skills/design/examples/prototype-handoff-example.md +142 -0
- package/templates/skills/fix-loop-agent/SKILL.md +255 -0
- package/templates/skills/guardian/SKILL.md +343 -0
- package/templates/skills/issue-coordinator/SKILL.md +596 -0
- package/templates/skills/retro/SKILL.md +156 -0
- package/templates/skills/shared/references/agent-status.template.md +68 -0
- package/templates/skills/shared/references/codebase-design-vocabulary.md +54 -0
- package/templates/skills/shared/references/conflict-resolution.md +94 -0
- package/templates/skills/shared/references/delegate-to-runtime.md +239 -0
- package/templates/skills/shared/references/design-vocabulary.md +508 -0
- package/templates/skills/shared/references/evidence-state.md +365 -0
- package/templates/skills/shared/references/frontend-design-enforcement.md +33 -0
- package/templates/skills/shared/references/grilling-conventions.md +64 -0
- package/templates/skills/shared/references/knowledge-provider-contract.md +150 -0
- package/templates/skills/shared/references/mcp-availability.md +104 -0
- package/templates/skills/shared/references/module-test-map.template.md +72 -0
- package/templates/skills/shared/references/planning-conventions.md +97 -0
- package/templates/skills/shared/references/project-conventions.md +63 -0
- package/templates/skills/shared/references/tdd-conventions.md +81 -0
- package/templates/skills/shared/references/touched-files-cache.md +30 -0
- package/templates/skills/spec/SKILL.md +524 -0
- package/templates/skills/spec-validate/SKILL.md +195 -0
- package/templates/skills/spec-validate/references/traceability.md +169 -0
- package/templates/skills/stack-practices/SKILL.md +151 -0
- package/templates/skills/vetor/SKILL.md +174 -0
- package/templates/skills/worktree-create/SKILL.md +142 -0
- package/templates/skills/worktree-ship/SKILL.md +394 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: retro
|
|
3
|
+
description: Avalia o uso do Vetor nesta sessão, destaca o que pode ser melhorado no plugin em si (não no projeto do usuário) e propõe issues para o repositório do Vetor, com aprovação antes de criar.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Claude Code
|
|
6
|
+
metadata:
|
|
7
|
+
author: vitortavares
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Você é o retrospectivo do Vetor. Sua missão é olhar para trás nesta sessão, identificar onde o
|
|
12
|
+
**próprio plugin** (skills, agentes, hooks, scripts do Vetor) gerou fricção, ambiguidade ou
|
|
13
|
+
comportamento incorreto — e propor issues acionáveis no repositório do Vetor para alimentar seu
|
|
14
|
+
desenvolvimento.
|
|
15
|
+
|
|
16
|
+
**Escopo estrito:** isto avalia o Vetor, não o projeto do usuário. Bugs no código do projeto, dívida
|
|
17
|
+
técnica do projeto ou decisões de arquitetura do projeto **não** entram aqui — isso é trabalho do
|
|
18
|
+
`/vetor:backlog`.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Sintaxe
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
/vetor:retro
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Invocação manual, tipicamente ao final de uma sessão que usou uma ou mais skills do Vetor
|
|
29
|
+
(`backlog-ideator`, `issue-coordinator`, `guardian`, `worktree-create`, `worktree-ship`,
|
|
30
|
+
`fix-loop-agent`, `issue-worker`).
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Referências
|
|
35
|
+
|
|
36
|
+
> Paths relativos abaixo resolvem a partir do diretório desta própria skill (informado ao carregar,
|
|
37
|
+
> ex. "Base directory for this skill: ..."), não do `cwd` de execução. Em comandos `bash`/`deno run`,
|
|
38
|
+
> prefixe o path absoluto desse diretório ao caminho relativo antes de executar — defina uma vez:
|
|
39
|
+
> ```bash
|
|
40
|
+
> SKILL_DIR="<path absoluto informado como 'Base directory for this skill' no carregamento>"
|
|
41
|
+
> ```
|
|
42
|
+
> e use `"$SKILL_DIR/../../scripts/..."` em todo comando abaixo, nunca o path relativo isolado.
|
|
43
|
+
|
|
44
|
+
- `../shared/references/mcp-availability.md` — ao avaliar um achado sobre
|
|
45
|
+
hooks, slash commands, configuração de MCP, permissões ou SDK de agentes do próprio Claude Code, o
|
|
46
|
+
MCP `claude-code-docs` é **obrigatório quando disponível** (ver "Documentação do próprio Claude
|
|
47
|
+
Code (`claude-code-docs`)") antes de afirmar o comportamento esperado da plataforma. Nota: há
|
|
48
|
+
sobreposição parcial com o agente `claude-code-guide` (dúvidas gerais do usuário sobre o produto) —
|
|
49
|
+
o `retro` usa o MCP para decisões internas sobre o comportamento do Vetor, não para responder
|
|
50
|
+
perguntas do usuário sobre o Claude Code em si.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Comportamento
|
|
55
|
+
|
|
56
|
+
### 1 — Levantar o que aconteceu nesta sessão
|
|
57
|
+
|
|
58
|
+
Releia a conversa (não o histórico de outras sessões) em busca de interações com o Vetor. Para cada
|
|
59
|
+
skill/agente do Vetor invocado, procure por sinais de fricção real — não invente achados:
|
|
60
|
+
|
|
61
|
+
- **Você teve que improvisar** algo que a skill não documentava (ex.: um atalho, uma exceção, uma
|
|
62
|
+
interpretação de instrução ambígua).
|
|
63
|
+
- **O usuário corrigiu** um comportamento seu relacionado a uma skill do Vetor (não ao código do
|
|
64
|
+
projeto).
|
|
65
|
+
- **Uma alegação da skill se mostrou falsa** ao ser exercitada de verdade (ex.: um "enforcement" que
|
|
66
|
+
não bloqueou nada, um caminho documentado que não existe na plataforma).
|
|
67
|
+
- **Um efeito colateral não documentado** apareceu (ex.: arquivo escrito fora do esperado, chamada que
|
|
68
|
+
falhou silenciosamente).
|
|
69
|
+
- **Um passo pareceu redundante ou bloqueou sem necessidade** (aprovação dupla, checagem que nunca
|
|
70
|
+
se aplica neste tipo de projeto, etc.).
|
|
71
|
+
|
|
72
|
+
Se nenhuma dessas situações ocorreu na sessão, diga isso claramente e pare — não force achados.
|
|
73
|
+
|
|
74
|
+
### 2 — Classificar e formular como issue candidata
|
|
75
|
+
|
|
76
|
+
Para cada achado real, monte:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
### <Título curto e específico>
|
|
80
|
+
|
|
81
|
+
**Tipo:** bug | enhancement | docs
|
|
82
|
+
**Skill/arquivo afetado:** <ex.: skills/issue-coordinator/SKILL.md>
|
|
83
|
+
**Evidência:** <trecho da sessão que mostra o problema — cite o que aconteceu, não hipótese>
|
|
84
|
+
**Descrição:** <o que está errado ou faltando, e o efeito prático>
|
|
85
|
+
**Sugestão de fix:** <se houver uma direção clara; opcional caso a solução não seja óbvia>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Priorize achados que **realmente aconteceram** nesta sessão sobre problemas hipotéticos.
|
|
89
|
+
|
|
90
|
+
### 3 — Verificar duplicatas no repositório do Vetor
|
|
91
|
+
|
|
92
|
+
Antes de propor criação, cheque se já existe issue equivalente no repo do Vetor (não no projeto
|
|
93
|
+
atual). Resolva o repo alvo lendo `homepage` (ou `repository`, se presente) de
|
|
94
|
+
`$SKILL_DIR/../../.claude-plugin/plugin.json` — hoje `Tavaressan/Vetor`.
|
|
95
|
+
|
|
96
|
+
Use a CLI `gh`:
|
|
97
|
+
```bash
|
|
98
|
+
gh issue list --repo Tavaressan/Vetor --search "<palavras-chave>" --state all
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Se encontrar equivalente, não proponha criar de novo — anote como "já rastreado em #<N>" no resumo.
|
|
102
|
+
|
|
103
|
+
### 4 — Apresentar e aguardar aprovação
|
|
104
|
+
|
|
105
|
+
Apresente a lista de issues candidatas (após remover duplicatas) e obtenha aprovação seguindo o
|
|
106
|
+
mecanismo do ecossistema atual (`../shared/references/planning-conventions.md`
|
|
107
|
+
§2.2 — plan mode nativo no Claude Code via `ExitPlanMode`, `implementation_plan.md` com
|
|
108
|
+
`request_feedback: true` no Antigravity, ou confirmação no chat).
|
|
109
|
+
|
|
110
|
+
**Pare** até a aprovação. O usuário pode aprovar todas, algumas, ou nenhuma.
|
|
111
|
+
|
|
112
|
+
### 5 — Criar as issues aprovadas — sempre no repo do Vetor, nunca no do projeto
|
|
113
|
+
|
|
114
|
+
⚠️ **Restrição crítica:** estas issues vão para o repositório do **plugin** (`Tavaressan/Vetor`, lido
|
|
115
|
+
do `plugin.json`), que quase sempre é diferente do repositório do projeto onde esta sessão está
|
|
116
|
+
rodando. Sempre especifique o repo explicitamente — nunca deixe implícito no diretório atual.
|
|
117
|
+
|
|
118
|
+
Use a CLI `gh`:
|
|
119
|
+
```bash
|
|
120
|
+
gh issue create --repo Tavaressan/Vetor \
|
|
121
|
+
--title "<título>" \
|
|
122
|
+
--body "$(cat <<'EOF'
|
|
123
|
+
<corpo no formato de §2>
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
🤖 Gerado por `/vetor:retro` — sessão em <projeto atual, sem dados sensíveis>
|
|
127
|
+
EOF
|
|
128
|
+
)"
|
|
129
|
+
```
|
|
130
|
+
Não passe `--label retro` se não tiver certeza de que o label existe no repo alvo — `gh issue
|
|
131
|
+
create` falha se o label não existir. Tente sem label em caso de erro, e reporte a falha do label
|
|
132
|
+
sem abortar a criação da issue.
|
|
133
|
+
|
|
134
|
+
Se a criação falhar (repo inacessível, sem permissão, `gh`/MCP indisponível), **não perca o
|
|
135
|
+
trabalho**: imprima a lista completa de issues candidatas no chat para o usuário copiar manualmente.
|
|
136
|
+
|
|
137
|
+
Após criação, imprima:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
Issues de retrospectiva criadas em Tavaressan/Vetor:
|
|
141
|
+
- #<N1> — <título 1>
|
|
142
|
+
- #<N2> — <título 2>
|
|
143
|
+
|
|
144
|
+
Já rastreados (duplicata, não recriado):
|
|
145
|
+
- #<N3> — <título existente>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Restrições
|
|
151
|
+
|
|
152
|
+
- Nunca avalia o código ou as issues do projeto do usuário — só o comportamento do Vetor
|
|
153
|
+
- Nunca cria issues sem aprovação explícita
|
|
154
|
+
- Nunca cria issues no repositório do projeto atual — sempre no repo do Vetor (`plugin.json`)
|
|
155
|
+
- Não força achados: sessão sem fricção real produz "nada a reportar", não issues artificiais
|
|
156
|
+
- Evidência é obrigatória por achado — sem trecho real da sessão, não vira issue candidata
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Status file — fonte única do formato
|
|
2
|
+
|
|
3
|
+
**Path canônico:** `<repo-root>/.claude/vetor/status/<branch com / trocada por ->.md`
|
|
4
|
+
(ex.: branch `fix/42-cache-ttl` → `.claude/vetor/status/fix-42-cache-ttl.md`).
|
|
5
|
+
|
|
6
|
+
Escrito pelo worker/fix-loop a cada iteração. Lido pelo `issue-coordinator` (via
|
|
7
|
+
`scripts/vetor-status.sh`) e pelo safety hook (que bloqueia `git push`/`gh pr *` de um worktree
|
|
8
|
+
enquanto `Status` ≠ `GREEN`). Fica **fora do worktree**, no root do repo — não há risco de commit
|
|
9
|
+
acidental; o `/vetor` init garante a entrada no `.gitignore`.
|
|
10
|
+
|
|
11
|
+
**Fallback (issue #94):** se a plataforma bloquear a escrita fora do worktree, o worker deve salvar
|
|
12
|
+
uma cópia em `<worktree>/.claude/vetor-status.md`. O coordinator verifica esse fallback ao ler.
|
|
13
|
+
|
|
14
|
+
## Estrutura base (todos os estados)
|
|
15
|
+
|
|
16
|
+
```markdown
|
|
17
|
+
# Agent Status — <branch>
|
|
18
|
+
Updated: <ISO 8601>
|
|
19
|
+
Status: RUNNING | BLOCKED_WAITING | GREEN | FAILED_MAX_ITERATIONS
|
|
20
|
+
Iteration: <N>/5 (Issue #<M>)
|
|
21
|
+
Last action: <última ação executada>
|
|
22
|
+
Next: <próximo passo planejado>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Blocos adicionais por estado
|
|
26
|
+
|
|
27
|
+
**`BLOCKED_WAITING`** (obrigatórios — o coordinator escala ao usuário a partir deles; sem eles a
|
|
28
|
+
escalação não acontece):
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
Blocked on: <o que precisa — permissão, decisão técnica>
|
|
32
|
+
Options:
|
|
33
|
+
1. <opção sugerida>
|
|
34
|
+
2. <opção alternativa>
|
|
35
|
+
Recommendation: <opção recomendada e por quê>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Quando o bloqueio for epistemológico (falta de informação, premissa não confirmada, evidências que
|
|
39
|
+
se contradizem) em vez de uma permissão de comando, use o vocabulário de
|
|
40
|
+
`$CLAUDE_PLUGIN_ROOT/skills/shared/references/evidence-state.md` para nomear a natureza do bloqueio
|
|
41
|
+
em `Blocked on` — ex.: `Blocked on: OPEN_QUESTION crítica — <pergunta>`, `Blocked on: ASSUMED sem
|
|
42
|
+
confirmação — <premissa>` ou `Blocked on: Evidence Conflict — <fontes em contradição>`. Isso não cria
|
|
43
|
+
um novo estado ou caminho de escalação: `BLOCKED_WAITING` continua sendo o único mecanismo; o
|
|
44
|
+
vocabulário apenas qualifica o motivo já registrado em `Blocked on`.
|
|
45
|
+
|
|
46
|
+
**`FAILED_MAX_ITERATIONS`**: além de atualizar o status, crie `FAIL_ANALYSIS.md` no root do
|
|
47
|
+
worktree com o handover de falha (ver `fix-loop-agent` §4).
|
|
48
|
+
|
|
49
|
+
Iterações em `BLOCKED_WAITING` não contam contra o orçamento de 5 do fix-loop (sugerido, não
|
|
50
|
+
enforced pelo hook — issue #156: ao atingi-lo, registre `BLOCKED_WAITING` ou
|
|
51
|
+
`FAILED_MAX_ITERATIONS`, nunca decida sozinho continuar).
|
|
52
|
+
|
|
53
|
+
## Efeitos colaterais externos (fora do controle de versão)
|
|
54
|
+
|
|
55
|
+
Testes locais passarem (verde) não é evidência de que uma ação que altera estado **fora do repositório**
|
|
56
|
+
de fato colou — ex.: `gh api` fazendo PATCH/POST em branch protection, webhooks, secrets, configurações
|
|
57
|
+
de repositório/organização no GitHub, ou qualquer outra chamada de API externa que muda estado remoto.
|
|
58
|
+
|
|
59
|
+
**Regra:** antes de marcar `Status: GREEN` para uma ação desse tipo, o worker deve rodar um GET (ou
|
|
60
|
+
comando de leitura equivalente) que confirme o novo estado imediatamente após o PATCH/POST, e incluir
|
|
61
|
+
o resultado bruto (ou um resumo objetivo e verificável) no `Last action` do status file.
|
|
62
|
+
|
|
63
|
+
- Se a verificação confirmar o estado esperado → prossiga para `GREEN` normalmente.
|
|
64
|
+
- Se a verificação falhar, for inconclusiva, ou não puder ser executada (ex.: falta de permissão) →
|
|
65
|
+
marque `Status: BLOCKED_WAITING` com o motivo em `Blocked on`, nunca `GREEN` sem confirmação.
|
|
66
|
+
|
|
67
|
+
Isso evita que o `issue-coordinator` e sessões futuras confiem em um estado externo que pode nunca ter
|
|
68
|
+
sido aplicado ou que foi revertido silenciosamente, sem nenhum sinal de alerta no painel de status.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Vocabulário de design de código (Vetor)
|
|
2
|
+
|
|
3
|
+
Fonte única do vocabulário de arquitetura consumido por referência (sem replicar texto) por
|
|
4
|
+
`architecture-review/SKILL.md` e pelo Check 9 do `guardian/SKILL.md` (que hoje usa "deletion test"/
|
|
5
|
+
"fan-in" de forma solta, sem definição centralizada). Adapta o skill público
|
|
6
|
+
`engineering/codebase-design` de Matt Pocock (github.com/mattpocock/skills) ao vocabulário do Vetor.
|
|
7
|
+
|
|
8
|
+
Use estes termos consistentemente — nunca "componente"/"service"/"boundary" como sinônimo frouxo de
|
|
9
|
+
`module`/`seam`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Termos
|
|
14
|
+
|
|
15
|
+
- **Module (módulo)** — unidade de código com uma responsabilidade coesa e um limite identificável
|
|
16
|
+
(arquivo, diretório, package). A pergunta relevante nunca é "esse arquivo é grande?", mas "esse
|
|
17
|
+
módulo tem uma única razão coerente para mudar?".
|
|
18
|
+
- **Interface** — a superfície pública através da qual outros módulos interagem com um módulo
|
|
19
|
+
(função exportada, endpoint, CLI, contrato de tipo). Tudo que não é interface é **implementação**
|
|
20
|
+
— livre para mudar sem quebrar quem depende do módulo.
|
|
21
|
+
- **Depth (profundidade)** — relação entre o tamanho da interface e o poder da funcionalidade que ela
|
|
22
|
+
esconde. Um módulo **profundo** expõe pouco e faz muito (alta profundidade); um módulo **raso**
|
|
23
|
+
(shallow) expõe quase tanto quanto implementa — a interface já é praticamente a implementação, e
|
|
24
|
+
não economiza nada de quem a usa entender o módulo.
|
|
25
|
+
- **Seam** — o ponto de encaixe entre dois módulos, onde um comportamento pode ser trocado/isolado
|
|
26
|
+
sem tocar o outro lado. É também, por definição, a superfície de teste de um módulo (ver
|
|
27
|
+
Princípio 2).
|
|
28
|
+
- **Adapter** — implementação concreta que plugga em um seam (ex.: driver de banco específico atrás
|
|
29
|
+
de uma interface de repositório). Um único adapter existente não prova que o seam é real — pode
|
|
30
|
+
ser especulação prematura (ver Princípio 3).
|
|
31
|
+
- **Leverage (alavancagem)** — o ganho que uma mudança de design compra: quanto código a mais se
|
|
32
|
+
torna simples, testável ou substituível por causa dela. Alavancagem baixa é sinal de que a
|
|
33
|
+
reestruturação proposta não paga o custo de fazê-la.
|
|
34
|
+
- **Locality (localidade)** — o quanto o código relevante para entender ou corrigir um comportamento
|
|
35
|
+
está fisicamente próximo (mesmo módulo/arquivo) de onde o comportamento é observado. Baixa
|
|
36
|
+
localidade é o sintoma clássico de uma função pura extraída só para testabilidade, enquanto o bug
|
|
37
|
+
real mora em como ela é chamada.
|
|
38
|
+
|
|
39
|
+
## Princípios
|
|
40
|
+
|
|
41
|
+
1. **Deletion test.** Para avaliar se um módulo/abstração paga o custo de existir: imagine deletá-lo
|
|
42
|
+
e inlinar seu conteúdo no(s) chamador(es). Se o resultado fica mais simples de entender (menos
|
|
43
|
+
indireção, sem perda de teste relevante), a abstração provavelmente não deveria existir como está.
|
|
44
|
+
Se o resultado fica mais confuso ou duplica lógica não trivial, a abstração se justifica. É
|
|
45
|
+
julgamento qualitativo sobre legibilidade e coesão — não uma métrica textual (ex.: contagem de
|
|
46
|
+
linhas ou de referências) que a substitua sozinha.
|
|
47
|
+
2. **A interface é a superfície de teste.** Um bom teste exercita o módulo pela sua interface pública
|
|
48
|
+
— nunca por um detalhe de implementação exposto lateralmente. Se testar um módulo exige alcançar
|
|
49
|
+
além da sua interface, o seam está no lugar errado (mesma disciplina de `tdd-conventions.md` §1-2,
|
|
50
|
+
aplicada aqui à avaliação arquitetural, não ao ciclo vermelho-verde).
|
|
51
|
+
3. **Um adapter é seam hipotético; dois é seam real.** Uma interface desenhada para "permitir trocar
|
|
52
|
+
a implementação no futuro" com um único adapter implementado é especulação (YAGNI) até que um
|
|
53
|
+
segundo adapter concreto exista. Dois adapters reais confirmam que o seam paga o custo de existir;
|
|
54
|
+
um só ainda não prova nada.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Resolução de conflitos de merge
|
|
2
|
+
|
|
3
|
+
Procedimento compartilhado, usado pelo `worktree-ship` (passos 2 e 10) quando `git merge` da branch
|
|
4
|
+
default deixa arquivos conflitantes.
|
|
5
|
+
|
|
6
|
+
## Princípio geral — Resolver por intenção
|
|
7
|
+
|
|
8
|
+
Antes de aceitar ou descartar código em conflito, sempre **inspecione a intenção de cada lado** usando
|
|
9
|
+
`git log` e `git show`:
|
|
10
|
+
|
|
11
|
+
1. **Seu lado (current branch):** `git log --oneline -5` (últimos 5 commits) para entender o contexto
|
|
12
|
+
local, depois `git show <hash>` para ver a mudança específica que criou o conflito.
|
|
13
|
+
|
|
14
|
+
2. **Lado remoto (default branch):** `git show origin/$DEFAULT_BRANCH:<filepath>` para ver a versão
|
|
15
|
+
resolvida no default, depois `git log origin/$DEFAULT_BRANCH --oneline -5` para entender a
|
|
16
|
+
intenção remota.
|
|
17
|
+
|
|
18
|
+
3. **Decida pela lógica de negócio:** a mensagem de commit, o conteúdo exato e o contexto histórico
|
|
19
|
+
juntos revelam qual versão respeita melhor as regras do produto e do projeto.
|
|
20
|
+
|
|
21
|
+
Isso é **resolução consciente por intenção**, não mecanicamente por padrão sintático — distingue-se
|
|
22
|
+
do safety-valve de orçamento esgotado (§5.3), que é um fallback quando a inspeção honesta não
|
|
23
|
+
resolve a ambiguidade.
|
|
24
|
+
|
|
25
|
+
## 1 — Identificar os conflitos
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
git diff --name-only --diff-filter=U
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 2 — Lockfiles (KISS/YAGNI)
|
|
32
|
+
|
|
33
|
+
Para arquivos de lock na lista (`deno.lock`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`,
|
|
34
|
+
`Cargo.lock`, `poetry.lock`):
|
|
35
|
+
|
|
36
|
+
1. `git checkout --theirs <lockfile-path>` — aceita a versão da branch default e limpa os marcadores.
|
|
37
|
+
2. Execute o instalador do projeto (`deno install`, `npm install`, `pnpm install`, `cargo build`,
|
|
38
|
+
`poetry lock --no-update`) para que o próprio gerenciador regenere o lockfile reconciliado. O
|
|
39
|
+
`runtime` gravado em `.claude/vetor/config.json` diz qual usar.
|
|
40
|
+
3. `git add <lockfile-path>`
|
|
41
|
+
|
|
42
|
+
Nunca mescle lockfile à mão.
|
|
43
|
+
|
|
44
|
+
## 3 — Conflitos aditivos em listas
|
|
45
|
+
|
|
46
|
+
Quando dois workers paralelos editam **a mesma linha** de um campo que agrega itens (scripts de
|
|
47
|
+
`package.json`, arrays JSON, strings concatenadas com `&&`) e **ambos os lados só adicionam**, aplique
|
|
48
|
+
**união aditiva** em vez de escolher um lado:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
<<<<<<< HEAD
|
|
52
|
+
"scripts": { "test": "jest unit && npm run lint" }
|
|
53
|
+
=======
|
|
54
|
+
"scripts": { "test": "jest unit && npm run e2e" }
|
|
55
|
+
>>>>>>> origin/master
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Resolução:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
"scripts": { "test": "jest unit && npm run lint && npm run e2e" }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Remova duplicatas do resultado e `git add <arquivo>`.
|
|
65
|
+
|
|
66
|
+
Se um dos lados **remove** algo que o outro mantém, não é conflito aditivo — trate como código (§4).
|
|
67
|
+
|
|
68
|
+
## 4 — Demais arquivos de código
|
|
69
|
+
|
|
70
|
+
Localize os marcadores (`<<<<<<<`, `=======`, `>>>>>>>`), mescle logicamente as regras de negócio e
|
|
71
|
+
remova os marcadores.
|
|
72
|
+
|
|
73
|
+
## 5 — Validar
|
|
74
|
+
|
|
75
|
+
1. Execute os testes do módulo correspondente via `module-test-map`.
|
|
76
|
+
2. **Verde:** commite (`merge branch '$DEFAULT_BRANCH' and resolve conflicts`), `git push origin <branch>`.
|
|
77
|
+
3. **Vermelho:** chame o `fix-loop-agent` localmente. Se as iterações estourarem sem verde, aborte o
|
|
78
|
+
merge, preserve o worktree e alerte o usuário.
|
|
79
|
+
|
|
80
|
+
⚠️ **Nunca rode `git stash` (ou `git checkout` para outro branch) enquanto um merge está em conflito
|
|
81
|
+
e ainda não commitado.** Qualquer comando que descarte `MERGE_HEAD` faz o `git commit` seguinte virar
|
|
82
|
+
um commit comum de 1 pai — mesmo com a árvore correta, o GitHub recalcula o merge do zero (a partir
|
|
83
|
+
do merge-base real) e reporta `mergeable: CONFLICTING`/`mergeStateStatus: DIRTY`, mesmo já resolvido
|
|
84
|
+
localmente. Para inspecionar o conteúdo de outro branch sem alterar o estado do merge em andamento,
|
|
85
|
+
use:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
git show "origin/$DEFAULT_BRANCH:<path>"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Se `MERGE_HEAD` já foi perdido por engano, refaça o merge do zero (`git merge --abort` se ainda
|
|
92
|
+
houver estado parcial recuperável, ou `git merge -s ours "origin/$DEFAULT_BRANCH" -m "merge branch
|
|
93
|
+
'$DEFAULT_BRANCH' and resolve conflicts"` para registrar o segundo pai sem alterar a árvore já
|
|
94
|
+
resolvida) antes de prosseguir para o passo 2 do `worktree-ship`.
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Delegação assistida a runtime externo (opcional, agnóstica de provedor)
|
|
2
|
+
|
|
3
|
+
Referência compartilhada para economizar tokens delegando **tarefas mecânicas e de baixo
|
|
4
|
+
risco** a um CLI externo de IA. Padrão: **o runtime delegado rascunha, Claude valida.**
|
|
5
|
+
|
|
6
|
+
Consumida por `worktree-ship`, `fix-loop-agent`, `backlog-ideator`, `guardian` e
|
|
7
|
+
`issue-coordinator`.
|
|
8
|
+
|
|
9
|
+
Generaliza o antigo acoplamento a um único CLI (`agy` — Google Antigravity/Gemini CLI): a
|
|
10
|
+
delegação agora suporta qualquer runtime candidato (Gemini/`agy`, OpenCode/`opencode`,
|
|
11
|
+
Codex/`codex`, ou outro CLI futuro), escolhido por disponibilidade no ambiente, preferência
|
|
12
|
+
configurada e, quando ambíguo, anuência explícita do usuário (issue #247).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Detecção (zero dependência obrigatória, detecção estática)
|
|
17
|
+
|
|
18
|
+
Mesmo princípio já validado para MCPs em `mcp-availability.md`: **olhar se o binário existe no
|
|
19
|
+
PATH**, nunca "tentar a chamada para ver se funciona" (issue #247 reaproveita esse princípio para
|
|
20
|
+
CLIs externos, não só MCPs).
|
|
21
|
+
|
|
22
|
+
No início da skill, detecte todos os candidatos em **uma única chamada em lote** (não uma por
|
|
23
|
+
runtime, para não gastar turnos):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
command -v agy 2>/dev/null; command -v opencode 2>/dev/null; command -v codex 2>/dev/null
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Monte a lista `available` com os que retornaram um path. Runtimes candidatos conhecidos hoje:
|
|
30
|
+
|
|
31
|
+
| Runtime | Binário | Invocação não-interativa | Consome stdin via pipe (pré-requisito das tarefas §4)? |
|
|
32
|
+
|---------|---------|---|---|
|
|
33
|
+
| Gemini (Antigravity) | `agy` | `agy -p "<prompt>"` — `-p`/`--print` roda um prompt único e imprime a resposta | **Não funciona com modo padrão** — flag `--input-format` padrão é `text`, que ignora stdin (regressão de #111). Alternativa verificada: embutir conteúdo no argumento do prompt: `agy -p "... $conteudo"` (válido para conteúdo que cabe no limite de linha de comando); para conteúdo grande, use `opencode` (stdin confirmado empiricamente) em vez de `agy`. |
|
|
34
|
+
| OpenCode | `opencode` | `opencode run "<prompt>"` — mensagem como argumento posicional, não flag `-p` (`-p`/`--password` do OpenCode é autenticação HTTP, não prompt — não confundir com o `-p` do `agy`) | **Confirmado empiricamente**: `echo "MARCADOR-XYZ-123" \| opencode run --model <free> "Repita exatamente o texto que você recebeu via stdin"` devolveu `MARCADOR-XYZ-123` — o conteúdo do pipe chega ao modelo mesmo sem flag dedicada |
|
|
35
|
+
| Codex | `codex` | `codex exec "<prompt>"` (sintaxe **não verificada neste ambiente** — binário não estava instalado nem MCP de documentação disponível na sessão que escreveu esta referência) | **Não verificado** |
|
|
36
|
+
|
|
37
|
+
**Regra:** um runtime com consumo de stdin **não verificado** nunca deve ser usado para as tarefas
|
|
38
|
+
de §4 (todas dependem do pipe `<producer> | $DELEGATE "..."` carregar o conteúdo real). Um CLI que
|
|
39
|
+
ignora silenciosamente o stdin ainda retorna exit 0 e uma resposta plausível — não é uma falha que
|
|
40
|
+
o guardrail do §3 detecta, é uma alucinação sobre um input que o runtime nunca recebeu. Antes do
|
|
41
|
+
primeiro uso de um runtime novo em produção: rode o teste de eco acima (`echo "<marcador>" | <cli> "repita o marcador"`) e só marque a coluna acima como confirmada se o marcador voltar exato. Enquanto
|
|
42
|
+
não confirmado, trate esse runtime como **não viável para §4** (mesmo que detectado no PATH) — se
|
|
43
|
+
for o único candidato disponível, siga inline; use o CLI apenas via seu mecanismo documentado de
|
|
44
|
+
anexo de arquivo (ex.: `-f/--file` do `opencode`) se a tarefa permitir.
|
|
45
|
+
|
|
46
|
+
**Preferência configurada:** leia `.claude/vetor/config.json` → bloco opcional `delegation`:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"delegation": { "preferredRuntime": "opencode" }
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
(Exemplo mostra `opencode` como preferência recomendada: é o único com suporte comprovado a stdin
|
|
55
|
+
em todas as tarefas de §4. Se preferir `agy`, consulte a linha da tabela do §1 para limitações e alternativas.)
|
|
56
|
+
|
|
57
|
+
Ausência do bloco `delegation` (ou do `config.json` inteiro) nunca é erro — mesmo contrato do
|
|
58
|
+
bloco `knowledge` (ver `skills/vetor/SKILL.md`).
|
|
59
|
+
|
|
60
|
+
## 2. Algoritmo de seleção
|
|
61
|
+
|
|
62
|
+
Com `available` (lista detectada) e `preferred` (config, pode ser `null`):
|
|
63
|
+
|
|
64
|
+
1. **`available` vazio** → siga **inline**. Nunca falhe nem peça instalação — a delegação é
|
|
65
|
+
puramente opcional.
|
|
66
|
+
2. **`preferred` configurado:**
|
|
67
|
+
- Se `preferred` está em `available` → delegue para `preferred`.
|
|
68
|
+
- Se `preferred` **não** está em `available` → siga **inline**. Nunca substitua
|
|
69
|
+
silenciosamente por outro candidato disponível: o usuário consentiu com um runtime
|
|
70
|
+
específico, não com "qualquer um" (issue #247 — "nenhum runtime é assumido como
|
|
71
|
+
padrão/preferencial sem configuração ou anuência").
|
|
72
|
+
3. **Sem `preferred`, `available` com exatamente 1 candidato** → delegue para ele. Não há
|
|
73
|
+
ambiguidade entre runtimes a resolver, então não é necessário perguntar (a anuência explícita
|
|
74
|
+
só é exigida "quando houver mais de um runtime viável e nenhuma preferência registrada").
|
|
75
|
+
4. **Sem `preferred`, `available` com 2+ candidatos (ambíguo):**
|
|
76
|
+
- **Sessão interativa** (há interlocutor, ex.: `issue-coordinator` fora de `--headless`):
|
|
77
|
+
pergunte ao usuário qual runtime usar (mecanismo de seleção interativa da skill, quando
|
|
78
|
+
disponível). Ofereça salvar a escolha em `delegation.preferredRuntime` para não perguntar de
|
|
79
|
+
novo.
|
|
80
|
+
- **Sessão headless** (`fix-loop-agent`, `issue-worker`, `guardian`, `backlog-ideator` sem
|
|
81
|
+
interlocutor): **critério de desempate documentado é sempre inline** — nunca escolha
|
|
82
|
+
silenciosamente entre candidatos não consentidos. Isso é intencional mesmo que sacrifique
|
|
83
|
+
uma oportunidade de economia de tokens: é o preço de não assumir uma preferência que
|
|
84
|
+
ninguém configurou.
|
|
85
|
+
|
|
86
|
+
Lógica de referência (implementada e testada em `scripts/lib/delegation-runtime.ts`,
|
|
87
|
+
`scripts/tests/delegation-runtime_test.ts`):
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
selectDelegationRuntime({ available, preferred, interactive });
|
|
91
|
+
// => { action: "inline" | "delegate" | "ask", runtime?, reason }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Skills que rodam em Deno podem importar a função diretamente; skills descritas só em markdown
|
|
95
|
+
devem seguir o mesmo algoritmo em prosa (passos 1-4 acima).
|
|
96
|
+
|
|
97
|
+
Antes de rodar o comando de delegação escolhido, **sempre imprima um log explícito no console**:
|
|
98
|
+
`echo "[Vetor:Delegação] Delegando tarefa a <runtime>: <breve descrição>"`.
|
|
99
|
+
|
|
100
|
+
**Nota — cache próprio de alguns runtimes fora do projeto:** o `agy`, por exemplo, pode persistir
|
|
101
|
+
uma cópia do rascunho em `~/.gemini/antigravity-cli/brain/<uuid>/...` (fora do repositório e do
|
|
102
|
+
controle de versão). Isso é comportamento do CLI externo, não do Vetor — o Vetor consome apenas a
|
|
103
|
+
saída via stdout (pipe) e não depende nem gerencia esse cache. Não é necessário limpar esses
|
|
104
|
+
arquivos manualmente.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 3. Qualquer falha do CLI delegado = fallback inline imediato, sem retry
|
|
109
|
+
|
|
110
|
+
Duas categorias distintas de falha, **mesma resposta para ambas**:
|
|
111
|
+
|
|
112
|
+
### 3.a Negação de permissão pelo classificador de auto-mode
|
|
113
|
+
|
|
114
|
+
Mesmo com o binário presente, a chamada pode ser **negada em runtime** pela camada de
|
|
115
|
+
permissão/classificador de auto-mode do Claude Code — motivo típico é **exfiltração de dados**
|
|
116
|
+
(envio de diff ou conteúdo de código confidencial para CLI externo não estabelecido como
|
|
117
|
+
confiável).
|
|
118
|
+
|
|
119
|
+
**Esta não é uma falha transiente de rede; é uma política de segurança.** Não deve ser
|
|
120
|
+
retentada.
|
|
121
|
+
|
|
122
|
+
### 3.b Falha genérica do CLI (encoding, crash, timeout, exit code ≠ 0)
|
|
123
|
+
|
|
124
|
+
Já observado em produção: uma chamada ao `agy` pode falhar com um erro genérico de encoding
|
|
125
|
+
(`proto: field ... contains invalid UTF-8`) ao processar texto em português com acentuação. Isso
|
|
126
|
+
não é exclusivo do Gemini — qualquer CLI externo pode falhar de formas imprevisíveis
|
|
127
|
+
(encoding, crash, timeout, versão incompatível).
|
|
128
|
+
|
|
129
|
+
**Regra única para 3.a e 3.b:** qualquer falha do CLI de delegação (exit code ≠ 0, exceção,
|
|
130
|
+
negação de permissão, saída vazia/corrompida) — não só ausência do binário — é motivo de
|
|
131
|
+
**fallback inline imediato**:
|
|
132
|
+
|
|
133
|
+
1. **Não retente** — nem o mesmo runtime, nem trocar para outro candidato disponível. A
|
|
134
|
+
simplicidade do "sem retry" evita loops de tentativa em CLIs com falhas erráticas.
|
|
135
|
+
2. **Use o fallback inline imediatamente** — monte a descrição, o resumo ou o rascunho
|
|
136
|
+
manualmente usando o template padrão fornecido na skill (ex.: template de PR padrão em §6 do
|
|
137
|
+
`worktree-ship`).
|
|
138
|
+
3. **Prossiga sem atraso** — evita I/O desnecessário e mensagens de erro em sessões com
|
|
139
|
+
auto-mode restritivo.
|
|
140
|
+
|
|
141
|
+
A delegação é **opcional e confortável para falhar**; a tarefa sempre tem um caminho inline
|
|
142
|
+
viável.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 4. Tarefas delegáveis (baixo risco, alto volume)
|
|
147
|
+
|
|
148
|
+
Mesmo contrato de saída independente do runtime escolhido: substitua `$DELEGATE` pelo comando de
|
|
149
|
+
invocação do runtime selecionado no passo 2 (tabela do §1).
|
|
150
|
+
|
|
151
|
+
### 4.1. Resumir logs de CI / build
|
|
152
|
+
Antes de diagnosticar uma falha, condense o log bruto para não despejar centenas de
|
|
153
|
+
linhas no contexto:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
gh run view <run-id> --log-failed \
|
|
157
|
+
| $DELEGATE "Resuma a causa raiz das falhas neste log de CI em até 15 linhas, citando arquivo:linha quando houver. Não invente; se não houver causa clara, diga isso."
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
O Claude lê o resumo e **decide o fix**. Usado por `worktree-ship` (monitorar CI) e
|
|
161
|
+
`fix-loop-agent` (avaliar resultado dos testes).
|
|
162
|
+
|
|
163
|
+
### 4.2. Rascunhar texto de issues
|
|
164
|
+
Em `backlog-ideator`, gere a primeira versão do corpo da issue:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
$DELEGATE "Escreva o corpo de uma issue GitHub (descrição + critério de aceite verificável) para: <tema>. Conciso, em PT-BR."
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
O Claude **revisa e ancora** o rascunho na documentação do projeto antes de criar via
|
|
171
|
+
`gh issue create`.
|
|
172
|
+
|
|
173
|
+
### 4.3. Rascunhar mensagens de commit e relatórios
|
|
174
|
+
Mensagens de commit (`fix-loop-agent`, `worktree-ship`) e o relatório do `guardian`:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
git diff --staged | $DELEGATE "Escreva uma mensagem de commit conventional commits (uma linha de subject + corpo opcional) para este diff."
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
O Claude valida o rascunho antes de usar.
|
|
181
|
+
|
|
182
|
+
### 4.4. Rascunhar corpo/descrição de Pull Request
|
|
183
|
+
Em `worktree-ship`, gere a primeira versão da descrição do Pull Request com base no diff acumulado da branch em relação à branch default do projeto:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
git diff "$DEFAULT_BRANCH"...HEAD | $DELEGATE "Escreva uma descrição concisa e estruturada de Pull Request para este diff. Use markdown em PT-BR com seções: 'O que mudou' (tópicos curtos) e 'Como testar'."
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
O Claude **revisa e formata** a descrição antes de passá-la ao comando `gh pr create --body`.
|
|
190
|
+
|
|
191
|
+
### 4.5. Análise de afinidade e agrupamento de issues
|
|
192
|
+
Em `issue-coordinator`, delegue a varredura e o agrupamento preliminar de issues em lote:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
gh issue list --label <label> --state open --json number,title,labels,body \
|
|
196
|
+
| $DELEGATE "Analise estas issues em formato JSON e sugira um agrupamento de afinidade. Retorne o resultado em formato markdown estruturado indicando para cada grupo a Lead Issue, as issues secundárias subsequentes do grupo, o slug sugerido e se o modelo ideal de execução deve ser haiku (ajustes simples/chore) ou sonnet (features complexas/refactor)."
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
O Claude **valida a afinidade**, resolve eventuais erros do rascunho e constrói a tabela final de dispatch.
|
|
200
|
+
|
|
201
|
+
### 4.6. Geração de Changelog de Sessão
|
|
202
|
+
No `issue-coordinator`, delegue a criação do changelog consolidado a partir do histórico de commits da sessão. **Sempre limite o range** (a regra de 100 linhas de `planning-conventions.md` §1.1 vale para histórico de git também) — `origin/main...HEAD` sozinho não é suficiente como limite: uma branch de longa duração e nunca rebaseada pode produzir um range enorme. Use um cap numérico fixo além do range:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
git log origin/main...HEAD --oneline -200 | $DELEGATE "Com base nestes commits, crie um Changelog em markdown em PT-BR organizado pelas seções: Melhorias (features), Correções (fixes) e Outros."
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
O Claude **valida o texto**, refina o formato e salva no arquivo `.claude/vetor/CHANGELOG.md`.
|
|
209
|
+
|
|
210
|
+
### 4.7. Validação de Migrations
|
|
211
|
+
No `guardian`, envie o dump de arquivos de migrations para verificar a integridade da sequência temporal:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
ls "$MIGRATIONS_DIR" | $DELEGATE "Examine esta listagem de arquivos de migrations e detecte se existem timestamps/versões fora de ordem, buracos na sequência cronológica de numeração ou desvios do padrão de nomenclatura V<N>__<descrição>.sql."
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
O Claude **avalia os findings apontados** e os compila no relatório da auditoria.
|
|
218
|
+
|
|
219
|
+
### 4.8. Resumo Conceitual da Arquitetura
|
|
220
|
+
No `backlog-ideator`, envie arquivos longos de documentação para obter uma síntese executiva de apoio à ideação:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
cat ARCHITECTURE.md docs/*.md | $DELEGATE "Gere um resumo arquitetural consolidado deste projeto contendo os principais padrões de design e módulos, para que um agente possa compreender a estrutura do sistema rapidamente."
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
O Claude **usa este sumário como âncora conceitual** sem precisar ler dezenas de arquivos markdown na íntegra.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 5. Guardrail (invariante — não negociável, independe do runtime)
|
|
231
|
+
|
|
232
|
+
**NUNCA delegue a nenhum runtime externo:**
|
|
233
|
+
- Aplicação de correções de código / geração de diffs (`fix-loop-agent`)
|
|
234
|
+
- Resolução de conflitos de merge
|
|
235
|
+
- Decisão de fazer (ou não) merge
|
|
236
|
+
|
|
237
|
+
Essas etapas ficam **sempre** com o Claude. Toda saída delegada é tratada como rascunho
|
|
238
|
+
não confiável e **validada pelo Claude antes de qualquer escrita** (commit, push, criação
|
|
239
|
+
de PR ou merge). Em caso de dúvida sobre a qualidade do rascunho, descarte-o e faça inline.
|