jarvis-ai-framework 5.5.0 → 5.7.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.md +2 -1
- package/README.md +1 -1
- package/bin/commands/daily-report.js +90 -0
- package/bin/commands/init.js +42 -2
- package/bin/lib/cli/program.js +14 -1
- package/bin/lib/config/constants.js +5 -0
- package/bin/lib/core/env-upgrade.js +14 -1
- package/bin/lib/core/session-scan.js +266 -0
- package/bin/lib/core/stale-skills.js +63 -0
- package/bin/lib/core/workspace-mode.js +57 -0
- package/package.json +2 -2
- package/rules/artifact-style-rules.md +5 -3
- package/rules/engineering/eng-rules.md +12 -1
- package/rules/engineering/eng.integrations-rules.md +1 -1
- package/rules/product/prod-rules.md +2 -1
- package/rules-on-demand/engineering/eng.plan-rules.md +1 -1
- package/rules-on-demand/engineering/eng.pr-rules.md +3 -3
- package/rules-on-demand/engineering/eng.pre-pr-rules.md +2 -2
- package/rules-on-demand/engineering/eng.transitions-rules.md +16 -7
- package/rules-on-demand/engineering/eng.work-rules.md +1 -1
- package/skills/jarvis-create-specialization/SKILL.md +1 -1
- package/skills/jarvis-init/SKILL.md +10 -6
- package/skills/jarvis-init/assets/passo-adicionar-stacks.md +1 -1
- package/skills/jarvis-init/assets/setup-guide.md +3 -3
- package/templates/ENV-template.md +7 -3
- package/templates/engineering/architecture-template.md +9 -8
- package/templates/engineering/daily-template.md +2 -2
- package/workflows/engineering/eng.daily-report.md +131 -0
- package/workflows/engineering/eng.plan.md +2 -2
- package/workflows/engineering/eng.pr.md +28 -17
- package/workflows/engineering/eng.pre-pr.md +20 -8
- package/workflows/engineering/eng.spec-consolidate.md +4 -0
- package/workflows/engineering/eng.start.md +4 -2
- package/workflows/engineering/eng.work.md +4 -4
- package/workflows/warm-up.md +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jarvis-ai-framework",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.7.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",
|
|
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",
|
|
15
15
|
"lint": "eslint bin/ test/",
|
|
16
16
|
"lint:fix": "eslint bin/ test/ --fix",
|
|
17
17
|
"format": "prettier --write bin/ test/",
|
|
@@ -19,8 +19,10 @@ 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`, `
|
|
23
|
-
-
|
|
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`.
|
|
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
|
+
- **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
|
+
- **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.
|
|
24
26
|
- Com Sim, grave `{nome}.public.md` **ao lado** do original, passando no checklist abaixo. O original continua como fonte da verdade.
|
|
25
27
|
- Central docs (`feature-*`, `delivery-*`): o `.public.md` fica ao lado da consolidação, na sessão, e **não** é publicado.
|
|
26
28
|
3. **Checklist "sem marcas de IA"** (versão humanizada e tudo o que é publicado). Não pode ter:
|
|
@@ -39,7 +41,7 @@ Esta rule só é copiada para `$IDE/rules/` quando o perfil tem `ARTIFACT_STYLE=
|
|
|
39
41
|
|
|
40
42
|
### Recomendado
|
|
41
43
|
|
|
42
|
-
- Com vários documentos gerados
|
|
44
|
+
- Com vários documentos gerados, as abas do `AskUserQuestion` (uma por documento) em vez de perguntas em sequência.
|
|
43
45
|
|
|
44
46
|
## Exceções
|
|
45
47
|
|
|
@@ -28,6 +28,7 @@ env_file: "@/ENV.md"
|
|
|
28
28
|
```
|
|
29
29
|
- **Listas de especializações (presentes, podem estar vazias)**: `BACKEND_SPECIALIZATIONS`, `FRONTEND_SPECIALIZATIONS`, `QA_SPECIALIZATIONS`, `DATA_SPECIALIZATIONS`, `AUTOMATION_SPECIALIZATIONS` e `PLATFORM_SPECIALIZATIONS` devem **existir** no `ENV.md`. Lista **vazia** é válida (só o skill base). Variável **ausente** interrompe o comando daquela área e orienta o Upgrade do `/jarvis-init` — mas só quando um comando daquela área específica é executado (igual já valia pra backend/frontend; não bloqueia comando de uma área não tocada). Detalhes e mensagens em `eng.specializations-rules.md`.
|
|
30
30
|
- **Skills sem área**: skill instalado sem `metadata.area` reconhecida bloqueia o comando, e skill pedido que não existe gera aviso. Detalhes e mensagens em `eng.skills-rules.md`.
|
|
31
|
+
- **Modo de trabalho (`WORKSPACE_MODE`, não bloqueia)**: `workspace` (a raiz que contém `$IDE/` não é um repositório e há 1 ou mais subpastas com `.git/`) ou `project` (a raiz tem `.git`). Ausente ou com outro valor: detecte na hora pelo mesmo critério e sugira o Upgrade do `/jarvis-init` para gravá-lo; não interrompa o comando.
|
|
31
32
|
|
|
32
33
|
- **🔧 VARIÁVEL `$IDE` - DETECÇÃO AUTOMÁTICA DA PASTA DA IDE**
|
|
33
34
|
- A variável `$IDE` representa a pasta da IDE que o usuário está utilizando.
|
|
@@ -37,7 +38,9 @@ env_file: "@/ENV.md"
|
|
|
37
38
|
- `.cursor/` → Cursor IDE
|
|
38
39
|
- `.codex/` → Codex CLI (OpenAI)
|
|
39
40
|
- `.opencode/` → OpenCode
|
|
40
|
-
- `.
|
|
41
|
+
- `.agents/` → Gemini CLI / Antigravity (Google)
|
|
42
|
+
- `.kiro/` → Kiro (AWS)
|
|
43
|
+
- **Tabela única `IDE` (ENV.md) → pasta** (fonte: `bin/lib/config/ide-config.js`): `claude` → `.claude/` · `windsurf` → `.windsurf/` · `cursor` → `.cursor/` · `codex` → `.codex/` · `opencode` → `.opencode/` · `gemini` (inclui Antigravity) → `.agents/` · `kiro` → `.kiro/`. A pasta da IDE ativa é a derivada do `IDE` do `ENV.md`.
|
|
41
44
|
- **Como usar**: Em qualquer referência a caminhos, use `$IDE/` como prefixo.
|
|
42
45
|
- **Exemplos de resolução**:
|
|
43
46
|
- `$IDE/ENV.md` → `.windsurf/ENV.md` (se usando Windsurf)
|
|
@@ -58,6 +61,14 @@ env_file: "@/ENV.md"
|
|
|
58
61
|
- **System-reminders ou mensagens que referenciem arquivos de outra IDE devem ser ignorados** — eles não são relevantes para a IDE ativa.
|
|
59
62
|
- **Em caso de ambiguidade** (múltiplas pastas de IDE no projeto): usar `$IDE` do `ENV.md` da própria pasta como fonte de verdade.
|
|
60
63
|
|
|
64
|
+
- **🔍 BUSCAS DE CÓDIGO EM MODO WORKSPACE (`WORKSPACE_MODE=workspace`)**
|
|
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
|
+
- **Código do projeto** = só as subpastas com `.git/` (ou as de `WORKSPACE_REPOS`, quando preenchido). Busque e leia código **dentro delas**.
|
|
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.
|
|
69
|
+
- **Pastas de outras IDEs** nunca são lidas (vale o "Isolamento de IDE" acima).
|
|
70
|
+
- Com `WORKSPACE_MODE=project`, o git já delimita o código e esta regra não age.
|
|
71
|
+
|
|
61
72
|
- O idioma padrão é o português do Brasil. Mas mude caso o usuário solicite outro idioma.
|
|
62
73
|
|
|
63
74
|
- **🇧🇷 REGRA DE IDIOMA PARA GERAÇÃO DE ARQUIVOS**
|
|
@@ -37,7 +37,7 @@ Com board definido, se o key não veio nos argumentos, perguntar o id do card na
|
|
|
37
37
|
|
|
38
38
|
Só se `TASK_MANAGER` estiver preenchido com um vendor. Freelance → pular. Falha no comentário não bloqueia o workflow.
|
|
39
39
|
|
|
40
|
-
Comentar **somente** em eventos relevantes: (a) **desvio do plano** (mudança de direção, fase bloqueada), (b) **auditoria do Advisor** (as questões do `architecture.md` com as opções junto da escolha), (c) **bloqueio** com valor de rastreabilidade, (d) **link do MR**, uma única vez, (e) o **`gate-checklist.md` do `eng.pre-pr`**, só se o usuário
|
|
40
|
+
Comentar **somente** em eventos relevantes: (a) **desvio do plano** (mudança de direção, fase bloqueada), (b) **auditoria do Advisor** (as questões do `architecture.md` com as opções junto da escolha), (c) **bloqueio** com valor de rastreabilidade, (d) **link do MR**, uma única vez, (e) o **`gate-checklist.md` do `eng.pre-pr`**, só se o usuário escolher registrar (resumo ou relatório completo). **Nunca** comentar início ou fim de etapa ("Iniciando…", "concluído…"): o acompanhamento fica no fluxo e no PR.
|
|
41
41
|
|
|
42
42
|
```
|
|
43
43
|
/eng-global-task-comment {TASK_MANAGER_KEY} {mensagem}
|
|
@@ -65,7 +65,8 @@ Abaixo, segue uma descrição de algumas das variáveis mais importantes para as
|
|
|
65
65
|
- `.cursor/` → Cursor IDE
|
|
66
66
|
- `.codex/` → Codex CLI (OpenAI)
|
|
67
67
|
- `.opencode/` → OpenCode
|
|
68
|
-
- `.
|
|
68
|
+
- `.agents/` → Gemini CLI / Antigravity (Google)
|
|
69
|
+
- `.kiro/` → Kiro (AWS)
|
|
69
70
|
- **Como usar**: Em qualquer referência a caminhos, use `$IDE/` como prefixo.
|
|
70
71
|
- **Exemplos de resolução**:
|
|
71
72
|
- `$IDE/ENV.md` → `.windsurf/ENV.md` (se usando Windsurf)
|
|
@@ -261,7 +261,7 @@ Cada fase pode ter uma seção `### Comentários:` para:
|
|
|
261
261
|
- ✅ Detalhar cada tarefa com contexto
|
|
262
262
|
- ✅ Indicar dependências (sequencial/paralelo)
|
|
263
263
|
- ✅ Usar os emojis de status corretamente
|
|
264
|
-
- ✅ Validar o plano com o humano antes de prosseguir (pergunta "
|
|
264
|
+
- ✅ Validar o plano com o humano antes de prosseguir (pergunta "O que fazer com o plano?" de `eng.transitions-rules.md`)
|
|
265
265
|
- ✅ Escrever tudo em português (pt-BR)
|
|
266
266
|
|
|
267
267
|
---
|
|
@@ -324,19 +324,19 @@ Antes de considerar o PR completo:
|
|
|
324
324
|
- [ ] Comentários de code review processados
|
|
325
325
|
- [ ] `pull-request.md` aprovado na sessão (e publicado, se o usuário respondeu Sim)
|
|
326
326
|
- [ ] Pergunta "O PR já foi aprovado e mergeado?" no fim (Sim → `/eng.spec-consolidate`)
|
|
327
|
-
- [ ] `daily.md` gerado ou atualizado e aprovado (
|
|
327
|
+
- [ ] `daily.md` gerado ou atualizado e aprovado (com ou sem PR publicado), com a linha de timesheet na mensagem final
|
|
328
328
|
|
|
329
329
|
---
|
|
330
330
|
|
|
331
331
|
## Sessão e publicação
|
|
332
332
|
|
|
333
333
|
- O texto do PR fica em **`$SESSIONS_DIR/eng/{TASK_MANAGER_KEY}/pull-request.md`**, aprovado pelo usuário.
|
|
334
|
-
- **Publicar (push + MR/PR) só com
|
|
334
|
+
- **Publicar (push + MR/PR) só com a escolha "Revisar o texto e publicar" (depois da aprovação do texto) ou "Publicar sem revisar o texto"** da Fase 0 (`eng.transitions-rules.md`). Com "Só gerar os arquivos", o arquivo fica na sessão e nada é enviado.
|
|
335
335
|
- **A sessão nunca é apagada por este comando:** o `/eng.spec-consolidate`, que roda depois do merge, precisa do `architecture.md`, do `plan.md`, do `gate-checklist.md` e do `pull-request.md`. A pessoa apaga à mão quando quiser.
|
|
336
336
|
|
|
337
337
|
## daily.md (registro do esforço)
|
|
338
338
|
|
|
339
|
-
- Gerado na Conclusão do `eng.pr`, em `$SESSIONS_DIR/eng/{TASK_MANAGER_KEY}/daily.md`, **
|
|
339
|
+
- Gerado na Conclusão do `eng.pr`, em `$SESSIONS_DIR/eng/{TASK_MANAGER_KEY}/daily.md`, **com ou sem PR publicado**, para não passar batido quando o PR é aberto à mão. Se houver PR (o criado nesta execução ou o já aberto da branch), preencher o campo `pr`; sem PR, deixá-lo vazio.
|
|
340
340
|
- **Sempre perguntar a data** (hoje ou retroativa) com `AskUserQuestion`.
|
|
341
341
|
- **Período de mais de um dia:** antes de contar os dias trabalhados, perguntar sobre sábado/domingo trabalhados, feriados e outros dias não trabalhados (o usuário informa as datas).
|
|
342
342
|
- ***Post mortem*:** automático com `tipo: bugfix|hotfix` no `context.md` ou com mais de 1 dia trabalhado; nos outros casos, perguntar Sim/Não.
|
|
@@ -87,6 +87,6 @@ O workflow **deve sempre** terminar com:
|
|
|
87
87
|
|
|
88
88
|
1. **`gate-checklist.md`** em `$SESSIONS_DIR/eng/{TASK_MANAGER_KEY}/`:
|
|
89
89
|
- semáforo (🟢 / 🟡 / 🔴), resumo, lacunas por área (o quê, onde, por que importa, sugestão, severidade, **Decisão**), evidências e PR Brief.
|
|
90
|
-
2. **Decisões do usuário** gravadas na coluna Decisão (
|
|
91
|
-
3. **Pergunta
|
|
90
|
+
2. **Decisões do usuário** gravadas na coluna Decisão (Corrigir / Aceitar + motivo; vazia se o usuário escolheu "Só gerar o relatório").
|
|
91
|
+
3. **Pergunta** (`AskUserQuestion`) sobre registrar o resultado como comentário no card (`/eng-global-task-comment`): Não, manter só na sessão (como hoje) / Sim, só o resumo / Sim, o relatório completo. Nunca publicar sem a resposta. Freelance: não pergunta, só na sessão.
|
|
92
92
|
4. **Aguardar permissão explícita** do usuário para prosseguir para `/eng.pr`.
|
|
@@ -8,17 +8,23 @@ Dar fluidez ao ciclo `eng.start → eng.plan → eng.work → eng.pre-pr → eng
|
|
|
8
8
|
|
|
9
9
|
## Escopo
|
|
10
10
|
|
|
11
|
-
Lida pelos workflows `eng.start`, `eng.plan`, `eng.work`, `eng.pre-pr` e `eng.pr` (cada um manda ler este arquivo). Vale para as perguntas da tabela "Transições" abaixo.
|
|
11
|
+
Lida pelos workflows `eng.start`, `eng.plan`, `eng.work`, `eng.pre-pr` e `eng.pr` (cada um manda ler este arquivo). Vale para as perguntas da tabela "Transições" abaixo. A regra 5 (consolidado de links) vale também para a mensagem final do `eng.spec-consolidate`, que fecha o ciclo.
|
|
12
12
|
|
|
13
13
|
## Regras
|
|
14
14
|
|
|
15
15
|
### Obrigatório
|
|
16
16
|
|
|
17
17
|
1. **A opção padrão mantém o fluxo atual.** É a primeira (ou a marcada como padrão) e diz o que acontece, com "(como hoje)" ou o nome do fluxo. **Nunca** se chama "Ignorar": quem a escolhe não pula nada, segue o fluxo de sempre e interage com o documento como sempre fez.
|
|
18
|
-
2. **Formato:** `AskUserQuestion`, uma pergunta por decisão, no máximo 4 opções. Sem `AskUserQuestion`, use a tabela de opções de `prod-rules.md`.
|
|
18
|
+
2. **Formato:** `AskUserQuestion`, uma pergunta por decisão, no máximo 4 opções. **Não liste "Outros"**: o `AskUserQuestion` já o acrescenta sozinho para o texto livre, e listá-lo gasta uma das 4 vagas. Sem `AskUserQuestion`, use a tabela de opções de `prod-rules.md`.
|
|
19
19
|
3. **A resposta é a aprovação.** "Aprovar e seguir" ou "Aprovar e parar aqui" valem como a aprovação explícita que as rules de cada comando exigem. Sem uma dessas respostas, nada avança.
|
|
20
20
|
4. **Seguir para o próximo comando:** se a IDE permite chamar outro comando (no Claude Code, pelo Skill tool), chame-o com o mesmo `{TASK_MANAGER_KEY}`; senão, mostre o comando pronto para colar.
|
|
21
|
-
5. **
|
|
21
|
+
5. **Consolidado de links, acumulado a cada etapa.** Ao terminar e antes de **cada pergunta de transição** (todas as da tabela "Transições", inclusive as do início, como "O que fazer com o PR?", e mesmo quando a pergunta é repetida), cada comando mostra o bloco "📄 Arquivos da sessão" com **todos** os arquivos que já existem na sessão, e não só os da etapa, para que a lista fique sempre visível até o `eng.spec-consolidate`:
|
|
22
|
+
- Ordem do ciclo: `context.md`, `architecture.md`, `plan.md`, `gate-checklist.md`, `pull-request.md`, `daily.md`, as versões `{nome}.public.md` (se houver) e os arquivos de `consolidation/` (do `eng.spec-consolidate`). Só entra o que existe.
|
|
23
|
+
- Cada item é um link markdown com caminho relativo ao workspace (ex.: `[architecture.md](.jarvis/sessions/eng/TASK-123/architecture.md)`), seguido de uma **nota curta de estado** entre parênteses: `novo` ou `atualizado` quando foi gerado ou alterado nesta etapa, mais o que mudou ou o que o arquivo contém (ex.: `plan.md (atualizado, com comentários por fase)`, `architecture.md (aprovado; 5 questões decididas)`, `daily.md (novo; aprovado, com timesheet)`). Os arquivos que não mudaram na etapa aparecem sem nota ou com o estado em que ficaram.
|
|
24
|
+
- A lista é **reimpressa inteira** a cada etapa, sem esconder os arquivos anteriores.
|
|
25
|
+
- Logo abaixo, "🔗 Links" com o card/issue e, quando existir, o PR/MR.
|
|
26
|
+
- **Antes de cada pergunta de transição**, escreva primeiro essa mensagem em markdown, com o resumo, e só então abra o `AskUserQuestion`. Isso vale também para as perguntas que não dependem de um arquivo: a lista é o mapa de onde a tarefa está no ponto de decisão. Na pergunta que depende de um arquivo (`architecture.md`, `plan.md`, `gate-checklist.md`, `pull-request.md`, `daily.md`), o resumo é o desse arquivo. A pergunta fica curta, só com a decisão e o nome do arquivo em texto simples; ela espera a resposta enquanto a pessoa abre e lê com calma. Não dependa do link dentro do `AskUserQuestion`.
|
|
27
|
+
6. **Limites que nenhuma escolha dispensa:** `MAX_AI_EXECUTION_PERCENTAGE`, testes e lint passando, e a parada em questão nova em aberto.
|
|
22
28
|
|
|
23
29
|
### Proibido
|
|
24
30
|
|
|
@@ -32,14 +38,17 @@ Lida pelos workflows `eng.start`, `eng.plan`, `eng.work`, `eng.pre-pr` e `eng.pr
|
|
|
32
38
|
|---|---|---|---|
|
|
33
39
|
| `eng.start` | Início, só **sem Advisor** | "Como tratar as questões em aberto que surgirem?" | Tratar no architecture.md (como hoje) · Uma a uma, assim que surgirem |
|
|
34
40
|
| `eng.start` | Fim, só **sem Advisor** | "Aprovar o architecture.md?" | Aprovar e parar aqui (como hoje) · Aprovar e seguir para o `/eng.plan` · Ajustar o documento |
|
|
35
|
-
| `eng.plan` | Fim | "
|
|
41
|
+
| `eng.plan` | Fim | "O que fazer com o plano?" | Aprovar e implementar agora · Aprovar e seguir manualmente (como hoje) · Ajustar o plano |
|
|
36
42
|
| `eng.work` | Início | Execução | Fase a fase, com aprovação (como hoje) · Todas de uma vez ("N de M tarefas", pelo limite) |
|
|
37
43
|
| `eng.work` | Início | Commits | Um por fase (como hoje) · Um commit só ao final |
|
|
38
|
-
| `eng.work` | Início | Depois do work |
|
|
39
|
-
| `eng.pre-pr` | Fim | "
|
|
40
|
-
| `eng.pr` |
|
|
44
|
+
| `eng.work` | Início | Depois do work | Rodar o `/eng.pre-pr` · Rodar o `/eng.pr` · Fluxo normal (como hoje: o usuário segue os próximos comandos manualmente) |
|
|
45
|
+
| `eng.pre-pr` | Fim | Com lacunas: "Como seguir?" (depois da mensagem com o link do relatório) | Corrigir as lacunas agora · Parar aqui para corrigir à mão (como hoje) · Abrir o PR assim mesmo |
|
|
46
|
+
| `eng.pre-pr` | Fim | Sem lacunas: "Como seguir?" | Abrir o PR agora · Parar aqui (como hoje) |
|
|
47
|
+
| `eng.pr` | Início | "O que fazer com o PR?" | Revisar o texto e publicar (como hoje) · Publicar sem revisar o texto · Só gerar os arquivos (o usuário abre o PR à mão) |
|
|
41
48
|
| `eng.pr` | Fim | "O PR já foi aprovado e mergeado?" | Ainda não (como hoje) · Sim, rodar o `/eng.spec-consolidate` |
|
|
42
49
|
|
|
50
|
+
Nas perguntas "Depois do work" e "O que fazer com o plano?", a opção "como hoje" não é a primeira (em "Depois do work" fica por último), por escolha de produto: as primeiras opções são as ações que o usuário mais quer. Mesmo assim, é o fluxo que vale quando o usuário não escolhe.
|
|
51
|
+
|
|
43
52
|
**Com Advisor**, o `eng.start` não ganha pergunta nova: o Advisor decide as questões em aberto e o gate do fim segue a autonomia do `context.md`, como já estava.
|
|
44
53
|
|
|
45
54
|
### Recomendado
|
|
@@ -81,7 +81,7 @@ O `work` é **estritamente proibido** de:
|
|
|
81
81
|
|
|
82
82
|
O commit segue o formato do workflow (`{TASK_MANAGER_KEY} {tipo}({escopo}): {descrição}`, com `Refs:`). Push e PR são responsabilidade do `eng.pr`.
|
|
83
83
|
|
|
84
|
-
**Escolhas do início** (`eng.transitions-rules.md`, Fase 1.3 do workflow): execução, commits e o que vem depois. Com "Todas de uma vez", a escolha é a aprovação das fases; com "Um commit só ao final", o commit é um só, depois da última fase; com "
|
|
84
|
+
**Escolhas do início** (`eng.transitions-rules.md`, Fase 1.3 do workflow): execução, commits e o que vem depois. Com "Todas de uma vez", a escolha é a aprovação das fases; com "Um commit só ao final", o commit é um só, depois da última fase; com "Rodar o `/eng.pr`", o work termina chamando o `/eng.pr` (que faz o push e o PR, não o work).
|
|
85
85
|
|
|
86
86
|
### 2. Escopo de Atuação
|
|
87
87
|
|
|
@@ -92,7 +92,7 @@ Se a variável **não existir** (ausente; vazia é válida), **interrompa antes
|
|
|
92
92
|
Procure, na pasta do projeto, arquivos-fonte e arquivos de dependência (`package.json`, `go.mod`, `composer.json`, `pom.xml`, `build.gradle`, `pyproject.toml`, `requirements.txt`, `Gemfile`, `Cargo.toml`, `*.csproj` e afins), **ignorando** `node_modules`, `vendor`, `.git` e pastas de build.
|
|
93
93
|
|
|
94
94
|
- **Nenhum encontrado:** `ℹ️ Não encontrei código no projeto. Não criei nenhum skill; a skill base de {área} continua valendo.` e **fim**.
|
|
95
|
-
- **Mais de uma pasta candidata** (workspace com vários projetos, ou `WORKSPACE_REPOS`): pergunte qual ler.
|
|
95
|
+
- **Mais de uma pasta candidata** (workspace com vários projetos, ou `WORKSPACE_REPOS`): pergunte qual ler. Com `WORKSPACE_MODE=workspace`, leia só dentro dos repositórios (subpastas com `.git/`), nunca a raiz.
|
|
96
96
|
|
|
97
97
|
### Passo 4: Ler o projeto
|
|
98
98
|
|
|
@@ -220,6 +220,7 @@ Identificar qual IDE o usuário está utilizando:
|
|
|
220
220
|
- Depois, ofereça a carga inicial do Central docs (Passo 5.3).
|
|
221
221
|
9. **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.
|
|
222
222
|
10. **Exceção — `PROD_MODE`:** se `PROD_MODE` estiver entre as chaves novas, grave pelo `AREA`: `ENGINEERING` → `developer-guided`, `PRODUCT` → `product-led`. Com outra `AREA` (ou vazia), faça a mesma pergunta do Passo 3 (Pergunta 8 — modo de condução) e grave a resposta. `PROD_MODE` que já existe, mesmo vazia, não muda. As demais chaves continuam sem pergunta.
|
|
223
|
+
- **`WORKSPACE_MODE`:** o `jarvis init --upgrade` já grava o modo detectado (raiz sem `.git` e 1+ subpastas com `.git/` = `workspace`; raiz com `.git` = `project`). Se a chave existir vazia, detecte do mesmo jeito e grave; se existir preenchida, não muda. Em `workspace`, o caminho do Central docs padrão é `./central-docs` (Passo 5.2).
|
|
223
224
|
11. Appender as novas variáveis ao final do `ENV.md` com comentário de data:
|
|
224
225
|
```
|
|
225
226
|
# --- Upgrade YYYY-MM-DD ---
|
|
@@ -350,9 +351,10 @@ Digite o número (1-9) ou nome do cargo:
|
|
|
350
351
|
Pergunta 1: Workspace detectado: `{basename da pasta que contém $IDE/}`. Usar esse nome?
|
|
351
352
|
[Enter = sim. Só perguntar outro slug se o usuário recusar.]
|
|
352
353
|
Não perguntar single vs multi.
|
|
353
|
-
Escanear `.git/` na raiz e nas subpastas
|
|
354
|
-
-
|
|
355
|
-
-
|
|
354
|
+
Escanear `.git/` na raiz e nas subpastas e gravar `WORKSPACE_MODE` (o que define o modo é a RAIZ ser ou não um repositório, não o número de repositórios):
|
|
355
|
+
- Raiz com `.git` → `WORKSPACE_MODE=project`, `WORKSPACE_REPOS` vazio (se também houver subpastas com `.git`, como submódulos, grave `project` e avise)
|
|
356
|
+
- Raiz sem `.git` e 1 ou mais subpastas com `.git` → `WORKSPACE_MODE=workspace`; com 2 ou mais, listar e perguntar se filtra (`WORKSPACE_REPOS`); senão vazio (todas)
|
|
357
|
+
- Raiz sem `.git` e nenhuma subpasta com `.git` → `WORKSPACE_MODE=project`
|
|
356
358
|
|
|
357
359
|
Pergunta 6: Qual o limite de execução da AI? (número entre 60 e 100)
|
|
358
360
|
[aguardar resposta e validar range 60-100]
|
|
@@ -449,6 +451,7 @@ Qual o estilo dos artefatos que o Jarvis gera (commits, PRs, comentários e docu
|
|
|
449
451
|
|----------|-----------|-----------|
|
|
450
452
|
| `WORKSPACE` | Slug da pasta do `$IDE/` | Vazio = nome da pasta (detectar) |
|
|
451
453
|
| `WORKSPACE_REPOS` | Allowlist de subpastas-repo | Vazio = todas com `.git/` |
|
|
454
|
+
| `WORKSPACE_MODE` | Modo de trabalho | `workspace` (raiz sem `.git` e 1+ subpastas com `.git/`) ou `project` (raiz com `.git`). Detectado, não perguntado |
|
|
452
455
|
| `IDE` | IDE utilizada | `windsurf`, `claude`, `cursor`, `codex`, `opencode`, `gemini`, `kiro` (antigravity → gemini) |
|
|
453
456
|
| `SQUAD` | Nome do squad | Deve estar em `taxonomy.md` → Squads |
|
|
454
457
|
| `HUB` | Hub do workspace | Deve estar em `taxonomy.md` → Hubs (**inclui DATA**) |
|
|
@@ -717,8 +720,8 @@ Pergunte com `AskUserQuestion`:
|
|
|
717
720
|
**A ou B:**
|
|
718
721
|
- `CENTRAL_DOCS_STORAGE=filesystem`.
|
|
719
722
|
- `CENTRAL_DOCS_LOCATION` com o padrão do **modo de trabalho** (a pessoa pode digitar outro caminho):
|
|
720
|
-
-
|
|
721
|
-
-
|
|
723
|
+
- **`WORKSPACE_MODE=workspace`** (a raiz não é repositório e há 1+ subpastas com `.git`): `./central-docs`, com `central-docs/` no `.gitignore` do workspace;
|
|
724
|
+
- **`WORKSPACE_MODE=project`** (a raiz tem `.git`): `docs/jarvis/central-docs`, já coberto por `docs/jarvis/` no `.gitignore`.
|
|
722
725
|
- **A:** `mkdir -p {LOCATION}` e criar `{LOCATION}/AGENTS.md` mínimo, explicando:
|
|
723
726
|
- a estrutura `{SQUAD}/product/{produto}/feature-*.md` e `{SQUAD}/engineering/{produto}/delivery-*.md`;
|
|
724
727
|
- que o `{SQUAD}/index.md` é gerado pelo `jarvis docs publish`.
|
|
@@ -762,6 +765,7 @@ O arquivo `$IDE/ENV.md` deve seguir a **estrutura e ordem** de `templates/ENV-te
|
|
|
762
765
|
# --- Workspace e identidade ---
|
|
763
766
|
WORKSPACE=
|
|
764
767
|
WORKSPACE_REPOS=
|
|
768
|
+
WORKSPACE_MODE={workspace|project}
|
|
765
769
|
USER={resolvido}
|
|
766
770
|
MAX_AI_EXECUTION_PERCENTAGE={60-100}
|
|
767
771
|
ENABLE_CDD=true
|
|
@@ -1437,7 +1441,7 @@ Bem-vindo! 🎉
|
|
|
1437
1441
|
### Regras Aplicáveis
|
|
1438
1442
|
|
|
1439
1443
|
- **Idioma**: Todos os arquivos `.md` gerados devem ser em português do Brasil (pt-BR)
|
|
1440
|
-
- **Detecção de IDE**: A variável `$IDE` é detectada automaticamente (`.windsurf/`, `.claude/`, `.cursor/`, `.codex/`, `.opencode/`, `.
|
|
1444
|
+
- **Detecção de IDE**: A variável `$IDE` é detectada automaticamente (`.windsurf/`, `.claude/`, `.cursor/`, `.codex/`, `.opencode/`, `.agents/`)
|
|
1441
1445
|
- **Nunca inventar dados**: Se informação não estiver disponível, perguntar ao usuário
|
|
1442
1446
|
- **Nunca expor credenciais**: Tokens e senhas nunca devem ser expostos no chat
|
|
1443
1447
|
- **MAX_AI_EXECUTION_PERCENTAGE**:
|
|
@@ -96,7 +96,7 @@ Pergunte: **"Quer registrar alguma delas agora?"** Se sim, registre pelo 9.6 e s
|
|
|
96
96
|
**Quais projetos analisar:**
|
|
97
97
|
|
|
98
98
|
1. `WORKSPACE_REPOS` do `ENV.md`, quando preenchido
|
|
99
|
-
2. Vazio:
|
|
99
|
+
2. Vazio: com `WORKSPACE_MODE=workspace`, só as **subpastas com `.git/`** (a raiz não é repositório e guarda `$IDE/`, `.jarvis/` e outros itens fora do git); com `project`, a raiz
|
|
100
100
|
3. Monorepos sem `.git` por pacote: procure manifestos **até 2 níveis** de profundidade
|
|
101
101
|
|
|
102
102
|
**Ignore sempre** `node_modules`, `vendor`, `.git` e pastas de build.
|
|
@@ -146,9 +146,9 @@ elif [ -d ".codex" ]; then
|
|
|
146
146
|
elif [ -d ".opencode" ]; then
|
|
147
147
|
echo "IDE: OpenCode"
|
|
148
148
|
echo "Pasta: .opencode/"
|
|
149
|
-
elif [ -d ".
|
|
149
|
+
elif [ -d ".agents" ]; then
|
|
150
150
|
echo "IDE: Gemini CLI / Antigravity"
|
|
151
|
-
echo "Pasta: .
|
|
151
|
+
echo "Pasta: .agents/"
|
|
152
152
|
fi
|
|
153
153
|
```
|
|
154
154
|
|
|
@@ -161,7 +161,7 @@ fi
|
|
|
161
161
|
| Cursor | `.cursor/` | `~/.cursor/mcp.json` |
|
|
162
162
|
| Codex (OpenAI) | `.codex/` | - |
|
|
163
163
|
| OpenCode | `.opencode/` | - |
|
|
164
|
-
| Gemini CLI / Antigravity | `.
|
|
164
|
+
| Gemini CLI / Antigravity | `.agents/` | - |
|
|
165
165
|
|
|
166
166
|
Windsurf / Claude Code / Cursor / Codex / OpenCode / Gemini
|
|
167
167
|
|
|
@@ -11,20 +11,24 @@
|
|
|
11
11
|
# Workspace = a pasta que contém $IDE/. Não é o nome de um repo.
|
|
12
12
|
# Vazio: o CLI usa o nome dessa pasta. Preencha só se quiser outro slug.
|
|
13
13
|
#
|
|
14
|
-
# meu-app/ ← um
|
|
14
|
+
# meu-app/ ← a raiz é um repositório (WORKSPACE_MODE=project)
|
|
15
15
|
# ├── .windsurf/ENV.md
|
|
16
16
|
# ├── .jarvis/sessions/
|
|
17
17
|
# └── .git/
|
|
18
18
|
#
|
|
19
|
-
# workspace-squad/ ←
|
|
20
|
-
# ├── .windsurf/ENV.md
|
|
19
|
+
# workspace-squad/ ← a raiz NÃO é repositório; 1 ou mais subpastas com .git
|
|
20
|
+
# ├── .windsurf/ENV.md (WORKSPACE_MODE=workspace)
|
|
21
21
|
# ├── .jarvis/sessions/
|
|
22
22
|
# ├── repo-api-1/
|
|
23
23
|
# └── repo-frontend/
|
|
24
24
|
#
|
|
25
25
|
# WORKSPACE_REPOS = allowlist opcional. Vazio = todas as subpastas com .git/.
|
|
26
|
+
# WORKSPACE_MODE = workspace | project (detectado pelo /jarvis-init e pelo upgrade).
|
|
27
|
+
# workspace: a raiz não tem .git e há 1+ subpastas com .git/ (não depende do número de repos).
|
|
28
|
+
# project: a raiz tem .git. O git já delimita o que é código.
|
|
26
29
|
WORKSPACE=
|
|
27
30
|
WORKSPACE_REPOS=
|
|
31
|
+
WORKSPACE_MODE=
|
|
28
32
|
USER=
|
|
29
33
|
|
|
30
34
|
# Limite de autonomia da IA neste workspace (60–100). 80 = a IA executa até 80%.
|
|
@@ -251,10 +251,11 @@ graph TD
|
|
|
251
251
|
> Tudo que for **diferente do código ou ambíguo no card** vira uma questão aqui, detalhada a ponto de outro agente entendê-la sem reconstruir a análise. No mínimo 3 opções, mais a **4 — Outra**.
|
|
252
252
|
> **Com Advisor** (cabeçalho), a sugestão do Advisor prevalece e é a decisão adotada; o agente principal não a substitui nem contesta. **Sem Advisor**, "Sugestão do Sub-Agent (Advisor)" e "Divergência" ficam "N/A (Advisor não utilizado)", a regra em destaque é omitida e a decisão é a do usuário ao revisar o documento.
|
|
253
253
|
> Questão levantada depois do `eng.start` (consulta por exceção) entra aqui, numerada em sequência, marcada "levantada no `eng.plan`" ou "no `eng.work`". Sem questão em aberto, escreva "Nenhuma" e o motivo em uma frase.
|
|
254
|
+
> **Marcação para leitura rápida:** decidida a questão, a opção escolhida ganha ✅ e "(escolhida)" no título, e as demais ganham ❌, inclusive a **4 — Outra**. A coluna "Opção escolhida" da tabela repete a escolha (`✅ {n} — {nome curto}`). Enquanto a questão estiver 🔄 Aberta, as opções ficam sem marcação e a coluna fica "—".
|
|
254
255
|
|
|
255
|
-
| ID | Questão | Responsável | Deadline | Status |
|
|
256
|
-
| -- | ---------------------------- | --------------------------- | -------- | -------------------------- |
|
|
257
|
-
| Q1 | {resumo objetivo da questão} | {Advisor \| nome do usuário} | {— \| data} | {✅ Decidida \| 🔄 Aberta} |
|
|
256
|
+
| ID | Questão | Opção escolhida | Responsável | Deadline | Status |
|
|
257
|
+
| -- | ---------------------------- | ----------------------------------- | --------------------------- | -------- | -------------------------- |
|
|
258
|
+
| Q1 | {resumo objetivo da questão} | {✅ {n} — {nome curto} \| —} | {Advisor \| nome do usuário} | {— \| data} | {✅ Decidida \| 🔄 Aberta} |
|
|
258
259
|
|
|
259
260
|
### Q1 — {Título da questão}
|
|
260
261
|
|
|
@@ -269,17 +270,17 @@ graph TD
|
|
|
269
270
|
|
|
270
271
|
**Opções:**
|
|
271
272
|
|
|
272
|
-
|
|
273
|
+
**✅ 1. {Opção 1} (escolhida)**
|
|
273
274
|
* Como funciona: {descrição}
|
|
274
275
|
* Vantagens: {vantagens}
|
|
275
276
|
* Desvantagens: {desvantagens}
|
|
276
277
|
* Impacto: {impacto}
|
|
277
278
|
|
|
278
|
-
|
|
279
|
+
**❌ 2. {Opção 2}** (mesmo formato)
|
|
279
280
|
|
|
280
|
-
|
|
281
|
+
**❌ 3. {Opção 3}** (mesmo formato)
|
|
281
282
|
|
|
282
|
-
|
|
283
|
+
**❌ 4. Outra**
|
|
283
284
|
* Alternativa adicional identificada pelo Sub-Agent/Advisor, detalhada caso ele entenda que nenhuma das opções anteriores é a melhor abordagem.
|
|
284
285
|
|
|
285
286
|
**Sugestão do Agente Principal (Architect):**
|
|
@@ -289,7 +290,7 @@ graph TD
|
|
|
289
290
|
{recomendação independente do Advisor + justificativa técnica}
|
|
290
291
|
|
|
291
292
|
**Decisão adotada:**
|
|
292
|
-
**{recomendação do Sub-Agent/Advisor}**
|
|
293
|
+
✅ **{n} — {recomendação do Sub-Agent/Advisor}**
|
|
293
294
|
|
|
294
295
|
> **Regra:** a recomendação do Advisor sempre prevalece e deve ser adotada na implementação, independentemente de ser igual ou diferente da recomendação do Agente Principal.
|
|
295
296
|
|
|
@@ -9,7 +9,7 @@ task_key: {TASK-123}
|
|
|
9
9
|
# URL do card no task manager (padrão da eng.integrations-rules.md). Vazio no modo freelance.
|
|
10
10
|
card_url: {URL}
|
|
11
11
|
|
|
12
|
-
# Pull/Merge Request aberto: número e URL.
|
|
12
|
+
# Pull/Merge Request aberto: número e URL. Vazio se o PR ainda não foi aberto (o daily.md é gerado mesmo assim).
|
|
13
13
|
pr: {#n URL}
|
|
14
14
|
|
|
15
15
|
# Branch de trabalho e branch base (Branch base: do architecture.md).
|
|
@@ -30,7 +30,7 @@ updated_at: {YYYY-MM-DD}
|
|
|
30
30
|
|
|
31
31
|
# Daily — {TASK_KEY}
|
|
32
32
|
|
|
33
|
-
> Registro pessoal do esforço: narrativa auditável e linha pronta para o timesheet. Fica só na sessão, nunca é publicado. Uma seção por data (`## AAAA-MM-DD`), no formato abaixo, para
|
|
33
|
+
> Registro pessoal do esforço: narrativa auditável e linha pronta para o timesheet. Fica só na sessão, nunca é publicado. Uma seção por data (`## AAAA-MM-DD`), no formato abaixo, para o `/eng.daily-report` juntar os registros por dia.
|
|
34
34
|
|
|
35
35
|
## {AAAA-MM-DD}
|
|
36
36
|
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Junta os daily.md das sessões em um relatório por dia (mapa mental), com alertas das sessões sem daily.md
|
|
3
|
+
auto_execution_mode: 3
|
|
4
|
+
recommended_model: sonnet
|
|
5
|
+
model_tier: medium
|
|
6
|
+
model_justification: Leitura de poucos arquivos e síntese curta; a janela, as datas e os alertas já vêm prontos do CLI
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Relatório dos daily.md
|
|
10
|
+
|
|
11
|
+
Este comando junta o que foi feito nos últimos `N` dias, lendo os `daily.md` que o `/eng.pr` grava em cada sessão. O resultado é um relatório em markdown, do dia mais recente para o mais antigo, em lista aninhada (tarefa > frentes de trabalho > detalhes), com a linha de timesheet de cada tarefa e um bloco de **alertas** das sessões que deveriam ter `daily.md` e não têm.
|
|
12
|
+
|
|
13
|
+
> 🔒 **Privado**: o relatório reaproveita a narrativa e o timesheet pessoais do `daily.md`. Ele fica em `$ENG_DOCS/daily-reports/` (dentro de `docs/jarvis/`, fora do versionamento) e **nunca** é publicado: nem no Central docs, nem no card.
|
|
14
|
+
|
|
15
|
+
### Skills invocados durante o workflow
|
|
16
|
+
|
|
17
|
+
| Passo | Skill | Condição |
|
|
18
|
+
|-------|-------|----------|
|
|
19
|
+
| — | Nenhuma — workflow autocontido | — |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Argumento
|
|
24
|
+
|
|
25
|
+
<arguments>
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</arguments>
|
|
28
|
+
|
|
29
|
+
`{N}` é a janela em dias: **1, 3, 7, 15, 30 ou 60** (padrão **7**). A janela é do calendário local e inclui hoje: `1` = só hoje; `7` = hoje e os 6 dias anteriores.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Passo 1: Ler as sessões
|
|
34
|
+
|
|
35
|
+
Rode o helper do CLI (ele lê o `ENV.md` do workspace, mesmo se você estiver dentro de um repositório filho):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
jarvis daily-report --days {N} --json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- **Saída com erro** (código 1, por exemplo `N` inválido): mostre a mensagem, que já lista os valores aceitos, e **pare**. Não crie arquivo.
|
|
42
|
+
- **Saída JSON**: use os campos abaixo e não refaça as contas (janela, fuso, ordem e alertas já estão certos).
|
|
43
|
+
|
|
44
|
+
| Campo | O que é |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `days`, `window.from`, `window.to`, `today` | Janela pedida, no calendário local |
|
|
47
|
+
| `sessionsScanned`, `sessionsInWindow` | Sessões lidas em `$SESSIONS_DIR/eng/` e quantas entram na janela |
|
|
48
|
+
| `byDate[]` | Um item por dia com registro, do mais recente para o mais antigo; em cada um, `tasks[]` com `key`, `taskKey`, `cardUrl`, `pr`, `description` e `timesheet` (seção `## AAAA-MM-DD` do `daily.md`) |
|
|
49
|
+
| `alerts[]` | Sessões sem `daily.md` que deveriam ter (chegaram ao `eng.pr` ou começaram a partir de 2026-10-15), com `date`, `dateSource`, `activity`, `issueKey`, `prNumber` |
|
|
50
|
+
| `warnings[]` | Avisos (por exemplo, data tirada da modificação da pasta) |
|
|
51
|
+
| `reportPath`, `reportPathAbs` | Onde escrever o relatório |
|
|
52
|
+
|
|
53
|
+
Os textos já vêm sem e-mails.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Passo 2: Completar os alertas pelo vendor
|
|
58
|
+
|
|
59
|
+
Para cada item de `alerts` com `prNumber` ou `issueKey`, consulte o vendor de `VERSION_CONTROL`/`TASK_MANAGER` (no GitHub: `gh pr view {n} --json title,createdAt` e `gh issue view {n} --json title`):
|
|
60
|
+
|
|
61
|
+
- **Título:** use o do vendor quando `activity` vier vazia.
|
|
62
|
+
- **Data:** se houver PR, a data de criação dele (em fuso local) vale mais que a data local do helper. Se ela cair fora da janela, tire o alerta.
|
|
63
|
+
- Sem vendor, sem acesso ou com falha: siga com o que veio do helper, sem perguntar.
|
|
64
|
+
- Sem nenhuma fonte de atividade: escreva "não identificada", só com o ID da sessão.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Passo 3: Escrever o relatório
|
|
69
|
+
|
|
70
|
+
Crie a pasta de `reportPathAbs`, se não existir, e escreva o arquivo. Se já existir um relatório com a mesma janela no mesmo dia, ele é **sobrescrito**. Janelas diferentes no mesmo dia convivem.
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
# Daily report — {window.from} a {window.to} ({N} dias)
|
|
74
|
+
|
|
75
|
+
> Gerado em {AAAA-MM-DD HH:MM} · {sessionsScanned} sessões lidas · {sessionsInWindow} na janela · privado, não publicar
|
|
76
|
+
|
|
77
|
+
## ⚠️ Alertas: sessões sem daily.md
|
|
78
|
+
|
|
79
|
+
| Data | ID da sessão | Atividade | Status |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| {date} | {key} | {activity} ({issueKey}, PR {prNumber}) | sem daily.md{; data pela modificação da pasta, se dateSource = mtime} |
|
|
82
|
+
|
|
83
|
+
## {AAAA-MM-DD} ({dia da semana})
|
|
84
|
+
|
|
85
|
+
- **{taskKey} — {título curto}** ([card]({cardUrl}), [PR {n}]({url do PR}))
|
|
86
|
+
- {frente de trabalho 1}
|
|
87
|
+
- {detalhe}
|
|
88
|
+
- {frente de trabalho 2}
|
|
89
|
+
- {detalhe}
|
|
90
|
+
- 🕒 `{timesheet}`
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
- **Alertas** vêm antes dos dias. Sem alertas, troque a tabela por "✅ Todas as sessões da janela têm `daily.md`."
|
|
94
|
+
- **Um bloco `##` por data de `byDate`, na mesma ordem** (decrescente). Dia sem registro não aparece.
|
|
95
|
+
- **Síntese por tarefa:** de 3 a 5 frentes de trabalho, cada uma com detalhes curtos, tirados **só** da `description` (contexto, o que foi feito, decisões; *post mortem* quando houver). Não acrescente fatos. O título curto vem da linha de timesheet ou do card.
|
|
96
|
+
- **Timesheet literal:** a linha `timesheet` entra sem alteração, para copiar.
|
|
97
|
+
- Links: `cardUrl` e o PR de `pr` (o campo traz `#n` e a URL). Faltando, omita o link.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Passo 4: Mostrar o resultado
|
|
102
|
+
|
|
103
|
+
Mostre, em markdown:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
✅ Relatório gerado: [{nome do arquivo}]({reportPath})
|
|
107
|
+
|
|
108
|
+
🗓️ Janela: {window.from} a {window.to} ({N} dias)
|
|
109
|
+
📚 Sessões: {sessionsScanned} lidas · {sessionsInWindow} na janela · {dias com registro} dias com registro
|
|
110
|
+
⚠️ Alertas: {quantidade} ({IDs}) — rode o /eng.pr nessas sessões (Fase 7.2) para gerar o daily.md
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
O link usa o caminho relativo ao workspace (`reportPath`).
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Regras
|
|
118
|
+
|
|
119
|
+
### ✅ Faça
|
|
120
|
+
|
|
121
|
+
- Use o JSON do `jarvis daily-report` como fonte da janela, das datas, da ordem e dos alertas
|
|
122
|
+
- Mantenha a linha de timesheet literal
|
|
123
|
+
- Sobrescreva o relatório da mesma janela no mesmo dia
|
|
124
|
+
|
|
125
|
+
### ⛔ Não faça
|
|
126
|
+
|
|
127
|
+
- Não publique o relatório (Central docs, card, PR) nem o copie para fora de `docs/jarvis/`
|
|
128
|
+
- Não inclua e-mails, tokens nem valores de variáveis do `ENV.md`
|
|
129
|
+
- Não acrescente fatos além do `daily.md` e do vendor
|
|
130
|
+
- Não altere os `daily.md` nem outros arquivos das sessões
|
|
131
|
+
- Não gere arquivo quando a janela for inválida
|
|
@@ -165,10 +165,10 @@ CONTEXT_PROFILE:
|
|
|
165
165
|
|
|
166
166
|
### Fase 4: Validação
|
|
167
167
|
|
|
168
|
-
1. **Apresentar** o plano ao humano
|
|
168
|
+
1. **Apresentar** o plano ao humano, com o consolidado de links da sessão (regra 5 de `eng.transitions-rules.md`: `context.md`, `architecture.md` e o `plan.md` novo)
|
|
169
169
|
2. **Discutir** ajustes necessários
|
|
170
170
|
3. **Atualizar** `architecture.md` se houver mudanças arquiteturais
|
|
171
|
-
4. **Confirmar** antes de prosseguir, com a pergunta de transição (`eng.transitions-rules.md`): **"
|
|
171
|
+
4. **Confirmar** antes de prosseguir, com a pergunta de transição (`eng.transitions-rules.md`): **"O que fazer com o plano?"** (depois da mensagem em markdown com o consolidado de links) → **Aprovar e implementar agora** (chame o `/eng.work {TASK_MANAGER_KEY}`, ou mostre o comando) / **Aprovar e seguir manualmente (como hoje)** (o comando termina e o usuário chama o `/eng.work` quando quiser) / **Ajustar o plano** (o usuário diz o que mudar; atualize o `plan.md` e mostre de novo). As duas aprovações valem como a aprovação explícita do plano
|
|
172
172
|
|
|
173
173
|
---
|
|
174
174
|
|