jarvis-ai-framework 1.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 (240) hide show
  1. package/AGENTS.md +416 -0
  2. package/LICENSE +21 -0
  3. package/README.md +190 -0
  4. package/agents/AGENTS.md +234 -0
  5. package/agents/README.md +309 -0
  6. package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
  7. package/agents/engineering/eng.agent.md +303 -0
  8. package/agents/engineering/eng.bug-hunter.md +386 -0
  9. package/agents/engineering/eng.cybersecurity.agent.md +503 -0
  10. package/agents/engineering/eng.dev-code-reviewer.md +148 -0
  11. package/agents/engineering/eng.docs-writer.md +152 -0
  12. package/agents/engineering/eng.frontend.agent.md +117 -0
  13. package/agents/engineering/eng.rpa.agent.md +215 -0
  14. package/agents/engineering/eng.tech-analyst.agent.md +102 -0
  15. package/agents/engineering/eng.ux-designer.agent.md +193 -0
  16. package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
  17. package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
  18. package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
  19. package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
  20. package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
  21. package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
  22. package/agents/product/prod.pm-checker.md +52 -0
  23. package/bin/commands/docs-publish.js +184 -0
  24. package/bin/commands/docs-sync.js +139 -0
  25. package/bin/commands/info.js +87 -0
  26. package/bin/commands/init.js +237 -0
  27. package/bin/commands/install-rtk.js +90 -0
  28. package/bin/commands/list.js +48 -0
  29. package/bin/commands/qa-signoff.js +112 -0
  30. package/bin/commands/whoami.js +43 -0
  31. package/bin/jarvis.js +159 -0
  32. package/bin/lib/auth/session.js +56 -0
  33. package/bin/lib/config/constants.js +123 -0
  34. package/bin/lib/config/ide-config.js +233 -0
  35. package/bin/lib/core/scanner.js +124 -0
  36. package/bin/lib/core/sync-engine.js +551 -0
  37. package/bin/lib/docs/fetch-file.sh +41 -0
  38. package/bin/lib/docs/publish-file.sh +284 -0
  39. package/bin/lib/docs/validate-frontmatter.js +157 -0
  40. package/bin/lib/env-loader.js +198 -0
  41. package/bin/lib/tasks/comment.js +131 -0
  42. package/bin/lib/utils/git-parser.js +145 -0
  43. package/bin/lib/utils/logger.js +104 -0
  44. package/bin/lib/utils/npmrc-parser.js +106 -0
  45. package/bin/lib/utils/paths.js +55 -0
  46. package/bin/lib/utils/ui.js +59 -0
  47. package/bin/lib/vcs/api.js +312 -0
  48. package/bin/lib/vcs/create-issue.js +43 -0
  49. package/bin/lib/vcs/create-merge.js +43 -0
  50. package/bin/lib/vcs/fetch-raw.js +30 -0
  51. package/bin/postinstall.js +41 -0
  52. package/members.md +25 -0
  53. package/package.json +55 -0
  54. package/rules/AGENTS.md +205 -0
  55. package/rules/engineering/data/data-rules.md +200 -0
  56. package/rules/engineering/eng-rules.md +243 -0
  57. package/rules/engineering/eng-security-rules.md +186 -0
  58. package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
  59. package/rules/engineering/eng.bump-rules.md +27 -0
  60. package/rules/engineering/eng.docs-scraping-rules.md +64 -0
  61. package/rules/engineering/eng.downstream-flow-rules.md +297 -0
  62. package/rules/engineering/eng.integrations-rules.md +73 -0
  63. package/rules/engineering/eng.plan-rules.md +333 -0
  64. package/rules/engineering/eng.pr-rules.md +359 -0
  65. package/rules/engineering/eng.pre-pr-rules.md +103 -0
  66. package/rules/engineering/eng.start-rules.md +246 -0
  67. package/rules/engineering/eng.tech-spec-rules.md +968 -0
  68. package/rules/engineering/eng.work-rules.md +312 -0
  69. package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
  70. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
  71. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
  72. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
  73. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
  74. package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
  75. package/rules/product/README.md +24 -0
  76. package/rules/product/prod-rules.md +151 -0
  77. package/rules/rtk-rules.md +68 -0
  78. package/skills/AGENTS.md +290 -0
  79. package/skills/SKILLS-ROADMAP.md +333 -0
  80. package/skills/churn-audit/SKILL.md +385 -0
  81. package/skills/context-detect/SKILL.md +399 -0
  82. package/skills/context-detect/assets/context-profile-template.md +127 -0
  83. package/skills/docs-central/README.md +310 -0
  84. package/skills/docs-central/SKILL.md +423 -0
  85. package/skills/docs-index/SKILL.md +377 -0
  86. package/skills/eng-ai-engineer/SKILL.md +296 -0
  87. package/skills/eng-arch-c4/SKILL.md +358 -0
  88. package/skills/eng-arch-c4/assets/example-code.md +189 -0
  89. package/skills/eng-arch-c4/assets/example-component.md +105 -0
  90. package/skills/eng-arch-c4/assets/example-container.md +104 -0
  91. package/skills/eng-arch-c4/assets/example-context.md +81 -0
  92. package/skills/eng-backend/SKILL.md +776 -0
  93. package/skills/eng-browser-extension-builder/SKILL.md +385 -0
  94. package/skills/eng-cybersecurity/SKILL.md +645 -0
  95. package/skills/eng-data-bi/SKILL.md +199 -0
  96. package/skills/eng-data-debug/SKILL.md +307 -0
  97. package/skills/eng-data-engineer/SKILL.md +256 -0
  98. package/skills/eng-data-onboard/SKILL.md +310 -0
  99. package/skills/eng-data-orchestrator/SKILL.md +426 -0
  100. package/skills/eng-design-system/SKILL.md +619 -0
  101. package/skills/eng-docs-write/SKILL.md +312 -0
  102. package/skills/eng-frontend/SKILL.md +913 -0
  103. package/skills/eng-jira-comment/SKILL.md +17 -0
  104. package/skills/eng-microfrontend/SKILL.md +602 -0
  105. package/skills/eng-ms-trace/SKILL.md +469 -0
  106. package/skills/eng-nestjs/SKILL.md +791 -0
  107. package/skills/eng-performance-engineer/SKILL.md +312 -0
  108. package/skills/eng-pr/SKILL.md +339 -0
  109. package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
  110. package/skills/eng-qa-bug-report/SKILL.md +1088 -0
  111. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
  112. package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
  113. package/skills/eng-qa-dev-guide/SKILL.md +164 -0
  114. package/skills/eng-qa-e2e/SKILL.md +400 -0
  115. package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
  116. package/skills/eng-qa-exploratory/SKILL.md +188 -0
  117. package/skills/eng-qa-gate/SKILL.md +370 -0
  118. package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
  119. package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
  120. package/skills/eng-qa-quality-report/SKILL.md +412 -0
  121. package/skills/eng-qa-test-plan/SKILL.md +466 -0
  122. package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
  123. package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
  124. package/skills/eng-qa-testsprite/SKILL.md +325 -0
  125. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
  126. package/skills/eng-qa-unit-test/SKILL.md +471 -0
  127. package/skills/eng-rabbitmq/SKILL.md +661 -0
  128. package/skills/eng-scraper/SKILL.md +683 -0
  129. package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
  130. package/skills/eng-security-patch/SKILL.md +378 -0
  131. package/skills/eng-security-triage/SKILL.md +266 -0
  132. package/skills/eng-task-comment/SKILL.md +60 -0
  133. package/skills/eng-tech-analyst/SKILL.md +529 -0
  134. package/skills/eng-threat-model/SKILL.md +161 -0
  135. package/skills/init-jarvis/SKILL.md +1304 -0
  136. package/skills/init-jarvis/assets/mcp-configs.md +389 -0
  137. package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
  138. package/skills/init-jarvis/assets/setup-guide.md +360 -0
  139. package/skills/lovable-prompt-generator/SKILL.md +304 -0
  140. package/skills/prod-roadmap-report/README.md +303 -0
  141. package/skills/prod-roadmap-report/SKILL.md +198 -0
  142. package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
  143. package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
  144. package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
  145. package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
  146. package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
  147. package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
  148. package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
  149. package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
  150. package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
  151. package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
  152. package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
  153. package/skills/prod-specs/SKILL.md +108 -0
  154. package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
  155. package/skills/prod-specs/references/prod.spec.epic.md +107 -0
  156. package/skills/prod-specs/references/prod.spec.frd.md +135 -0
  157. package/skills/prod-specs/references/prod.spec.issue.md +145 -0
  158. package/skills/prod-specs/references/prod.spec.prd.md +118 -0
  159. package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
  160. package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
  161. package/skills/prod-specs/templates/prod-epic-template.md +76 -0
  162. package/skills/prod-specs/templates/prod-frd-template.md +172 -0
  163. package/skills/prod-specs/templates/prod-issue-template.md +68 -0
  164. package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
  165. package/skills/prod-specs/templates/prod-prd-template.md +173 -0
  166. package/skills/prod-specs-update/SKILL.md +272 -0
  167. package/skills/report-issue/SKILL.md +156 -0
  168. package/taxonomy.md +270 -0
  169. package/templates/AGENTS.md +189 -0
  170. package/templates/CDD aplicado a Prompts.md +182 -0
  171. package/templates/ENV-template.md +187 -0
  172. package/templates/engineering/AGENTS-template.md +71 -0
  173. package/templates/engineering/ARD-template.md +193 -0
  174. package/templates/engineering/CONTACTS-template.md +135 -0
  175. package/templates/engineering/PR-template.md +40 -0
  176. package/templates/engineering/RFC-Playbook.md +325 -0
  177. package/templates/engineering/RFC-template.md +199 -0
  178. package/templates/engineering/architecture-template.md +277 -0
  179. package/templates/engineering/breakdown-subtasks-template.md +582 -0
  180. package/templates/engineering/c4-model-template.md +516 -0
  181. package/templates/engineering/data-contract-template.md +135 -0
  182. package/templates/engineering/data-pipeline-template.md +163 -0
  183. package/templates/engineering/plan-template.md +255 -0
  184. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
  185. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
  186. package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
  187. package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
  188. package/templates/engineering/qa/qa.quality-report-template.md +130 -0
  189. package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
  190. package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
  191. package/templates/engineering/swagger-template.md +145 -0
  192. package/templates/engineering/tech-spec-template.md +497 -0
  193. package/templates/engineering/work-progress-template.md +155 -0
  194. package/workflows/AGENTS.md +240 -0
  195. package/workflows/README.md +160 -0
  196. package/workflows/all-tools.md +11 -0
  197. package/workflows/engineering/data/data.contract.md +202 -0
  198. package/workflows/engineering/data/data.new-pipeline.md +234 -0
  199. package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
  200. package/workflows/engineering/eng.bug-audit.md +591 -0
  201. package/workflows/engineering/eng.build-tech-spec.md +1116 -0
  202. package/workflows/engineering/eng.create-ard-from-code.md +259 -0
  203. package/workflows/engineering/eng.create-ard.md +382 -0
  204. package/workflows/engineering/eng.create-rfc.md +245 -0
  205. package/workflows/engineering/eng.debug.md +479 -0
  206. package/workflows/engineering/eng.docs.md +40 -0
  207. package/workflows/engineering/eng.light-arch.md +84 -0
  208. package/workflows/engineering/eng.plan.md +213 -0
  209. package/workflows/engineering/eng.pr.md +466 -0
  210. package/workflows/engineering/eng.pre-pr.md +167 -0
  211. package/workflows/engineering/eng.review.md +185 -0
  212. package/workflows/engineering/eng.rpa.robot.md +342 -0
  213. package/workflows/engineering/eng.security-audit.md +312 -0
  214. package/workflows/engineering/eng.security-incident.md +275 -0
  215. package/workflows/engineering/eng.security-pipeline.md +210 -0
  216. package/workflows/engineering/eng.security-review.md +235 -0
  217. package/workflows/engineering/eng.start.md +494 -0
  218. package/workflows/engineering/eng.work.md +558 -0
  219. package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
  220. package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
  221. package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
  222. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
  223. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
  224. package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
  225. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
  226. package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
  227. package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
  228. package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
  229. package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
  230. package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
  231. package/workflows/product/prod.roadmap.preview.md +110 -0
  232. package/workflows/product/prod.spec.breakdown.md +163 -0
  233. package/workflows/product/prod.spec.clarify.md +178 -0
  234. package/workflows/product/prod.spec.epic.md +154 -0
  235. package/workflows/product/prod.spec.frd.md +96 -0
  236. package/workflows/product/prod.spec.issue.md +145 -0
  237. package/workflows/product/prod.spec.md +60 -0
  238. package/workflows/product/prod.spec.prd.md +100 -0
  239. package/workflows/taxonomy.md +92 -0
  240. package/workflows/warm-up.md +574 -0
