jarvis-ai-framework 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,7 +42,7 @@ Por isso o texto tem de ser **completo, autossuficiente e sem ambiguidade**.
42
42
 
43
43
  1. `architecture.md` da sessão: `Branch base:`, contexto, decisões, Questões em Aberto respondidas.
44
44
  2. `plan.md` da sessão: fases e comentários (mudanças de direção).
45
- 3. Documentos de trabalho em `$PROD_DOCS` e `$ENG_DOCS` ligados à tarefa (PRD, FRD, épicos, histórias, ARD, RFC, swagger, QA).
45
+ 3. Documentos de trabalho em `$PROD_DOCS` e `$ENG_DOCS` ligados à tarefa (PRD, FRD, épicos, histórias, ARD, RFC, SPEC, swagger, QA).
46
46
  4. `git log {base}..HEAD --format='%h|%an|%ad|%s' --date=short` e `git diff --stat {base}...HEAD`.
47
47
  5. O código alterado, só leitura, para confirmar o comportamento real.
48
48
  6. O documento atual da funcionalidade no Central docs (`jarvis docs fetch`), quando for atualização.
package/bin/README.md CHANGED
@@ -24,7 +24,7 @@ bin/
24
24
  ├── config/ # ide-config.js (fonte de verdade de IDEs), constants.js
25
25
  ├── core/ # scanner.js, sync-engine.js, profile-filter.js, token-report.js
26
26
  ├── docs/ # Central docs: fetch/publish pelo adaptador + validação de frontmatter
27
- │ ├── validate-frontmatter.js # Valida/extrai frontmatter (PRD, FRD, épico, história, tarefa, ARD, RFC)
27
+ │ ├── validate-frontmatter.js # Valida/extrai frontmatter (feature, delivery e documentos de trabalho: PRD, FRD, épico, história, tarefa, ARD, RFC, QA)
28
28
  │ ├── fetch-file.js # openStorageFromEnv() + fetchFile() — `docs sync`/`docs fetch`/`docs publish`
29
29
  │ ├── publish-file.js # tipos, resolveDestPath() e publishFile() — `docs publish`
30
30
  │ └── storage/ # adaptadores (CENTRAL_DOCS_STORAGE): index.js (fábrica), filesystem.js (pasta + git), build-index.js
@@ -3,7 +3,7 @@
3
3
  * (`CENTRAL_DOCS_STORAGE`), a consolidação do que foi implementado, gerada pelo
4
4
  * `/eng.spec-consolidate`: o documento da funcionalidade (`feature-*.md`, em
5
5
  * `{SQUAD}/product/{produto}/`) e o registro da entrega (`delivery-*.md`, em
6
- * `{SQUAD}/engineering/{produto}/`). Documentos de trabalho (PRD, FRD, ARD, RFC…)
6
+ * `{SQUAD}/engineering/{produto}/`). Documentos de trabalho (PRD, FRD, ARD, RFC, SPEC…)
7
7
  * não são publicados. O índice do squad é regenerado a cada publicação.
8
8
  * @module docs/publish-file
9
9
  */
@@ -28,6 +28,7 @@ export const WORKING_DOC_TYPES = Object.freeze([
28
28
  "task",
29
29
  "ard",
30
30
  "rfc",
31
+ "spec",
31
32
  "swagger",
32
33
  "qa-report",
33
34
  ]);
@@ -2,7 +2,8 @@ import { readFileSync } from 'node:fs'
2
2
  import { parseFrontmatter, extractFrontmatterBlock } from '../utils/frontmatter.js'
3
3
 
