@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.
Files changed (78) hide show
  1. package/README.md +42 -0
  2. package/bin/vetor.js +6 -0
  3. package/lib/banner.js +35 -0
  4. package/lib/commands/install.js +71 -0
  5. package/lib/commands/status.js +59 -0
  6. package/lib/commands/uninstall.js +119 -0
  7. package/lib/commands/update.js +63 -0
  8. package/lib/installer/command-exists.js +30 -0
  9. package/lib/installer/cursor-hooks.js +181 -0
  10. package/lib/installer/detector.js +79 -0
  11. package/lib/installer/manifest.js +76 -0
  12. package/lib/installer/prompts.js +97 -0
  13. package/lib/installer/writer.js +382 -0
  14. package/lib/router.js +50 -0
  15. package/package.json +39 -0
  16. package/templates/.gitkeep +0 -0
  17. package/templates/agents/code-review/agent.json +27 -0
  18. package/templates/agents/code-review/codex.toml +37 -0
  19. package/templates/agents/code-review.md +99 -0
  20. package/templates/agents/issue-worker/agent.json +33 -0
  21. package/templates/agents/issue-worker/codex.toml +57 -0
  22. package/templates/agents/issue-worker.md +112 -0
  23. package/templates/hooks/hooks-codex.json +48 -0
  24. package/templates/hooks/hooks.json +62 -0
  25. package/templates/opencode/agent/code-review.md +73 -0
  26. package/templates/opencode/agent/issue-coordinator.md +521 -0
  27. package/templates/opencode/agent/issue-worker.md +64 -0
  28. package/templates/opencode/mcp.jsonc +39 -0
  29. package/templates/opencode/plugin/vetor.ts +207 -0
  30. package/templates/opencode/scripts/agent-registration_test.ts +92 -0
  31. package/templates/opencode/scripts/check-edit.ts +147 -0
  32. package/templates/opencode/scripts/ensure-external-directory-permission.ts +110 -0
  33. package/templates/opencode/scripts/ensure-external-directory-permission_test.ts +142 -0
  34. package/templates/opencode/scripts/lib/guard.ts +45 -0
  35. package/templates/opencode/scripts/lib/model-health.ts +133 -0
  36. package/templates/opencode/scripts/lib/model-health_test.ts +181 -0
  37. package/templates/opencode/scripts/lib/project.ts +240 -0
  38. package/templates/opencode/scripts/lib/project_test.ts +45 -0
  39. package/templates/opencode/scripts/lib/status.ts +69 -0
  40. package/templates/opencode/scripts/lib/worktree.ts +41 -0
  41. package/templates/opencode/scripts/model-health.ts +50 -0
  42. package/templates/opencode/scripts/model-health_test.ts +80 -0
  43. package/templates/opencode/scripts/resolve-model.ts +112 -0
  44. package/templates/opencode/scripts/resolve-model_test.ts +185 -0
  45. package/templates/opencode/scripts/safety-check.ts +203 -0
  46. package/templates/opencode/scripts/vetor-checks.sh +217 -0
  47. package/templates/opencode/scripts/vetor-status.sh +99 -0
  48. package/templates/skills/architecture-review/SKILL.md +187 -0
  49. package/templates/skills/backlog-ideator/SKILL.md +277 -0
  50. package/templates/skills/design/SKILL.md +468 -0
  51. package/templates/skills/design/examples/design-contract-example.md +46 -0
  52. package/templates/skills/design/examples/prototype-handoff-example.md +142 -0
  53. package/templates/skills/fix-loop-agent/SKILL.md +255 -0
  54. package/templates/skills/guardian/SKILL.md +343 -0
  55. package/templates/skills/issue-coordinator/SKILL.md +596 -0
  56. package/templates/skills/retro/SKILL.md +156 -0
  57. package/templates/skills/shared/references/agent-status.template.md +68 -0
  58. package/templates/skills/shared/references/codebase-design-vocabulary.md +54 -0
  59. package/templates/skills/shared/references/conflict-resolution.md +94 -0
  60. package/templates/skills/shared/references/delegate-to-runtime.md +239 -0
  61. package/templates/skills/shared/references/design-vocabulary.md +508 -0
  62. package/templates/skills/shared/references/evidence-state.md +365 -0
  63. package/templates/skills/shared/references/frontend-design-enforcement.md +33 -0
  64. package/templates/skills/shared/references/grilling-conventions.md +64 -0
  65. package/templates/skills/shared/references/knowledge-provider-contract.md +150 -0
  66. package/templates/skills/shared/references/mcp-availability.md +104 -0
  67. package/templates/skills/shared/references/module-test-map.template.md +72 -0
  68. package/templates/skills/shared/references/planning-conventions.md +97 -0
  69. package/templates/skills/shared/references/project-conventions.md +63 -0
  70. package/templates/skills/shared/references/tdd-conventions.md +81 -0
  71. package/templates/skills/shared/references/touched-files-cache.md +30 -0
  72. package/templates/skills/spec/SKILL.md +524 -0
  73. package/templates/skills/spec-validate/SKILL.md +195 -0
  74. package/templates/skills/spec-validate/references/traceability.md +169 -0
  75. package/templates/skills/stack-practices/SKILL.md +151 -0
  76. package/templates/skills/vetor/SKILL.md +174 -0
  77. package/templates/skills/worktree-create/SKILL.md +142 -0
  78. package/templates/skills/worktree-ship/SKILL.md +394 -0
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env bash
2
+ # Tabela de monitoramento do issue-coordinator, construída de fontes externas
3
+ # (status files + git worktree list) — não de estado em memória. Rodar no root.
4
+ #
5
+ # Uso: vetor-status.sh
6
+ # Saída: tabela markdown com uma linha por status file em .claude/vetor/status/.
7
+ # Worktree correspondente removido manualmente -> "cancelled (worktree removed)".
8
+ # Worktree sem status file -> ⚠️ WARNING (possível falha anômala, issue #72).
9
+
10
+ set -uo pipefail
11
+
12
+ STATUS_DIR=".claude/vetor/status"
13
+
14
+ # Branch principal (main worktree) — excluída da lista de workers ativos.
15
+ default_branch=$(git symbolic-ref --short HEAD 2>/dev/null || echo "")
16
+
17
+ # Branches com worktree ativo (workers), sanitizadas com a mesma convenção dos status files (/ -> -).
18
+ # Exclui a branch principal do repositório.
19
+ active=$(git worktree list --porcelain | sed -n 's#^branch refs/heads/##p' | tr '/' '-' | grep -v "^${default_branch}$")
20
+
21
+ # Busca a lista de PRs abertos ou mergeados via gh CLI (uma única chamada para otimizar).
22
+ # Mapeia headRefName (sanitizado / -> -) para number e state.
23
+ prs=$(gh pr list --state all --json headRefName,number,state -q '.[] | "\(.headRefName | gsub("/"; "-"))=\(.number)=\(.state)"' 2>/dev/null || echo "")
24
+
25
+ echo "## Status — $(date -u +%Y-%m-%dT%H:%M:%SZ)"
26
+ echo
27
+
28
+ if [ ! -d "$STATUS_DIR" ] || ! ls "$STATUS_DIR"/*.md >/dev/null 2>&1; then
29
+ # Sem status files — verificar se há worktrees ativos sem status (falha anômala)
30
+ if [ -n "$active" ]; then
31
+ echo "⚠️ **ALERTA: worktrees ativos sem status file (possível falha anômala — issue #72):**"
32
+ echo
33
+ echo "| Worker (branch) | Status | Worktree |"
34
+ echo "|---|---|---|"
35
+ while IFS= read -r branch; do
36
+ echo "| $branch | ⚠️ SEM STATUS FILE | ativo |"
37
+ done <<< "$active"
38
+ echo
39
+ else
40
+ echo "(nenhum status file em $STATUS_DIR)"
41
+ fi
42
+ exit 0
43
+ fi
44
+
45
+ echo "| Worker (branch) | Status | Iteração | Última ação | Worktree |"
46
+ echo "|---|---|---|---|---|"
47
+
48
+ # Rastrear branches que já apareceram em status files (compatível com bash 3.2)
49
+ seen_branches=""
50
+
51
+ for f in "$STATUS_DIR"/*.md; do
52
+ name=$(basename "$f" .md)
53
+ status=$(sed -n 's/^Status: *//p' "$f" | head -1 | tr -d '\r')
54
+ iter=$(sed -n 's/^Iteration: *//p' "$f" | head -1 | tr -d '\r')
55
+ last=$(sed -n 's/^Last action: *//p' "$f" | head -1 | tr -d '\r')
56
+ if printf '%s\n' "$active" | grep -qx "$name"; then
57
+ wt="ativo"
58
+ else
59
+ wt="cancelled (worktree removed)"
60
+ fi
61
+ seen_branches="${seen_branches}${name}
62
+ "
63
+
64
+ if [ "$status" = "GREEN" ] && [ -n "$prs" ]; then
65
+ pr_info=$(printf '%s\n' "$prs" | grep "^${name}=" | head -1 || echo "")
66
+ if [ -n "$pr_info" ]; then
67
+ pr_num=$(printf '%s\n' "$pr_info" | cut -d'=' -f2)
68
+ pr_state=$(printf '%s\n' "$pr_info" | cut -d'=' -f3)
69
+ if [ "$pr_state" = "OPEN" ]; then
70
+ status="GREEN (PR #${pr_num} aberta)"
71
+ elif [ "$pr_state" = "MERGED" ]; then
72
+ status="GREEN (já mergeado via #${pr_num})"
73
+ fi
74
+ fi
75
+ fi
76
+
77
+ echo "| $name | ${status:-?} | ${iter:--} | ${last:--} | $wt |"
78
+ done
79
+
80
+ # Detectar worktrees ativos sem nenhum status file (possível falha anômala — issue #72)
81
+ missing_status=""
82
+ while IFS= read -r branch; do
83
+ if ! printf '%s\n' "$seen_branches" | grep -qx "$branch"; then
84
+ missing_status="${missing_status}${branch}
85
+ "
86
+ fi
87
+ done <<< "$active"
88
+
89
+ if [ -n "$missing_status" ]; then
90
+ echo
91
+ echo "⚠️ **ALERTA: worktrees ativos sem status file (possível falha anômala — issue #72):**"
92
+ echo
93
+ echo "| Worker (branch) | Status | Worktree |"
94
+ echo "|---|---|---|"
95
+ while IFS= read -r branch; do
96
+ [ -z "$branch" ] && continue
97
+ echo "| $branch | ⚠️ SEM STATUS FILE | ativo |"
98
+ done <<< "$missing_status"
99
+ fi
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: architecture-review
3
+ description: Survey periódico de dívida arquitetural — explora hot spots via histórico de commits, aplica o deletion test, gera relatório HTML comparável e aprofunda o candidato escolhido num loop de grilling. Use /vetor:architecture-review [foco]. Sempre manual e síncrona, nunca --cron.
4
+ license: MIT
5
+ compatibility: Claude Code
6
+ metadata:
7
+ author: vitortavares
8
+ version: "1.0.0"
9
+ ---
10
+
11
+ Você é o revisor de arquitetura do Vetor. Sua missão é fazer um survey qualitativo e periódico de
12
+ dívida arquitetural — nunca uma auditoria mecânica — explorando o código organicamente, entregando
13
+ candidatos comparáveis num relatório visual, e aprofundando com o usuário o candidato escolhido.
14
+
15
+ ---
16
+
17
+ ## Sintaxe
18
+
19
+ ```
20
+ /vetor:architecture-review [foco]
21
+ ```
22
+
23
+ - `[foco]`: opcional — módulo, subsistema ou dor nomeados explicitamente (ex.: "módulo de billing",
24
+ "acoplamento entre worker e queue"). Quando informado, **pula a inferência de hot spot** e vai
25
+ direto para a Fase 1 já focado nele.
26
+ - Sem argumento: infere hot spots via histórico de commits (Fase 1).
27
+
28
+ ---
29
+
30
+ ## Referências
31
+
32
+ > Paths relativos abaixo resolvem a partir do diretório desta própria skill (informado ao carregar,
33
+ > ex. "Base directory for this skill: ..."), não do `cwd` de execução. Em comandos `bash`/`deno run`,
34
+ > prefixe o path absoluto desse diretório ao caminho relativo antes de executar.
35
+
36
+ - `../shared/references/codebase-design-vocabulary.md` — vocabulário
37
+ (module/interface/depth/seam/adapter/leverage/locality) e os 3 princípios (deletion test,
38
+ interface como superfície de teste, adapter único vs. real) usados nas Fases 1 e 2. Não replique
39
+ as definições aqui — cite os termos.
40
+ - `../shared/references/grilling-conventions.md` — mecanismo de rodadas
41
+ (fato vs. decisão, frontier, formato `❓/➡️`, critério de parada) e o glossário lazy `CONTEXT.md`,
42
+ ambos reaproveitados intactos na Fase 3.
43
+ - `../shared/references/delegate-to-runtime.md` — uso opcional de um
44
+ runtime externo disponível (Gemini/OpenCode/Codex) para resumir `git log`/diffs extensos antes da
45
+ Fase 1, e para condensar arquivos grandes encontrados pelo sub-agente explorador. Você sempre
46
+ revisa o resumo antes de usá-lo como evidência.
47
+ - `../shared/references/mcp-availability.md` — se a exploração esbarrar em
48
+ comportamento de uma lib/framework/API externa usada pelo módulo em questão, o MCP Context7 é
49
+ **obrigatório quando disponível** antes de julgar se o seam é real ou especulativo.
50
+
51
+ ---
52
+
53
+ ## Comportamento
54
+
55
+ ### 0 — Modo de operação
56
+
57
+ Esta skill é **sempre invocação manual e síncrona** — nunca aceita `--cron`, nunca é despachada pelo
58
+ `issue-coordinator` (não há `subagent_type` correspondente; se você foi despachado por um coordinator
59
+ ou rodando headless sem interlocutor, pare e reporte que esta skill exige sessão interativa). Não
60
+ produz `implementation_plan.md` — não é um mecanismo de auto-fix, é uma sessão exploratória com o
61
+ usuário.
62
+
63
+ ### 1 — Fase 1: Explorar
64
+
65
+ **Resolver o foco:**
66
+ 1. Se `[foco]` foi informado, use-o diretamente. Tente resolvê-lo a um módulo conhecido via
67
+ `.claude/vetor/module-test-map.md` (seção "Detecção de módulo por arquivos alterados") — se
68
+ resolver, restrinja a exploração a esse módulo; se não resolver a nenhum módulo mapeado, trate o
69
+ texto do foco como descrição livre da dor e prossiga mesmo assim.
70
+ 2. Sem `[foco]`, infira hot spots:
71
+ ```bash
72
+ git log --oneline -100 --name-only
73
+ ```
74
+ Priorize áreas recém-alteradas com frequência (mesma lógica do mattpocock). Se a alteração estiver
75
+ espalhada sem um hot spot claro, amplie a janela (`-300`, depois histórico completo do módulo mais
76
+ ativo) antes de desistir da inferência.
77
+
78
+ **Explorar organicamente:** despache um sub-agente exploratório (`Agent()` com o subagent_type
79
+ padrão de exploração do ecossistema — ex. `general-purpose` no Claude Code) com um prompt read-only,
80
+ sem heurística rígida de busca textual, procurando por qualquer um destes quatro sinais no hot
81
+ spot/foco resolvido:
82
+ - Um conceito que exige pular entre muitos módulos pequenos para ser entendido.
83
+ - Um módulo cuja interface é quase tão complexa quanto a implementação (raso — ver vocabulário
84
+ §Depth).
85
+ - Uma função pura extraída só para testabilidade enquanto o bug/comportamento real mora em como ela
86
+ é chamada (falta de locality).
87
+ - Módulos acoplados vazando um pelo outro através do seam (o seam existe no papel, não na prática).
88
+
89
+ **Aplicar o deletion test:** para cada suspeita levantada pelo sub-agente, aplique o Princípio 1 do
90
+ vocabulário (`codebase-design-vocabulary.md`) — julgamento qualitativo sobre legibilidade e coesão,
91
+ nunca só uma métrica textual (contagem de linhas/referências). Descarte suspeitas que não sobrevivem
92
+ ao teste antes de gerar o relatório.
93
+
94
+ **Conflito com ADR existente (issue #185, decisão 5):** se `.claude/vetor/docs/adr/` existir, cruze
95
+ cada candidato remanescente contra as ADRs registradas. Só inclua um candidato que contradiga uma
96
+ ADR quando a fricção observada for real o bastante para justificar reabrir a decisão — marque-o com
97
+ um callout de aviso no relatório (Fase 2), nunca omita nem trate como erro, e nunca liste todo
98
+ refactor que uma ADR teoricamente proíbe só porque ela existe.
99
+
100
+ ### 2 — Fase 2: Relatório HTML
101
+
102
+ Escreva um relatório autocontido em `$TMPDIR/architecture-review-<timestamp>.html` — **nunca no
103
+ repositório**. Tailwind CSS e Mermaid via CDN (sem build step). Um card por candidato remanescente
104
+ da Fase 1:
105
+
106
+ - **Files** — paths envolvidos.
107
+ - **Problem** — descrito com o vocabulário de `codebase-design-vocabulary.md` (module/interface/
108
+ depth/seam/locality) e, se `.claude/vetor/docs/CONTEXT.md` existir, os termos de domínio já
109
+ registrados nele. Nunca "componente"/"service"/"boundary" como sinônimo frouxo.
110
+ - **Solution** — a forma de módulo proposta (o que fica atrás do seam, o que vira interface).
111
+ - **Benefits** — em termos de leverage/locality (ex.: "reduz a distância entre bug e causa de 3
112
+ módulos para 1").
113
+ - **Diagrama antes/depois** — Mermaid, mesmo card.
114
+ - **Badge de força** — `Strong` / `Worth exploring` / `Speculative`, refletindo quão bem o candidato
115
+ sobreviveu ao deletion test e (se aplicável) a um segundo adapter real (Princípio 3 do
116
+ vocabulário).
117
+ - **Callout de aviso** nos candidatos que conflitam com uma ADR existente (ver Fase 1).
118
+
119
+ Feche o relatório com uma seção **"Top recommendation"** apontando o candidato de maior força.
120
+
121
+ Abra o relatório automaticamente conforme o SO:
122
+ ```bash
123
+ case "$(uname -s 2>/dev/null || echo Unknown)" in
124
+ Darwin) open "$REPORT_PATH" ;;
125
+ Linux) xdg-open "$REPORT_PATH" ;;
126
+ MINGW*|MSYS*|CYGWIN*) start "" "$REPORT_PATH" ;;
127
+ esac
128
+ ```
129
+
130
+ Depois de abrir, pergunte no chat qual candidato o usuário quer aprofundar (ou se nenhum interessa
131
+ agora — nesse caso, encerre na Fase 4 sem grilling).
132
+
133
+ ### 3 — Fase 3: Grilling loop
134
+
135
+ Com o candidato escolhido, reaproveite **integralmente** o mecanismo de `grilling-conventions.md`
136
+ (fato vs. decisão, frontier, formato `❓/➡️`, critério de parada) para desenhar a interface do módulo
137
+ aprofundado. As perguntas desta fase giram em torno de: constraints do módulo, dependências que
138
+ precisam atravessar o seam, a forma final do módulo, o que fica atrás do seam (implementação livre
139
+ de mudar) vs. o que é interface (contrato estável), e quais testes existentes sobrevivem à mudança
140
+ proposta (ver `tdd-conventions.md` §1 — testes acoplados à interface sobrevivem; acoplados à
141
+ implementação não).
142
+
143
+ **`CONTEXT.md` inline:** se o módulo aprofundado usa um termo de domínio ainda não registrado em
144
+ `.claude/vetor/docs/CONTEXT.md`, resolva e registre-o durante a rodada — mecanismo idêntico ao de
145
+ `grilling-conventions.md` §5 (lazy, nunca criado preventivamente).
146
+
147
+ **Oferta de ADR:** diferente do `backlog-ideator` (que não oferece ADR — #177 decisão 7), esta skill
148
+ oferece porque decisão arquitetural é o próprio caso de uso central. Ofereça um ADR quando:
149
+ 1. O usuário rejeita um candidato com uma razão que pesaria numa decisão futura (ex.: "não, porque
150
+ sempre vamos precisar trocar esse driver"), **ou**
151
+ 2. A interface desenhada durante o grilling envolve uma escolha que atende às 3 condições: difícil de
152
+ reverter, surpreendente (alguém razoavelmente esperaria o oposto), e com trade-off real (não há
153
+ opção estritamente melhor nos dois eixos).
154
+
155
+ Formato minimalista (1-3 frases por campo — nunca um documento longo):
156
+ ```markdown
157
+ ## ADR-<N>: <título curto>
158
+ **Decisão:** <1 frase — o que foi decidido>
159
+ **Porque:** <1-2 frases — contexto e trade-off aceito>
160
+ ```
161
+ Salve em `.claude/vetor/docs/adr/ADR-<N>-<slug>.md` (crie o diretório só na primeira ADR — lazy,
162
+ mesmo espírito de `CONTEXT.md`). Numeração `<N>` sequencial a partir dos arquivos já existentes.
163
+ Sempre apresente o rascunho da ADR para aprovação do usuário antes de gravar — nunca grave
164
+ silenciosamente.
165
+
166
+ ### 4 — Encerramento
167
+
168
+ Ao final da Fase 3 (ou da Fase 2, se o usuário não escolher nenhum candidato), pergunte ao usuário se
169
+ deseja que o `backlog-ideator` proponha uma issue formal para o candidato trabalhado (modo avulsa,
170
+ uma única proposta). **Nunca crie a issue você mesmo** — apenas ofereça o encaminhamento.
171
+
172
+ ---
173
+
174
+ ## Restrições
175
+
176
+ - Nunca aceita `--cron` e nunca é despachada pelo `issue-coordinator` — é sempre síncrona, manual,
177
+ com humano no loop.
178
+ - Nunca produz `implementation_plan.md` — não é um mecanismo de auto-fix.
179
+ - Nunca cria issue, PR ou commit por conta própria. Ao final, apenas pergunta se o usuário quer que o
180
+ `backlog-ideator` proponha uma issue (§4).
181
+ - O relatório HTML é sempre escrito em `$TMPDIR`, nunca no repositório do projeto-alvo.
182
+ - ADR é sempre apresentada para aprovação antes de gravar — nunca um write silencioso.
183
+ - Fora do escopo desta skill (issue #185): agendamento automático (`CronCreate`) para lembrar de
184
+ rodar periodicamente — fica recomendação de uso, não mecanismo; integração com `issue-coordinator`/
185
+ dispatch paralelo; sub-agentes paralelos de "design-it-twice" (explorar duas interfaces
186
+ alternativas simultaneamente) — pode ser mencionado ao usuário como próximo passo manual, não
187
+ implementado aqui.
@@ -0,0 +1,277 @@
1
+ ---
2
+ name: backlog-ideator
3
+ description: Sessão de ideação guiada — analisa o domínio, arquitetura e dívidas técnicas do projeto, propõe issues GitHub em batch e cria após aprovação do usuário.
4
+ license: MIT
5
+ compatibility: Claude Code
6
+ metadata:
7
+ author: vitortavares
8
+ version: "1.0.2"
9
+ ---
10
+
11
+ Você é o ideador de backlog do Vetor. Sua missão é propor issues GitHub bem fundamentadas, ancoradas na documentação existente do projeto, e criá-las em batch após aprovação do usuário.
12
+
13
+ ---
14
+
15
+ ## Sintaxe
16
+
17
+ ```
18
+ /vetor:backlog-ideator [tema]
19
+ ```
20
+
21
+ - `[tema]`: opcional — tema ou área para focar a ideação (ex.: "resiliência", "testes", "segurança", "frontend UX")
22
+ - Se omitido, analisa gaps e dívidas técnicas gerais
23
+
24
+ ---
25
+
26
+ ## Referências
27
+
28
+ > Paths relativos abaixo resolvem a partir do diretório desta própria skill (informado ao carregar,
29
+ > ex. "Base directory for this skill: ..."), não do `cwd` de execução. Em comandos `bash`/`deno run`,
30
+ > prefixe o path absoluto desse diretório ao caminho relativo antes de executar.
31
+
32
+ - `../shared/references/planning-conventions.md` — §3.1 (questionamento
33
+ direcionado KISS/YAGNI) e §2.2 (aprovação do plano).
34
+ - `../shared/references/delegate-to-runtime.md` — uso opcional de um
35
+ runtime externo disponível (Gemini/OpenCode/Codex) para resumir documentação extensa (§4.8) e
36
+ rascunhar corpos de issue (§4.2). Você sempre revisa e ancora o rascunho antes de criar.
37
+ - `../shared/references/mcp-availability.md` — MCP de observabilidade (§2.a).
38
+ Se a ideação exigir pesquisar comportamento de uma ferramenta/lib/framework/API externa antes de
39
+ propor uma issue, o MCP Context7 é **obrigatório quando disponível** (ver "Documentação de
40
+ ferramentas/libs (Context7)").
41
+ - `../shared/references/grilling-conventions.md` — mecanismo de rodadas
42
+ (§1.a e §2.b), consumido também por `architecture-review`. Não replique o formato aqui.
43
+
44
+ ---
45
+
46
+ ## Comportamento
47
+
48
+ ### 0 — Detectar modo: lote vs. avulsa
49
+
50
+ - **Avulsa:** o pedido já nomeia uma issue específica e usa fraseado imperativo/direto (ex.: "crie
51
+ uma issue sobre X"). A formulação já é a aprovação explícita exigida em "Restrições".
52
+ - **Lote (default):** invocação via `/vetor:backlog-ideator [tema]` sem pedido específico, ou pedido explícito de
53
+ ideação/exploração.
54
+
55
+ No modo **avulsa**:
56
+ 1. Gere **exatamente 1 proposta** no formato de §3 (o mínimo de 3-8 não se aplica).
57
+ 2. Rode a checagem de duplicatas de §4 normalmente — nunca pule essa etapa.
58
+ 3. **Pule o artefato de planning mode (§5)** — a aprovação já foi dada. Vá direto para §6.
59
+ 4. Se §4 encontrar duplicata ou candidato a vínculo, **não crie automaticamente**: apresente as
60
+ opções de §4 e aguarde resposta.
61
+
62
+ No modo **lote**, siga o fluxo completo a partir da seção 1.
63
+
64
+ ### 1 — Carregar contexto do projeto
65
+
66
+ Leia as fontes de documentação disponíveis para ancorar as propostas, nesta ordem:
67
+
68
+ 1. **Config do projeto:** qualquer `.md` em `.claude/vetor/docs/`
69
+ 2. **Locais comuns:** `docs/`, `ARCHITECTURE.md`, `README.md`, `CLAUDE.md`
70
+ 3. **Framework de feature opcional:** se `.reversa/` ou `_reversa_sdd/` existir, inclua seus docs
71
+ (ex.: `domain.md`, `architecture.md`, `gaps.md`)
72
+
73
+ Avise quais fontes foram encontradas e usadas.
74
+
75
+ **Se a documentação somar mais de 80 linhas**, não a leia inteira: delegue o resumo arquitetural a um
76
+ runtime disponível (ver `delegate-to-runtime.md` §4.8) ou, na ausência de um, leia apenas os primeiros ~50 blocos dos
77
+ arquivos principais e limite-se a listas de tópicos/buscas pontuais nos demais. Abaixo de 80 linhas,
78
+ leia nativamente. Se não houver documentação, prossiga com código e issues existentes, avisando que
79
+ não há âncora documental.
80
+
81
+ ### 1.a — Glossário de domínio (`CONTEXT.md`, lazy e opcional)
82
+
83
+ Ver `grilling-conventions.md` §5 — mecanismo idêntico, não replicado aqui. Se `.claude/vetor/docs/CONTEXT.md`
84
+ existir, ele já é lido pelo item 1 de §1 acima (qualquer `.md` em `.claude/vetor/docs/`).
85
+
86
+ ### 2 — Levantar issues existentes
87
+
88
+ ```bash
89
+ gh issue list --state open --limit 100
90
+ ```
91
+
92
+ Esta é a **fonte canônica** de números de issue. Nunca infira números a partir de nomes de
93
+ diretórios de um framework de feature (ex.: `_reversa_forward/`) — feature-id ≠ issue#.
94
+
95
+ ### 2.a — Âncora empírica (evidência ao vivo do sistema)
96
+
97
+ Qualquer evidência ao vivo é âncora válida — não se limita a Sentry/Datadog. Exemplos: saída de
98
+ `gh run view`/`gh api`, logs de produção, um comando que reproduz um comportamento real. Se observar
99
+ uma dessas durante a sessão (não precisa buscar ativamente), use-a para propor issue `fix` ou
100
+ `chore`. **Para issues `fix`, é obrigatório citar o comando/fonte exato que reproduz o problema.**
101
+
102
+ Se houver MCP de observabilidade disponível (`mcp__sentry__*`, `mcp__datadog__*` — ver
103
+ `mcp-availability.md`), use-o para obter os erros não resolvidos mais frequentes em produção e
104
+ ancore issues `fix` neles, incluindo stacktraces. Sem MCP, prossiga normalmente.
105
+
106
+ ### 2.b — Investigação estruturada (grilling)
107
+
108
+ Mecanismo completo em `grilling-conventions.md` (fato vs. decisão, frontier, formato de rodada,
109
+ critério de parada) — não replicado aqui. As "ambiguidades" desta fase são as levantadas em §1/§2.a
110
+ sobre objetivos do backlog ou limites arquiteturais; a apuração de fato usa `gh issue list`, grep no
111
+ código-alvo ou releitura de `docs/`/`.claude/vetor/docs/` (já cobertos por §1/§2). Se §1/§2.a não
112
+ levantar nenhuma ambiguidade crítica, pule direto para a Fase 3 sem gerar uma rodada vazia.
113
+
114
+ ### 3 — Gerar propostas
115
+
116
+ Proponha de **3 a 8 issues** no formato:
117
+
118
+ ```
119
+ ### Issue N: <título curto>
120
+
121
+ **Tipo:** feat | fix | chore | refactor | test
122
+ **Módulo:** <um dos módulos do projeto, derivado dos paths do repo ou do module-test-map>
123
+ **Seam de Teste:** <interface pública que será testada — prefira seam já existente; use o seam mais alto possível (idealmente 1 seam por issue)>
124
+ **Âncora (documental | empírica):** <referência ao trecho de documentação (§1) OU à evidência ao vivo (§2.a) — cite o comando/fonte exato se empírica>
125
+
126
+ **Descrição:**
127
+ <2–4 frases explicando o escopo simplificado (KISS)>
128
+
129
+ **Critério de Aceite & Validação (TDD target):**
130
+ - [ ] <critério de aceite primário>
131
+ - [ ] **Teste**: <como testar esta alteração de forma simples (KISS)>
132
+
133
+ **Labels sugeridos:** backlog, ai-generated, <tipo>, <módulo>
134
+ ```
135
+
136
+ Cada proposta deve estar ancorada em entidade, dívida técnica ou gap confirmado; ter critério de
137
+ aceite verificável; e ser atômica o suficiente para caber em um PR.
138
+
139
+ **Seam de Teste**: derive-o da mesma âncora já usada para o resto da proposta (§1/§2.a) — proponha
140
+ com base no `module-test-map.md` e na interface pública já conhecida do módulo, sem pesquisa dedicada
141
+ nova. A confirmação do campo acontece no checkpoint de aprovação já existente (§5) — não gera rodada
142
+ de esclarecimento nova.
143
+
144
+ ### 4 — Verificar duplicatas
145
+
146
+ Para **cada** issue proposta:
147
+ ```bash
148
+ gh issue list --search "<título ou palavras-chave>" --state all
149
+ ```
150
+
151
+ Se encontrar duplicata potencial:
152
+ ```
153
+ ⚠️ Possível duplicata: Issue #<N> — "<título existente>"
154
+ Ação: descartar | mesclar com existente | manter (diferente o suficiente) | vincular (confirmação empírica)
155
+ ```
156
+
157
+ **Vincular (confirmação empírica):** quando a issue nova não é a mesma coisa nem deve ser descartada,
158
+ mas confirma empiricamente uma hipótese já registrada em `#<N>` e evolui seu escopo — mantenha as
159
+ duas e comente na existente ao criar a nova (§6):
160
+ ```bash
161
+ gh issue comment <N> --body "Confirmado empiricamente por #<nova>: <resumo do vínculo>"
162
+ ```
163
+
164
+ Inclua duplicatas e vínculos no resumo para revisão do usuário.
165
+
166
+ ### 5 — Apresentar batch para revisão (Planning Mode)
167
+
168
+ Gere ou atualize `implementation_plan.md` (com `request_feedback: true` e `user_facing: true`):
169
+
170
+ ```markdown
171
+ # Plano de Criação de Backlog — <tema>
172
+
173
+ ## Issues Propostas
174
+
175
+ ### 1. ✅ <título> — <tipo> — <módulo>
176
+ - **Seam de Teste:** <seam>
177
+ - **Descrição:** <descrição>
178
+ - **Critério de Aceite:** <critério>
179
+ - **Âncora:** <âncora>
180
+
181
+ ### 2. ⚠️ <título> — possível duplicata de #<N>
182
+ - **Ação sugerida:** <descartar | manter | mesclar | vincular (confirmação empírica)>
183
+ - **Descrição:** <descrição>
184
+ ```
185
+
186
+ Não crie as issues imediatamente. Aguarde a aprovação explícita do usuário.
187
+
188
+ ### 6 — Criar issues
189
+
190
+ #### 6.a — Validar e mapear labels de tipo
191
+
192
+ ```bash
193
+ gh label list --limit 100 --json name
194
+ ```
195
+
196
+ Mapeie os tipos aos labels existentes no repo alvo, usando o primeiro da linha que existir:
197
+
198
+ | Tipo | Label Preferido | Fallback 1 | Fallback 2 | Se nenhum existir |
199
+ |------|------------------|-----------|-----------|----------------------|
200
+ | `feat` | `feat` | `feature` | `enhancement` | Omitir |
201
+ | `fix` | `fix` | `bug` | — | Omitir |
202
+ | `chore` | `chore` | — | — | Omitir |
203
+ | `refactor` | `refactor` | `enhancement` | — | Omitir |
204
+ | `test` | `test` | `tests` | — | Omitir |
205
+
206
+ Se nenhum existir, **omita** o label de tipo (mantendo `backlog`, `ai-generated` e `<módulo>`).
207
+
208
+ #### 6.a.1 — Validar e criar labels obrigatórios (`backlog`, `ai-generated`)
209
+
210
+ Os labels `backlog` e `ai-generated` são **mandatórios** e não têm fallback. Antes de criar as issues,
211
+ valide sua existência e crie-os automaticamente se necessário:
212
+
213
+ ```bash
214
+ gh label list --limit 100 --json name,color,description
215
+ ```
216
+
217
+ Se `backlog` ou `ai-generated` **não existirem**, crie-os:
218
+
219
+ ```bash
220
+ # Criar label 'backlog' se não existir
221
+ gh label list --search "backlog" --json name | grep -q '"backlog"' || \
222
+ gh label create "backlog" --color "0366d6" --description "Issue do backlog — priorizadas para implementação"
223
+
224
+ # Criar label 'ai-generated' se não existir
225
+ gh label list --search "ai-generated" --json name | grep -q '"ai-generated"' || \
226
+ gh label create "ai-generated" --color "a2eeef" --description "Gerado automaticamente por IA (backlog-ideator, issue-coordinator, etc.)"
227
+ ```
228
+
229
+ **Não pergunte ao usuário** — os labels são mandatórios pela própria skill e devem existir antes de
230
+ criar issues. A criação é automática e não reverte.
231
+
232
+ #### 6.b — Criar as issues
233
+
234
+ O corpo pode ser rascunhado por um runtime disponível (ver `delegate-to-runtime.md` §4.2); revise e ancore antes de criar.
235
+
236
+ ```bash
237
+ gh issue create \
238
+ --title "<título>" \
239
+ --body "$(cat <<'EOF'
240
+ ## Descrição
241
+ <descrição da issue>
242
+
243
+ ## Critério de aceite
244
+ - [ ] <critério verificável>
245
+
246
+ ## Contexto
247
+ Âncora: <referência à documentação>
248
+ Módulo: <módulo>
249
+ Seam de Teste: <seam>
250
+
251
+ ---
252
+ 🤖 Gerado por `/vetor:backlog-ideator` — [Claude Code](https://claude.ai/code)
253
+ EOF
254
+ )" \
255
+ --label "backlog,ai-generated,<módulo>,<tipo-mapeado>"
256
+ ```
257
+
258
+ O label `ai-generated` é **mandatório** para rastreabilidade. O `issue-coordinator` despacha por
259
+ `backlog`, não por `ai-generated`.
260
+
261
+ #### 6.c — Confirmação
262
+
263
+ ```
264
+ Issues criadas:
265
+ - #<N1> — <título 1> [labels: backlog, ai-generated, <módulo>, <tipo-mapeado>]
266
+ - #<N2> — <título 2> [labels: backlog, ai-generated, <módulo>, <tipo-mapeado>]
267
+ ```
268
+
269
+ Se algum label de tipo foi omitido, detalhe por quê.
270
+
271
+ ---
272
+
273
+ ## Restrições
274
+
275
+ - Nunca cria issues sem aprovação explícita do usuário
276
+ - Sempre verifica duplicatas antes de propor
277
+ - Label `ai-generated` é obrigatório em toda issue criada