@@ -0,0 +1,1304 @@
1
+ ---
2
+ name: init-jarvis
3
+ description: Inicializa o framework JARVIS e guia novos membros no processo de onboarding. Use quando precisar configurar o ambiente, criar ENV.md, validar MCPs ou orientar um novo desenvolvedor.
4
+ argument-hint: "[nome-do-membro-opcional]"
5
+ disable-model-invocation: false
6
+ allowed-tools: Read Write Edit Grep Glob Bash MCP
7
+ license: AGPL-3.0
8
+ metadata:
9
+ author: jarvis-team
10
+ version: "1.1"
11
+ ---
12
+
13
+ # Init - Inicialização do Framework e Onboarding
14
+
15
+ Você é um **especialista em inicialização de ambiente e onboarding técnico** focado em configurar o framework JARVIS e ajudar novos membros do time.
16
+
17
+ ## Contrato do fork (ler antes de executar)
18
+
19
+ Regras que **substituem** qualquer trecho legado deste skill ou dos assets:
20
+
21
+ 1. **Sem login/OAuth** — identidade = `USER=` (ENV.md → git email → SO). Nunca pedir `jarvis login` nem `~/.jarvis/auth.json`.
22
+ 2. **Sem `PROJECT_NAME` / `WORKSPACE_TYPE`** — a unidade é **workspace** (pasta que contém `$IDE/`).
23
+ 3. **Sessões no workspace** — `SESSIONS_DIR=.jarvis/sessions` com `{eng,prod,qa}/`. Estado local em `{workspace}/.jarvis/` (não em `~/.jarvis/`).
24
+ 4. **`TASK_MANAGER` vazio = freelance** — sem Jira/Linear. Workflows pedem `TASK_MANAGER_KEY` (controle próprio). MCP de task manager **não** é obrigatório.
25
+ 5. **Context7 obrigatório**; demais MCPs (Jira, Redis, Sentry, TestSprite) **não bloqueiam**.
26
+ 6. **Sem event bus / metrics / checkin-checkout-daily** — não provisionar Redis runtime nem pedir métricas.
27
+ 7. **Tokens de Git** não vão no ENV.md — GitLab `.npmrc`; GitHub `gh auth` / `GITHUB_TOKEN`; Bitbucket `BITBUCKET_TOKEN`. Não existe `TOKEN_VERSION_CONTROL` no template.
28
+ 8. **Autonomia** — qualquer `POSITION` (JUNIOR…CTO / PM) pode rodar o card ponta a ponta (`/eng.start` → `/eng.pr`). Sem gate obrigatório de TL/PM no init.
29
+ 9. **Fonte do ENV** — só `templates/ENV-template.md`. Não inventar variáveis. `JARVIS_PROJECT` default: `https://github.com/phelipperibeiro/jarvis-framework`.
30
+ 10. **IDEs** — windsurf, claude, cursor, codex, opencode, gemini/antigravity, kiro.
31
+
32
+ ## Objetivo
33
+
34
+ - Configurar ambiente de desenvolvimento
35
+ - Validar MCP obrigatório (Context7) e checar task manager só se `TASK_MANAGER` estiver definido (não bloqueante)
36
+ - Criar arquivos de configuração (ENV.md, AGENTS.md) e pastas `.jarvis/sessions/{eng,prod,qa}`
37
+ - Orientar nos processos do framework (sem ritual diário / login)
38
+
39
+ ## Entrada
40
+
41
+ - `$ARGUMENTS` - (Opcional) Nome do novo membro para personalizar o onboarding
42
+
43
+ ## Recursos
44
+
45
+ - **Taxonomia**: `taxonomy.md` (na raiz do framework / workspace) - Define opções válidas para SQUAD, HUB, POSITION, AREA
46
+ - **Template ENV**: `templates/ENV-template.md` (**única** fonte — não use ENV-example.md)
47
+ - **Template AGENTS**: `templates/engineering/AGENTS-template.md`
48
+ - **Configurações MCP**: `$IDE/skills/init-jarvis/assets/mcp-configs.md`
49
+ - **Checklist Onboarding**: `$IDE/skills/init-jarvis/assets/onboarding-checklist.md`
50
+ - **Guia de Setup**: `$IDE/skills/init-jarvis/assets/setup-guide.md`
51
+ - **Saída**: `$IDE/ENV.md`, `AGENTS.md`, `{workspace}/.jarvis/sessions/{eng,prod,qa}/`
52
+
53
+ ---
54
+
55
+ ## Fluxo de Execução
56
+
57
+ ```
58
+ ┌─────────────────────────────────────────────────────────────┐
59
+ │ │
60
+ │ 1. DETECTAR IDE → Identificar ambiente │
61
+ │ ↓ │
62
+ │ 2. VERIFICAR → Se ENV.md já existe │
63
+ │ ↓ │
64
+ │ 3. COLETAR → Variáveis obrigatórias │
65
+ │ ↓ │
66
+ │ 4. PERGUNTAR → Variáveis opcionais │
67
+ │ ↓ │
68
+ │ 5. CRIAR → Arquivo ENV.md + pastas .jarvis/sessions │
69
+ │ ↓ │
70
+ │ 5.1 FLATTEN → Workflows para raiz (se IDE ≠ claude) │
71
+ │ ↓ │
72
+ │ 6. VALIDAR → Context7 (obrigatório) + MCPs opcionais │
73
+ │ ↓ │
74
+ │ 7. CRIAR → AGENTS.md │
75
+ │ ↓ │
76
+ │ 8. SYNC RULES → Filtrar por perfil (HUB/POSITION/AREA/SQUAD)│
77
+ │ ↓ │
78
+ │ 9. CONFIRMAR → Com usuário │
79
+ │ │
80
+ └─────────────────────────────────────────────────────────────┘
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Fluxo de Trabalho Detalhado
86
+
87
+ ### 1. Resolver identidade local (sem login)
88
+
89
+ Não existe OAuth. `USER` vem do ambiente local.
90
+
91
+ Ordem de resolução:
92
+ 1. `USER=` já presente em `$IDE/ENV.md` (se existir)
93
+ 2. `git config --get user.email`
94
+ 3. username do SO (`whoami`)
95
+
96
+ ```bash
97
+ AUTH_EMAIL=$(grep -E '^USER=' "$IDE/ENV.md" 2>/dev/null | cut -d= -f2- | tr -d ' \r')
98
+ [ -z "$AUTH_EMAIL" ] && AUTH_EMAIL=$(git config --get user.email 2>/dev/null)
99
+ [ -z "$AUTH_EMAIL" ] && AUTH_EMAIL=$(whoami)
100
+ ```
101
+
102
+ - Informar: `✅ Identidade: {AUTH_EMAIL}`
103
+ - Se o valor resolvido estiver ok, **não perguntar** — gravar em `USER=` no ENV.md
104
+ - Se o usuário quiser outro identificador (email ou nome), perguntar **uma vez** e usar a resposta
105
+ - **NUNCA** pedir `jarvis login`
106
+ - **NUNCA** bloquear por falta de `~/.jarvis/auth.json`
107
+
108
+ ---
109
+
110
+ ### 2. Carregar Taxonomia Organizacional
111
+
112
+ **SEGUNDO PASSO OBRIGATÓRIO**: Ler o arquivo `taxonomy.md` para obter as opções válidas.
113
+
114
+ ```bash
115
+ # Ler taxonomia
116
+ cat taxonomy.md
117
+ ```
118
+
119
+ **Extrair opções válidas** de cada categoria:
120
+
121
+ 1. **SQUADS**: Todas as opções sob "## 🏢 Squads"
122
+ - Extrair apenas os nomes em MAIÚSCULAS (###)
123
+ - Exemplo: nomes em `###` sob Squads no `taxonomy.md`
124
+
125
+ 2. **HUBS**: Todas as opções sob "## 🎯 Hubs"
126
+ - Extrair: `AI`, `FRONTEND`, `BACKEND`, `QA`, `DATA`, `FULLCYCLE`
127
+
128
+ 3. **POSITIONS**: Todas as opções sob "## 👤 Positions"
129
+ - Extrair: `JUNIOR`, `PLENO`, `SENIOR`, `TECH LEAD`, etc.
130
+
131
+ 4. **AREAS**: Todas as opções sob "## 📊 Areas"
132
+ - Extrair: `ENGINEERING`, `PRODUCT`
133
+
134
+ **Formato de parsing**:
135
+ ```javascript
136
+ // Pseudocódigo
137
+ const taxonomyContent = readFile('taxonomy.md')
138
+
139
+ // Extrair seção específica
140
+ function extractOptions(content, sectionName) {
141
+ const sectionRegex = new RegExp(`## .*${sectionName}[\\s\\S]*?(?=##|$)`)
142
+ const section = content.match(sectionRegex)[0]
143
+
144
+ // Extrair ### headers (são os nomes das opções)
145
+ const optionRegex = /^### (.+)$/gm
146
+ const options = [...section.matchAll(optionRegex)].map(m => m[1].trim())
147
+
148
+ return options
149
+ }
150
+
151
+ const validSquads = extractOptions(taxonomyContent, 'Squads')
152
+ const validHubs = extractOptions(taxonomyContent, 'Hubs')
153
+ const validPositions = extractOptions(taxonomyContent, 'Positions')
154
+ const validAreas = extractOptions(taxonomyContent, 'Areas')
155
+ ```
156
+
157
+ > **⚠️ Se taxonomy.md não existir**: Use valores padrão hardcoded como fallback
158
+
159
+ ### 2. Detectar IDE
160
+
161
+ Identificar qual IDE o usuário está utilizando:
162
+
163
+ | IDE | Pasta | Arquivo MCP |
164
+ |-----|-------|-------------|
165
+ | Windsurf | `.windsurf/` | `~/.codeium/windsurf/mcp_config.json` |
166
+ | Cursor | `.cursor/` | `~/.cursor/mcp.json` |
167
+ | Claude | `.claude/` | `~/.claude/settings.json` (ou mcp_config) |
168
+ | Codex | `.codex/` | via skills TUI |
169
+ | OpenCode | `.opencode/` | config da IDE |
170
+ | Gemini / Antigravity | `.agents/` | config da IDE |
171
+ | Kiro | `.kiro/` | steering / MCP da IDE |
172
+
173
+ ### 2. Verificar Existência do ENV.md
174
+
175
+ **CRÍTICO**: O `ENV.md` é a fonte de verdade do projeto.
176
+
177
+ 1. Verificar se `$IDE/ENV.md` já existe
178
+ 2. Se existir, perguntar ao usuário:
179
+ ```
180
+ ⚠️ O arquivo ENV.md já existe. O que deseja fazer?
181
+ A: Sobrescrever completamente
182
+ B: Atualizar apenas variáveis específicas
183
+ C: Upgrade — adicionar variáveis novas do template (não toca nos valores existentes)
184
+ D: Cancelar
185
+ ```
186
+
187
+ **Se opção C (Upgrade):**
188
+
189
+ 1. Ler todas as chaves do `templates/ENV-template.md`
190
+ 2. Ler todas as chaves do `$IDE/ENV.md` existente
191
+ 3. Ler `HUB` do ENV.md existente
192
+ 4. Se `HUB≠DATA`: excluir do diff todas as chaves `DATA_*` — não propor adicioná-las
193
+ 5. Calcular diff: chaves no template que **não existem** no ENV.md atual (respeitando exclusão de DATA_* para não-DATA)
194
+ 4. Se não houver diff:
195
+ ```
196
+ ✅ ENV.md já está atualizado. Nenhuma variável nova encontrada.
197
+ ```
198
+ Encerrar.
199
+ 5. Se houver diff, exibir prévia:
200
+ ```
201
+ 🔍 Variáveis novas encontradas no template:
202
+ + NOVA_VAR_1=
203
+ + NOVA_VAR_2=valor-padrão
204
+
205
+ Serão adicionadas ao final do ENV.md sem alterar os valores existentes.
206
+ ```
207
+ 6. Appender as novas variáveis ao final do `ENV.md` com comentário de data:
208
+ ```
209
+ # --- Upgrade YYYY-MM-DD ---
210
+ NOVA_VAR_1=
211
+ NOVA_VAR_2=valor-padrão
212
+ ```
213
+ 7. Confirmar:
214
+ ```
215
+ ✅ ENV.md atualizado! N variável(is) nova(s) adicionada(s).
216
+ ⚠️ Preencha os valores em branco antes de usar os novos recursos.
217
+ ```
218
+ 8. Encerrar (não continuar para o fluxo de onboarding completo).
219
+
220
+ **⚠️ OBRIGATÓRIO - Criação do ENV.md**:
221
+
222
+ O ENV.md DEVE ser criado usando como base **TODO O CONTEÚDO** de:
223
+ - `templates/ENV-template.md`
224
+
225
+ **NUNCA crie o ENV.md do zero!** Use o template completo e apenas substitua os valores das variáveis. Não invente chaves (`PROJECT_NAME`, `TOKEN_VERSION_CONTROL`, `EVENT_BUS*`, `BUG_FREQ*`, etc.).
226
+
227
+ Fluxo correto:
228
+ 1. Ler o conteúdo completo de `templates/ENV-template.md`
229
+ 2. Substituir os valores das variáveis conforme coletado do usuário
230
+ 3. Se `HUB≠DATA`: remover o bloco DATA_* inteiro
231
+ 4. Garantir `SESSIONS_DIR=.jarvis/sessions` e `JARVIS_PROJECT=https://github.com/phelipperibeiro/jarvis-framework` (ou URL que o usuário informar)
232
+ 5. Escrever `$IDE/ENV.md` com o restante do template (incluindo variáveis vazias)
233
+
234
+ ### 3. Coletar Variáveis Obrigatórias
235
+
236
+ **⚠️ REGRA CRÍTICA #1 - PERGUNTAR UMA POR VEZ:**
237
+
238
+ **SEMPRE** pergunte uma variável por vez e aguarde a resposta antes de fazer a próxima pergunta.
239
+
240
+ **NUNCA** faça todas as perguntas de uma vez como uma lista numerada.
241
+
242
+ **⚠️ REGRA CRÍTICA #2 - USAR AskUserQuestion PARA OPÇÕES FIXAS:**
243
+
244
+ **IMPORTANTE - Limitação Técnica do AskUserQuestion:**
245
+ - AskUserQuestion aceita **máximo 4 opções** por pergunta
246
+ - Para variáveis com **≤4 opções** → usar AskUserQuestion
247
+ - Para variáveis com **>4 opções** → mostrar todas as opções em texto numerado e pedir digitação
248
+
249
+ **Como coletar variáveis:**
250
+
251
+ ### Variáveis com Opções Fixas:
252
+
253
+ **Decisão por número de opções:**
254
+ - **HUB** (6 opções: AI, FRONTEND, BACKEND, QA, DATA, FULLCYCLE) → texto numerado (>4)
255
+ - **AREA** (4-5 opções) → se ≤4 usar AskUserQuestion, senão texto
256
+ - **IDE** (7 opções) → mostrar em texto numerado
257
+ - **SQUAD** (do taxonomy) → mostrar em texto numerado
258
+ - **POSITION** (do taxonomy) → mostrar em texto numerado
259
+
260
+ ```
261
+ // Exemplo 1: HUB (5 opções) - MOSTRAR EM TEXTO
262
+ Qual o hub do projeto?
263
+
264
+ Opções disponíveis:
265
+ 1. AI - Inteligência Artificial
266
+ 2. FRONTEND - Interfaces web/mobile
267
+ 3. BACKEND - APIs e serviços
268
+ 4. QA - Qualidade e testes
269
+ 5. DATA - Engenharia de dados / BI / ML
270
+
271
+ Digite o número (1-5) ou nome do hub:
272
+ [aguardar resposta e validar]
273
+ ```
274
+
275
+ **Para variáveis com >4 opções, usar formato de texto:**
276
+
277
+ ```
278
+ // Exemplo 2: IDE - MOSTRAR EM TEXTO
279
+ Qual IDE você está usando?
280
+
281
+ Opções disponíveis:
282
+ 1. claude - Claude Code (Anthropic)
283
+ 2. windsurf - Windsurf IDE (Codeium)
284
+ 3. cursor - Cursor IDE
285
+ 4. codex - Codex CLI (OpenAI)
286
+ 5. opencode - OpenCode
287
+ 6. gemini - Gemini CLI / Antigravity (Google)
288
+ 7. kiro - Kiro (AWS)
289
+
290
+ Digite o número (1-7) ou nome da opção:
291
+ [aguardar resposta e validar]
292
+ ```
293
+
294
+ ```
295
+ // Exemplo 3: SQUAD (6+ opções do taxonomy) - MOSTRAR EM TEXTO
296
+ Qual o nome do seu squad?
297
+
298
+ Opções disponíveis: (lidas de taxonomy.md)
299
+ 1. CORE - Time principal
300
+ 2. SUPPORT - Suporte técnico / Tech Analyst
301
+
302
+ Digite o número ou nome do squad:
303
+ [aguardar resposta e validar contra lista do taxonomy.md]
304
+ ```
305
+
306
+ ```
307
+ // Exemplo 4: POSITION (9 opções) - MOSTRAR EM TEXTO
308
+ Qual seu cargo?
309
+
310
+ Opções disponíveis:
311
+ 1. JUNIOR - Desenvolvedor Júnior
312
+ 2. PLENO - Desenvolvedor Pleno
313
+ 3. SENIOR - Desenvolvedor Sênior
314
+ 4. TECH LEAD - Líder Técnico
315
+ 5. SPECIALIST - Especialista
316
+ 6. PM - Product Manager
317
+ 7. TPM - Technical Product Manager
318
+ 8. GPM - Group Product Manager
319
+ 9. CTO - Chief Technology Officer
320
+
321
+ Digite o número (1-9) ou nome do cargo:
322
+ [aguardar resposta e validar contra lista]
323
+ ```
324
+
325
+ ### Variáveis Livres (Permitir Digitação):
326
+
327
+ **WORKSPACE (confirmar nome detectado), MAX_AI_EXECUTION_PERCENTAGE** → Pergunta tradicional com validação
328
+
329
+ **USER** → **Não perguntar** se já foi resolvido no passo 1 (ENV.md, git ou SO). Só perguntar se o usuário quiser outro identificador.
330
+
331
+ ```
332
+ Pergunta 1: Workspace detectado: `{basename da pasta que contém $IDE/}`. Usar esse nome?
333
+ [Enter = sim. Só perguntar outro slug se o usuário recusar.]
334
+ Não perguntar single vs multi.
335
+ Escanear `.git/` na raiz e nas subpastas.
336
+ - Só a raiz tem git → `WORKSPACE_REPOS` vazio
337
+ - 2+ subpastas com git → listar e perguntar se filtra; senão vazio (todas)
338
+
339
+ Pergunta 6: Qual o limite de execução da AI? (número entre 60 e 100)
340
+ [aguardar resposta e validar range 60-100]
341
+ ```
342
+
343
+ **Exemplo de coleta correta (UMA pergunta POR VEZ):**
344
+
345
+ ```
346
+ 📋 Vamos configurar o ambiente do framework.
347
+
348
+ Pergunta 1 (livre - digitação):
349
+ Workspace detectado: `{pasta}`. Usar esse nome?
350
+ ```
351
+
352
+ *[Aguardar resposta do usuário]*
353
+
354
+ ```
355
+ Pergunta 2 (opções fixas - usar AskUserQuestion):
356
+ ```
357
+
358
+ *[Mostrar TODAS as 6 opções de IDE em texto numerado e aguardar digitação]*
359
+
360
+ *[Validar resposta contra lista de opções válidas]*
361
+
362
+ ```
363
+ Pergunta 3 (opções fixas - 6+ opções - mostrar em texto):
364
+ ```
365
+
366
+ *[Mostrar TODAS as opções de SQUAD do taxonomy.md em texto numerado e aguardar digitação]*
367
+
368
+ *[Validar resposta contra lista de SQUADs válidos do taxonomy]*
369
+
370
+ ```
371
+ Pergunta 4 (opções fixas - 4 opções - usar AskUserQuestion):
372
+ ```
373
+
374
+ *[Mostrar TODAS as opções de HUB do taxonomy em texto numerado (inclui DATA) e aguardar]*
375
+
376
+ *[Aguardar seleção do usuário]*
377
+
378
+ ```
379
+ Pergunta 5 (opções fixas - 4-5 opções):
380
+ ```
381
+
382
+ *[Se AREA tiver ≤4 opções: usar AskUserQuestion]*
383
+ *[Se AREA tiver >4 opções: mostrar em texto numerado]*
384
+
385
+ *[Aguardar resposta]*
386
+
387
+ ```
388
+ Pergunta 6 (livre - digitação com validação):
389
+ Qual o limite de execução da AI? (número entre 60 e 100)
390
+ ```
391
+
392
+ *[Aguardar resposta e validar range 60-100]*
393
+
394
+ ```
395
+ Pergunta 7 (opções fixas - POSITION do taxonomy - texto se >4):
396
+ ```
397
+
398
+ *[Mostrar TODAS as opções de POSITION do taxonomy.md e aguardar]*
399
+
400
+ **Regras de Implementação:**
401
+ - **Opções fixas com ≤4 opções** → usar AskUserQuestion
402
+ - **Opções fixas com >4 opções** (HUB com DATA, IDE, SQUAD, POSITION) → mostrar em texto numerado
403
+ - **Valores livres** (WORKSPACE só se recusar o nome detectado, MAX_AI_EXECUTION_PERCENTAGE) → Pergunta tradicional com validação
404
+ - **USER** → resolvido no passo 1 (ENV.md / git / SO). Só perguntar se o usuário quiser outro valor
405
+ - **SEMPRE** mostrar TODAS as opções disponíveis (seja em AskUserQuestion ou texto)
406
+ - **NUNCA** omitir opções da lista (HUB deve incluir DATA)
407
+ - **NUNCA** perguntar múltiplas variáveis de uma vez
408
+ - **SEMPRE** validar resposta contra lista de opções válidas (quando texto)
409
+
410
+ #### Variáveis Obrigatórias
411
+
412
+ | Variável | Descrição | Validação |
413
+ |----------|-----------|-----------|
414
+ | `WORKSPACE` | Slug da pasta do `$IDE/` | Vazio = nome da pasta (detectar) |
415
+ | `WORKSPACE_REPOS` | Allowlist de subpastas-repo | Vazio = todas com `.git/` |
416
+ | `IDE` | IDE utilizada | `windsurf`, `claude`, `cursor`, `codex`, `opencode`, `gemini`, `kiro` (antigravity → gemini) |
417
+ | `SQUAD` | Nome do squad | Deve estar em `taxonomy.md` → Squads |
418
+ | `HUB` | Hub do workspace | Deve estar em `taxonomy.md` → Hubs (**inclui DATA**) |
419
+ | `AREA` | Área do workspace | Deve estar em `taxonomy.md` → Areas |
420
+ | `MAX_AI_EXECUTION_PERCENTAGE` | Limite de execução da AI | Número entre 60 e 100 |
421
+ | `USER` | Identidade do usuário (email ou nome) | ENV.md → git `user.email` → usuário do SO. Sem login |
422
+ | `POSITION` | Cargo do usuário | Deve estar em `taxonomy.md` → Positions. Autonomia ponta a ponta em qualquer cargo |
423
+
424
+ > **💡 Nota**:
425
+ > - As opções para SQUAD, HUB, AREA e POSITION são definidas em `taxonomy.md` e podem ser customizadas por organização.
426
+ > - CDD (Context-Driven Development) está sempre habilitado — `ENABLE_CDD=true` é gerado automaticamente no ENV.md.
427
+
428
+ #### Validar Respostas
429
+
430
+ Aplicar validações conforme o tipo de variável:
431
+
432
+ **Variáveis com AskUserQuestion (≤4 opções - validação automática):**
433
+
434
+ Quando usar `AskUserQuestion`, a validação é automática (usuário só pode escolher opções válidas):
435
+
436
+ - **HUB**: 5 opções do taxonomy em texto → validar contra lista (inclui DATA)
437
+ - **AREA**: AskUserQuestion se ≤4 opções → validação automática
438
+
439
+ **Variáveis com texto numerado (>4 opções - validação manual necessária):**
440
+
441
+ Quando mostrar opções em texto, DEVE validar manualmente:
442
+
443
+ - **IDE**: opções em texto → validar que resposta está na lista
444
+ - Aceitar: número ou nome exato (case-insensitive)
445
+ - Erro se inválido: `"Opção inválida. Digite um número da lista ou o nome da IDE."`
446
+
447
+ - **SQUAD**: opções do taxonomy em texto → validar contra taxonomy
448
+ - Aceitar: número ou nome exato do SQUAD
449
+ - Erro se inválido: `"Squad inválido. Digite um número ou nome válido da lista."`
450
+
451
+ - **POSITION**: opções do taxonomy em texto → validar contra lista
452
+ - Aceitar: número ou nome do cargo
453
+ - Erro se inválido: `"Cargo inválido. Digite um número ou nome do cargo."`
454
+
455
+ **Lógica de validação para texto:**
456
+ ```javascript
457
+ function validateTextOption(userInput, optionsList) {
458
+ // Tentar como número primeiro
459
+ const asNumber = parseInt(userInput)
460
+ if (!isNaN(asNumber) && asNumber >= 1 && asNumber <= optionsList.length) {
461
+ return optionsList[asNumber - 1] // índice base 0
462
+ }
463
+
464
+ // Tentar como nome (case-insensitive)
465
+ const asName = userInput.trim().toUpperCase()
466
+ const match = optionsList.find(opt => opt.name.toUpperCase() === asName)
467
+
468
+ if (match) return match
469
+
470
+ // Inválido
471
+ throw new Error("Opção inválida")
472
+ }
473
+ ```
474
+
475
+ **Variáveis livres (validação manual necessária):**
476
+
477
+ - **WORKSPACE**: Se vazio, usar `basename` da pasta que contém `$IDE/`. Só pedir outro slug se o usuário recusar o detectado.
478
+
479
+ - **MAX_AI_EXECUTION_PERCENTAGE**:
480
+ - Deve ser número entre 60 e 100
481
+ - Se < 60, avisar e usar 60: `"Valor abaixo do mínimo (60). Ajustando para 60."`
482
+ - Se > 100, avisar e usar 100: `"Valor acima do máximo (100). Ajustando para 100."`
483
+ - Se não for número: `"Digite um número válido entre 60 e 100."`
484
+
485
+ - **USER**: Resolvido no passo 1. Não bloquear. Sem `@{DOMAIN}` obrigatório.
486
+
487
+ **⚠️ IMPORTANTE - AskUserQuestion vs Validação Manual:**
488
+
489
+ - **Com AskUserQuestion**: Não precisa validar manualmente. O tool só permite opções válidas.
490
+ - **Sem AskUserQuestion** (campos livres): Validar formato conforme regras acima.
491
+
492
+ **Benefícios do AskUserQuestion para opções fixas:**
493
+ 1. ✅ Sem erro humano de digitação
494
+ 2. ✅ Interface visual clara com todas as opções
495
+ 3. ✅ Validação automática
496
+ 4. ✅ Descrições visíveis para cada opção
497
+ 5. ✅ Experiência de usuário superior
498
+
499
+ Se alguma validação de campo livre falhar, informar o erro claramente e solicitar novamente.
500
+
501
+ ### 3.1 Variáveis de Hub DATA (condicional — obrigatório se HUB=DATA)
502
+
503
+ **Executar apenas se `HUB=DATA`** foi selecionado no passo anterior.
504
+
505
+ Se `HUB≠DATA`: pular este passo inteiramente — as variáveis `DATA_*` **não serão incluídas** no ENV.md gerado.
506
+
507
+ Se `HUB=DATA`: coletar as variáveis abaixo **uma por vez**, todas obrigatórias:
508
+
509
+ | Variável | Pergunta | Exemplos de valor |
510
+ |----------|----------|-------------------|
511
+ | `DATA_ORCHESTRATOR` | Qual o orquestrador de pipelines? | `airflow`, `prefect`, `dagster`, `glue-scheduler` |
512
+ | `DATA_ETL_TOOL` | Qual a ferramenta de transformação ETL? | `aws_glue`, `dbt`, `spark`, `pandas` |
513
+ | `DATA_QUALITY_TOOL` | Qual a ferramenta de qualidade de dados? | `great_expectations`, `soda`, `deequ` |
514
+ | `DATA_LAKE` | Qual o armazenamento do data lake? | `aws_s3`, `gcs`, `azure_adls` |
515
+ | `DATA_QUERY_ENGINE` | Qual a engine de query analítica? | `aws_athena`, `bigquery`, `redshift`, `trino` |
516
+ | `DATA_BI_TOOL` | Qual a ferramenta de BI/dashboards? | `metabase`, `looker`, `superset`, `power_bi` |
517
+ | `DATA_WAREHOUSE` | Há data warehouse dedicado? Se sim, qual? *(aceita vazio)* | `redshift`, `snowflake`, `bigquery` |
518
+ | `DATA_REPO` | Qual o nome do repositório de scripts de pipeline? | `data-pipelines`, `etl-jobs`, `analytics-pipelines` |
519
+
520
+ > Perguntar uma por vez, aguardando resposta antes da próxima.
521
+ > `DATA_WAREHOUSE` aceita valor vazio — informar ao usuário que pode ser configurado depois.
522
+ > `ALERTS_CHANNEL` é uma variável genérica do projeto (não específica de DATA) — já terá sido configurada nas variáveis principais.
523
+
524
+ ### 4. Perguntar Sobre Variáveis Opcionais
525
+
526
+ ```
527
+ 🔧 Deseja configurar variáveis opcionais?
528
+ A: Sim, configurar todas
529
+ B: Sim, escolher quais configurar
530
+ C: Não, usar valores padrão (tudo vazio / freelance)
531
+ ```
532
+
533
+ Se **A** ou **B**, perguntar sobre cada variável opcional conforme seleção — **uma por vez**.
534
+
535
+ **Task manager (pergunte cedo):**
536
+ ```
537
+ Usa algum board de cards?
538
+ 1. jira
539
+ 2. linear
540
+ 3. github
541
+ 4. asana
542
+ 5. Nenhum (freelance) → TASK_MANAGER= vazio
543
+
544
+ Se 5: não peça TOKEN_TASK_MANAGER nem MCP. Workflows vão pedir TASK_MANAGER_KEY
545
+ (número/slug de controle próprio) na hora da tarefa.
546
+ Se 1–4: pedir TOKEN_TASK_MANAGER e TASK_MANAGER_URL_BASE (opcional).
547
+ ```
548
+
549
+ **Controle de versão:**
550
+ ```
551
+ VERSION_CONTROL = gitlab | github | bitbucket | vazio
552
+ Token NÃO vai no ENV.md:
553
+ - GitLab → .npmrc
554
+ - GitHub → gh auth ou GITHUB_TOKEN
555
+ - Bitbucket → BITBUCKET_TOKEN
556
+ Nunca grave TOKEN_VERSION_CONTROL (chave removida do template).
557
+ ```
558
+
559
+ #### Variáveis Opcionais (alinhar ao `templates/ENV-template.md`)
560
+
561
+ | Variável | Valor Padrão | Descrição |
562
+ |----------|--------------|-----------|
563
+ | `TASK_MANAGER` | *(vazio = freelance)* | `jira`, `linear`, `github`, `asana` |
564
+ | `TOKEN_TASK_MANAGER` | *(vazio)* | Token do board (só se TASK_MANAGER preenchido) |
565
+ | `TASK_MANAGER_URL_BASE` | *(vazio)* | URL base para links (ex: Atlassian) |
566
+ | `TASK_MANAGER_HUBS_BOARD` | *(vazio)* | Board de triagem N2 (Tech Analyst) |
567
+ | `VERSION_CONTROL` | *(vazio)* | `gitlab`, `github`, `bitbucket` |
568
+ | `MESSAGE_BROKER` | *(vazio)* | `rabbitmq`, `kafka`, `sqs` |
569
+ | `MESSAGE_BROKER_URL_API` | *(vazio)* | API do broker |
570
+ | `MESSAGE_BROKER_API_AUTH` | *(vazio)* | Auth do broker |
571
+ | `DATABASE` | *(vazio)* | `mysql`, `postgres`, `mongodb` |
572
+ | `USER_DATABASE` / `PASSWORD_DATABASE` / `HOST_DATABASE` / `PORT_DATABASE` | *(vazio)* | Credenciais DB |
573
+ | `MESSAGE_COMUNICATOR` | *(vazio)* | `slack`, `discord`, `teams` |
574
+ | `MESSAGE_COMUNICATOR_BOT_TOKEN` / `_SIGNING_SECRET` / `_APP_TOKEN` | *(vazio)* | Tokens do chat |
575
+ | `ALERTS_CHANNEL` | *(vazio)* | Canal de alertas |
576
+ | `OBJECT_STORAGE` | *(vazio)* | `aws_s3`, `gcs`, `azure_blob` |
577
+ | `TOKEN_OBJECT_STORAGE` | *(vazio)* | Token storage |
578
+ | `OBSERVABILITY` | *(vazio)* | `sentry`, `datadog`, `grafana` |
579
+ | `TOKEN_OBSERVABILITY` / `OBSERVABILITY_ORG` | *(vazio)* | Observabilidade |
580
+ | `SMTP` | *(vazio)* | `google`, `ses`, `sendgrid` |
581
+ | `CODE_QUALITY_TOOL` / `_URL` / `_TOKEN` | *(vazio)* | SonarQube etc. |
582
+ | `TEST_FOLDER` | *(vazio)* | Pasta de testes |
583
+ | `QA_SIGNOFF_BRANCHES` / `QA_SIGNOFF_MAX_AGE` | `main,release/*` / `24` | Sign-off QA |
584
+ | `JARVIS_PROJECT` | `https://github.com/phelipperibeiro/jarvis-framework` | Repo do framework (`/report-issue`) |
585
+ | `CENTRAL_DOCS_REPO` / `_REF` / `_TARGET_BRANCH` / `_REVIEWERS` / `_CACHE_TTL` | *(opcional)* | Docs centrais |
586
+ | `SESSIONS_DIR` | `.jarvis/sessions` | Não perguntar — gravar fixo |
587
+ | `RTK_ENABLED` | `false` (ou true se detectar `rtk`) | Token Killer |
588
+
589
+ #### 4.1 Detecção do RTK (Token Killer)
590
+
591
+ **Após as variáveis opcionais**, verificar automaticamente se o RTK está instalado:
592
+
593
+ ```bash
594
+ which rtk 2>/dev/null
595
+ ```
596
+
597
+ **Se RTK encontrado no PATH:**
598
+ ```
599
+ 🔍 RTK detectado (token killer — economia de 60-90% em tokens de shell).
600
+ Ativar integração? (recomendado)
601
+ A: Sim → RTK_ENABLED=true
602
+ B: Não → RTK_ENABLED=false
603
+ ```
604
+
605
+ **Se RTK NÃO encontrado:**
606
+ ```
607
+ ℹ️ RTK não detectado. Integração desativada.
608
+ Para instalar: cargo install rtk (requer Rust)
609
+ → RTK_ENABLED=false
610
+ ```
611
+
612
+ > RTK é opt-in e não bloqueia o init. A rule `rtk-rules.md` só é copiada
613
+ > para `$IDE/rules/` no Passo 9 se `RTK_ENABLED=true`.
614
+
615
+ ### 5. Criar Arquivo ENV.md
616
+
617
+ **🚨 INSTRUÇÃO CRÍTICA - LEIA COM ATENÇÃO:**
618
+
619
+ O ENV.md DEVE ser criado usando o template completo. **NUNCA crie manualmente!**
620
+
621
+ **Passos obrigatórios:**
622
+ ```bash
623
+ # 1. Ler o template completo
624
+ cat templates/ENV-template.md
625
+
626
+ # 2. Copiar TODO o conteúdo para $IDE/ENV.md
627
+
628
+ # 3. Substituir apenas os valores das variáveis coletadas
629
+
630
+ # 4. AJUSTAR FLOWS_FOLDER baseado no IDE:
631
+ # - Se IDE=claude → FLOWS_FOLDER=commands
632
+ # - Caso contrário → FLOWS_FOLDER=workflows
633
+
634
+ # 5. BLOCO DATA_* — incluir ou omitir conforme HUB:
635
+ # - Se HUB=DATA ou HUB=FULLCYCLE → incluir o bloco com os valores coletados no passo 3.1
636
+ # - Caso contrário → REMOVER completamente o bloco Data Engineering e todas as DATA_*
637
+
638
+ # 6. Garantir chaves de sistema do template:
639
+ # SESSIONS_DIR=.jarvis/sessions
640
+ # ENABLE_CDD=true
641
+ # JARVIS_PROJECT=https://github.com/phelipperibeiro/jarvis-framework (se usuário não sobrescrever)
642
+ # NÃO incluir: TOKEN_VERSION_CONTROL, PROJECT_NAME, EVENT_BUS*, metrics*
643
+
644
+ # 7. Criar pastas de sessão no workspace (pasta que contém $IDE/):
645
+ mkdir -p .jarvis/sessions/eng .jarvis/sessions/prod .jarvis/sessions/qa
646
+ # Garantir .jarvis/ no .gitignore do workspace
647
+ grep -qxF '.jarvis/' .gitignore 2>/dev/null || echo '.jarvis/' >> .gitignore
648
+ ```
649
+
650
+ **⚠️ REGRA CRÍTICA — Bloco DATA:**
651
+
652
+ ```javascript
653
+ if (HUB === 'DATA' || HUB === 'FULLCYCLE') {
654
+ // Incluir bloco DATA_* com valores coletados no passo 3.1
655
+ } else {
656
+ // Remover do ENV.md gerado o bloco Data Engineering e todas as DATA_*
657
+ }
658
+ ```
659
+
660
+ **⚠️ REGRA CRÍTICA - FLOWS_FOLDER:**
661
+
662
+ ```javascript
663
+ if (IDE === "claude") {
664
+ FLOWS_FOLDER = "commands"
665
+ } else {
666
+ FLOWS_FOLDER = "workflows"
667
+ }
668
+ ```
669
+
670
+ O arquivo `$IDE/ENV.md` deve seguir a **estrutura e ordem** de `templates/ENV-template.md` (não um dump reordenado). Blocos mínimos esperados após o init:
671
+
672
+ ```markdown
673
+ # --- Workspace e identidade ---
674
+ WORKSPACE=
675
+ WORKSPACE_REPOS=
676
+ USER={resolvido}
677
+ MAX_AI_EXECUTION_PERCENTAGE={60-100}
678
+ ENABLE_CDD=true
679
+
680
+ # --- Organização ---
681
+ SQUAD={valor}
682
+ HUB={valor}
683
+ AREA={valor}
684
+ POSITION={valor}
685
+
686
+ # --- IDE e pastas ---
687
+ IDE={valor}
688
+ DOCS_FOLDER=docs
689
+ FLOWS_FOLDER={commands|workflows}
690
+ TEMPLATES_FOLDER=templates
691
+ RULES_FOLDER=.$IDE/rules
692
+ SESSIONS_DIR=.jarvis/sessions
693
+ PROD_FOLDER_NAME=product
694
+ PROD_RULES=...
695
+ PROD_FLOWS=...
696
+ PROD_TEMPLATES=...
697
+ PROD_DOCS=...
698
+
699
+ # --- Task manager (opcional; vazio = freelance) ---
700
+ TASK_MANAGER=
701
+ TOKEN_TASK_MANAGER=
702
+ TASK_MANAGER_URL_BASE=
703
+
704
+ # --- Controle de versão / chat / demais opcionais do template ---
705
+ VERSION_CONTROL=
706
+ # ... restante do template (MESSAGE_*, DATABASE, JARVIS_PROJECT, CENTRAL_DOCS_*, etc.)
707
+ JARVIS_PROJECT=https://github.com/phelipperibeiro/jarvis-framework
708
+ ```
709
+
710
+ #### Variáveis de Sistema (não alterar sem motivo)
711
+
712
+ ```
713
+ DOCS_FOLDER=docs
714
+ FLOWS_FOLDER=workflows (ou "commands" se IDE=claude)
715
+ TEMPLATES_FOLDER=templates
716
+ RULES_FOLDER=.$IDE/rules
717
+ SESSIONS_DIR=.jarvis/sessions
718
+ ENABLE_CDD=true
719
+
720
+ PROD_FOLDER_NAME=product
721
+ PROD_RULES=$RULES_FOLDER/$PROD_FOLDER_NAME
722
+ PROD_FLOWS=.$IDE/$FLOWS_FOLDER/$PROD_FOLDER_NAME
723
+ PROD_TEMPLATES=.$IDE/$TEMPLATES_FOLDER/$PROD_FOLDER_NAME
724
+ PROD_DOCS=$DOCS_FOLDER/$PROD_FOLDER_NAME
725
+ ```
726
+
727
+ **⚠️ IMPORTANTE - FLOWS_FOLDER por IDE:**
728
+
729
+ - **Claude Code**: `FLOWS_FOLDER=commands` (usa `.claude/commands/`)
730
+ - **Outros IDEs**: `FLOWS_FOLDER=workflows`
731
+
732
+ O skill deve detectar automaticamente o IDE e definir o valor correto.
733
+
734
+ **Sessões:**
735
+ - Paths: `$SESSIONS_DIR/eng/{TASK_MANAGER_KEY}/`, `$SESSIONS_DIR/prod/{TASK_MANAGER_KEY}/`, `$SESSIONS_DIR/qa/`
736
+ - Cookie/HTTP session **não** é esta pasta
737
+ - Não usar `~/.jarvis/` para sessões do framework
738
+
739
+ ### 5.1 Flatten de Workflows (apenas Windsurf e outros IDEs não-claude)
740
+
741
+ **⚠️ OBRIGATÓRIO quando IDE ≠ claude**: O Windsurf (e outros IDEs) **não reconhece workflows em subpastas** — apenas arquivos diretamente em `.windsurf/workflows/` são carregados.
742
+
743
+ Após criar o ENV.md, executar:
744
+
745
+ ```bash
746
+ # Mover todos os workflows de subpastas para a raiz de $IDE/workflows/
747
+ find .windsurf/workflows -mindepth 2 -name "*.md" | while read file; do
748
+ filename=$(basename "$file")
749
+ dest=".windsurf/workflows/$filename"
750
+ # Se já existir na raiz, não sobrescrever
751
+ if [ ! -f "$dest" ]; then
752
+ mv "$file" "$dest"
753
+ fi
754
+ done
755
+
756
+ # Remover subpastas vazias
757
+ find .windsurf/workflows -mindepth 1 -type d -empty -delete
758
+ ```
759
+
760
+ **Regra**: Substituir `.windsurf/` pelo diretório correto do IDE (`.$IDE/`).
761
+
762
+ **Quando executar**: Sempre que `IDE ≠ claude`, independente de ser instalação nova ou atualização.
763
+
764
+ **Log para o usuário**: Informar quantos workflows foram movidos.
765
+
766
+ ### 6. Validar MCPs
767
+
768
+ | MCP | Quando checar | Bloqueante |
769
+ |-----|---------------|------------|
770
+ | **Context7** | Sempre | **Sim** |
771
+ | Task manager (Jira / Linear / GitHub / Asana) | Só se `TASK_MANAGER` estiver preenchido no ENV.md | **Não** |
772
+ | TestSprite | Se o usuário quiser | **Não** |
773
+ | Redis / Sentry / event bus | Removidos do init — não checar | — |
774
+
775
+ **Context7 é obrigatório.** Sem ele o init para e orienta a configuração (`assets/mcp-configs.md`). Não inventar docs de libs no lugar.
776
+
777
+ **Task manager / demais MCPs nunca bloqueiam.** Freelance / `TASK_MANAGER` vazio é válido. Sem Jira, Linear, Redis ou Sentry o init **continua**.
778
+
779
+ **Regras anti-travamento (task manager e opcionais):**
780
+ 1. **Uma tentativa** por MCP opcional. Timeout curto. Sem retry em loop.
781
+ 2. Se o MCP opcional não existir, não responder ou pedir auth → **avisar e seguir**. Nunca esperar o usuário configurar Jira no meio do init.
782
+ 3. Se `TASK_MANAGER` estiver vazio → **pular** qualquer checagem de Jira/Linear/etc.
783
+ 4. Nunca diga "não posso continuar sem Jira".
784
+
785
+ **Verificação**:
786
+ ```javascript
787
+ // Context7 (OBRIGATÓRIO) — se falhar, parar e orientar config
788
+ mcp1_resolve-library-id({ libraryName: "react", query: "test" })
789
+
790
+ // Task manager — SÓ se TASK_MANAGER=jira (ou linear/github/asana). Senão: pular.
791
+ // Exemplo Jira (1 tentativa). Falhou? Avisar e seguir.
792
+ jira_get_issue({ issueKey: "PROJ-1" })
793
+ ```
794
+
795
+ Se Context7 falhar:
796
+ ```
797
+ 🚫 Context7 indisponível — o init precisa dele para docs de libs atualizadas.
798
+ Configure o MCP (assets/mcp-configs.md), reinicie a IDE e rode /init-jarvis de novo.
799
+ ```
800
+
801
+ Se `TASK_MANAGER=jira` e o MCP falhar:
802
+ ```
803
+ ⚠️ MCP do Jira indisponível — comentários/cards via MCP ficam off. O skill eng-task-comment ainda funciona com TOKEN_TASK_MANAGER. Continuando o init…
804
+ ```
805
+
806
+ > **Configurações detalhadas**: Ver `assets/mcp-configs.md`
807
+
808
+ ### 6.1 — Provisionar MCPs Opcionais (não bloqueante)
809
+
810
+ Após validar os MCPs obrigatórios, verificar se o ENV.md contém ferramentas opcionais que requerem MCP local:
811
+
812
+ **Code Quality (`CODE_QUALITY_TOOL`)**:
813
+
814
+ ```bash
815
+ grep "CODE_QUALITY_TOOL=" $IDE/ENV.md
816
+ ```
817
+
818
+ Se `CODE_QUALITY_TOOL` estiver preenchido (ex: `sonarqube`):
819
+
820
+ 1. Verificar se o MCP server já está instalado:
821
+ ```bash
822
+ which sonarqube-mcp-server 2>/dev/null
823
+ ```
824
+
825
+ 2. Se **não instalado** — perguntar ao usuário:
826
+ ```
827
+ CODE_QUALITY_TOOL=sonarqube detectado no ENV.md.
828
+ Para integrar com o quality gate, preciso instalar o MCP server.
829
+
830
+ Instalar sonarqube-mcp-server globalmente via npm? (Sim / Não / Pular)
831
+ ```
832
+
833
+ - **Sim**: executar `npm install -g sonarqube-mcp-server`, obter path via `which`, provisionar no arquivo de config da IDE (ver `assets/mcp-configs.md` para paths por IDE)
834
+ - **Não / Pular**: registrar como pendente e continuar
835
+
836
+ 3. Se **já instalado** — obter path absoluto via `which` e provisionar no arquivo de config da IDE
837
+
838
+ 4. Verificar se `CODE_QUALITY_URL` e `CODE_QUALITY_TOKEN` estão preenchidos no ENV.md:
839
+ - Se vazios → perguntar ao usuário:
840
+ ```
841
+ Qual a URL da instância do SonarQube? (ex: https://sonarqube.empresa.com)
842
+ Qual o token de autenticação?
843
+ ```
844
+ - Salvar no ENV.md
845
+
846
+ 5. Testar conexão:
847
+ ```javascript
848
+ mcp__sonarqube__list_projects({})
849
+ ```
850
+ - Se falhar → avisar mas **não bloquear**
851
+
852
+ > Este passo é **não bloqueante** — se o usuário pular ou a instalação falhar,
853
+ > o init continua normalmente. O MCP pode ser configurado depois manualmente
854
+ > seguindo `assets/mcp-configs.md`.
855
+
856
+ ### 6.2 — Perfil de Plugins Claude Code (apenas se IDE=claude, opcional)
857
+
858
+ **Executar apenas se `IDE=claude`**. Para qualquer outro IDE: pular inteiramente.
859
+
860
+ ```javascript
861
+ if (IDE !== "claude") { skip() }
862
+ ```
863
+
864
+ Perguntar ao usuario:
865
+
866
+ ```
867
+ Voce esta usando Claude Code. Existe um perfil opcional de plugins recomendados
868
+ que potencializa as analises de seguranca e navegacao de codigo:
869
+
870
+ Codegraph (recomendado) — grafo AST do projeto: impact/callers/trace
871
+ Claude-Mem (opt-in avancado) — memoria persistente entre sessoes
872
+ Token Optimizer (escolha individual) — auditoria de contexto/token
873
+
874
+ Deseja instalar o perfil recomendado agora?
875
+
876
+ 1. Sim — instalar Codegraph (recomendado)
877
+ 2. Ver todos os plugins e escolher
878
+ 3. Pular — configurar depois
879
+ ```
880
+
881
+ **Se resposta 1 (instalar Codegraph):**
882
+ - Orientar: abrir Claude Code → Extensions/Marketplace → buscar "Codegraph" → instalar → reiniciar sessao
883
+ - Informar: "Apos instalar, os comandos `codegraph_impact`, `codegraph_callers` e `codegraph_trace` estarao disponiveis para analise de seguranca e navegacao de codigo"
884
+
885
+ **Se resposta 2 (ver todos):**
886
+ - Exibir tabela completa de `assets/mcp-configs.md` secao "Perfil opt-in — Plugins Claude Code"
887
+ - Aguardar escolha e orientar instalacao de cada um selecionado
888
+
889
+ **Se resposta 3 (pular):**
890
+ - Informar: "Voce pode instalar depois. Detalhes em `skills/init-jarvis/assets/mcp-configs.md` secao 'Perfil opt-in'"
891
+ - Continuar normalmente
892
+
893
+ > Este passo e **nao bloqueante e opcional** — nao impede o init de concluir.
894
+
895
+ ### 7. Criar AGENTS.md
896
+
897
+ Se não existir na raiz do projeto:
898
+
899
+ 1. Detectar stack (package.json, pyproject.toml, etc.)
900
+ 2. Extrair informações do projeto
901
+ 3. Criar a partir do template com substituições
902
+ 4. Se não detectar, perguntar ao usuário
903
+
904
+ ### 8. Profile-Aware Rules Sync
905
+
906
+ **Executar após gravar o ENV.md** (nos fluxos create, update B e upgrade C).
907
+
908
+ Objetivo: garantir que `$IDE/rules/` contenha apenas as rules relevantes para o perfil do usuário, reduzindo tokens carregados em sessão.
909
+
910
+ **Passos:**
911
+
912
+ ```
913
+ 1. Ler HUB, POSITION, AREA, SQUAD do ENV.md recém-gravado
914
+ 2. Listar todos os arquivos .md em rules/ (recursivo, exceto AGENTS.md)
915
+ 3. Para cada arquivo:
916
+ a. Ler o bloco `> **Applies to:**` (primeira ocorrência no arquivo)
917
+ b. Se o bloco não existir → tratar como universal → copiar sempre
918
+ c. Se existir → verificar matching (ver lógica abaixo)
919
+ d. **Condição especial RTK**: se o arquivo for `rtk-rules.md`,
920
+ copiar APENAS se `RTK_ENABLED=true` no ENV.md
921
+ (mesmo que o perfil bata, RTK é opt-in)
922
+ e. Se bate com o perfil → copiar para $IDE/rules/ (preservando subpastas)
923
+ f. Se não bate → deletar de $IDE/rules/ se existir lá
924
+ 4. Exibir resumo ao usuário
925
+ ```
926
+
927
+ **Lógica de matching:**
928
+
929
+ Um arquivo é copiado se **todas** as condições forem satisfeitas:
930
+
931
+ ```javascript
932
+ function matchesProfile(appliesTo, profile) {
933
+ const matches = (list, value) =>
934
+ list === 'all' || list.split(',').map(s => s.trim()).includes(value)
935
+
936
+ // FULLCYCLE é superusuário do eixo HUB: satisfaz qualquer applies_to HUB
937
+ const hubMatches = profile.HUB === 'FULLCYCLE' || matches(appliesTo.HUB, profile.HUB)
938
+
939
+ // GENERALIST é superusuário dos eixos POSITION e AREA: transita entre
940
+ // ENGINEERING/PRODUCT e satisfaz qualquer POSITION exigida
941
+ const positionMatches = profile.POSITION === 'GENERALIST' || matches(appliesTo.POSITION, profile.POSITION)
942
+ const areaMatches = profile.POSITION === 'GENERALIST' || matches(appliesTo.AREA, profile.AREA)
943
+
944
+ return (
945
+ hubMatches &&
946
+ positionMatches &&
947
+ areaMatches &&
948
+ matches(appliesTo.SQUAD, profile.SQUAD)
949
+ )
950
+ }
951
+ ```
952
+
953
+ **Parser do bloco `applies_to`:**
954
+
955
+ ```javascript
956
+ // Exemplo de bloco: > **Applies to:** HUB: all | POSITION: all | AREA: all | SQUAD: all
957
+ function parseAppliesTo(fileContent) {
958
+ const match = fileContent.match(
959
+ /> \*\*Applies to:\*\* HUB: ([^|]+)\| POSITION: ([^|]+)\| AREA: ([^|]+)\| SQUAD: (.+)/
960
+ )
961
+ if (!match) return null // sem bloco = universal
962
+ return {
963
+ HUB: match[1].trim(),
964
+ POSITION: match[2].trim(),
965
+ AREA: match[3].trim(),
966
+ SQUAD: match[4].trim(),
967
+ }
968
+ }
969
+ ```
970
+
971
+ **Copiar preservando subpastas:**
972
+
973
+ ```bash
974
+ # Exemplo: rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md
975
+ # Destino: $IDE/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md
976
+ mkdir -p "$IDE/rules/$(dirname $relPath)"
977
+ cp "rules/$relPath" "$IDE/rules/$relPath"
978
+ ```
979
+
980
+ **Saída para o usuário:**
981
+
982
+ ```
983
+ 🔍 Sincronizando rules para o perfil: HUB={HUB} | POSITION={POSITION} | AREA={AREA} | SQUAD={SQUAD}
984
+
985
+ ✅ Rules sincronizadas:
986
+ Copiadas : N arquivos
987
+ Removidas: N arquivos (não batem com o perfil)
988
+ Universais: N arquivos (sem applies_to — sempre copiadas)
989
+ ```
990
+
991
+ > **Nota**: `rules/AGENTS.md` é sempre copiado — nunca filtrado.
992
+
993
+ ---
994
+
995
+ ### 10. Confirmar Criação
996
+
997
+ ```
998
+ ✅ Arquivo ENV.md criado com sucesso!
999
+
1000
+ 📁 Localização: $IDE/ENV.md
1001
+
1002
+ 📋 Resumo das configurações:
1003
+ - Workspace: {WORKSPACE}
1004
+ - Repos: {WORKSPACE_REPOS ou (todas as pastas com .git/)}
1005
+ - Sessões: {SESSIONS_DIR}/eng|prod|qa
1006
+ - Task manager: {TASK_MANAGER ou "vazio (freelance)"}
1007
+ - Squad: {SQUAD}
1008
+ - Hub: {HUB}
1009
+ - Área: {AREA}
1010
+ - Usuário: {USER}
1011
+ - Cargo: {POSITION}
1012
+ - Limite AI: {MAX_AI_EXECUTION_PERCENTAGE}%
1013
+ - CDD: habilitado
1014
+ - JARVIS_PROJECT: {JARVIS_PROJECT}
1015
+
1016
+ ⚠️ Lembre-se de:
1017
+ 1. Não commitar tokens ou senhas no repositório
1018
+ 2. Adicionar ENV.md ao .gitignore se contiver dados sensíveis
1019
+ 3. Garantir `.jarvis/` no `.gitignore` da pasta do workspace
1020
+ 4. Tokens Git ficam fora do ENV (`.npmrc` / `gh auth` / `BITBUCKET_TOKEN`)
1021
+ ```
1022
+
1023
+ ### 11. Apresentar Processos
1024
+
1025
+ | Processo | Comando |
1026
+ |----------|---------|
1027
+ | Iniciar tarefa | `/eng.start` (pede `TASK_MANAGER_KEY` se freelance) |
1028
+ | Planejar | `/eng.plan` |
1029
+ | Implementar | `/eng.work` |
1030
+ | Criar PR | `/eng.pr` |
1031
+ | Identidade | `jarvis whoami` |
1032
+
1033
+ > Não apresentar checkin/checkout/daily/task-log/sync/metrics — removidos do fork.
1034
+
1035
+ ### 12. Verificar Acessos
1036
+
1037
+ Confirmar acessos relevantes (não bloqueantes): Git; task manager se `TASK_MANAGER` estiver definido; chat se `MESSAGE_COMUNICATOR` estiver definido; ambiente de Dev.
1038
+
1039
+ ### 13. Entregar Checklist
1040
+
1041
+ Apresentar checklist de onboarding por período (Dia 1, Semana 1, Mês 1).
1042
+
1043
+ > **Checklists detalhados**: Ver `assets/onboarding-checklist.md`
1044
+
1045
+ ---
1046
+
1047
+ ## Validações de Segurança
1048
+
1049
+ ### ⛔ NUNCA FAÇA
1050
+
1051
+ - ❌ **NUNCA criar ENV.md do zero manualmente**
1052
+ - ❌ **NUNCA omitir variáveis do template**
1053
+ - ❌ **NUNCA fazer múltiplas perguntas de uma vez** - sempre perguntar UMA variável POR VEZ
1054
+ - ❌ **NUNCA omitir opções disponíveis** - sempre mostrar TODAS as opções (AskUserQuestion ou texto)
1055
+ - ❌ **NUNCA usar AskUserQuestion para >4 opções** - usar texto numerado
1056
+ - ❌ **NUNCA fazer uma lista numerada com todas as perguntas juntas** - perguntar e aguardar resposta uma por vez
1057
+ - ❌ **NUNCA aceitar respostas inválidas em variáveis com texto** - sempre validar contra lista
1058
+ - ❌ Commitar tokens ou senhas
1059
+ - ❌ Expor credenciais no chat
1060
+ - ❌ Usar valores de exemplo em produção
1061
+ - ❌ Pedir `jarvis login` ou bloquear por falta de `auth.json`
1062
+ - ❌ Exigir e-mail corporativo / `@{DOMAIN}` para USER
1063
+ - ❌ Criar `PROJECT_NAME`, `TOKEN_VERSION_CONTROL`, `EVENT_BUS*`, métricas ou `~/.jarvis/sessions`
1064
+ - ❌ Pular criação do ENV.md ou omitir `SESSIONS_DIR`
1065
+ - ❌ Travar o init esperando Jira / Redis / Sentry / MCP de task manager
1066
+ - ❌ Exigir MCP de task manager quando `TASK_MANAGER` estiver vazio
1067
+ - ❌ Prosseguir sem Context7 respondendo
1068
+ - ❌ Omitir hub DATA da lista de HUB
1069
+ - ❌ Criar AGENTS.md sem detectar stack
1070
+ - ❌ Apresentar checkin/checkout/daily como parte do onboarding
1071
+
1072
+ ### ✅ SEMPRE FAÇA
1073
+
1074
+ - ✅ **SEMPRE usar templates/ENV-template.md como base**
1075
+ - ✅ **SEMPRE copiar TODO o conteúdo do template** (exceto bloco DATA_* se HUB≠DATA)
1076
+ - ✅ **SEMPRE preservar variáveis vazias do template**
1077
+ - ✅ **SEMPRE ajustar FLOWS_FOLDER baseado no IDE (commands para claude, workflows para outros)**
1078
+ - ✅ **SEMPRE perguntar UMA variável POR VEZ e aguardar resposta antes da próxima**
1079
+ - ✅ **SEMPRE usar AskUserQuestion só para ≤4 opções**
1080
+ - ✅ **SEMPRE mostrar em texto numerado para >4 opções** (HUB com DATA, IDE, SQUAD, POSITION)
1081
+ - ✅ **SEMPRE mostrar TODAS as opções disponíveis** - nunca omitir nenhuma
1082
+ - ✅ **SEMPRE incluir descrição em cada opção** (AskUserQuestion ou texto)
1083
+ - ✅ **SEMPRE validar respostas em texto contra lista de opções válidas**
1084
+ - ✅ **SEMPRE usar multiSelect: false no AskUserQuestion** - apenas uma opção por variável
1085
+ - ✅ Resolver USER localmente (ENV.md → git → SO) — sem login
1086
+ - ✅ Só perguntar USER se o usuário quiser outro identificador
1087
+ - ✅ Validar range do MAX_AI_EXECUTION_PERCENTAGE (60-100)
1088
+ - ✅ WORKSPACE detectado (basename da pasta do `$IDE/`) ou override
1089
+ - ✅ Criar `.jarvis/sessions/{eng,prod,qa}` e garantir `.jarvis/` no `.gitignore`
1090
+ - ✅ Explicar freelance se `TASK_MANAGER` vazio (`TASK_MANAGER_KEY` próprio)
1091
+ - ✅ Validar Context7 (obrigatório — sem ele o init para)
1092
+ - ✅ Checar MCP de task manager em best-effort (1 tentativa, nunca bloquear)
1093
+ - ✅ Pular MCP de task manager se `TASK_MANAGER` estiver vazio
1094
+ - ✅ Criar AGENTS.md na raiz
1095
+ - ✅ Apresentar checklist ao final
1096
+
1097
+ ---
1098
+
1099
+ ## Tratamento de Erros
1100
+
1101
+ | Erro | Ação |
1102
+ |------|------|
1103
+ | **taxonomy.md não encontrado** | Usar DEFAULT_OPTIONS (CORE/SUPPORT + hubs com DATA) e avisar |
1104
+ | **taxonomy.md inválido/corrompido** | Usar DEFAULT_OPTIONS e alertar |
1105
+ | **AskUserQuestion não disponível** | Usar texto numerado para todas as opções fixas — não bloquear o init |
1106
+ | **Múltiplas perguntas feitas de uma vez** | ERRO CRÍTICO - NUNCA faça isso. Pergunte uma por vez e aguarde resposta |
1107
+ | **WORKSPACE vazio** | Usar o nome da pasta que contém `$IDE/`; confirmar com o usuário |
1108
+ | **MAX_AI_EXECUTION_PERCENTAGE fora do range** | Ajustar automaticamente: <60 → 60, >100 → 100. Avisar usuário do ajuste. |
1109
+ | **USER inválido** | Pedir outro identificador (email ou nome). Sem validação de `@{DOMAIN}`. |
1110
+ | Template ENV não encontrado | Bloquear e pedir o pacote/framework com `templates/ENV-template.md` |
1111
+ | Context7 não responde | **Parar** o init; orientar `assets/mcp-configs.md` e reinício da IDE |
1112
+ | MCP de task manager não responde | Avisar e **continuar** (1 tentativa) |
1113
+ | Stack não detectada | Perguntar ao usuário |
1114
+ | IDE não detectada | Perguntar ao usuário qual IDE usa |
1115
+
1116
+ ### Exemplo de Validação
1117
+
1118
+ **Exemplo 1: HUB (5 opções) - Texto Numerado**
1119
+
1120
+ ```
1121
+ Qual o hub do projeto?
1122
+
1123
+ 1. AI
1124
+ 2. FRONTEND
1125
+ 3. BACKEND
1126
+ 4. QA
1127
+ 5. DATA
1128
+ ```
1129
+
1130
+ Validar número ou nome contra a lista do taxonomy (**inclui DATA**).
1131
+
1132
+ ---
1133
+
1134
+ **Exemplo 2: SQUAD - Texto Numerado**
1135
+
1136
+ ```
1137
+ Qual o nome do seu squad?
1138
+
1139
+ Opções disponíveis: (lidas de taxonomy.md)
1140
+ 1. CORE - Time principal
1141
+ 2. SUPPORT - Suporte técnico / Tech Analyst
1142
+
1143
+ Digite o número ou nome do squad:
1144
+ ```
1145
+
1146
+ ```javascript
1147
+ const selected = validateTextOption(userInput, extractSquadsFromTaxonomy())
1148
+ if (!selected) {
1149
+ console.log("❌ Squad inválido. Digite um número ou nome válido da lista.")
1150
+ }
1151
+ ```
1152
+
1153
+ ### Valores Padrão (Fallback)
1154
+
1155
+ Se `taxonomy.md` não existir ou estiver corrompido, usar:
1156
+
1157
+ ```javascript
1158
+ const DEFAULT_OPTIONS = {
1159
+ SQUADS: ['CORE', 'SUPPORT'],
1160
+ HUBS: ['AI', 'FRONTEND', 'BACKEND', 'QA', 'DATA', 'FULLCYCLE'],
1161
+ POSITIONS: ['HEAD', 'JUNIOR', 'PLENO', 'SENIOR', 'TECH LEAD', 'SPECIALIST', 'PM', 'TPM', 'GPM', 'CTO', 'GENERALIST'],
1162
+ AREAS: ['ENGINEERING', 'PRODUCT']
1163
+ }
1164
+ ```
1165
+
1166
+ **Avisar usuário:**
1167
+ ```
1168
+ ⚠️ Arquivo taxonomy.md não encontrado. Usando opções padrão (CORE/SUPPORT + hubs com DATA).
1169
+ Para customizar, edite taxonomy.md e rode /taxonomy validate.
1170
+ ```
1171
+
1172
+ ---
1173
+
1174
+ ## Exemplo de Execução
1175
+
1176
+ **Usuário**: `/init-jarvis`
1177
+
1178
+ **Agente** *(resolve identidade local — ENV.md / git / SO)*:
1179
+ ```
1180
+ ✅ Identidade: joao@example.com
1181
+ USER será gravado no ENV.md.
1182
+
1183
+ 📋 Vamos configurar o ambiente do framework.
1184
+
1185
+ Pergunta 1: Workspace detectado: `{pasta}`. Usar esse nome?
1186
+ ```
1187
+
1188
+ *[Uma pergunta por vez, aguardando resposta...]*
1189
+
1190
+ ```
1191
+ Pergunta 2: Qual IDE você está usando?
1192
+ [mostrar opções em texto numerado]
1193
+
1194
+ Pergunta 3: Qual o nome do seu squad?
1195
+ [mostrar opções do taxonomy em texto numerado]
1196
+
1197
+ Pergunta 4: Qual o hub do projeto?
1198
+ [texto numerado com AI, FRONTEND, BACKEND, QA, DATA, FULLCYCLE]
1199
+
1200
+ Pergunta 5: Qual a área do projeto?
1201
+ [AskUserQuestion ou texto numerado]
1202
+
1203
+ Pergunta 6: Qual o limite de execução da AI? (60-100)
1204
+
1205
+ Pergunta 7: Qual seu cargo?
1206
+ [mostrar opções em texto numerado]
1207
+
1208
+ Pergunta 8 (opcional): Usa task manager? jira/linear/github/asana ou Nenhum (freelance)
1209
+ ```
1210
+
1211
+ **Agente**: *(cria ENV.md + `.jarvis/sessions/{eng,prod,qa}`, valida Context7, cria AGENTS.md e confirma)*
1212
+
1213
+ ---
1214
+
1215
+ ## Mensagem de Conclusão
1216
+
1217
+ ```
1218
+ ✅ Inicialização concluída!
1219
+
1220
+ 📁 Arquivos criados:
1221
+ - ENV.md: $IDE/ENV.md
1222
+ - AGENTS.md: ./AGENTS.md
1223
+ - Sessões: .jarvis/sessions/{eng,prod,qa}/
1224
+
1225
+ 🔧 Configuração:
1226
+ - IDE: {ide}
1227
+ - Workspace: {WORKSPACE}
1228
+ - Repos: {WORKSPACE_REPOS ou (todas as pastas com .git/)}
1229
+ - Task manager: {TASK_MANAGER ou freelance}
1230
+ - Squad: {SQUAD}
1231
+
1232
+ ✅ MCPs:
1233
+ - Context7: OK (obrigatório)
1234
+ - Task manager ({TASK_MANAGER ou "vazio=freelance"}): {OK | pulado / indisponível}
1235
+ - TestSprite: {OK | Não configurado}
1236
+
1237
+ 📋 Próximos passos:
1238
+ 1. Revisar README.md e AGENTS.md
1239
+ 2. Executar projeto localmente
1240
+ 3. `/eng.start` com TASK_MANAGER_KEY (card ou controle próprio)
1241
+
1242
+ Bem-vindo! 🎉
1243
+ ```
1244
+
1245
+ ---
1246
+
1247
+ ## Checklist de Conclusão
1248
+
1249
+ - [ ] **Resolveu USER localmente** (ENV.md / git / SO) sem pedir login
1250
+ - [ ] **Carregou taxonomy.md e extraiu opções válidas** (ou usou valores padrão se não existir)
1251
+ - [ ] **Perguntou UMA variável POR VEZ** (nunca fez múltiplas perguntas juntas)
1252
+ - [ ] **Usou AskUserQuestion só para ≤4 opções** (AREA se aplicável — HUB com DATA vai em texto)
1253
+ - [ ] **Mostrou em texto numerado para >4 opções** (HUB, IDE, SQUAD, POSITION)
1254
+ - [ ] **Mostrou TODAS as opções disponíveis** (HUB inclui DATA; nunca omitiu)
1255
+ - [ ] **Incluiu descrição útil em cada opção** (seja AskUserQuestion ou texto)
1256
+ - [ ] **Validou respostas em texto contra lista de opções válidas**
1257
+ - [ ] **Usou multiSelect: false no AskUserQuestion** (apenas uma opção por variável)
1258
+ - [ ] Detectou IDE corretamente
1259
+ - [ ] Verificou se ENV.md já existe
1260
+ - [ ] Se ENV.md existe: ofereceu opção de Upgrade (C) além de Sobrescrever/Atualizar/Cancelar
1261
+ - [ ] Se Upgrade: calculou diff template vs ENV.md e appendou apenas variáveis faltantes
1262
+ - [ ] Coletou todas as variáveis obrigatórias
1263
+ - [ ] USER gravado no ENV.md a partir da identidade local
1264
+ - [ ] Validou MAX_AI_EXECUTION_PERCENTAGE (60-100) - para campos livres
1265
+ - [ ] Confirmou WORKSPACE (nome da pasta do `$IDE/` ou override)
1266
+ - [ ] ENABLE_CDD=true e SESSIONS_DIR=.jarvis/sessions
1267
+ - [ ] Criou `.jarvis/sessions/{eng,prod,qa}` e `.jarvis/` no `.gitignore`
1268
+ - [ ] TASK_MANAGER: valor ou vazio (freelance) explicado
1269
+ - [ ] Não gravou TOKEN_VERSION_CONTROL / PROJECT_NAME / EVENT_BUS*
1270
+ - [ ] Perguntou sobre variáveis opcionais
1271
+ - [ ] **Ajustou FLOWS_FOLDER baseado no IDE (commands se claude, workflows se outros)**
1272
+ - [ ] **Se HUB=DATA: coletou variáveis DATA_* obrigatórias (passo 3.1)**
1273
+ - [ ] **Se HUB≠DATA: bloco DATA_* removido completamente do ENV.md gerado**
1274
+ - [ ] Criou arquivo ENV.md usando template completo
1275
+ - [ ] **Se IDE ≠ claude: moveu todos os workflows de subpastas para a raiz de `$IDE/workflows/`**
1276
+ - [ ] Validou Context7 (obrigatório)
1277
+ - [ ] Se TASK_MANAGER definido: checou MCP em best-effort (não bloqueou)
1278
+ - [ ] Se TASK_MANAGER vazio: pulou MCP de task manager
1279
+ - [ ] Provisionou MCPs opcionais (Code Quality, se configurado)
1280
+ - [ ] Criou AGENTS.md
1281
+ - [ ] Confirmou criação com usuário
1282
+ - [ ] Alertou sobre dados sensíveis
1283
+ - [ ] Apresentou processos (sem checkin/daily/metrics)
1284
+ - [ ] Entregou checklist de onboarding
1285
+
1286
+ ---
1287
+
1288
+ ## Guardrails
1289
+
1290
+ ### Regras Aplicáveis
1291
+
1292
+ - **Idioma**: Todos os arquivos `.md` gerados devem ser em português do Brasil (pt-BR)
1293
+ - **Detecção de IDE**: A variável `$IDE` é detectada automaticamente (`.windsurf/`, `.claude/`, `.cursor/`, `.codex/`, `.opencode/`, `.gemini/`)
1294
+ - **Nunca inventar dados**: Se informação não estiver disponível, perguntar ao usuário
1295
+ - **Nunca expor credenciais**: Tokens e senhas nunca devem ser expostos no chat
1296
+ - **MAX_AI_EXECUTION_PERCENTAGE**:
1297
+ - Valor padrão: 100
1298
+ - Valor mínimo: 60
1299
+ - Intervalo válido: 60-100
1300
+ - Valores fora do intervalo são ajustados automaticamente
1301
+ - **Segurança primeiro**: Em caso de dúvida, priorizar segurança e integridade de dados
1302
+ - **Ações destrutivas**: Nunca executar sem confirmação explícita do usuário
1303
+
1304
+ > **Regras completas**: Ver `$IDE/rules/engineering/eng-rules.md`