@gabrihhh/jarvis 2.6.2 → 2.8.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 +3 -1
- package/bin/jarvis.js +14 -12
- package/package.json +2 -2
- package/{.claude/skills/configure-memory/SKILL.md → slash/configure-memory.md} +4 -4
- package/{.claude/skills/create-memory/SKILL.md → slash/create-memory.md} +1 -1
- package/slash/gerar-estimativa.md +289 -0
- package/slash/reset-folder.md +222 -0
- package/slash/submit-folder.md +267 -0
- package/slash/submit-folders.md +255 -0
- package/{.claude/skills/update-memory/SKILL.md → slash/update-memory.md} +1 -1
- /package/{.claude/skills → slash}/MEMORY_ARCHITECTURE.md +0 -0
- /package/{.claude/skills/setup-memory/SKILL.md → slash/setup-memory.md} +0 -0
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ Reinicie o Claude Code após o setup.
|
|
|
41
41
|
| `jarvis --line` | Saída de uma linha usada internamente pela status bar |
|
|
42
42
|
| `jarvis --help` | Lista todos os comandos |
|
|
43
43
|
|
|
44
|
-
**Slash commands** *(dentro do Claude Code)*:
|
|
44
|
+
**Slash commands** *(dentro do Claude Code — instalados por `jarvis --setup`)*:
|
|
45
45
|
|
|
46
46
|
| Comando | Descrição |
|
|
47
47
|
|---|---|
|
|
@@ -49,6 +49,8 @@ Reinicie o Claude Code após o setup.
|
|
|
49
49
|
| `/create-memory` | Indexa um repositório no grafo de memória (primeira vez) |
|
|
50
50
|
| `/update-memory` | Atualiza o grafo com as mudanças recentes do repositório |
|
|
51
51
|
| `/configure-memory` | Personaliza o schema, regras e fluxos da arquitetura de memória |
|
|
52
|
+
| `/reset-folder` | Reseta todos os repos filhos para um branch (`qa`/`main`), tratando alterações interativamente |
|
|
53
|
+
| `/folder-submit` | Cria branches, commita e faz push das alterações de todos os repos filhos |
|
|
52
54
|
|
|
53
55
|
---
|
|
54
56
|
|
package/bin/jarvis.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { run } from '../src/index.js';
|
|
3
3
|
import { renderLine } from '../src/statusline.js';
|
|
4
4
|
import { readTheme, writeTheme, isValidHex, DEFAULT_COLORS, VALID_NAMES, THEME_PATH } from '../src/theme.js';
|
|
5
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync } from 'fs';
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, readdirSync } from 'fs';
|
|
6
6
|
import { join, dirname } from 'path';
|
|
7
7
|
import { homedir } from 'os';
|
|
8
8
|
import { exec, execSync } from 'child_process';
|
|
@@ -87,11 +87,12 @@ if (args.includes('--help') || args.includes('-h')) {
|
|
|
87
87
|
jarvis --token off Disable token display
|
|
88
88
|
jarvis --help Show this help
|
|
89
89
|
|
|
90
|
-
Slash commands (inside Claude Code):
|
|
90
|
+
Slash commands (inside Claude Code — installed by --setup):
|
|
91
91
|
/setup-memory Setup Docker + Neo4j + register MCP server
|
|
92
92
|
/create-memory Index a repository into the memory graph (first time)
|
|
93
93
|
/update-memory Update an existing memory graph with recent changes
|
|
94
94
|
/configure-memory Customize the memory graph architecture (schema, rules, flows)
|
|
95
|
+
/gerar-estimativa Gera documento de estimativa técnica a partir de um monorepo
|
|
95
96
|
|
|
96
97
|
Data source: ~/.claude/projects/
|
|
97
98
|
`);
|
|
@@ -126,18 +127,19 @@ if (args.includes('--graph')) {
|
|
|
126
127
|
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
127
128
|
console.log(' ✓ Status bar configured');
|
|
128
129
|
|
|
129
|
-
// Slash commands → ~/.claude/
|
|
130
|
-
const
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
copyFileSync(join(
|
|
136
|
-
|
|
130
|
+
// Slash commands → ~/.claude/commands/<name>.md
|
|
131
|
+
const commandsDir = join(homedir(), '.claude', 'commands');
|
|
132
|
+
const srcSlash = join(__dir, '../slash');
|
|
133
|
+
mkdirSync(commandsDir, { recursive: true });
|
|
134
|
+
const slashFiles = readdirSync(srcSlash).filter(f => f.endsWith('.md') && f !== 'MEMORY_ARCHITECTURE.md');
|
|
135
|
+
for (const file of slashFiles) {
|
|
136
|
+
copyFileSync(join(srcSlash, file), join(commandsDir, file));
|
|
137
|
+
const name = file.replace('.md', '');
|
|
138
|
+
console.log(` ✓ Slash command /${name} installed`);
|
|
137
139
|
}
|
|
138
140
|
|
|
139
|
-
//
|
|
140
|
-
copyFileSync(join(
|
|
141
|
+
// Arquivo de suporte (referenciado pelos comandos)
|
|
142
|
+
copyFileSync(join(srcSlash, 'MEMORY_ARCHITECTURE.md'), join(commandsDir, 'MEMORY_ARCHITECTURE.md'));
|
|
141
143
|
console.log(' ✓ MEMORY_ARCHITECTURE.md installed');
|
|
142
144
|
|
|
143
145
|
// Trigger padrão: session
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gabrihhh/jarvis",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "Claude Code terminal dashboard + semantic memory graph via Neo4j",
|
|
5
5
|
"bin": {
|
|
6
6
|
"jarvis": "bin/jarvis.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"files": [
|
|
14
14
|
"bin/",
|
|
15
15
|
"src/",
|
|
16
|
-
"
|
|
16
|
+
"slash/"
|
|
17
17
|
],
|
|
18
18
|
"keywords": [
|
|
19
19
|
"claude",
|
|
@@ -6,7 +6,7 @@ description: Configurar a arquitetura do grafo de memória semântica — person
|
|
|
6
6
|
# /configure-memory — Configurar Arquitetura de Memória
|
|
7
7
|
|
|
8
8
|
Você vai guiar o usuário para criar ou modificar a arquitetura do grafo de memória semântica.
|
|
9
|
-
O resultado será salvo em `~/.claude/
|
|
9
|
+
O resultado será salvo em `~/.claude/commands/MEMORY_ARCHITECTURE.md`, substituindo o padrão e sendo usado pelo `/create-memory` e `/update-memory`.
|
|
10
10
|
|
|
11
11
|
## REGRA GLOBAL
|
|
12
12
|
|
|
@@ -18,7 +18,7 @@ O resultado será salvo em `~/.claude/skills/MEMORY_ARCHITECTURE.md`, substituin
|
|
|
18
18
|
|
|
19
19
|
## Passo 0 — Ler arquitetura atual
|
|
20
20
|
|
|
21
|
-
Leia o arquivo `~/.claude/
|
|
21
|
+
Leia o arquivo `~/.claude/commands/MEMORY_ARCHITECTURE.md`.
|
|
22
22
|
|
|
23
23
|
Se não existir, informe: "Nenhuma arquitetura customizada encontrada. Usarei a arquitetura padrão como base."
|
|
24
24
|
Nesse caso, use o conteúdo padrão definido internamente (schema básico com Project, Module, File, Concept, Pattern, Dependency).
|
|
@@ -161,7 +161,7 @@ Com base na conversa, gere o arquivo completo `MEMORY_ARCHITECTURE.md` seguindo
|
|
|
161
161
|
|
|
162
162
|
Mostre o arquivo **completo** gerado ao usuário.
|
|
163
163
|
|
|
164
|
-
Diga: **"Esta é a arquitetura que vou salvar em `~/.claude/
|
|
164
|
+
Diga: **"Esta é a arquitetura que vou salvar em `~/.claude/commands/MEMORY_ARCHITECTURE.md`. Revise, corrija o que quiser, e me diga 'pode salvar' quando estiver pronto."**
|
|
165
165
|
|
|
166
166
|
Se o usuário pedir ajustes:
|
|
167
167
|
- Aplique, mostre o trecho alterado
|
|
@@ -175,7 +175,7 @@ Se o usuário pedir ajustes:
|
|
|
175
175
|
Após aprovação explícita, salve o conteúdo gerado em:
|
|
176
176
|
|
|
177
177
|
```
|
|
178
|
-
~/.claude/
|
|
178
|
+
~/.claude/commands/MEMORY_ARCHITECTURE.md
|
|
179
179
|
```
|
|
180
180
|
|
|
181
181
|
Informe ao usuário:
|
|
@@ -7,7 +7,7 @@ description: Indexar repositório atual no grafo de memória semântica (Neo4j)
|
|
|
7
7
|
|
|
8
8
|
Você vai analisar o repositório atual de forma exaustiva e indexar seu entendimento no Neo4j.
|
|
9
9
|
|
|
10
|
-
**Antes de iniciar:** leia
|
|
10
|
+
**Antes de iniciar:** leia `~/.claude/commands/MEMORY_ARCHITECTURE.md` — ele define o schema do grafo, as regras de indexação e os critérios de qualidade que você deve seguir durante toda a execução desta skill.
|
|
11
11
|
|
|
12
12
|
## PRÉ-REQUISITO — Verificar ambiente
|
|
13
13
|
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Prompt — Gerador de Estimativa Técnica
|
|
2
|
+
|
|
3
|
+
> **Como usar:**
|
|
4
|
+
> 1. Abra o terminal na pasta pai que contém os repositórios do projeto
|
|
5
|
+
> 2. Execute `claude` para abrir o Claude Code
|
|
6
|
+
> 3. Cole o conteúdo deste arquivo no chat
|
|
7
|
+
> 4. Siga as fases na ordem — o Claude irá conduzir o processo
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Regras Absolutas (leia antes de qualquer coisa)
|
|
12
|
+
|
|
13
|
+
1. **Zero chutes** — toda afirmação sobre código deve ser verificada lendo o arquivo. Cite sempre `caminho/arquivo.ts:linha`. Se não leu, não afirme.
|
|
14
|
+
2. **Perguntas ilimitadas** — qualquer informação que não possa ser confirmada no código deve ser perguntada ao usuário. Não existe limite de perguntas. Agrupe-as por tema e apresente todas de uma vez.
|
|
15
|
+
3. **CLAUDE.md primeiro** — ao entrar em qualquer repositório, leia o `CLAUDE.md` antes de qualquer outro arquivo.
|
|
16
|
+
4. **Siga o fluxo, não o monorepo** — identifique apenas os repos que participam do caminho descrito pelo usuário. Se o front chama a API 1 e existe uma API 2 que não faz parte do fluxo, não leia a API 2.
|
|
17
|
+
5. **Português** — todo o documento gerado deve estar em português.
|
|
18
|
+
6. **Estimativa dupla** — estime usando a escala Fibonacci e preencha a coluna de horas, mas deixe a coluna do PO/Tech Lead sempre em branco para revisão humana.
|
|
19
|
+
7. **Saída no Desktop** — salvar o documento final em `~/Desktop/[nome-da-demanda].md`.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## FASE 1 — Contexto Inicial
|
|
24
|
+
|
|
25
|
+
Antes de qualquer pesquisa no código, solicite ao usuário:
|
|
26
|
+
|
|
27
|
+
- **Nome da demanda** — será o nome do arquivo gerado (ex: `amazon-fba-nfe.md`)
|
|
28
|
+
- **Número do PPM** — identificador da demanda (ex: `DMND0002177`)
|
|
29
|
+
- **Descrição do que precisa ser feito** — pode ser em linguagem natural, com o máximo de detalhes disponíveis
|
|
30
|
+
- **Ponto de entrada no fluxo** (opcional) — se souber por onde começa (ex: "webhook AnyMarket", "rota POST /pedidos", "evento SQS"), informe
|
|
31
|
+
|
|
32
|
+
> Não avance para a Fase 2 sem ter ao menos o **nome da demanda** e a **descrição do que precisa ser feito**.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## FASE 2 — Mapeamento do Monorepo
|
|
37
|
+
|
|
38
|
+
Execute nessa ordem:
|
|
39
|
+
|
|
40
|
+
### 2.1 — Inventariar os repositórios
|
|
41
|
+
|
|
42
|
+
Liste todas as pastas no diretório atual. Para cada pasta, verifique:
|
|
43
|
+
- Se é um repositório git (presença de `.git/`)
|
|
44
|
+
- Se tem `CLAUDE.md`
|
|
45
|
+
- Se tem `package.json` — registre o valor de `name`
|
|
46
|
+
|
|
47
|
+
Registre esse inventário internamente. Não apresente ao usuário ainda.
|
|
48
|
+
|
|
49
|
+
### 2.2 — Identificar repos candidatos
|
|
50
|
+
|
|
51
|
+
Com base na descrição do usuário, identifique quais repos provavelmente participam do fluxo. Critérios:
|
|
52
|
+
- Nome sugere relação com o que foi descrito
|
|
53
|
+
- `package.json` ou `CLAUDE.md` menciona tecnologias ou domínios relevantes
|
|
54
|
+
|
|
55
|
+
### 2.3 — Ler CLAUDE.md dos candidatos
|
|
56
|
+
|
|
57
|
+
Para cada repo candidato, leia o `CLAUDE.md` antes de qualquer outro arquivo. Use o conteúdo para:
|
|
58
|
+
- Confirmar se o repo é realmente relevante para o fluxo
|
|
59
|
+
- Entender a arquitetura e convenções do projeto
|
|
60
|
+
- Identificar os pontos de entrada (automations, controllers, routes)
|
|
61
|
+
|
|
62
|
+
### 2.4 — Traçar o fluxo e descartar o que não é relevante
|
|
63
|
+
|
|
64
|
+
A partir do ponto de entrada descrito pelo usuário (ou identificado no CLAUDE.md):
|
|
65
|
+
- Siga o caminho da requisição/evento passo a passo
|
|
66
|
+
- Identifique exatamente quais repos estão no caminho
|
|
67
|
+
- **Pare de explorar repos que não estão no fluxo**
|
|
68
|
+
|
|
69
|
+
Exemplo de raciocínio correto:
|
|
70
|
+
> "O usuário quer alterar o webhook. O webhook vive no repo `ServiceBUSMigrationJitter`. Ele chama internamente o `AnymarketOrderRepository`. Existe também um repo `FastshopFrontend` — mas o fluxo não passa por ele → não leio."
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## FASE 3 — Deep Search nos Repos Relevantes
|
|
75
|
+
|
|
76
|
+
Para cada repo no fluxo, pesquise em profundidade seguindo esta sequência:
|
|
77
|
+
|
|
78
|
+
1. **Ponto de entrada** — automation, route, trigger, controller principal
|
|
79
|
+
2. **Controller / Handler** — como recebe, valida e despacha o request
|
|
80
|
+
3. **Use Case / Service** — lógica de negócio central
|
|
81
|
+
4. **Repository / Infrastructure** — acesso a banco, filas, APIs externas
|
|
82
|
+
5. **DTOs e validações** — tipagem, decorators, transformações
|
|
83
|
+
6. **Configurações** — config files, variáveis de ambiente, staging vs production
|
|
84
|
+
7. **Testes existentes** — se houver, entenda o que já está coberto
|
|
85
|
+
|
|
86
|
+
Para cada arquivo lido, registre internamente:
|
|
87
|
+
- Caminho completo + linhas relevantes (ex: `src/http/controllers/AnymarketController.ts:16-31`)
|
|
88
|
+
- O que o trecho faz
|
|
89
|
+
- Como se conecta com o próximo passo do fluxo
|
|
90
|
+
|
|
91
|
+
> Se encontrar algo que não entende, que parece incompleto, ou que depende de informação externa (nome de fila, credencial, schema de terceiro): **não assuma** — adicione à lista de perguntas da Fase 4.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## FASE 4 — Perguntas ao Usuário
|
|
96
|
+
|
|
97
|
+
Após o mapeamento completo, compile todas as perguntas que não puderam ser respondidas pelo código. Agrupe por categoria e apresente **todas de uma vez**:
|
|
98
|
+
|
|
99
|
+
- **Negócio / Requisitos** — comportamentos esperados que o código não define
|
|
100
|
+
- **Infraestrutura** — nomes de filas, hosts, credenciais, ambientes (HML/PRD)
|
|
101
|
+
- **Contrato externo** — schemas de APIs de terceiros, autenticação, retry, sandbox
|
|
102
|
+
- **Operacional** — volume estimado, SLA, responsáveis, deduplicação no consumidor
|
|
103
|
+
|
|
104
|
+
Aguarde todas as respostas antes de gerar o documento.
|
|
105
|
+
|
|
106
|
+
> Sem limite de perguntas. Prefira perguntar a inventar.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## FASE 5 — Geração do Documento
|
|
111
|
+
|
|
112
|
+
Com contexto completo, gere o documento em `~/Desktop/[nome-da-demanda].md` usando o template abaixo.
|
|
113
|
+
|
|
114
|
+
Substitua todos os campos entre `[colchetes]` com informações reais verificadas no código ou confirmadas pelo usuário. Não deixe nenhum `[colchete]` no documento final.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Template do Documento
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
# Estimativa — PPM [NUMERO_PPM] [NOME DA DEMANDA]
|
|
122
|
+
|
|
123
|
+
> Documento de estimativa e planejamento técnico. **Rascunho para refinamento.**
|
|
124
|
+
> Pontuação Fibonacci: **PP (1–3h), P (3–6h), M (6–9h), G (9–12h), GG (18h), XG (24h)**.
|
|
125
|
+
> As horas finais serão preenchidas pelo PO/Tech Lead após refinamento.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Contexto
|
|
130
|
+
|
|
131
|
+
[Descrição do que precisa ser feito. Combine a descrição do usuário com o que foi encontrado no código. Cite repos e arquivos onde o contexto foi confirmado. Inclua o impacto no fluxo existente.]
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Estado Atual (AS IS)
|
|
136
|
+
|
|
137
|
+
**Repo:** `[nome-do-repo-principal]`
|
|
138
|
+
|
|
139
|
+
Fluxo:
|
|
140
|
+
|
|
141
|
+
1. [Passo 1 — ex: Gateway → `automations/XAutomation.ts`]
|
|
142
|
+
2. [Passo 2 — ex: `src/http/controllers/XController.ts` → `xMethod(ctx)`]
|
|
143
|
+
3. [Passo N — com caminho:linha verificado]
|
|
144
|
+
|
|
145
|
+
**Observações importantes para o desenho TO BE** (verificadas no código):
|
|
146
|
+
|
|
147
|
+
- [Observação 1 — `caminho/arquivo.ts:linha` — o que foi encontrado e por que é relevante]
|
|
148
|
+
- [Observação 2 — idem]
|
|
149
|
+
|
|
150
|
+
Infraestrutura reutilizável já existente:
|
|
151
|
+
|
|
152
|
+
- `[caminho/Classe.ts]` — [o que faz e como pode ser reaproveitada]
|
|
153
|
+
- [...]
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Estado Alvo (TO BE)
|
|
158
|
+
|
|
159
|
+
[Descrição do novo fluxo proposto. Se houver ramificação de roteamento, use diagrama ASCII:]
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
[Ponto de entrada]
|
|
163
|
+
switch [discriminador]:
|
|
164
|
+
case "[TIPO_A]" → [UseCase existente] (fluxo atual, INTOCADO)
|
|
165
|
+
case "[TIPO_B]" → [Novo UseCase]
|
|
166
|
+
├── [passo 1]
|
|
167
|
+
├── [passo 2]
|
|
168
|
+
└── [passo N]
|
|
169
|
+
default → log + 200 (não-bloqueante)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Por que [decisão técnica chave tomada]:**
|
|
173
|
+
|
|
174
|
+
- [Justificativa 1 — baseada no código existente]
|
|
175
|
+
- [Justificativa 2 — baseada nas respostas do usuário]
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Contratos e Integrações Externas
|
|
180
|
+
|
|
181
|
+
> Seção por integração externa identificada no fluxo.
|
|
182
|
+
|
|
183
|
+
### [Nome da integração — ex: API AnyMarket, Fila IBM MQ]
|
|
184
|
+
|
|
185
|
+
**Fonte:** [documentação oficial, código, resposta do usuário]
|
|
186
|
+
|
|
187
|
+
**Payload / Schema:**
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"[campo]": "[valor de exemplo]"
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Autenticação:** [como é feita, onde o token está armazenado, confirmado em `arquivo:linha`]
|
|
196
|
+
|
|
197
|
+
**Retry / Contingência:** [comportamento em falha — confirmado ou perguntado]
|
|
198
|
+
|
|
199
|
+
**Idempotência:** [estratégia adotada e por quê]
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Perguntas Remanescentes para [Nome do time/cliente]
|
|
204
|
+
|
|
205
|
+
> Apenas o que é genuinamente do lado deles: negócio, infra interna, credenciais, contratos externos.
|
|
206
|
+
|
|
207
|
+
### [Categoria 1 — ex: Fila GAN]
|
|
208
|
+
|
|
209
|
+
1. [Pergunta objetiva]
|
|
210
|
+
2. [Pergunta objetiva]
|
|
211
|
+
|
|
212
|
+
### [Categoria 2 — ex: Cadastro / Credenciais]
|
|
213
|
+
|
|
214
|
+
1. [Pergunta objetiva]
|
|
215
|
+
|
|
216
|
+
### [Categoria 3 — ex: Operacional]
|
|
217
|
+
|
|
218
|
+
1. [Pergunta objetiva]
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Estrutura — Épico, Features, Histórias e Tarefas
|
|
223
|
+
|
|
224
|
+
### ÉPICO: [Título do épico — resumo da demanda em uma linha]
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
#### FEATURE 1 — [Nome da feature]
|
|
229
|
+
|
|
230
|
+
> [Descrição curta do objetivo desta feature — uma linha]
|
|
231
|
+
|
|
232
|
+
| # | História / Tarefa | Tipo | Estimativa | Horas (Claude) | Horas (PO/TL) |
|
|
233
|
+
| --- | ----------------- | -------- | -------------- | -------------- | ------------- |
|
|
234
|
+
| 1.1 | [Descrição] | Tarefa | **PP** | 2 | |
|
|
235
|
+
| 1.2 | [Descrição] | História | **M** | 9 | |
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
#### FEATURE 2 — [Nome da feature]
|
|
240
|
+
|
|
241
|
+
> [Descrição curta]
|
|
242
|
+
|
|
243
|
+
| # | História / Tarefa | Tipo | Estimativa | Horas (Claude) | Horas (PO/TL) |
|
|
244
|
+
| --- | ----------------- | ------ | ---------- | -------------- | ------------- |
|
|
245
|
+
| 2.1 | [Descrição] | Tarefa | **P** | 4 | |
|
|
246
|
+
|
|
247
|
+
[Repetir para cada feature identificada]
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Riscos & Buffers
|
|
252
|
+
|
|
253
|
+
- **[Risco 1 — ex: Contrato externo indefinido]**: [Descrição do risco e qual tarefa pode ser impactada]. Se [condição], estimativa X pode subir de **[tamanho]** para **[tamanho maior]**.
|
|
254
|
+
- **[Risco 2 — ex: Dependência de provisionamento externo]**: [Descrição — não conta como esforço de dev mas pode bloquear cronograma].
|
|
255
|
+
- **[Risco 3 — ex: Ausência de testes no repo]**: [Impacto no escopo de testes].
|
|
256
|
+
- **Buffer recomendado**: **+[X]%** sobre o total para [motivo específico — ex: imprevistos de integração, retrabalho pós-validação].
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Arquivos Críticos a Modificar
|
|
261
|
+
|
|
262
|
+
- `[caminho/Arquivo.ts]` — [o que será alterado]
|
|
263
|
+
- `[caminho/Arquivo.ts]` — [o que será alterado]
|
|
264
|
+
- [Novos arquivos a criar:]
|
|
265
|
+
- `[caminho/NovoArquivo.ts]` — [o que fará]
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Verificação
|
|
270
|
+
|
|
271
|
+
[Preencha apenas com comandos e passos confirmados no código — scripts definidos no `package.json`, comandos de teste encontrados no repo, etc. Não inclua comandos de plataforma ou deploy que não foram verificados.]
|
|
272
|
+
|
|
273
|
+
1. Build local: `[comando confirmado no package.json]`
|
|
274
|
+
2. Testes: `[comando confirmado no package.json]`
|
|
275
|
+
3. [Passo de validação manual que pode ser inferido do fluxo]
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Checklist antes de salvar o documento
|
|
281
|
+
|
|
282
|
+
- [ ] Todos os arquivos citados foram lidos (nenhum chute)
|
|
283
|
+
- [ ] Todo `caminho/arquivo.ts:linha` foi verificado no código
|
|
284
|
+
- [ ] Nenhum `[colchete]` permaneceu no documento final
|
|
285
|
+
- [ ] Perguntas remanescentes são do lado do cliente, não dúvidas técnicas suas
|
|
286
|
+
- [ ] Estimativas usam escala Fibonacci correta: PP / P / M / G / GG / XG
|
|
287
|
+
- [ ] Coluna "Horas (PO/TL)" está em branco em todas as tabelas
|
|
288
|
+
- [ ] Documento está em português
|
|
289
|
+
- [ ] Arquivo salvo em `~/Desktop/[nome-da-demanda].md`
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reset-folder
|
|
3
|
+
description: Reseta todos os repositórios git filhos da pasta atual para um branch específico (qa/main), tratando alterações locais de forma interativa
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /reset-folder — Sincronizar Repositórios para um Branch
|
|
7
|
+
|
|
8
|
+
## Uso
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
/reset-folder qa
|
|
12
|
+
/reset-folder main
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## REGRA GLOBAL
|
|
18
|
+
|
|
19
|
+
- Nunca executar `checkout`, `pull`, `stash` ou `reset` sem que o comportamento esperado esteja claro
|
|
20
|
+
- Se travar em qualquer ponto — conflito inesperado, permissão negada, output estranho — **pare e pergunte ao usuário** antes de continuar
|
|
21
|
+
- Tratar cada repositório de forma independente: um erro em um repo não deve impedir a execução nos demais
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Passo 1 — Ler argumento
|
|
26
|
+
|
|
27
|
+
O branch alvo é o argumento passado após `/reset-folder`. Exemplos: `qa`, `main`.
|
|
28
|
+
|
|
29
|
+
Se nenhum argumento for fornecido, informe:
|
|
30
|
+
**"Qual branch deseja usar? Use: `/reset-folder qa` ou `/reset-folder main`"**
|
|
31
|
+
Interrompa aqui.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Passo 2 — Descobrir repositórios
|
|
36
|
+
|
|
37
|
+
Execute na pasta atual:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
for d in */; do
|
|
41
|
+
[ -d "${d}.git" ] && echo "${d%/}"
|
|
42
|
+
done
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Se nenhum repositório for encontrado:
|
|
46
|
+
**"Nenhum repositório git encontrado como subpasta direta de `$(pwd)`. Certifique-se de estar na pasta pai correta."**
|
|
47
|
+
Interrompa aqui.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Passo 3 — Escanear status de cada repositório
|
|
52
|
+
|
|
53
|
+
Para cada repositório encontrado, colete as informações abaixo **sem modificar nada ainda**:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Branch atual
|
|
57
|
+
git -C <repo> branch --show-current
|
|
58
|
+
|
|
59
|
+
# Alterações locais (staged + unstaged + untracked)
|
|
60
|
+
git -C <repo> status --short
|
|
61
|
+
|
|
62
|
+
# Branch alvo existe localmente ou no remote?
|
|
63
|
+
git -C <repo> show-ref --verify --quiet refs/heads/<branch> 2>/dev/null \
|
|
64
|
+
|| git -C <repo> ls-remote --heads origin <branch> 2>/dev/null | grep -q .
|
|
65
|
+
# exit 0 = existe, exit 1 = não existe
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Para repositórios com alterações locais, verifique se as mudanças já foram enviadas ao remote da branch atual:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
git -C <repo> fetch origin <branch-atual> 2>/dev/null
|
|
72
|
+
git -C <repo> diff origin/<branch-atual>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Se o diff for vazio, as alterações já estão no remote — descarte automaticamente sem perguntar:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
git -C <repo> checkout -- .
|
|
79
|
+
git -C <repo> clean -fd
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Classifique cada repositório em uma das categorias:
|
|
83
|
+
|
|
84
|
+
| Categoria | Critério |
|
|
85
|
+
|---|---|
|
|
86
|
+
| `PRONTO` | Branch existe, sem alterações locais |
|
|
87
|
+
| `AUTO-DESCARTADO` | Tinha alterações locais, mas já estavam no remote — descartado automaticamente |
|
|
88
|
+
| `COM ALTERAÇÕES` | Branch existe, tem mudanças locais que ainda não subiram ao remote |
|
|
89
|
+
| `SEM BRANCH` | Branch alvo não existe no repo |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Passo 4 — Apresentar panorama ao usuário
|
|
94
|
+
|
|
95
|
+
Antes de qualquer ação, mostre o resumo completo:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
Repositórios encontrados em <pasta atual>:
|
|
99
|
+
|
|
100
|
+
✅ PRONTOS (serão atualizados automaticamente):
|
|
101
|
+
• api-service [main → qa]
|
|
102
|
+
• frontend [main → qa]
|
|
103
|
+
|
|
104
|
+
🔄 AUTO-DESCARTADOS (alterações já estavam no remote — descartadas automaticamente):
|
|
105
|
+
• worker [qa] — 1 arquivo (já sincronizado com origin/qa)
|
|
106
|
+
|
|
107
|
+
⚠️ COM ALTERAÇÕES LOCAIS (aguardando decisão):
|
|
108
|
+
• backend [qa] — 3 arquivos modificados
|
|
109
|
+
|
|
110
|
+
✗ SEM BRANCH "qa" (serão ignorados):
|
|
111
|
+
• legacy-app — branch "qa" não encontrado
|
|
112
|
+
|
|
113
|
+
Total: 5 repositórios | 2 prontos | 1 auto-descartado | 1 com alterações | 1 sem branch
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Se não houver nenhum repositório COM ALTERAÇÕES:** prossiga automaticamente para o Passo 6, sem pedir confirmação.
|
|
117
|
+
|
|
118
|
+
**Se houver repositórios COM ALTERAÇÕES:** pergunte: **"Posso prosseguir? Vou tratar os repositórios com alterações um a um antes de continuar."** e aguarde confirmação antes de continuar.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Passo 5 — Tratar repositórios COM ALTERAÇÕES (interativo)
|
|
123
|
+
|
|
124
|
+
Para cada repositório da categoria `COM ALTERAÇÕES`, **um de cada vez**:
|
|
125
|
+
|
|
126
|
+
**5.1 — Mostrar o que mudou:**
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
git -C <repo> status --short
|
|
130
|
+
git -C <repo> diff --stat
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Apresente ao usuário:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
Repositório: backend (branch atual: qa)
|
|
137
|
+
|
|
138
|
+
Arquivos modificados:
|
|
139
|
+
M src/auth/login.js
|
|
140
|
+
M src/auth/middleware.js
|
|
141
|
+
?? src/auth/newfile.js
|
|
142
|
+
|
|
143
|
+
O que deseja fazer com essas alterações?
|
|
144
|
+
|
|
145
|
+
[1] Stash — guardar as alterações e continuar o reset (pode recuperar depois)
|
|
146
|
+
[2] Commit — fazer commit das alterações no branch atual antes de mudar
|
|
147
|
+
[3] Descartar — apagar todas as alterações locais (irreversível)
|
|
148
|
+
[4] Pular — deixar este repositório como está, sem alterar
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**5.2 — Executar conforme escolha:**
|
|
152
|
+
|
|
153
|
+
- **[1] Stash:**
|
|
154
|
+
```bash
|
|
155
|
+
git -C <repo> stash push -m "reset-folder: stash antes de mudar para <branch> — $(date +%Y-%m-%d)"
|
|
156
|
+
```
|
|
157
|
+
Confirme que o stash foi criado. Se falhar, informe e pergunte o que fazer.
|
|
158
|
+
|
|
159
|
+
- **[2] Commit:**
|
|
160
|
+
Pergunte: **"Qual mensagem de commit para as alterações em `<repo>`?"**
|
|
161
|
+
Aguarde a resposta, então:
|
|
162
|
+
```bash
|
|
163
|
+
git -C <repo> add -A
|
|
164
|
+
git -C <repo> commit -m "<mensagem do usuário>"
|
|
165
|
+
```
|
|
166
|
+
Se falhar (ex: nada para commitar, hook rejeitou), informe o erro e pergunte o que fazer.
|
|
167
|
+
|
|
168
|
+
- **[3] Descartar:**
|
|
169
|
+
Confirme com o usuário: **"Confirma que deseja DESCARTAR todas as alterações em `<repo>`? Isso é irreversível."**
|
|
170
|
+
Só prossiga após confirmação explícita:
|
|
171
|
+
```bash
|
|
172
|
+
git -C <repo> checkout -- .
|
|
173
|
+
git -C <repo> clean -fd
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
- **[4] Pular:**
|
|
177
|
+
Marque o repo como `PULADO` no resumo final. Não execute nada nele.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Passo 6 — Executar checkout + pull
|
|
182
|
+
|
|
183
|
+
Para cada repositório das categorias `PRONTO` e `COM ALTERAÇÕES` (que não foi pulado):
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Mudar para o branch alvo
|
|
187
|
+
git -C <repo> checkout <branch>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Se o checkout falhar:
|
|
191
|
+
**"Erro ao fazer checkout em `<repo>`: <mensagem de erro>. O que deseja fazer?"**
|
|
192
|
+
Aguarde instrução antes de tentar o pull.
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Atualizar com o remote
|
|
196
|
+
git -C <repo> pull origin <branch>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Se o pull gerar conflito:
|
|
200
|
+
**"Conflito de merge em `<repo>` ao fazer pull de `<branch>`. Os conflitos estão em: <arquivos>. O que deseja fazer?"**
|
|
201
|
+
Opções sugeridas: resolver manualmente, usar `--ours`, abortar o merge.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Passo 7 — Resumo Final
|
|
206
|
+
|
|
207
|
+
Ao concluir, apresente o resultado de cada repositório:
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
Resumo — reset-folder <branch>
|
|
211
|
+
|
|
212
|
+
✅ api-service → <branch> atualizado (pull: 3 commits novos)
|
|
213
|
+
✅ frontend → <branch> atualizado (pull: já estava atualizado)
|
|
214
|
+
✅ backend → <branch> atualizado (stash criado antes do pull)
|
|
215
|
+
🔄 worker → <branch> atualizado (alterações locais já estavam no remote — descartadas automaticamente)
|
|
216
|
+
⏭️ legacy-app → ignorado (branch "<branch>" não existe)
|
|
217
|
+
|
|
218
|
+
Concluído. 4 repositórios atualizados, 1 ignorado.
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Se algum repositório ficou com stash pendente, lembre o usuário:
|
|
222
|
+
**"O repositório `<repo>` tem um stash salvo com as alterações anteriores. Use `git stash pop` dentro dele quando quiser recuperá-las."**
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: submit-folder
|
|
3
|
+
description: Detecta o branch base (qa/main), pergunta se é fix ou feature, cria branch no padrão, faz commit com descrição e push — tudo no repositório atual
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /submit-folder — Submeter Alterações do Repositório Atual
|
|
7
|
+
|
|
8
|
+
## Uso
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
/submit-folder
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Sem argumentos. O comando detecta automaticamente o branch base.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## REGRA GLOBAL
|
|
19
|
+
|
|
20
|
+
- Nunca executar `git add`, `commit` ou `push` sem aprovação explícita do usuário
|
|
21
|
+
- Nunca subir arquivos de ambiente ou segredos — bloquear e avisar sempre que encontrado
|
|
22
|
+
- Se travar em qualquer ponto — erro inesperado, ambiguidade — **pare e pergunte ao usuário**
|
|
23
|
+
- Sempre mostrar o que será feito antes de executar qualquer ação destrutiva
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Passo 1 — Verificar repositório e alterações
|
|
28
|
+
|
|
29
|
+
Confirme que o diretório atual é um repositório git:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
git rev-parse --is-inside-work-tree 2>/dev/null
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Se não for um repositório git, informe:
|
|
36
|
+
**"Este diretório não é um repositório git. Navegue para um repositório antes de usar `/submit-folder`."**
|
|
37
|
+
Interrompa aqui.
|
|
38
|
+
|
|
39
|
+
Verifique se há alterações pendentes:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git status --short
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Se não houver nenhuma alteração (output vazio):
|
|
46
|
+
**"Nenhuma alteração pendente encontrada. Nada a submeter."**
|
|
47
|
+
Interrompa aqui.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Passo 2 — Detectar branch base (qa ou main)
|
|
52
|
+
|
|
53
|
+
Execute os comandos abaixo para determinar a origem das alterações:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Branch atual
|
|
57
|
+
git branch --show-current
|
|
58
|
+
|
|
59
|
+
# Verificar relação com qa e main
|
|
60
|
+
git log --oneline origin/qa..HEAD 2>/dev/null | wc -l
|
|
61
|
+
git log --oneline origin/main..HEAD 2>/dev/null | wc -l
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Lógica de detecção:**
|
|
65
|
+
|
|
66
|
+
1. Se o branch atual **é** `qa` ou `main` → esse é o `BRANCH_BASE`
|
|
67
|
+
2. Se o branch atual é outro (ex: já numa feature branch):
|
|
68
|
+
- Calcule quantos commits existem desde cada base
|
|
69
|
+
- O branch com **menos commits de distância** é o `BRANCH_BASE`
|
|
70
|
+
- Em caso de empate, use `git merge-base` para confirmar:
|
|
71
|
+
```bash
|
|
72
|
+
git merge-base HEAD origin/qa
|
|
73
|
+
git merge-base HEAD origin/main
|
|
74
|
+
# Compare qual merge-base é mais recente (mais próximo de HEAD)
|
|
75
|
+
git rev-list --count <merge-base-qa>..HEAD
|
|
76
|
+
git rev-list --count <merge-base-main>..HEAD
|
|
77
|
+
```
|
|
78
|
+
3. Se `origin/qa` não existir, use `main` como `BRANCH_BASE`
|
|
79
|
+
4. Se nenhum dos dois existir no remote, pergunte ao usuário:
|
|
80
|
+
**"Não encontrei `origin/qa` nem `origin/main`. Qual é o branch base das suas alterações?"**
|
|
81
|
+
|
|
82
|
+
Defina internamente:
|
|
83
|
+
- `BRANCH_BASE` = `qa` ou `main`
|
|
84
|
+
- `LABEL` = `QA` ou `MAIN`
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Passo 3 — Verificar arquivos sensíveis (BLOQUEIO DE SEGURANÇA)
|
|
89
|
+
|
|
90
|
+
Antes de qualquer `git add`, verifique se há arquivos sensíveis nas alterações:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
git diff --name-only
|
|
94
|
+
git diff --cached --name-only
|
|
95
|
+
git ls-files --others --exclude-standard
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Bloqueie arquivos que correspondam a qualquer um destes padrões:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
.env
|
|
102
|
+
.env.*
|
|
103
|
+
*.env
|
|
104
|
+
*.pem
|
|
105
|
+
*.key
|
|
106
|
+
*.p12
|
|
107
|
+
*.pfx
|
|
108
|
+
secrets.*
|
|
109
|
+
*secret*
|
|
110
|
+
*credentials*
|
|
111
|
+
*password*
|
|
112
|
+
*.token
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Se encontrar qualquer arquivo bloqueado, **não prossiga**. Informe:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
⛔ Arquivo sensível detectado:
|
|
119
|
+
• .env.local
|
|
120
|
+
• config/secrets.json
|
|
121
|
+
|
|
122
|
+
Corrija o .gitignore ou remova os arquivos antes de tentar novamente.
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Interrompa aqui.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Passo 4 — Analisar o que foi alterado
|
|
130
|
+
|
|
131
|
+
Execute:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
git diff
|
|
135
|
+
git diff --cached
|
|
136
|
+
git status --short
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Com base no diff, entenda:
|
|
140
|
+
- Quais arquivos foram modificados, adicionados ou removidos
|
|
141
|
+
- Qual o propósito das alterações (correção de bug, nova funcionalidade, ajuste, etc.)
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Passo 5 — Perguntar tipo (fix ou feature)
|
|
146
|
+
|
|
147
|
+
Apresente um resumo do que foi encontrado e pergunte:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
Branch base detectado: qa (ou main)
|
|
151
|
+
|
|
152
|
+
Alterações encontradas:
|
|
153
|
+
M src/auth/login.ts
|
|
154
|
+
M src/auth/middleware.ts
|
|
155
|
+
?? src/utils/tokenHelper.ts
|
|
156
|
+
|
|
157
|
+
Isso é um fix ou uma feature?
|
|
158
|
+
[1] fix — correção de bug, ajuste, hotfix
|
|
159
|
+
[2] feat — nova funcionalidade, melhoria, adição
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Aguarde resposta do usuário. Aceite variações como:
|
|
163
|
+
- "fix", "1", "correção", "bug" → `TIPO = fix`, `PREFIXO_COMMIT = fix:`
|
|
164
|
+
- "feat", "feature", "2", "funcionalidade", "melhoria" → `TIPO = feat`, `PREFIXO_COMMIT = feat:`
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Passo 6 — Propor branch, commit e descrição
|
|
169
|
+
|
|
170
|
+
Com base no diff e no tipo confirmado, proponha:
|
|
171
|
+
|
|
172
|
+
**Branch** no padrão: `<tipo>/<branch_base>/<slugCamelCase>`
|
|
173
|
+
- Slug em camelCase, curto (3–5 palavras), descritivo do que foi feito
|
|
174
|
+
- Exemplos: `correcaoValidacaoToken`, `novaTelaLogin`, `ajusteMiddlewareAuth`
|
|
175
|
+
|
|
176
|
+
**Commit** no padrão: `<prefixo_commit> [<LABEL>] <Título breve>`
|
|
177
|
+
- Título em português, conciso, sem ponto final
|
|
178
|
+
- Exemplos: `fix: [QA] Correção na validação do token`, `feat: [MAIN] Nova tela de login`
|
|
179
|
+
|
|
180
|
+
**Descrição do commit**: 3–6 linhas explicando o que foi alterado e por quê, baseado no diff.
|
|
181
|
+
|
|
182
|
+
Apresente tudo de uma vez e pergunte uma única confirmação:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
Detectei: branch base = qa | tipo = fix
|
|
186
|
+
|
|
187
|
+
Branch: fix/qa/correcaoValidacaoToken
|
|
188
|
+
Commit: fix: [QA] Correção na validação do token de autenticação
|
|
189
|
+
|
|
190
|
+
Ajustado o middleware de autenticação para rejeitar tokens
|
|
191
|
+
expirados corretamente. O comportamento anterior permitia
|
|
192
|
+
tokens inválidos em edge cases de timezone.
|
|
193
|
+
Adicionado helper `tokenHelper.ts` para centralizar validação.
|
|
194
|
+
|
|
195
|
+
Posso criar a branch, commitar e fazer push? (confirme ou ajuste o que quiser)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Aguarde resposta:
|
|
199
|
+
- **Confirmar / sim / pode:** prossiga para o Passo 7 com esses dados
|
|
200
|
+
- **Ajuste pontual (ex: "muda o nome da branch para X"):** aplique e prossiga sem nova confirmação
|
|
201
|
+
- **Cancelar:** interrompa sem modificar nada
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Passo 7 — Executar: criar branch, add, commit, push
|
|
206
|
+
|
|
207
|
+
### 7.1 — Criar a branch a partir do branch base
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
git checkout -b <nova-branch> origin/<branch-base>
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Se `origin/<branch-base>` não existir localmente:
|
|
214
|
+
```bash
|
|
215
|
+
git fetch origin <branch-base>
|
|
216
|
+
git checkout -b <nova-branch> origin/<branch-base>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Se a branch já existir, informe o usuário e pergunte se quer usar um nome diferente.
|
|
220
|
+
|
|
221
|
+
### 7.2 — Adicionar arquivos
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
git add .
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Confirme o que foi staged:
|
|
228
|
+
```bash
|
|
229
|
+
git status --short
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Se arquivos inesperados aparecerem no stage (que não estavam no resumo), avise antes de continuar.
|
|
233
|
+
|
|
234
|
+
### 7.3 — Fazer commit com mensagem e descrição
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
git commit -m "$(cat <<'EOF'
|
|
238
|
+
<prefixo>: [<LABEL>] <título>
|
|
239
|
+
|
|
240
|
+
<descrição>
|
|
241
|
+
EOF
|
|
242
|
+
)"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Se o commit falhar (hook rejeitou, nada para commitar, etc.), informe o erro e pergunte o que fazer.
|
|
246
|
+
|
|
247
|
+
### 7.4 — Fazer push
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
git push origin <nova-branch>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Se o push falhar, informe o erro e pergunte ao usuário o que fazer.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Passo 8 — Resumo Final
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
✅ submit-folder concluído
|
|
261
|
+
|
|
262
|
+
Branch base: qa
|
|
263
|
+
Tipo: fix
|
|
264
|
+
Branch: fix/qa/correcaoValidacaoToken
|
|
265
|
+
Commit: fix: [QA] Correção na validação do token de autenticação
|
|
266
|
+
Push: origin/fix/qa/correcaoValidacaoToken ✓
|
|
267
|
+
```
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: submit-folders
|
|
3
|
+
description: Cria branches, commita e faz push das alterações em todos os repositórios git filhos com mudanças locais pendentes
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /submit-folders — Submeter Alterações dos Repositórios Filhos
|
|
7
|
+
|
|
8
|
+
## Uso
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
/folder-submit qa
|
|
12
|
+
/folder-submit main
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## REGRA GLOBAL
|
|
18
|
+
|
|
19
|
+
- Nunca executar `git add`, `commit` ou `push` sem aprovação explícita do usuário
|
|
20
|
+
- Nunca subir arquivos de ambiente ou segredos — bloquear e avisar sempre que encontrado
|
|
21
|
+
- Se travar em qualquer ponto — erro inesperado, ambiguidade — **pare e pergunte ao usuário**
|
|
22
|
+
- Tratar cada repositório de forma independente: um erro em um repo não impede os demais
|
|
23
|
+
- Sempre tentar usar o MCP do GitHub quando disponível; se não estiver, usar linha de comando
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Passo 1 — Ler argumento
|
|
28
|
+
|
|
29
|
+
O alvo é o branch passado como argumento: `qa` ou `main`.
|
|
30
|
+
|
|
31
|
+
Se nenhum argumento for fornecido, informe:
|
|
32
|
+
**"Qual o branch alvo? Use: `/folder-submit qa` ou `/folder-submit main`"**
|
|
33
|
+
Interrompa aqui.
|
|
34
|
+
|
|
35
|
+
Defina internamente:
|
|
36
|
+
- `BRANCH_ALVO` = argumento recebido (ex: `qa`)
|
|
37
|
+
- `LABEL` = argumento em maiúsculas (ex: `QA`)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Passo 2 — Descobrir repositórios com alterações
|
|
42
|
+
|
|
43
|
+
Execute na pasta atual:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
for d in */; do
|
|
47
|
+
[ -d "${d}.git" ] && echo "${d%/}"
|
|
48
|
+
done
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Para cada repositório encontrado, verifique se há alterações pendentes:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git -C <repo> status --short
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Considere "com alterações" qualquer repo que retorne output não-vazio (arquivos modificados, staged, untracked).
|
|
58
|
+
|
|
59
|
+
Se nenhum repositório tiver alterações:
|
|
60
|
+
**"Nenhuma alteração encontrada nos repositórios de `$(pwd)`. Nada a submeter."**
|
|
61
|
+
Interrompa aqui.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Passo 3 — Apresentar panorama e pedir confirmação
|
|
66
|
+
|
|
67
|
+
Liste os repositórios com alterações e o que cada um tem:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Repositórios com alterações pendentes:
|
|
71
|
+
|
|
72
|
+
📦 api-service
|
|
73
|
+
M src/auth/login.js
|
|
74
|
+
M src/auth/middleware.js
|
|
75
|
+
?? src/utils/newHelper.js
|
|
76
|
+
|
|
77
|
+
📦 frontend
|
|
78
|
+
M src/components/LoginForm.tsx
|
|
79
|
+
D src/components/OldModal.tsx
|
|
80
|
+
|
|
81
|
+
Total: 2 repositórios com alterações.
|
|
82
|
+
|
|
83
|
+
Deseja criar branches e submeter as alterações de todos eles?
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Aguarde resposta:
|
|
87
|
+
- **Sim / confirmar / pode ir:** prossiga para o Passo 4
|
|
88
|
+
- **Não / cancelar / parar:** interrompa aqui sem modificar nada
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Passo 4 — Verificar arquivos de ambiente (BLOQUEIO DE SEGURANÇA)
|
|
93
|
+
|
|
94
|
+
Antes de qualquer `git add`, verifique em **cada repositório** se há arquivos sensíveis nas alterações:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Arquivos modificados e não-rastreados
|
|
98
|
+
git -C <repo> diff --name-only
|
|
99
|
+
git -C <repo> ls-files --others --exclude-standard
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Considere bloqueados arquivos que correspondam a qualquer um destes padrões:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
.env
|
|
106
|
+
.env.*
|
|
107
|
+
*.env
|
|
108
|
+
*.pem
|
|
109
|
+
*.key
|
|
110
|
+
*.p12
|
|
111
|
+
*.pfx
|
|
112
|
+
secrets.*
|
|
113
|
+
*secret*
|
|
114
|
+
*credentials*
|
|
115
|
+
*password*
|
|
116
|
+
*.token
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Se encontrar qualquer arquivo bloqueado em algum repositório, **não prossiga** nesse repo. Informe:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
⛔ Arquivo sensível detectado em <repo>:
|
|
123
|
+
• .env.local
|
|
124
|
+
• config/secrets.json
|
|
125
|
+
|
|
126
|
+
Esse repositório será ignorado por segurança.
|
|
127
|
+
Corrija o .gitignore ou remova os arquivos antes de tentar novamente.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Continue normalmente com os demais repositórios.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Passo 5 — Coletar informações para cada repositório
|
|
135
|
+
|
|
136
|
+
Para cada repositório aprovado (sem arquivos sensíveis), **um de cada vez**:
|
|
137
|
+
|
|
138
|
+
**5.1 — Analisar diff e propor tudo de uma vez:**
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
git -C <repo> diff
|
|
142
|
+
git -C <repo> diff --cached
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Com base no diff, decida autonomamente:
|
|
146
|
+
- **Tipo**: `fix` se for correção/ajuste, `feat` se for funcionalidade nova ou melhoria
|
|
147
|
+
- **Slug da branch**: camelCase curto que descreva a alteração (ex: `correcaoValidacaoToken`)
|
|
148
|
+
- **Título do commit**: breve, no padrão `<tipo>: [<LABEL>] <título>`
|
|
149
|
+
- **Descrição do commit**: o que foi feito e por quê, baseado no diff
|
|
150
|
+
|
|
151
|
+
Apresente tudo junto e pergunte **uma única vez**:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Repositório: api-service
|
|
155
|
+
|
|
156
|
+
Branch: fix/qa/correcaoValidacaoToken
|
|
157
|
+
Commit: fix: [QA] Correção na validação do token de autenticação
|
|
158
|
+
|
|
159
|
+
Ajustado o middleware de autenticação para rejeitar tokens
|
|
160
|
+
expirados corretamente. O comportamento anterior permitia
|
|
161
|
+
tokens inválidos passarem em edge cases de timezone.
|
|
162
|
+
|
|
163
|
+
Posso subir assim? (ajuste o que quiser ou confirme para prosseguir)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Aguarde resposta:
|
|
167
|
+
- **Confirmar / sim / pode:** prossiga para o Passo 6 com esses dados
|
|
168
|
+
- **Ajuste pontual:** aplique e prossiga sem nova confirmação
|
|
169
|
+
- **Cancelar:** pule este repositório e siga para o próximo
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Passo 6 — Executar: branch, add, commit, push
|
|
174
|
+
|
|
175
|
+
Para cada repositório, com as informações coletadas:
|
|
176
|
+
|
|
177
|
+
**6.1 — Criar a branch:**
|
|
178
|
+
|
|
179
|
+
Tente via MCP do GitHub se disponível:
|
|
180
|
+
```
|
|
181
|
+
create_branch(repo: "<repo>", branch: "<nova-branch>", from: "<branch-alvo>")
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Se o MCP não estiver disponível ou retornar erro, use CLI:
|
|
185
|
+
```bash
|
|
186
|
+
git -C <repo> checkout -b <nova-branch>
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**6.2 — Adicionar arquivos:**
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
git -C <repo> add .
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Confirme o que foi staged:
|
|
196
|
+
```bash
|
|
197
|
+
git -C <repo> status --short
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Se arquivos inesperados aparecerem no stage (ex: arquivos que não estavam no resumo), avise o usuário antes de continuar.
|
|
201
|
+
|
|
202
|
+
**6.3 — Fazer commit:**
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
git -C <repo> commit -m "$(cat <<'EOF'
|
|
206
|
+
<tipo>: [<LABEL>] <título>
|
|
207
|
+
|
|
208
|
+
<descrição>
|
|
209
|
+
EOF
|
|
210
|
+
)"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Se o commit falhar (hook rejeitou, nada para commitar, etc.), informe o erro e pergunte o que fazer.
|
|
214
|
+
|
|
215
|
+
**6.4 — Fazer push:**
|
|
216
|
+
|
|
217
|
+
Tente via MCP do GitHub se disponível:
|
|
218
|
+
```
|
|
219
|
+
push_branch(repo: "<repo>", branch: "<nova-branch>")
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Se o MCP não estiver disponível, use CLI:
|
|
223
|
+
```bash
|
|
224
|
+
git -C <repo> push origin <nova-branch>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Se o push falhar, informe o erro e pergunte ao usuário o que fazer.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Passo 7 — Resumo Final
|
|
232
|
+
|
|
233
|
+
Ao concluir todos os repositórios, apresente o resultado:
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
Resumo — submit-folders <branch-alvo>
|
|
237
|
+
|
|
238
|
+
✅ api-service
|
|
239
|
+
Branch: fix/qa/correcaoValidacaoToken
|
|
240
|
+
Commit: fix: [QA] Correção na validação do token de autenticação
|
|
241
|
+
Push: origin/fix/qa/correcaoValidacaoToken ✓
|
|
242
|
+
|
|
243
|
+
✅ frontend
|
|
244
|
+
Branch: feat/qa/novaTelaLogin
|
|
245
|
+
Commit: feat: [QA] Nova tela de login com validação em tempo real
|
|
246
|
+
Push: origin/feat/qa/novaTelaLogin ✓
|
|
247
|
+
|
|
248
|
+
⛔ config-service → ignorado (arquivo .env detectado)
|
|
249
|
+
|
|
250
|
+
Concluído. 2 branches criadas e publicadas, 1 ignorado por segurança.
|
|
251
|
+
|
|
252
|
+
Branches criadas:
|
|
253
|
+
• fix/qa/correcaoValidacaoToken
|
|
254
|
+
• feat/qa/novaTelaLogin
|
|
255
|
+
```
|
|
@@ -7,7 +7,7 @@ description: Atualizar o índice de memória semântica (Neo4j) de um repositór
|
|
|
7
7
|
|
|
8
8
|
Você vai identificar o que mudou no repositório desde a última indexação e aplicar as atualizações no grafo de memória.
|
|
9
9
|
|
|
10
|
-
**Antes de iniciar:** leia
|
|
10
|
+
**Antes de iniciar:** leia `~/.claude/commands/MEMORY_ARCHITECTURE.md` — ele define o schema, as regras de indexação e os critérios de qualidade que guiam esta skill.
|
|
11
11
|
|
|
12
12
|
## PRÉ-REQUISITO — Verificar ambiente
|
|
13
13
|
|
|
File without changes
|
|
File without changes
|