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.
Files changed (50) hide show
  1. package/agents/product/prod.discovery-interviewer.md +1 -1
  2. package/bin/README.md +14 -14
  3. package/bin/commands/docs-publish.js +50 -92
  4. package/bin/commands/docs-sync.js +30 -63
  5. package/bin/lib/cli/program.js +23 -25
  6. package/bin/lib/docs/fetch-file.js +29 -26
  7. package/bin/lib/docs/publish-file.js +89 -161
  8. package/bin/lib/docs/storage/build-index.js +87 -0
  9. package/bin/lib/docs/storage/filesystem.js +203 -0
  10. package/bin/lib/docs/storage/index.js +75 -0
  11. package/bin/lib/docs/validate-frontmatter.js +14 -4
  12. package/bin/lib/vcs/api.js +0 -125
  13. package/package.json +2 -2
  14. package/rules/AGENTS.md +12 -9
  15. package/rules/engineering/eng.integrations-rules.md +2 -1
  16. package/rules/product/prod-rules.md +4 -5
  17. package/rules-on-demand/product/prod.guided-rules.md +104 -0
  18. package/skills/jarvis-docs-central/README.md +57 -269
  19. package/skills/jarvis-docs-central/SKILL.md +126 -296
  20. package/skills/jarvis-init/SKILL.md +46 -7
  21. package/templates/ENV-template.md +20 -5
  22. package/templates/engineering/ARD-template.md +39 -6
  23. package/templates/engineering/architecture-template.md +1 -0
  24. package/templates/product/prod-breakdown-template.md +20 -2
  25. package/templates/product/prod-discovery-template.md +24 -1
  26. package/templates/product/prod-epic-template.md +32 -1
  27. package/templates/product/prod-frd-template.md +29 -2
  28. package/templates/product/prod-issue-template.md +36 -1
  29. package/templates/product/prod-prd-template.md +33 -2
  30. package/workflows/engineering/eng.build-tech-spec.md +2 -2
  31. package/workflows/engineering/eng.create-ard-from-code.md +9 -11
  32. package/workflows/engineering/eng.create-ard.md +15 -13
  33. package/workflows/engineering/eng.create-rfc.md +8 -10
  34. package/workflows/engineering/eng.pr.md +4 -4
  35. package/workflows/engineering/eng.pre-pr.md +4 -4
  36. package/workflows/engineering/eng.rpa.robot.md +4 -2
  37. package/workflows/engineering/eng.start.md +17 -16
  38. package/workflows/product/prod.roadmap.preview.md +4 -1
  39. package/workflows/product/prod.spec.ard.md +7 -3
  40. package/workflows/product/prod.spec.breakdown.md +7 -3
  41. package/workflows/product/prod.spec.clarify.md +5 -1
  42. package/workflows/product/prod.spec.discovery.md +7 -3
  43. package/workflows/product/prod.spec.epic.md +13 -11
  44. package/workflows/product/prod.spec.frd.md +15 -13
  45. package/workflows/product/prod.spec.issue.md +5 -1
  46. package/workflows/product/prod.spec.md +3 -1
  47. package/workflows/product/prod.spec.prd.md +15 -13
  48. package/workflows/warm-up.md +3 -3
  49. package/bin/lib/docs/redis-cache.js +0 -49
  50. 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 repositório centralizado de documentação (GitLab, GitHub ou Bitbucket). Busca e publica PRDs, FRDs, ARDs e RFCs via API do vendor.
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: "3.0"
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 o framework com o repositório `central-docs` (`CENTRAL_DOCS_REPO`), permitindo:
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
- ## Fonte de Verdade
20
+ - Buscar documentos relevantes durante os workflows (Modo 1)
21
+ - Publicar documentos aprovados (Modo 2)
22
+ - Reparar o índice (Modo 3)
24
23
 
25
- > **Antes de qualquer operação**, leia `$CENTRAL_DOCS_REPO/AGENTS.md`.
26
- > Ele define o contrato completo do repositório: estrutura, naming, frontmatter e regras de índice.
27
- > Este skill implementa esse contrato — não o duplica.
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
- - `CENTRAL_DOCS_REPO` — URL do repo (GitLab, GitHub ou Bitbucket; se vazio: encerrar silenciosamente)
33
- - `CENTRAL_DOCS_REF` — branch para leitura (padrão: `main`)
34
- - `VERSION_CONTROL` — fallback se o hostname da URL não identificar o vendor
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
- ❌ **NUNCA** colar o token no chat.
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
- Se `CENTRAL_DOCS_REPO` não estiver definido, encerrar silenciosamente sem erro.
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
- ## Convenções do central-docs (resumo operacional)
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-em-kebab}/
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-em-kebab}/
69
+ │ └── {produto}/
67
70
  │ ├── ard-{id}-{nome}.md
68
- │ └── rfc-{id}-{nome}.md
69
- └── context/ # opcional — só nasce com conteúdo
70
- ├── CLAUDE.md
71
- └── (pesquisas, dados, assets — formato livre)
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
- **Squads válidos** (pastas raiz ALL-CAPS): detectados dinamicamente pelo script.
75
- Fonte de verdade: `taxonomy.md` na raiz do repo.
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
- ### Naming de arquivos
80
+ ### Frontmatter obrigatório (validado no `publish`)
78
81
 
