jarvis-ai-framework 3.2.0 → 4.0.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/agents/product/prod.discovery-interviewer.md +1 -1
- package/bin/README.md +14 -14
- package/bin/commands/docs-publish.js +50 -92
- package/bin/commands/docs-sync.js +30 -63
- package/bin/lib/cli/program.js +23 -25
- package/bin/lib/docs/fetch-file.js +29 -26
- package/bin/lib/docs/publish-file.js +89 -161
- package/bin/lib/docs/storage/build-index.js +87 -0
- package/bin/lib/docs/storage/filesystem.js +203 -0
- package/bin/lib/docs/storage/index.js +75 -0
- package/bin/lib/docs/validate-frontmatter.js +14 -4
- package/bin/lib/vcs/api.js +0 -125
- package/package.json +2 -2
- package/rules/AGENTS.md +12 -9
- package/rules/engineering/eng.integrations-rules.md +2 -1
- package/rules/product/prod-rules.md +4 -5
- package/rules-on-demand/product/prod.guided-rules.md +104 -0
- package/skills/jarvis-docs-central/README.md +57 -269
- package/skills/jarvis-docs-central/SKILL.md +126 -296
- package/skills/jarvis-init/SKILL.md +46 -7
- package/templates/ENV-template.md +20 -5
- package/templates/engineering/ARD-template.md +39 -6
- package/templates/engineering/architecture-template.md +1 -0
- package/templates/product/prod-breakdown-template.md +20 -2
- package/templates/product/prod-discovery-template.md +24 -1
- package/templates/product/prod-epic-template.md +32 -1
- package/templates/product/prod-frd-template.md +29 -2
- package/templates/product/prod-issue-template.md +36 -1
- package/templates/product/prod-prd-template.md +33 -2
- package/workflows/engineering/eng.build-tech-spec.md +2 -2
- package/workflows/engineering/eng.create-ard-from-code.md +9 -11
- package/workflows/engineering/eng.create-ard.md +15 -13
- package/workflows/engineering/eng.create-rfc.md +8 -10
- package/workflows/engineering/eng.pr.md +4 -4
- package/workflows/engineering/eng.pre-pr.md +4 -4
- package/workflows/engineering/eng.rpa.robot.md +4 -2
- package/workflows/engineering/eng.start.md +17 -16
- package/workflows/product/prod.roadmap.preview.md +4 -1
- package/workflows/product/prod.spec.ard.md +7 -3
- package/workflows/product/prod.spec.breakdown.md +7 -3
- package/workflows/product/prod.spec.clarify.md +5 -1
- package/workflows/product/prod.spec.discovery.md +7 -3
- package/workflows/product/prod.spec.epic.md +13 -11
- package/workflows/product/prod.spec.frd.md +15 -13
- package/workflows/product/prod.spec.issue.md +5 -1
- package/workflows/product/prod.spec.md +3 -1
- package/workflows/product/prod.spec.prd.md +15 -13
- package/workflows/warm-up.md +3 -3
- package/bin/lib/docs/redis-cache.js +0 -49
- package/bin/lib/vcs/fetch-raw.js +0 -42
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jarvis-docs-central
|
|
3
|
-
description: Integração com
|
|
3
|
+
description: Integração com o Central docs, a documentação aprovada (PRD, FRD, épicos, histórias, ARD, RFC) guardada por um adaptador de armazenamento (hoje uma pasta do disco, com git opcional). Busca, publica e indexa pelo CLI jarvis docs.
|
|
4
4
|
argument-hint: "[contexto da tarefa]"
|
|
5
5
|
allowed-tools: Bash Read Write
|
|
6
6
|
disable-model-invocation: false
|
|
7
7
|
license: AGPL-3.0
|
|
8
8
|
metadata:
|
|
9
9
|
author: jarvis-team
|
|
10
|
-
version: "
|
|
10
|
+
version: "4.0"
|
|
11
11
|
area: global
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -15,47 +15,50 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
## Objetivo
|
|
17
17
|
|
|
18
|
-
Integrar
|
|
19
|
-
- Buscar docs relevantes automaticamente durante workflows
|
|
20
|
-
- Publicar docs aprovados via MR com git flow seguro
|
|
21
|
-
- Sincronização automática em /warm-up
|
|
18
|
+
Integrar os comandos do framework com o **Central docs**: o lugar onde fica a documentação aprovada de todos os produtos do squad, com um índice (`{SQUAD}/index.md`) que os outros comandos consultam.
|
|
22
19
|
|
|
23
|
-
|
|
20
|
+
- Buscar documentos relevantes durante os workflows (Modo 1)
|
|
21
|
+
- Publicar documentos aprovados (Modo 2)
|
|
22
|
+
- Reparar o índice (Modo 3)
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
## Adaptadores de armazenamento
|
|
25
|
+
|
|
26
|
+
O Central docs não depende de um serviço: `CENTRAL_DOCS_STORAGE` escolhe o adaptador e `CENTRAL_DOCS_LOCATION` diz onde ele guarda. Os comandos são sempre os mesmos (`jarvis docs fetch | sync | publish`), venha o conteúdo de onde vier.
|
|
27
|
+
|
|
28
|
+
| `CENTRAL_DOCS_STORAGE` | `CENTRAL_DOCS_LOCATION` | Situação |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| *(vazio)* | — | Desligado: os comandos pulam em silêncio |
|
|
31
|
+
| `filesystem` | Pasta (relativa à pasta do workspace ou absoluta) | Disponível |
|
|
32
|
+
| `s3`, `gdrive` | — | Ainda não suportados (o comando para com a mensagem de "não suportado") |
|
|
33
|
+
|
|
34
|
+
**Camada git do `filesystem`:** se a pasta tiver `.git` (clone de um repositório de documentação), o adaptador:
|
|
35
|
+
- faz `git pull --ff-only` em `CENTRAL_DOCS_REF` antes de ler (se falhar, avisa e lê a cópia local);
|
|
36
|
+
- ao publicar: branch `docs/{caminho}` → cópia → índice → commit → push → Pull/Merge Request para `CENTRAL_DOCS_TARGET_BRANCH`, com `CENTRAL_DOCS_REVIEWERS` na descrição.
|
|
37
|
+
|
|
38
|
+
Sem `.git`, grava direto na pasta.
|
|
39
|
+
|
|
40
|
+
**Onde fica a pasta** (o `/jarvis-init` sugere): no modo workspace, `./central-docs` (no `.gitignore` do workspace); no projeto único, `docs/jarvis/central-docs` (com `docs/jarvis/*` no `.gitignore`). Nunca no versionamento de um repositório de código.
|
|
28
41
|
|
|
29
42
|
## Pré-condição
|
|
30
43
|
|
|
31
44
|
Ler do `$IDE/ENV.md`:
|
|
32
|
-
- `
|
|
33
|
-
- `CENTRAL_DOCS_REF`
|
|
34
|
-
- `
|
|
35
|
-
- `SQUAD` — squad do usuário (formato: ALL-CAPS-COM-HIFEN)
|
|
36
|
-
- `WORKSPACE` — nome do workspace em kebab-case
|
|
37
|
-
- `AREA` — define quais tipos de doc buscar
|
|
38
|
-
|
|
39
|
-
**Token VCS** (resolvido pelo adapter `bin/lib/utils/npmrc-parser.js` → `getVcsToken`):
|
|
40
|
-
- GitLab: `.npmrc` `:_authToken=` ou `GITLAB_TOKEN`
|
|
41
|
-
- GitHub: `gh auth token`, `GITHUB_TOKEN` ou `.npmrc` npm.pkg.github.com
|
|
42
|
-
- Bitbucket: `BITBUCKET_TOKEN`
|
|
45
|
+
- `CENTRAL_DOCS_STORAGE` e `CENTRAL_DOCS_LOCATION` (vazio: encerrar em silêncio)
|
|
46
|
+
- `CENTRAL_DOCS_REF`, `CENTRAL_DOCS_TARGET_BRANCH`, `CENTRAL_DOCS_REVIEWERS` (só com `.git`)
|
|
47
|
+
- `SQUAD` (ALL-CAPS-COM-HIFEN), `WORKSPACE` (vira a pasta do produto) e `AREA` (que tipos buscar)
|
|
43
48
|
|
|
44
|
-
|
|
49
|
+
`ENV.md` da versão anterior (com a variável do repositório remoto e sem `CENTRAL_DOCS_STORAGE`): os comandos pedem o Upgrade do `/jarvis-init`, que faz a migração.
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
Com `.git`, o PR usa o token do vendor pelo adaptador de VCS (GitLab `.npmrc`; GitHub `gh auth`/`GITHUB_TOKEN`; Bitbucket `BITBUCKET_TOKEN`). ❌ **Nunca** colar token no chat.
|
|
47
52
|
|
|
48
53
|
---
|
|
49
54
|
|
|
50
|
-
##
|
|
51
|
-
|
|
52
|
-
### Estrutura de pastas
|
|
55
|
+
## Estrutura do Central docs
|
|
53
56
|
|
|
54
57
|
```
|
|
55
58
|
{SQUAD}/
|
|
56
|
-
├── index.md # GERADO — não editar à mão
|
|
59
|
+
├── index.md # GERADO a cada publicação — não editar à mão
|
|
57
60
|
├── product/
|
|
58
|
-
│ └── {produto
|
|
61
|
+
│ └── {produto}/ # WORKSPACE do ENV.md (ou --produto)
|
|
59
62
|
│ ├── prd-{id}-{nome}.md
|
|
60
63
|
│ ├── frd-{id}-{nome}.md
|
|
61
64
|
│ ├── feat-{id}-{nome}.md
|
|
@@ -63,226 +66,118 @@ Se `CENTRAL_DOCS_REPO` não estiver definido, encerrar silenciosamente sem erro.
|
|
|
63
66
|
│ ├── story-{id}-{nome}.md
|
|
64
67
|
│ └── task-{id}-{nome}.md
|
|
65
68
|
├── engineering/
|
|
66
|
-
│ └── {produto
|
|
69
|
+
│ └── {produto}/
|
|
67
70
|
│ ├── ard-{id}-{nome}.md
|
|
68
|
-
│
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
│ ├── rfc-{id}-{nome}.md
|
|
72
|
+
│ ├── swagger-{nome}.{md|yaml|json}
|
|
73
|
+
│ └── qa-report-{nome}.md
|
|
74
|
+
└── context/ # opcional — formato livre
|
|
72
75
|
```
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
- **Nome do arquivo:** o do arquivo local, que já segue `{tipo}-{id}-{nome}.md` (`prod-rules.md`). Só quando o nome foge do padrão, `--feature {slug}` gera `{tipo}-{slug}.{ext}`.
|
|
78
|
+
- **`{produto}`:** `WORKSPACE` (a pasta que contém o `$IDE/`), ou `--produto`.
|
|
76
79
|
|
|
77
|
-
###
|
|
80
|
+
### Frontmatter obrigatório (validado no `publish`)
|
|
78
81
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
| Tipo | Campos |
|
|
83
|
+
|------|--------|
|
|
84
|
+
| `prd` | `id`, `name`, `version`, `status` |
|
|
85
|
+
| `frd`, `feat`, `epic` | `id`, `name`, `version`, `status`, `related_prd` |
|
|
86
|
+
| `story` | `id`, `name`, `status`, `related_prd` |
|
|
87
|
+
| `task` | `id`, `name`, `status` |
|
|
88
|
+
| `ard` | `id`, `name`, `version`, `status` |
|
|
89
|
+
| `rfc` | `Status`, `Criado em`, `Proponente` |
|
|
90
|
+
| `qa-report` | `period`, `squad`, `version` |
|
|
82
91
|
|
|
83
|
-
|
|
92
|
+
**Status reconhecidos:**
|
|
93
|
+
- produto: `icebox`, `in_review`, `backlog`, `in_progress`, `in_production`, `cancelled`, `deprecated`;
|
|
94
|
+
- ARD: `proposed`, `in_progress`, `in_review`, `approved`;
|
|
95
|
+
- RFC: `Draft`, `In Review`, `Ready for Decision`, `Accepted`, `Rejected`, `Superseded`.
|
|
84
96
|
|
|
85
|
-
|
|
86
|
-
- Pasta de produto: `kebab-case`, um produto = uma pasta
|
|
97
|
+
Status fora da lista só gera aviso.
|
|
87
98
|
|
|
88
|
-
|
|
99
|
+
**Campos `related_*`:** só o **basename** do arquivo (sem path nem `./`).
|
|
89
100
|
|
|
90
|
-
|
|
91
|
-
|-------|-----|----------------|------|------|---------|
|
|
92
|
-
| `id` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
93
|
-
| `name` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
94
|
-
| `version` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
95
|
-
| `status` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
96
|
-
| `created` / `updated` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
97
|
-
| `created_by` / `last_editor` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
98
|
-
| `related_prd` | – | ✓ | ✓ | – | – |
|
|
99
|
-
| `related_epic` | – | – | – | ✓ | – |
|
|
101
|
+
### Índice
|
|
100
102
|
|
|
101
|
-
**
|
|
103
|
+
O `{SQUAD}/index.md` é **regenerado** a partir do frontmatter de todos os documentos a cada publicação (nunca editado, para duas publicações não apagarem a entrada uma da outra). Com `.git` e um `scripts/build-index.sh` no repositório de documentação, o adaptador usa o script dele (o CI do repositório confere o índice com ele).
|
|
102
104
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
# ✅ Certo
|
|
106
|
-
related_prd: prd-001-minha-feature.md
|
|
105
|
+
```markdown
|
|
106
|
+
# CORE
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
related_prd: ./prd-001-minha-feature.md
|
|
110
|
-
related_prd: ../minha-feature/prd-001-minha-feature.md
|
|
111
|
-
```
|
|
108
|
+
## product
|
|
112
109
|
|
|
113
|
-
###
|
|
110
|
+
### loja
|
|
111
|
+
- [prd-001-checkout.md](product/loja/prd-001-checkout.md) | v1.0.0 | backlog | Checkout
|
|
114
112
|
|
|
115
|
-
|
|
113
|
+
## engineering
|
|
116
114
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
bash scripts/build-index.sh
|
|
115
|
+
### loja
|
|
116
|
+
- [ard-001-pagamentos.md](engineering/loja/ard-001-pagamentos.md) | v1.0.0 | approved | Pagamentos
|
|
120
117
|
```
|
|
121
118
|
|
|
122
|
-
O script detecta squads dinamicamente (pastas raiz ALL-CAPS) e gera um único `index.md` por squad lendo o frontmatter de todos os specs em `product/` e `engineering/`, e listando o conteúdo de `context/`.
|
|
123
|
-
|
|
124
|
-
O CI (`.gitlab-ci.yml`) **falha** se o `index.md` commitado divergir do que o script geraria.
|
|
125
|
-
|
|
126
119
|
---
|
|
127
120
|
|
|
128
121
|
## Quando Usar
|
|
129
122
|
|
|
130
|
-
- `/warm-up
|
|
131
|
-
- `/eng.start
|
|
132
|
-
- `/
|
|
133
|
-
- `/eng.pre-pr
|
|
134
|
-
-
|
|
135
|
-
- Reparo de índices inconsistentes ou ausentes (Modo 3)
|
|
123
|
+
- `/warm-up`: carregar o contexto do produto (Modo 1)
|
|
124
|
+
- `/eng.start`, `/eng.create-ard`, `/eng.create-rfc`, `/eng.build-tech-spec`: buscar PRD/ARD/RFC relacionados (Modo 1)
|
|
125
|
+
- `/prod.spec.*`: buscar specs existentes e publicar a aprovada (Modos 1 e 2)
|
|
126
|
+
- `/eng.pre-pr`: detectar ARD novo ou desatualizado e oferecer a publicação (Modo 2)
|
|
127
|
+
- Índice ausente ou divergente (Modo 3)
|
|
136
128
|
|
|
137
129
|
---
|
|
138
130
|
|
|
139
131
|
## Fluxo de Trabalho
|
|
140
132
|
|
|
141
|
-
### Modo 1: Buscar
|
|
142
|
-
|
|
143
|
-
**Passo 1 — Buscar índice do squad**
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
jarvis docs sync
|
|
147
|
-
|
|
148
|
-
# Internamente chama fetchFile() de bin/lib/docs/fetch-file.js, equivalente a:
|
|
149
|
-
jarvis docs fetch "${SQUAD}/index.md" "${CENTRAL_DOCS_REF}"
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**Passo 1.b — Fallback: navegar árvore (quando index.md não existe)**
|
|
153
|
-
|
|
154
|
-
Se `jarvis docs sync` retornar exit code 2 (arquivo não encontrado):
|
|
155
|
-
|
|
156
|
-
```bash
|
|
157
|
-
# Fallback: clonar o CENTRAL_DOCS_REPO e listar arquivos locais
|
|
158
|
-
# (funciona igual em GitLab, GitHub e Bitbucket)
|
|
159
|
-
git ls-tree -r --name-only "${CENTRAL_DOCS_REF}" -- "${SQUAD}/product/${WORKSPACE}" "${SQUAD}/engineering/${WORKSPACE}"
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
**Identificar docs por caminho (naming padrão):**
|
|
163
|
-
- `engineering/{produto}/ard-*.md` → ARD
|
|
164
|
-
- `engineering/{produto}/rfc-*.md` → RFC
|
|
165
|
-
- `product/{produto}/prd-*.md` → PRD
|
|
166
|
-
- `product/{produto}/frd-*.md` → FRD
|
|
167
|
-
- `product/{produto}/feat-*.md` → FEAT
|
|
168
|
-
- `product/{produto}/story-*.md` → STORY
|
|
169
|
-
- `context/` → artefatos de contexto (pesquisas, dados, assets)
|
|
170
|
-
|
|
171
|
-
**Passo 2 — Identificar docs relevantes**
|
|
172
|
-
|
|
173
|
-
Com base no contexto da tarefa (`TASK_MANAGER_KEY`, tags, descrição):
|
|
174
|
-
- Buscar no `index.md` por `TASK_MANAGER_KEY` matching
|
|
175
|
-
- Se não encontrar, buscar por tags semânticas
|
|
176
|
-
- Filtrar por AREA:
|
|
177
|
-
- `PRODUCT` → PRDs e FRDs
|
|
178
|
-
- `ENGINEERING` → PRD (contexto) + ARDs + RFCs
|
|
179
|
-
|
|
180
|
-
**Passo 3 — Buscar arquivos identificados**
|
|
133
|
+
### Modo 1: Buscar docs
|
|
181
134
|
|
|
182
135
|
```bash
|
|
183
|
-
jarvis docs
|
|
184
|
-
jarvis docs fetch
|
|
136
|
+
jarvis docs sync # lê {SQUAD}/index.md e resume o que há
|
|
137
|
+
jarvis docs fetch {SQUAD}/index.md # conteúdo do índice
|
|
138
|
+
jarvis docs fetch {SQUAD}/product/{produto}/prd-001-checkout.md
|
|
185
139
|
```
|
|
186
140
|
|
|
187
|
-
|
|
141
|
+
- Com `.git`, o primeiro acesso faz `pull`.
|
|
142
|
+
- `docs fetch` sai com código **2** quando o arquivo não existe.
|
|
188
143
|
|
|
189
|
-
|
|
190
|
-
|
|
144
|
+
1. Buscar o índice do squad.
|
|
145
|
+
2. Identificar os documentos pelo `TASK_MANAGER_KEY`, pelo nome ou pelo produto; filtrar por `AREA`:
|
|
146
|
+
- `PRODUCT` → PRD, FRD, épicos e histórias;
|
|
147
|
+
- `ENGINEERING` → PRD (contexto), ARD e RFC.
|
|
148
|
+
3. Buscar cada arquivo com `jarvis docs fetch`.
|
|
149
|
+
4. Devolver o conteúdo carregado, com um resumo (squad, produto, documentos e versões).
|
|
191
150
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
### PRD-001: Minha Feature (v1.2.0)
|
|
195
|
-
[conteúdo do PRD]
|
|
196
|
-
|
|
197
|
-
### ARD-001: Arquitetura da Minha Feature (v1.5)
|
|
198
|
-
[conteúdo do ARD]
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
### Modo 2: Publicar Doc
|
|
204
|
-
|
|
205
|
-
**Uso:**
|
|
151
|
+
### Modo 2: Publicar doc
|
|
206
152
|
|
|
207
153
|
```bash
|
|
208
|
-
jarvis docs publish
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
--produto meu-produto \
|
|
212
|
-
--tipo ard
|
|
154
|
+
jarvis docs publish --file ./docs/product/prd-001-checkout.md --tipo prd
|
|
155
|
+
jarvis docs publish --file ./docs/engineering/ARD/ard-001-pagamentos.md --tipo ard --produto loja
|
|
156
|
+
jarvis docs publish --file ./openapi.yaml --tipo swagger --feature api-wallet
|
|
213
157
|
```
|
|
214
158
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
1. Validar frontmatter YAML (campos obrigatórios conforme tabela acima)
|
|
218
|
-
2. Validar naming do arquivo (`{tipo}-{id}-{nome-em-kebab}.md`)
|
|
219
|
-
3. Validar que `related_*` usam apenas basename
|
|
220
|
-
4. Determinar destino: `{SQUAD}/engineering/{produto}/` ou `{SQUAD}/product/{produto}/`
|
|
221
|
-
5. Criar branch `docs/{SQUAD}/{area}/{produto}/{tipo}-{id}-{nome}`
|
|
222
|
-
6. Commit via API do vendor (GitLab / GitHub / Bitbucket) com o doc
|
|
223
|
-
7. Rodar `bash scripts/build-index.sh` localmente no clone e incluir o `{SQUAD}/index.md` atualizado no mesmo commit atômico
|
|
224
|
-
8. Criar MR → main
|
|
225
|
-
9. Retornar URL do MR
|
|
226
|
-
|
|
227
|
-
**Commit atômico (doc + index):**
|
|
228
|
-
|
|
229
|
-
```
|
|
230
|
-
actions:
|
|
231
|
-
- { action: "create_or_update", file_path: "{SQUAD}/engineering/{produto}/ard-001-feature.md", content: "..." }
|
|
232
|
-
- { action: "create_or_update", file_path: "{SQUAD}/index.md", content: "..." }
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
> Usar `POST /repository/commits` com array `actions`.
|
|
236
|
-
> O `index.md` é o output de `build-index.sh` — nunca construído manualmente.
|
|
237
|
-
|
|
238
|
-
**Output:**
|
|
239
|
-
|
|
240
|
-
```
|
|
241
|
-
✅ MR criado: docs/MEU-SQUAD/engineering/meu-produto/ard-001-minha-feature → main
|
|
242
|
-
URL: {url do MR/PR retornada pelo adapter}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
### Modo 3: Reparar Índices
|
|
248
|
-
|
|
249
|
-
> Detecta `{SQUAD}/index.md` ausente ou divergente e abre MR de reparo.
|
|
250
|
-
|
|
251
|
-
**Quando ativar:**
|
|
252
|
-
|
|
253
|
-
- Durante Modo 1, se o fallback de árvore encontrar docs que não aparecem no `index.md`
|
|
254
|
-
- Durante warm-up, se `index.md` não existir
|
|
255
|
-
- Quando o usuário pedir explicitamente
|
|
159
|
+
Tipos: `prd, frd, feat, epic, story, task` (em `product/`) e `ard, rfc, swagger, qa-report` (em `engineering/`).
|
|
256
160
|
|
|
257
161
|
**Fluxo:**
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
⚠️ MEU-SQUAD/index.md divergente — 3 docs ausentes no índice
|
|
278
|
-
|
|
279
|
-
📋 Abrindo MR de reparo...
|
|
280
|
-
Branch: repair/index-MEU-SQUAD-20260510
|
|
281
|
-
Arquivo: MEU-SQUAD/index.md
|
|
282
|
-
|
|
283
|
-
✅ MR aberto:
|
|
284
|
-
URL: {CENTRAL_DOCS_REPO}/-/merge_requests/44
|
|
285
|
-
```
|
|
162
|
+
1. Validar o frontmatter (tabela acima).
|
|
163
|
+
2. Calcular o destino `{SQUAD}/{área}/{produto}/{nome}`.
|
|
164
|
+
3. Sem `.git`: copiar o arquivo e regenerar `{SQUAD}/index.md`.
|
|
165
|
+
4. Com `.git`:
|
|
166
|
+
1. `checkout` + `pull` de `CENTRAL_DOCS_TARGET_BRANCH`;
|
|
167
|
+
2. branch `docs/{SQUAD}/{área}/{produto}/{nome}`;
|
|
168
|
+
3. cópia + índice;
|
|
169
|
+
4. commit e push;
|
|
170
|
+
5. PR para `CENTRAL_DOCS_TARGET_BRANCH`;
|
|
171
|
+
6. voltar para a branch base.
|
|
172
|
+
5. Mostrar o destino, o índice e a URL do PR (com `.git`).
|
|
173
|
+
|
|
174
|
+
Antes de publicar, **confirmar com o usuário**. Sem `.git` não há PR: a confirmação é a única revisão.
|
|
175
|
+
|
|
176
|
+
### Modo 3: Reparar o índice
|
|
177
|
+
|
|
178
|
+
Quando o índice não existe ou não lista todos os documentos:
|
|
179
|
+
- **Sem `.git`:** publicar de novo qualquer documento do squad regenera o índice. Na prática, o próximo `jarvis docs publish` já corrige.
|
|
180
|
+
- **Com `.git`:** no clone, rodar `bash scripts/build-index.sh` (se existir) e abrir um PR `repair/index-{SQUAD}-{data}` com o índice atualizado.
|
|
286
181
|
|
|
287
182
|
### Skills invocados durante a execução do skill
|
|
288
183
|
|
|
@@ -296,97 +191,32 @@ URL: {url do MR/PR retornada pelo adapter}
|
|
|
296
191
|
|
|
297
192
|
### Nunca
|
|
298
193
|
|
|
299
|
-
- Publicar
|
|
300
|
-
-
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
- Usar path em campos `related_*`
|
|
305
|
-
-
|
|
306
|
-
- Criar subpastas `engineering/index.md` ou `product/index.md` (não existem neste repo)
|
|
194
|
+
- Publicar documento sem validar o frontmatter
|
|
195
|
+
- Editar `{SQUAD}/index.md` à mão
|
|
196
|
+
- Push direto para a branch base quando a pasta tem `.git` (sempre por PR)
|
|
197
|
+
- Buscar docs com `CENTRAL_DOCS_STORAGE` vazio (encerrar em silêncio)
|
|
198
|
+
- Inventar metadados (`version`, `status`, `id`)
|
|
199
|
+
- Usar path em campos `related_*`
|
|
200
|
+
- Colocar o Central docs no versionamento de um repositório de código
|
|
307
201
|
|
|
308
202
|
### Sempre
|
|
309
203
|
|
|
310
|
-
- Ler
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
- Extrair token do `.npmrc` automaticamente
|
|
315
|
-
- Validar naming do arquivo antes de publicar
|
|
316
|
-
- Incluir `{SQUAD}/index.md` (gerado por `build-index.sh`) em todo commit de publicação
|
|
204
|
+
- Ler e publicar só pelo CLI (`jarvis docs fetch | sync | publish`), nunca lendo a pasta por fora do adaptador
|
|
205
|
+
- Se o Central docs tiver `AGENTS.md` na raiz, lê-lo antes de operar
|
|
206
|
+
- Confirmar com o usuário antes de publicar
|
|
207
|
+
- Usar `SQUAD` em ALL-CAPS-COM-HIFEN
|
|
317
208
|
|
|
318
209
|
---
|
|
319
210
|
|
|
320
211
|
## Troubleshooting
|
|
321
212
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
**Causa:** Squad ainda sem docs publicados. Índice só existe após o primeiro `publish`.
|
|
335
|
-
|
|
336
|
-
**Solução:** Publicar ao menos um doc via `jarvis docs publish`. O MR já incluirá o `index.md`.
|
|
337
|
-
|
|
338
|
-
### Erro: Frontmatter inválido
|
|
339
|
-
|
|
340
|
-
```
|
|
341
|
-
❌ Campos obrigatórios ausentes: name, version, created_by
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
**Solução:** Adicionar campos conforme tabela de frontmatter obrigatório acima.
|
|
345
|
-
|
|
346
|
-
### Erro: Naming inválido
|
|
347
|
-
|
|
348
|
-
```
|
|
349
|
-
❌ Nome do arquivo não segue o padrão: {tipo}-{id}-{nome-em-kebab}.md
|
|
350
|
-
Recebido: ARD-001-MinhaFeature.md
|
|
351
|
-
Esperado: ard-001-minha-feature.md
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
**Solução:** Renomear o arquivo seguindo o padrão lowercase com hífens.
|
|
355
|
-
|
|
356
|
-
### CI falha com "Índices stale"
|
|
357
|
-
|
|
358
|
-
```
|
|
359
|
-
❌ Índices stale. Rode 'bash scripts/build-index.sh' localmente,
|
|
360
|
-
commita o resultado e empurre de novo.
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
**Solução:** O `{SQUAD}/index.md` no commit diverge do que o script geraria. Sempre incluir o output de `build-index.sh` no mesmo commit do doc.
|
|
364
|
-
|
|
365
|
-
---
|
|
366
|
-
|
|
367
|
-
## Integração com Workflows
|
|
368
|
-
|
|
369
|
-
### /warm-up
|
|
370
|
-
|
|
371
|
-
```markdown
|
|
372
|
-
Se CENTRAL_DOCS_REPO configurado:
|
|
373
|
-
1. jarvis docs sync
|
|
374
|
-
2. Exibir resumo de docs disponíveis do squad/produto
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
### /eng.start
|
|
378
|
-
|
|
379
|
-
```markdown
|
|
380
|
-
Se CENTRAL_DOCS_REPO definido:
|
|
381
|
-
- Buscar docs relacionados ao `TASK_MANAGER_KEY` no index.md do squad
|
|
382
|
-
- Carregar PRD + ARDs relevantes antes de criar architecture.md
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
### /eng.pre-pr
|
|
386
|
-
|
|
387
|
-
```markdown
|
|
388
|
-
1. Detectar mudanças arquiteturais no diff
|
|
389
|
-
2. Verificar se ARD local existe e está atualizado vs central-docs
|
|
390
|
-
3. Se desatualizado ou novo: perguntar "Publicar no central-docs?"
|
|
391
|
-
4. Se sim: jarvis docs publish
|
|
392
|
-
```
|
|
213
|
+
| Mensagem | Causa | O que fazer |
|
|
214
|
+
|---|---|---|
|
|
215
|
+
| `Central docs desligado (CENTRAL_DOCS_STORAGE vazio)` | Não configurado | `/jarvis-init` → Central docs |
|
|
216
|
+
| `… não é mais usado. Rode o /jarvis-init e escolha Upgrade (C)` | `ENV.md` da versão anterior | `/jarvis-init` → Upgrade (C) |
|
|
217
|
+
| `Armazenamento "s3" ainda não suportado` | Valor de `STORAGE` sem adaptador | Use `filesystem` |
|
|
218
|
+
| `Pasta do Central docs não encontrada` | `LOCATION` errado ou pasta não criada | Criar a pasta ou ajustar `LOCATION` |
|
|
219
|
+
| `Arquivo não encontrado no Central docs: {SQUAD}/index.md` | Squad sem publicação ainda | Publicar o primeiro documento |
|
|
220
|
+
| `Campos obrigatórios ausentes` | Frontmatter incompleto | Completar conforme a tabela |
|
|
221
|
+
| `O arquivo "…" não segue o padrão` | Nome fora de `{tipo}-{id}-{nome}` | Renomear ou usar `--feature` |
|
|
222
|
+
| `git pull`/`push` falhou (com `.git`) | Rede, permissão ou pasta suja | `git status` na pasta; o commit local fica para repetir |
|
|
@@ -195,12 +195,12 @@ Identificar qual IDE o usuário está utilizando:
|
|
|
195
195
|
3. Ler `HUB` do ENV.md existente
|
|
196
196
|
4. Se `HUB≠DATA`: excluir do diff todas as chaves `DATA_*` — não propor adicioná-las
|
|
197
197
|
5. Calcular diff: chaves no template que **não existem** no ENV.md atual (respeitando exclusão de DATA_* para não-DATA)
|
|
198
|
-
|
|
198
|
+
6. Se não houver diff:
|
|
199
199
|
```
|
|
200
200
|
✅ ENV.md já está atualizado. Nenhuma variável nova encontrada.
|
|
201
201
|
```
|
|
202
202
|
Oferecer o **passo 9 (adicionar as stacks)**, que a pessoa pode pular, e então encerrar.
|
|
203
|
-
|
|
203
|
+
7. Se houver diff, exibir prévia:
|
|
204
204
|
```
|
|
205
205
|
🔍 Variáveis novas encontradas no template:
|
|
206
206
|
+ NOVA_VAR_1=
|
|
@@ -208,18 +208,20 @@ Identificar qual IDE o usuário está utilizando:
|
|
|
208
208
|
|
|
209
209
|
Serão adicionadas ao final do ENV.md sem alterar os valores existentes.
|
|
210
210
|
```
|
|
211
|
-
|
|
211
|
+
8. **Exceção — Central docs antigo:** se o `ENV.md` tiver `CENTRAL_DOCS_REPO` preenchido e não tiver `CENTRAL_DOCS_STORAGE`, propor a migração (só com confirmação): `CENTRAL_DOCS_STORAGE=filesystem`, `CENTRAL_DOCS_LOCATION` com o padrão do modo de trabalho (Passo 4, "Central docs") e `git clone {CENTRAL_DOCS_REPO} {LOCATION}`. Depois, comentar a linha antiga (`# CENTRAL_DOCS_REPO=… (migrado em YYYY-MM-DD)`) e `CENTRAL_DOCS_CACHE_TTL`. Sem confirmação, não mexe e avisa que os comandos de docs vão pedir o Upgrade.
|
|
212
|
+
9. **Exceção — `PROD_MODE`:** se `PROD_MODE` estiver entre as chaves novas, faça a mesma pergunta do Passo 3 (Pergunta 8 — modo de condução) e grave a resposta no lugar do valor vazio. As demais chaves continuam sem pergunta.
|
|
213
|
+
10. Appender as novas variáveis ao final do `ENV.md` com comentário de data:
|
|
212
214
|
```
|
|
213
215
|
# --- Upgrade YYYY-MM-DD ---
|
|
214
216
|
NOVA_VAR_1=
|
|
215
217
|
NOVA_VAR_2=valor-padrão
|
|
216
218
|
```
|
|
217
|
-
|
|
219
|
+
11. Confirmar:
|
|
218
220
|
```
|
|
219
221
|
✅ ENV.md atualizado! N variável(is) nova(s) adicionada(s).
|
|
220
222
|
⚠️ Preencha os valores em branco antes de usar os novos recursos.
|
|
221
223
|
```
|
|
222
|
-
|
|
224
|
+
12. Oferecer o **passo 9 (adicionar as stacks)**, que a pessoa pode pular, e então encerrar (não continuar para o fluxo de onboarding completo).
|
|
223
225
|
|
|
224
226
|
**⚠️ OBRIGATÓRIO - Criação do ENV.md**:
|
|
225
227
|
|
|
@@ -261,6 +263,7 @@ Fluxo correto:
|
|
|
261
263
|
- **IDE** (7 opções) → mostrar em texto numerado
|
|
262
264
|
- **SQUAD** (do taxonomy) → mostrar em texto numerado
|
|
263
265
|
- **POSITION** (do taxonomy) → mostrar em texto numerado
|
|
266
|
+
- **PROD_MODE** (2 opções: product-led, developer-guided) → AskUserQuestion, sempre perguntado e sem opção sugerida
|
|
264
267
|
|
|
265
268
|
```
|
|
266
269
|
// Exemplo 1: HUB (5 opções) - MOSTRAR EM TEXTO
|
|
@@ -401,6 +404,15 @@ Pergunta 7 (opções fixas - POSITION do taxonomy - texto se >4):
|
|
|
401
404
|
|
|
402
405
|
*[Mostrar TODAS as opções de POSITION do taxonomy.md e aguardar]*
|
|
403
406
|
|
|
407
|
+
```
|
|
408
|
+
Pergunta 8 (opções fixas - 2 opções - usar AskUserQuestion) — PROD_MODE:
|
|
409
|
+
Como você quer que os comandos de produto (prod.*) e o eng.create-ard conduzam a conversa?
|
|
410
|
+
- Product-Led: para PMs. Fluxo direto, com os termos de PM, sem explicações extras.
|
|
411
|
+
- Developer-Guided: para devs e futuros PMs. Uma pergunta por vez, explicando cada termo e etapa enquanto você faz.
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
*[Perguntar **sempre**, para qualquer `AREA` e qualquer `POSITION` (inclusive `GENERALIST` e PM). **Não** marcar nenhuma opção como recomendada nem sugerir padrão por área ou cargo. Gravar `PROD_MODE=product-led` ou `PROD_MODE=developer-guided`.]*
|
|
415
|
+
|
|
404
416
|
**Regras de Implementação:**
|
|
405
417
|
- **Opções fixas com ≤4 opções** → usar AskUserQuestion
|
|
406
418
|
- **Opções fixas com >4 opções** (HUB com DATA, IDE, SQUAD, POSITION) → mostrar em texto numerado
|
|
@@ -424,6 +436,7 @@ Pergunta 7 (opções fixas - POSITION do taxonomy - texto se >4):
|
|
|
424
436
|
| `MAX_AI_EXECUTION_PERCENTAGE` | Limite de execução da AI | Número entre 60 e 100 |
|
|
425
437
|
| `USER` | Identidade do usuário (email ou nome) | ENV.md → git `user.email` → usuário do SO. Sem login |
|
|
426
438
|
| `POSITION` | Cargo do usuário | Deve estar em `taxonomy.md` → Positions. Autonomia ponta a ponta em qualquer cargo |
|
|
439
|
+
| `PROD_MODE` | Modo de condução dos comandos de produto e do `eng.create-ard` | `product-led` ou `developer-guided`. Sempre perguntado, sem opção sugerida (Pergunta 8) |
|
|
427
440
|
|
|
428
441
|
> **💡 Nota**:
|
|
429
442
|
> - As opções para SQUAD, HUB, AREA e POSITION são definidas em `taxonomy.md` e podem ser customizadas por organização.
|
|
@@ -560,6 +573,20 @@ Token NÃO vai no ENV.md:
|
|
|
560
573
|
Nunca grave TOKEN_VERSION_CONTROL (chave removida do template).
|
|
561
574
|
```
|
|
562
575
|
|
|
576
|
+
**Central docs (onde fica a documentação aprovada — PRD, FRD, épicos, ARD, RFC):**
|
|
577
|
+
```
|
|
578
|
+
Onde fica a documentação central?
|
|
579
|
+
A. Pasta local
|
|
580
|
+
B. Repositório de documentação (git)
|
|
581
|
+
C. Não usar → CENTRAL_DOCS_STORAGE= vazio
|
|
582
|
+
```
|
|
583
|
+
- **A ou B** → `CENTRAL_DOCS_STORAGE=filesystem` e `CENTRAL_DOCS_LOCATION` com o padrão do **modo de trabalho** (a pessoa pode digitar outro caminho):
|
|
584
|
+
- **modo workspace** (2+ subpastas com `.git`): `./central-docs`, e `central-docs/` no `.gitignore` do workspace;
|
|
585
|
+
- **projeto único** (só a raiz tem `.git`): `docs/jarvis/central-docs` (já coberto por `docs/jarvis/*` no `.gitignore`, ver Passo 5).
|
|
586
|
+
- **A**: `mkdir -p {LOCATION}` e criar `{LOCATION}/AGENTS.md` mínimo explicando a estrutura `{SQUAD}/{product|engineering}/{produto}/` e que o `{SQUAD}/index.md` é gerado pelo `jarvis docs publish`.
|
|
587
|
+
- **B**: pedir a URL do repositório e rodar `git clone {URL} {LOCATION}`. Se `{LOCATION}` já existir com `.git`, só usar. Perguntar `CENTRAL_DOCS_TARGET_BRANCH` (padrão `main`).
|
|
588
|
+
- Nunca colocar o Central docs no versionamento de um repositório de código.
|
|
589
|
+
|
|
563
590
|
#### Variáveis Opcionais (alinhar ao `templates/ENV-template.md`)
|
|
564
591
|
|
|
565
592
|
| Variável | Valor Padrão | Descrição |
|
|
@@ -585,7 +612,8 @@ Nunca grave TOKEN_VERSION_CONTROL (chave removida do template).
|
|
|
585
612
|
| `TEST_FOLDER` | *(vazio)* | Pasta de testes |
|
|
586
613
|
| `QA_SIGNOFF_BRANCHES` / `QA_SIGNOFF_MAX_AGE` | `main,release/*` / `24` | Sign-off QA |
|
|
587
614
|
| `JARVIS_PROJECT` | `https://github.com/phelipperibeiro/jarvis-framework` | Repo do framework (`/jarvis-report-issue`) |
|
|
588
|
-
| `
|
|
615
|
+
| `CENTRAL_DOCS_STORAGE` / `_LOCATION` | *(vazio = desligado)* | Central docs: `filesystem` + pasta (padrão por modo de trabalho) |
|
|
616
|
+
| `CENTRAL_DOCS_REF` / `_TARGET_BRANCH` / `_REVIEWERS` | `main` / `main` / *(vazio)* | Só quando a pasta do Central docs tem `.git` |
|
|
589
617
|
| `SESSIONS_DIR` | `.jarvis/sessions` | Não perguntar — gravar fixo |
|
|
590
618
|
| `RTK_ENABLED` | `false` (ou true se detectar `rtk`) | Token Killer |
|
|
591
619
|
| `ADVISOR_MODELS` | `"Sonnet 5.5,Opus 5.5,Opus 5,Fable 5.1"` | Advisor do `eng.start` — não perguntar, gravar o padrão |
|
|
@@ -649,6 +677,13 @@ cat templates/ENV-template.md
|
|
|
649
677
|
mkdir -p .jarvis/sessions/eng .jarvis/sessions/prod .jarvis/sessions/qa
|
|
650
678
|
# Garantir .jarvis/ no .gitignore do workspace
|
|
651
679
|
grep -qxF '.jarvis/' .gitignore 2>/dev/null || echo '.jarvis/' >> .gitignore
|
|
680
|
+
|
|
681
|
+
# 8. Modo de trabalho (detectado no Passo 3, Pergunta 1):
|
|
682
|
+
# - Projeto único (só a raiz tem .git): PROD_DOCS=docs/jarvis/product e
|
|
683
|
+
# docs/jarvis/ fora do versionamento (uma docs/ já existente não é tocada):
|
|
684
|
+
grep -qxF 'docs/jarvis/*' .gitignore 2>/dev/null || echo 'docs/jarvis/*' >> .gitignore
|
|
685
|
+
# - Modo workspace: PROD_DOCS=$DOCS_FOLDER/$PROD_FOLDER_NAME (padrão do template) e, se o
|
|
686
|
+
# Central docs ficar dentro do workspace: grep -qxF 'central-docs/' .gitignore || echo 'central-docs/' >> .gitignore
|
|
652
687
|
```
|
|
653
688
|
|
|
654
689
|
**⚠️ REGRA CRÍTICA — Bloco DATA:**
|
|
@@ -1234,7 +1269,10 @@ Pergunta 6: Qual o limite de execução da AI? (60-100)
|
|
|
1234
1269
|
Pergunta 7: Qual seu cargo?
|
|
1235
1270
|
[mostrar opções em texto numerado]
|
|
1236
1271
|
|
|
1237
|
-
Pergunta 8
|
|
1272
|
+
Pergunta 8: Modo dos comandos de produto?
|
|
1273
|
+
[AskUserQuestion: Product-Led | Developer-Guided, sem opção sugerida]
|
|
1274
|
+
|
|
1275
|
+
Pergunta 9 (opcional): Usa task manager? jira/linear/github/asana ou Nenhum (freelance)
|
|
1238
1276
|
```
|
|
1239
1277
|
|
|
1240
1278
|
**Agente**: *(cria ENV.md + `.jarvis/sessions/{eng,prod,qa}`, valida Context7, cria AGENTS.md e confirma)*
|
|
@@ -1281,6 +1319,7 @@ Bem-vindo! 🎉
|
|
|
1281
1319
|
- [ ] **Perguntou UMA variável POR VEZ** (nunca fez múltiplas perguntas juntas)
|
|
1282
1320
|
- [ ] **Usou AskUserQuestion só para ≤4 opções** (AREA se aplicável — HUB com DATA vai em texto)
|
|
1283
1321
|
- [ ] **Mostrou em texto numerado para >4 opções** (HUB, IDE, SQUAD, POSITION)
|
|
1322
|
+
- [ ] **Perguntou o `PROD_MODE`** (Product-Led ou Developer-Guided), sem opção sugerida, qualquer que seja a área ou o cargo
|
|
1284
1323
|
- [ ] **Mostrou TODAS as opções disponíveis** (HUB inclui DATA; nunca omitiu)
|
|
1285
1324
|
- [ ] **Incluiu descrição útil em cada opção** (seja AskUserQuestion ou texto)
|
|
1286
1325
|
- [ ] **Validou respostas em texto contra lista de opções válidas**
|