4
4
  /**
5
- * Valida frontmatter YAML de documentos (PRD, FRD, épico, história, tarefa, ARD, RFC)
5
+ * Valida frontmatter YAML da consolidação do Central docs (feature, delivery) e de documentos
6
+ * de trabalho (PRD, FRD, épico, história, tarefa, ARD, RFC, relatório de QA)
6
7
  *
7
8
  * @param {string} filePath - Caminho do arquivo
8
9
  * @param {string} tipo - Tipo do documento (ver VALID_TYPES em publish-file.js)
@@ -55,10 +56,11 @@ export function validateFrontmatter(filePath, tipo) {
55
56
 
56
57
  // Validar status
57
58
  // Produto (rules/product/prod-rules.md), ARD (templates/engineering/ARD-template.md),
58
- // discovery (prod-discovery-template.md) e RFC (RFC-template.md)
59
+ // discovery (prod-discovery-template.md), RFC (RFC-template.md) e
60
+ // SPEC (templates/engineering/ref-spec-template.md)
59
61
  const validStatuses = [
60
62
  'icebox', 'in_review', 'backlog', 'in_progress', 'in_production', 'cancelled', 'deprecated',
61
- 'proposed', 'approved',
63
+ 'proposed', 'approved', 'superseded',
62
64
  'Draft', 'In Review', 'Ready for Decision', 'Accepted', 'Rejected', 'Superseded'
63
65
  ]
64
66
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jarvis-ai-framework",
3
- "version": "6.0.0",
3
+ "version": "6.1.0",
4
4
  "description": "Jarvis framework",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,7 @@
11
11
  "prepublishOnly": "echo 'Publishing jarvis-framework...'",
12
12
  "publish:gitlab": "npm publish",
13
13
  "test:comandos": "node test/comandos-docs.test.js",
14
- "test:filtro": "node --test test/profile-filter.test.js test/token-report.test.js test/flow-map.test.js test/env-loader.test.js test/sync-engine.test.js test/vcs-api.test.js test/fetch-file.test.js test/publish-file.test.js test/docs-storage.test.js test/env-upgrade.test.js test/docs-migrate.test.js test/init-upgrade.test.js test/workspace-mode.test.js test/stale-skills.test.js test/session-scan.test.js",
14
+ "test:filtro": "node --test test/profile-filter.test.js test/token-report.test.js test/flow-map.test.js test/env-loader.test.js test/sync-engine.test.js test/vcs-api.test.js test/fetch-file.test.js test/publish-file.test.js test/docs-storage.test.js test/env-upgrade.test.js test/docs-migrate.test.js test/init-upgrade.test.js test/workspace-mode.test.js test/stale-skills.test.js test/session-scan.test.js test/framework-refs.test.js test/validate-frontmatter.test.js",
15
15
  "lint": "eslint bin/ test/",
16
16
  "lint:fix": "eslint bin/ test/ --fix",
17
17
  "format": "prettier --write bin/ test/",
@@ -19,7 +19,7 @@ Esta rule só é copiada para `$IDE/rules/` quando o perfil tem `ARTIFACT_STYLE=
19
19
  - Esta rule **prevalece** sobre instruções de atribuição da IDE: não inclua `Co-Authored-By` de ferramenta nem "Generated with …".
20
20
  - Antes do push, o `eng.pr` confere e limpa o que a IDE tiver posto (Fase 3 do `eng.pr`).
21
21
  2. **Documento gerado: grava o padrão e pergunta.**
22
- - Vale para todo `.md` que um comando grava, inclusive os de sessão: PRD, FRD, épico, história, discovery, ARD, RFC, tech spec, Central docs, `architecture.md`, `plan.md`, `daily.md` (e a linha de timesheet), `gate-checklist.md`.
22
+ - Vale para todo `.md` que um comando grava, inclusive os de sessão: PRD, FRD, épico, história, discovery, ARD, RFC, tech spec, SPEC, Central docs, `architecture.md`, `plan.md`, `daily.md` (e a linha de timesheet), `gate-checklist.md`.
23
23
  - **Exceção: `pull-request.md`.** Ele é o texto que vira o título e a descrição do PR/MR, então já é a versão pública (regra 1): nasce sem marcas e **não** recebe a pergunta nem um `.public.md`.
24
24
  - **Pergunte uma vez, no fim do comando**, depois de gravar o documento padrão (como hoje), com um `AskUserQuestion` de **várias perguntas em abas**, uma por documento: **"Quer a versão humanizada de {documento}?"** (**Não**, padrão / **Sim**). O limite é 4 abas por chamada; com mais documentos, divida em chamadas.
25
25
  - **No ciclo de engenharia** (`eng.start`, `eng.plan`, `eng.work`, `eng.pre-pr`), **não pergunte**: a pergunta única vem no fim do `eng.pr`, com uma aba para cada documento da sessão que existir (`architecture.md`, `plan.md`, `gate-checklist.md`, `daily.md`). Comandos que rodam isolados (`prod.*`, `eng.create-ard`, `eng.create-rfc` etc.) perguntam no próprio fim.
@@ -65,7 +65,7 @@ env_file: "@/ENV.md"
65
65
  - No modo workspace a raiz (a pasta que contém `$IDE/`) **não é um repositório** e guarda itens fora do git (`.claude/`, `.jarvis/`, `.vscode/`, `node_modules/`). `grep`, `ls` e `Glob` na raiz leem tudo isso como se fosse código do projeto e confundem a análise.
66
66
  - **Código do projeto** = só as subpastas com `.git/` (ou as de `WORKSPACE_REPOS`, quando preenchido). Busque e leia código **dentro delas**.
67
67
  - **Ignore nas buscas de código**: a pasta da IDE ativa (derivada do `IDE`, tabela acima), `.jarvis/`, `.vscode/`, `node_modules/` e o `CDD-MIND-MAP.md`. Leia esses itens **só quando o workflow mandar** (ENV.md, rules, skills, templates, sessão).
68
- - **`docs/jarvis/` não é ignorada**: guarda os documentos de trabalho gerados (PRD, FRD, ARD, RFC, discoveries, Central docs), fora do versionamento. Leia-a sob demanda, como documento de trabalho, e não como código.
68
+ - **`docs/jarvis/` não é ignorada**: guarda os documentos de trabalho gerados (PRD, FRD, ARD, RFC, SPEC, discoveries, Central docs), fora do versionamento. Leia-a sob demanda, como documento de trabalho, e não como código.
69
69
  - **Pastas de outras IDEs** nunca são lidas (vale o "Isolamento de IDE" acima).
70
70
  - Com `WORKSPACE_MODE=project`, o git já delimita o código e esta regra não age.
71
71
 
@@ -241,6 +241,6 @@ Ao orientar o usuário sobre a movimentação de cards no board (Jira, GitLab, L
241
241
  | `pleno` | Média - explicar decisões não-óbvias |
242
242
  | `senior` | Alta - executar e reportar decisões |
243
243
  | `staff`, `tech-lead` | Muito alta - consultar apenas em trade-offs críticos |
244
- | `generalist` | Muito alta - consultar apenas em trade-offs críticos (superusuário: acumula funções de outras posições) |
244
+ | `generalist` | Muito alta - consultar apenas em trade-offs críticos (superusuário: acumula funções de outras posições; satisfaz qualquer gate por POSITION, ver taxonomy.md) |
245
245
 
246
246
  > ⚠️ **Escape Hatch**: O usuário pode sempre override qualquer regra contextual com instrução explícita.
@@ -54,7 +54,7 @@ Abaixo, segue uma descrição de algumas das variáveis mais importantes para as
54
54
  - $FLOWS_FOLDER é o nome da pasta de workflows e comandos utilizados pelos IDEs. (tenha em mente que o nome da pasta pode variar de acordo com a IDE utilizada)
55
55
  - $RULES_FOLDER é o nome da pasta principal de regras invioláveis que os agentes devem seguir.
56
56
  - $PROD_RULES é o caminho para a pasta que contém as regras de produto. Leia todos os arquivos dentro dessa pasta para entender as regras de produto.
57
- - $CENTRAL_DOCS_STORAGE e $CENTRAL_DOCS_LOCATION configuram o Central docs: o registro do que **foi implementado** (um documento por funcionalidade e um por entrega, gerados pelo `/eng.spec-consolidate`), com um índice global. Ligado por padrão (`filesystem`); vazio = desligado. Os documentos de trabalho (PRD, FRD, ARD, RFC) não são publicados lá. Leitura e publicação sempre por `jarvis docs fetch | sync | publish`.
57
+ - $CENTRAL_DOCS_STORAGE e $CENTRAL_DOCS_LOCATION configuram o Central docs: o registro do que **foi implementado** (um documento por funcionalidade e um por entrega, gerados pelo `/eng.spec-consolidate`), com um índice global. Ligado por padrão (`filesystem`); vazio = desligado. Os documentos de trabalho (PRD, FRD, ARD, RFC, SPEC) não são publicados lá. Leitura e publicação sempre por `jarvis docs fetch | sync | publish`.
58
58
 
59
59
 
60
60
  ## VARIÁVEL `$IDE` - DETECÇÃO AUTOMÁTICA DA PASTA DA IDE
@@ -17,6 +17,21 @@ env_file: "@/ENV.md"
17
17
 
18
18
  ---
19
19
 
20
+ ## Modos
21
+
22
+ O `/eng.build-tech-spec` tem dois modos, escolhidos na triagem do workflow:
23
+
24
+ | Modo | Quando usar | O que gera | Detalhe |
25
+ |------|-------------|------------|---------|
26
+ | **Delivery Spec** | Há card de origem (épico ou história) | Tech Spec arquitetural (épico) ou de implementação com subtarefas (história), na sessão do card | `$IDE/skills/eng-global-tech-spec/references/delivery-spec.md` |
27
+ | **Reference Spec** | Documento normativo sem card: contrato, convenção de nome, topologia, perfil de spec, fases de adoção | Especificação técnica de referência em `$ENG_DOCS/SPEC/SPEC-###-{slug}.md` (template `ref-spec-template.md`) | `$IDE/skills/eng-global-tech-spec/references/reference-spec.md` |
28
+
29
+ - O **Reference Spec** não exige card e **não** quebra em subtarefas: a regra das subtarefas de 4h a 1 dia, a integração com o board e a seção "Localização" abaixo valem só para o Delivery Spec.
30
+ - No Reference Spec, cada decisão resolvida aponta a origem (RFC-xxx, ARD-xxx ou "resolvida aqui"), e a checagem de RFC sem origem usa 7 dos 8 critérios (sai "padrão reutilizável", que é a natureza do documento).
31
+ - A spec de referência é documento de trabalho, numerada como RFC e ARD (maior `SPEC-###` existente + 1, senão `001`) e **não** é publicada no Central docs.
32
+
33
+ ---
34
+
20
35
  ## Localização de Arquivos
21
36
 
22
37
  > **NOTA**: Tech specs NÃO são salvas em `master-docs/`. São salvas na sessão do projeto e anexadas no Jira.
@@ -31,14 +46,15 @@ Sempre siga as instruções de acordo com as relações abaixo:
31
46
 
32
47
  ### Workflows de Tech Spec
33
48
 
34
- - **import `$IDE/workflows/engineering/eng.build-tech-spec.md`**: Criação de tech spec a partir de história do Jira
35
- - **import `$IDE/workflows/engineering/eng.breakdown-subtasks.md`**: Quebra de tech spec em subtarefas executáveis
49
+ - **import `$IDE/workflows/engineering/eng.build-tech-spec.md`**: Criação de tech spec a partir de um card (épico ou história) ou de uma especificação técnica de referência; no Delivery Spec, já quebra a história em fatias verticais de 4h a 1 dia
50
+ - **import `$IDE/workflows/engineering/eng.breakdown-subtasks.md`**: Detalhamento opcional das fatias de uma tech spec pronta como passo a passo para outra pessoa executar sem perguntar (não gera a spec)
36
51
  - **import `$IDE/workflows/engineering/eng.start.md`**: Início de desenvolvimento de feature (referência)
37
52
  - **import `$IDE/workflows/engineering/eng.plan.md`**: Planejamento de execução (referência)
38
53
 
39
54
  ### Templates
40
55
 
41
- - **import `$IDE/templates/engineering/tech-spec-template.md`**: Template completo de tech spec
56
+ - **import `$IDE/templates/engineering/tech-spec-template.md`**: Template completo de tech spec (Delivery Spec)
57
+ - **import `$IDE/templates/engineering/ref-spec-template.md`**: Template da especificação técnica de referência (Reference Spec)
42
58
 
43
59
  ### Regras
44
60
 
@@ -74,7 +90,7 @@ $SESSION_FOLDER/{TASK_MANAGER_KEY}/tech-spec.md
74
90
  ### Nomenclatura
75
91
 
76
92
  - **Formato da pasta**: `{jira-key}` em **lowercase** (ex: `TASK-123` → `task-123`)
77
- - **Arquivo**: Sempre `tech-spec.md` ou `architecture.md`
93
+ - **Arquivo**: `tech-spec.md` (história), `tech-spec-arch.md` (épico) ou `architecture.md`
78
94
  - **Exemplo**: `$SESSIONS_DIR/eng/task-123/tech-spec.md`
79
95
 
80
96
  > ⚠️ **IMPORTANTE**: NÃO adicione descrições ou sufixos ao nome da pasta.
package/skills/AGENTS.md CHANGED
@@ -22,6 +22,9 @@ skills/
22
22
  ├── eng-global-investigation/ # Método de investigação de bugs (causa raiz, hipóteses, veredito, política de acesso); usado pelo /eng.debug
23
23
  │ ├── SKILL.md
24
24
  │ └── references/
25
+ ├── eng-global-tech-spec/ # Método do /eng.build-tech-spec: Delivery Spec (épico/história) e Reference Spec
26
+ │ ├── SKILL.md
27
+ │ └── references/
25
28
  ├── eng-global-pr/ # Criacao de Pull/Merge Requests (GitLab/GitHub/Bitbucket)
26
29
  │ └── SKILL.md
27
30
  ├── eng-global-task-comment/ # Comentário no card (Jira/Linear/GitHub Issues/Asana)
@@ -231,6 +234,7 @@ Skills são invocados de formas diferentes dependendo da IDE:
231
234
  | `/eng.pre-pr` | `eng-qa-planner`, `eng-global-docs-write`, `jarvis-docs-central` (detectar docs) |
232
235
  | `/eng.pr` | `eng-global-pr` |
233
236
  | `/eng.debug` (investigar um bug ou varrer um escopo) | `eng-global-investigation` |
237
+ | `/eng.build-tech-spec` (Delivery Spec ou Reference Spec) | `eng-global-tech-spec` |
234
238
  | Comentário no card | `eng-global-task-comment` |
235
239
  | `jarvis docs sync` | `jarvis-docs-central` |
236
240
  | `jarvis docs publish` | `jarvis-docs-central` |
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: eng-global-tech-spec
3
+ description: >
4
+ Método de especificação técnica do /eng.build-tech-spec, em dois modos: Delivery Spec (Tech Spec a
5
+ partir de um épico ou de uma história, com subtarefas de 4h a 1 dia para a história) e Reference
6
+ Spec (especificação técnica normativa, sem card e sem subtarefas: contratos, convenções, perfis
7
+ de spec). Cada modo tem o seu arquivo em references/, lido só quando o modo é escolhido.
8
+ Trigger: Use ao escrever uma Delivery Spec (Tech Spec a partir de um card) ou uma Reference Spec (spec técnica de referência).
9
+ allowed-tools: Read Grep Glob Bash
10
+ license: AGPL-3.0
11
+ metadata:
12
+ author: jarvis-team
13
+ version: "1.0"
14
+ area: global
15
+ ---
16
+
17
+ # eng-global-tech-spec
18
+
19
+ Método para escrever especificações técnicas no Jarvis. O `/eng.build-tech-spec` faz o gate de cargo, a triagem de modo e a carga das especializações; esta skill traz o "como" de cada modo e as regras que valem nos dois.
20
+
21
+ ## Modos
22
+
23
+ Leia **só** o arquivo do modo escolhido pelo workflow:
24
+
25
+ | Modo | Quando | Arquivo | Saída |
26
+ |------|--------|---------|-------|
27
+ | Delivery Spec | Há card de origem (épico ou história) | [references/delivery-spec.md](references/delivery-spec.md) | `$SESSIONS_DIR/eng/{card}/tech-spec-arch.md` (épico) ou `tech-spec.md` com subtarefas (história) |
28
+ | Reference Spec | Documento normativo sem card: contrato, convenção de nome, topologia, perfil de adaptação de uma spec, fases de implementação | [references/reference-spec.md](references/reference-spec.md) | `$ENG_DOCS/SPEC/SPEC-###-{slug}.md` (template `ref-spec-template.md`), sem subtarefas |
29
+
30
+ ### Skills invocados durante a execução do skill
31
+
32
+ | Passo | Skill | Condição |
33
+ |-------|-------|----------|
34
+ | Delivery Spec › Fase 1.5 (necessidade de RFC) | `/eng.create-rfc` | Se a Tech Spec atender aos critérios que exigem RFC e o usuário escolher "A: Criar uma RFC agora" |
35
+ | Delivery Spec › Caminho A › 2A.2 | `/jarvis-docs-central` | Se `CENTRAL_DOCS_STORAGE` estiver configurado |
36
+ | Reference Spec › 2. Checagem de RFC | `/eng.create-rfc` | Sem RFC/ARD de origem, com algum dos 7 critérios "Sim" e a escolha "A: Criar uma RFC agora" |
37
+
38
+ > As mesmas chamadas estão na tabela do workflow `eng.build-tech-spec`, com as do gate e das áreas.
39
+
40
+ ---
41
+
42
+ ## Regras Importantes
43
+
44
+ ### ⚠️ Nunca Assuma - Sempre Pergunte
45
+
46
+ - Se informação crítica está faltando → **pergunte ao usuário**
47
+ - Se há múltiplas interpretações possíveis → **peça clarificação**
48
+ - Se decisão arquitetural tem trade-offs → **discuta com usuário**
49
+
50
+ ### 🎯 Foco em Valor Testável
51
+
52
+ - Cada subtarefa deve entregar algo **testável e validável**
53
+ - Evite subtarefas genéricas como "Implementar backend"
54
+ - Prefira subtarefas específicas como "Criar endpoint POST /api/users com validação"
55
+
56
+ ### 📏 Estimativas Realistas
57
+
58
+ - Subtarefas devem ter **entre 4 horas e 1 dia cada**, como fatias verticais completas
59
+ - Se maior que 1 dia → **dividir em duas fatias verticais independentes** (nunca em camadas)
60
+ - Se menor que 4h → **agrupar com a próxima** até formar uma fatia vertical completa
61
+ - Incluir tempo para testes e documentação
62
+
63
+ ### 🔗 Rastreabilidade
64
+
65
+ - Toda decisão deve ter **justificativa documentada**
66
+ - Links entre documentos devem **funcionar**
67
+ - Referências externas devem ser **específicas** (não "veja a documentação")
68
+
69
+ ### 🏗️ Seguir Convenções do Projeto
70
+
71
+ - Analisar código existente antes de propor novos padrões
72
+ - Manter **consistência** com arquitetura atual
73
+ - Justificar **qualquer desvio** de padrões estabelecidos
74
+
75
+ ### 📐 Princípios de Documentação
76
+
77
+ - **Valor do Usuário**: Sempre explicar o "porquê"
78
+ - **Contexto Completo**: Documento deve ser auto-contido
79
+ - **Terminologia Consistente**: Usar mesmos termos em toda documentação
80
+ - **Critérios Testáveis**: Evitar linguagem vaga ("rápido", "fácil")
81
+
82
+
83
+ ---
84
+
85
+ ## Boas Práticas
86
+
87
+ ✅ **Fazer:**
88
+
89
+ - Usar diagramas Mermaid para comunicar arquitetura
90
+ - Documentar "por que" das decisões, não só "o que"
91
+ - Quebrar em incrementos pequenos e testáveis
92
+ - Validar com usuário em cada fase crítica
93
+ - Manter rastreabilidade (links, referências)
94
+
95
+ ❌ **Evitar:**
96
+
97
+ - Assumir requisitos não explícitos
98
+ - Criar subtarefas maiores que 1 dia ou fatias horizontais (só enum, só repository, só DTO)
99
+ - Pular análise de riscos
100
+ - Propor tecnologias sem justificativa
101
+ - Documentação vaga ou genérica
102
+