79
- ```
80
- {tipo}-{id}-{nome-em-kebab}.md
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
- Exemplos: `prd-001-minha-feature.md`, `ard-001-minha-api.md`, `story-TASK-4-meu-exemplo.md`
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
- - Tipo sempre **lowercase**: `prd-`, `frd-`, `feat-`, `epic-`, `story-`, `task-`, `ard-`, `rfc-` , `swagger-`
86
- - Pasta de produto: `kebab-case`, um produto = uma pasta
97
+ Status fora da lista só gera aviso.
87
98
 
88
- ### Frontmatter obrigatório
99
+ **Campos `related_*`:** só o **basename** do arquivo (sem path nem `./`).
89
100
 
90
- | Campo | PRD | FRD/FEAT/STORY | EPIC | TASK | ARD/RFC |
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
- **Status válidos:** `draft`, `in_review`, `planejado`, `in_progress`, `in_production`, `icebox`, `deprecated`
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
- **Campos `related_*`:** sempre apenas o **basename** do arquivo, sem path nem `./`.
104
- ```yaml
105
- # ✅ Certo
106
- related_prd: prd-001-minha-feature.md
105
+ ```markdown
106
+ # CORE
107
107
 
108
- # ❌ Errado
109
- related_prd: ./prd-001-minha-feature.md
110
- related_prd: ../minha-feature/prd-001-minha-feature.md
111
- ```
108
+ ## product
112
109
 
113
- ### Índices — regra crítica
110
+ ### loja
111
+ - [prd-001-checkout.md](product/loja/prd-001-checkout.md) | v1.0.0 | backlog | Checkout
114
112
 
115
- O arquivo `{SQUAD}/index.md` é **gerado pelo script** `scripts/build-index.sh`. **Nunca editar à mão.**
113
+ ## engineering
116
114
 
117
- ```bash
118
- # Sempre rodar após qualquer add/move/remove de spec
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` — carregar contexto do produto (Modo 1; aciona Modo 3 se índice ausente)
131
- - `/eng.start` — buscar PRD/ARD antes de iniciar feature (Modo 1)
132
- - `/eng.create-ard` — buscar PRD relacionado (Modo 1)
133
- - `/eng.pre-pr` — detectar docs desatualizados (Modo 1)
134
- - Publicação de doc aprovado (Modo 2)
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 Docs (usado em warm-up, eng.start)
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 fetch "${SQUAD}/product/${WORKSPACE}/prd-feature.md" "main"
184
- jarvis docs fetch "${SQUAD}/engineering/${WORKSPACE}/ard-feature.md" "main"
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
- **Passo 4 — Retornar resultado**
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
- ```markdown
190
- # Contexto Carregado do Central Docs
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
- ## Squad: MEU-SQUAD / Produto: meu-produto
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
- --file ./docs/engineering/ard-001-minha-feature.md \
210
- --squad MEU-SQUAD \
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
- **Fluxo interno:**
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
- 1. Clonar ou usar clone local de central-docs
261
- 2. Rodar: bash scripts/build-index.sh
262
- 3. Comparar output com os index.md commitados (git diff)
263
- 4. Se há divergência:
264
- a. Criar branch: repair/index-{SQUAD}-{timestamp}
265
- b. Commitar os index.md atualizados
266
- c. Abrir MR → main
267
- 5. Reportar ao usuário
268
- ```
269
-
270
- > O `build-index.sh` detecta squads dinamicamente — não é necessário listar squads manualmente.
271
-
272
- **Output ao usuário:**
273
-
274
- ```
275
- 🔍 Verificando índices do central-docs (MEU-SQUAD)...
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 doc sem validar frontmatter
300
- - Push direto para main (sempre via MR)
301
- - Buscar docs se `CENTRAL_DOCS_REPO` vazio (encerrar silenciosamente)
302
- - Inventar metadados (version, status, id)
303
- - Editar `{SQUAD}/index.md` manualmente — sempre via `build-index.sh`
304
- - Usar path em campos `related_*` — sempre basename apenas
305
- - Usar squad em minúsculas (ex: `core`) — sempre ALL-CAPS-COM-HIFEN: `MEU-SQUAD`
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 `$CENTRAL_DOCS_REPO/AGENTS.md` antes de operar
311
- - Usar GitLab API (não `git archive` ou `git clone` desnecessário)
312
- - Invalidar cache local (`redis-cli`) ao publicar, se o comando existir
313
- - Seguir git flow (branch → MR → main)
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
- ### Erro: Token VCS não encontrado
323
-
324
- GitLab: `.npmrc` `:_authToken=` ou `GITLAB_TOKEN`.
325
- GitHub: `gh auth login` ou `GITHUB_TOKEN`.
326
- Bitbucket: `BITBUCKET_TOKEN`.
327
-
328
- ### Erro: index.md não encontrado (Modo 1)
329
-
330
- ```
331
- ❌ Arquivo não encontrado: MEU-SQUAD/index.md
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
- 4. Se não houver diff:
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
- 5. Se houver diff, exibir prévia:
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
- 6. Appender as novas variáveis ao final do `ENV.md` com comentário de data:
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
- 7. Confirmar:
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
- 8. 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).
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
- | `CENTRAL_DOCS_REPO` / `_REF` / `_TARGET_BRANCH` / `_REVIEWERS` / `_CACHE_TTL` | *(opcional)* | Docs centrais |
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 (opcional): Usa task manager? jira/linear/github/asana ou Nenhum (freelance)
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**