jarvis-ai-framework 2.1.1 → 3.2.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 (266) hide show
  1. package/AGENTS.md +14 -115
  2. package/agents/AGENTS.md +11 -23
  3. package/agents/README.md +27 -129
  4. package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
  5. package/agents/engineering/eng.advisor.agent.md +56 -0
  6. package/agents/engineering/eng.agent.md +14 -24
  7. package/agents/engineering/eng.bug-hunter.md +7 -15
  8. package/agents/engineering/eng.dev-code-reviewer.md +1 -1
  9. package/agents/engineering/eng.frontend.agent.md +3 -7
  10. package/agents/engineering/eng.rpa.agent.md +2 -8
  11. package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
  12. package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
  13. package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
  14. package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
  15. package/agents/product/prod.discovery-interviewer.md +3 -3
  16. package/bin/README.md +142 -0
  17. package/bin/commands/docs-publish.js +105 -141
  18. package/bin/commands/docs-sync.js +66 -104
  19. package/bin/commands/info.js +7 -27
  20. package/bin/commands/init.js +23 -51
  21. package/bin/commands/install-rtk.js +9 -3
  22. package/bin/commands/list.js +5 -18
  23. package/bin/commands/map.js +20 -5
  24. package/bin/commands/qa-signoff.js +58 -55
  25. package/bin/commands/tokens.js +14 -17
  26. package/bin/commands/whoami.js +30 -26
  27. package/bin/jarvis.js +9 -163
  28. package/bin/lib/auth/session.js +20 -20
  29. package/bin/lib/cli/program.js +219 -0
  30. package/bin/lib/cli/shared-options.js +29 -0
  31. package/bin/lib/config/constants.js +59 -2
  32. package/bin/lib/config/ide-config.js +4 -8
  33. package/bin/lib/core/profile-filter.js +4 -1
  34. package/bin/lib/core/scanner.js +3 -29
  35. package/bin/lib/core/sync-engine.js +21 -14
  36. package/bin/lib/core/token-report.js +12 -2
  37. package/bin/lib/docs/fetch-file.js +39 -0
  38. package/bin/lib/docs/publish-file.js +194 -0
  39. package/bin/lib/docs/redis-cache.js +49 -0
  40. package/bin/lib/docs/validate-frontmatter.js +9 -39
  41. package/bin/lib/env-loader.js +11 -34
  42. package/bin/lib/flow-map/parse.js +11 -5
  43. package/bin/lib/flow-map/render.js +5 -2
  44. package/bin/lib/flow-map/tree.js +59 -10
  45. package/bin/lib/tasks/comment.js +40 -35
  46. package/bin/lib/utils/frontmatter.js +57 -0
  47. package/bin/lib/utils/git-parser.js +4 -6
  48. package/bin/lib/utils/npmrc-parser.js +6 -13
  49. package/bin/lib/utils/paths.js +2 -4
  50. package/bin/lib/utils/ui.js +3 -9
  51. package/bin/lib/vcs/api.js +25 -41
  52. package/bin/lib/vcs/create-issue.js +49 -33
  53. package/bin/lib/vcs/create-merge.js +47 -31
  54. package/bin/lib/vcs/fetch-raw.js +35 -23
  55. package/package.json +14 -5
  56. package/rules/engineering/eng-rules.md +1 -1
  57. package/rules/engineering/eng-security-rules.md +18 -16
  58. package/rules/engineering/eng.bump-rules.md +3 -2
  59. package/rules/engineering/eng.docs-scraping-rules.md +4 -4
  60. package/rules/engineering/eng.integrations-rules.md +6 -4
  61. package/rules/engineering/eng.skills-rules.md +1 -1
  62. package/rules/engineering/eng.specializations-rules.md +18 -4
  63. package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
  64. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
  65. package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
  66. package/rules-on-demand/engineering/eng.pre-pr-rules.md +1 -1
  67. package/rules-on-demand/engineering/eng.start-rules.md +2 -0
  68. package/skills/AGENTS.md +52 -87
  69. package/skills/SKILLS-ROADMAP.md +47 -128
  70. package/skills/eng-ai/SKILL.md +270 -0
  71. package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
  72. package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
  73. package/skills/eng-ai/references/11-governanca-ia.md +24 -0
  74. package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
  75. package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
  76. package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
  77. package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
  78. package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
  79. package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
  80. package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
  81. package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
  82. package/skills/eng-ai/references/9-produto-ia.md +24 -0
  83. package/skills/eng-ai/references/especializacoes.md +17 -0
  84. package/skills/eng-automation/SKILL.md +290 -0
  85. package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
  86. package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
  87. package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
  88. package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
  89. package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
  90. package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
  91. package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
  92. package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
  93. package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
  94. package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
  95. package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
  96. package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
  97. package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
  98. package/skills/eng-automation/references/7-rpa.md +25 -0
  99. package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
  100. package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
  101. package/skills/eng-automation/references/especializacoes.md +18 -0
  102. package/skills/eng-backend-nestjs/SKILL.md +1 -1
  103. package/skills/eng-data/SKILL.md +271 -0
  104. package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
  105. package/skills/eng-data/references/10-ciencia-dados.md +24 -0
  106. package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
  107. package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
  108. package/skills/eng-data/references/2-modelagem-dados.md +24 -0
  109. package/skills/eng-data/references/3-bancos-dados.md +24 -0
  110. package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
  111. package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
  112. package/skills/eng-data/references/6-qualidade-dados.md +24 -0
  113. package/skills/eng-data/references/7-governanca-metadados.md +24 -0
  114. package/skills/eng-data/references/8-estatistica-analise.md +24 -0
  115. package/skills/eng-data/references/9-analytics-bi.md +24 -0
  116. package/skills/eng-data/references/especializacoes.md +20 -0
  117. package/skills/eng-frontend/SKILL.md +12 -5
  118. package/skills/eng-frontend/references/13-design-system.md +48 -0
  119. package/skills/eng-frontend/references/14-microfrontend.md +46 -0
  120. package/skills/eng-global-task-comment/SKILL.md +3 -3
  121. package/skills/eng-platform/SKILL.md +331 -0
  122. package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
  123. package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
  124. package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
  125. package/skills/eng-platform/references/12-finops-custos.md +24 -0
  126. package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
  127. package/skills/eng-platform/references/14-profiling-performance.md +23 -0
  128. package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
  129. package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
  130. package/skills/eng-platform/references/2-redes.md +23 -0
  131. package/skills/eng-platform/references/3-cloud.md +24 -0
  132. package/skills/eng-platform/references/4-iac-automacao.md +24 -0
  133. package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
  134. package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
  135. package/skills/eng-platform/references/7-observabilidade.md +24 -0
  136. package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
  137. package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
  138. package/skills/eng-platform/references/especializacoes.md +34 -0
  139. package/skills/eng-qa/SKILL.md +283 -0
  140. package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
  141. package/skills/eng-qa/references/10-confiabilidade.md +25 -0
  142. package/skills/eng-qa/references/11-seguranca.md +24 -0
  143. package/skills/eng-qa/references/12-acessibilidade.md +24 -0
  144. package/skills/eng-qa/references/13-dados-testes.md +24 -0
  145. package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
  146. package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
  147. package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
  148. package/skills/eng-qa/references/3-design-testes.md +25 -0
  149. package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
  150. package/skills/eng-qa/references/5-automacao-testes.md +25 -0
  151. package/skills/eng-qa/references/6-api-integracao.md +25 -0
  152. package/skills/eng-qa/references/7-contrato.md +24 -0
  153. package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
  154. package/skills/eng-qa/references/9-performance.md +24 -0
  155. package/skills/eng-qa/references/especializacoes.md +29 -0
  156. package/skills/eng-qa-planner/SKILL.md +264 -0
  157. package/skills/jarvis-context-detect/SKILL.md +1 -1
  158. package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
  159. package/skills/jarvis-create-specialization/SKILL.md +8 -0
  160. package/skills/jarvis-docs-central/README.md +31 -28
  161. package/skills/jarvis-docs-central/SKILL.md +5 -5
  162. package/skills/jarvis-init/SKILL.md +9 -8
  163. package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
  164. package/skills/jarvis-list-specializations/SKILL.md +30 -17
  165. package/skills/jarvis-report-issue/SKILL.md +1 -1
  166. package/taxonomy.md +4 -16
  167. package/templates/AGENTS.md +2 -0
  168. package/templates/ENV-template.md +20 -2
  169. package/templates/engineering/advisor-template.md +65 -0
  170. package/templates/engineering/architecture-template.md +52 -4
  171. package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
  172. package/workflows/AGENTS.md +3 -1
  173. package/workflows/README.md +0 -10
  174. package/workflows/engineering/data/data.new-pipeline.md +6 -5
  175. package/workflows/engineering/eng.bug-audit.md +4 -14
  176. package/workflows/engineering/eng.debug.md +4 -20
  177. package/workflows/engineering/eng.plan.md +4 -26
  178. package/workflows/engineering/eng.pr.md +13 -63
  179. package/workflows/engineering/eng.pre-pr.md +14 -51
  180. package/workflows/engineering/eng.review.md +7 -13
  181. package/workflows/engineering/eng.rpa.robot.md +3 -9
  182. package/workflows/engineering/eng.start.md +37 -32
  183. package/workflows/engineering/eng.work.md +17 -40
  184. package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
  185. package/workflows/product/prod.spec.discovery.md +2 -2
  186. package/workflows/warm-up.md +35 -63
  187. package/agents/engineering/eng.cybersecurity.agent.md +0 -486
  188. package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
  189. package/bin/lib/docs/fetch-file.sh +0 -41
  190. package/bin/lib/docs/publish-file.sh +0 -284
  191. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
  192. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
  193. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
  194. package/skills/eng-ai-engineer/SKILL.md +0 -303
  195. package/skills/eng-data-bi/SKILL.md +0 -206
  196. package/skills/eng-data-debug/SKILL.md +0 -314
  197. package/skills/eng-data-engineer/SKILL.md +0 -266
  198. package/skills/eng-data-onboard/SKILL.md +0 -317
  199. package/skills/eng-data-orchestrator/SKILL.md +0 -433
  200. package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
  201. package/skills/eng-frontend-design-system/SKILL.md +0 -155
  202. package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
  203. package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
  204. package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
  205. package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
  206. package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
  207. package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
  208. package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
  209. package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
  210. package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
  211. package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
  212. package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
  213. package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
  214. package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
  215. package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
  216. package/skills/eng-global-jira-comment/SKILL.md +0 -27
  217. package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
  218. package/skills/eng-qa-bug-report/SKILL.md +0 -877
  219. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
  220. package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
  221. package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
  222. package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
  223. package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
  224. package/skills/eng-qa-dev-guide/SKILL.md +0 -173
  225. package/skills/eng-qa-e2e/SKILL.md +0 -407
  226. package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
  227. package/skills/eng-qa-exploratory/SKILL.md +0 -196
  228. package/skills/eng-qa-gate/SKILL.md +0 -377
  229. package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
  230. package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
  231. package/skills/eng-qa-quality-report/SKILL.md +0 -419
  232. package/skills/eng-qa-test-plan/SKILL.md +0 -473
  233. package/skills/eng-qa-testsprite/SKILL.md +0 -332
  234. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
  235. package/skills/eng-qa-unit-test/SKILL.md +0 -478
  236. package/skills/eng-scraper/SKILL.md +0 -260
  237. package/skills/eng-scraper/references/1-puppeteer.md +0 -140
  238. package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
  239. package/skills/eng-scraper/references/3-anti-bot.md +0 -94
  240. package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
  241. package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
  242. package/skills/eng-security-cybersecurity/SKILL.md +0 -250
  243. package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
  244. package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
  245. package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
  246. package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
  247. package/skills/eng-security-patch/SKILL.md +0 -388
  248. package/skills/eng-security-threat-model/SKILL.md +0 -171
  249. package/skills/eng-security-triage/SKILL.md +0 -276
  250. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
  251. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
  252. package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
  253. package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
  254. package/templates/engineering/qa/qa.quality-report-template.md +0 -130
  255. package/workflows/engineering/eng.security-audit.md +0 -319
  256. package/workflows/engineering/eng.security-incident.md +0 -281
  257. package/workflows/engineering/eng.security-pipeline.md +0 -219
  258. package/workflows/engineering/eng.security-review.md +0 -241
  259. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
  260. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
  261. package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
  262. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
  263. package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
  264. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
  265. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
  266. /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
@@ -1,388 +0,0 @@
1
- ---
2
- name: eng-security-patch
3
- description: Gera diffs candidatos para achados confirmados de segurança. Consome triage.json (preferencial) filtrado por status == "confirmed". Executa 1 subagente de patch por achado + 1 reviewer independente por diff (sem ver a prosa do finding). Escreve PATCHES/bug_NN/{patch.diff,patch_result.json}, PATCHES.md e PATCHES.json como texto inerte para revisão humana — nunca aplica diffs. Usar quando pedido "gerar fixes", "patch dos achados", "fechar o loop do triage", "gerar correções candidatas".
4
- argument-hint: "<triage.json> [--repo PATH] [--top N] [--id F-NNN] [--fresh]"
5
- allowed-tools:
6
- - Read
7
- - Glob
8
- - Grep
9
- - Write
10
- - Task
11
- - AskUserQuestion
12
- - Bash(git log:*)
13
- metadata:
14
- author: jarvis-team
15
- version: "1.0"
16
- area: security
17
- ---
18
-
19
- # eng-security-patch
20
-
21
- Terceira peça do pipeline estático (`/eng-security-threat-model` → `/eng.security-audit` → `/eng-security-triage` → `/eng-security-patch`).
22
- Transforma uma lista ranqueada de achados verificados em diffs candidatos.
23
-
24
- O skill **nunca aplica um diff** ao repositório-alvo. O output é texto inerte em `./.security/outputs/PATCHES/` para o TL revisar e aplicar fora de banda. Não existe flag `--apply` ou `--approve` por design: a capacidade está ausente e portanto não pode ser prompt-injetada.
25
-
26
- **Argumentos** (parsear de `$ARGUMENTS`):
27
- - `<triage.json>` (posicional, obrigatório): `triage.json` filtrado por `status == "confirmed"`. Aceita `security-findings.json` com warning.
28
- - `--repo PATH`: codebase-alvo, read-only (default: cwd). O skill para se os arquivos citados não resolverem sob esse path.
29
- - `--top N`: patchar apenas os N achados de maior severidade.
30
- - `--id F-NNN`: patchar apenas o achado com este id.
31
- - `--fresh`: ignorar checkpoint `.security/state/patch-state.json` e recomeçar do zero.
32
-
33
- **Escopo de Write.** A ferramenta Write pode escrever SOMENTE em `./.security/outputs/PATCHES/` e `./.security/state/`. Nunca escrever em `--repo`, nunca `git apply`, nunca `patch`, nunca editar código-alvo.
34
-
35
- ---
36
-
37
- ## Checkpointing (`.security/state/patch-state.json`)
38
-
39
- Estado persiste em `.security/state/patch-state.json` para que uma nova sessão `/eng-security-patch` retome sem re-spawnar subagentes.
40
-
41
- **Formato do estado:**
42
- ```json
43
- {
44
- "status": "running|complete",
45
- "phase_done": 0,
46
- "args": { "repo": ".", "top": null, "id": null, "findings_path": "triage.json" },
47
- "findings": [],
48
- "patches": []
49
- }
50
- ```
51
-
52
- **Início da execução:**
53
- - Read `.security/state/patch-state.json` se existir.
54
- - Se `status == "complete"` OU arquivo ausente OU `--fresh` em `$ARGUMENTS` → começar do zero. Write estado inicial com `{"status": "running", "phase_done": 0, ...}` para `.security/state/patch-state.json`.
55
- - Se `status == "running"` com `phase_done == N` → retomar. Print `Retomando checkpoint: Fase N concluída`. Pular para Fase N+1.
56
-
57
- **Fim de cada fase N:**
58
- Write o estado atualizado (com `phase_done: N` e dados acumulados) para `.security/state/patch-state.json`.
59
-
60
- **Fim da execução:**
61
- Write `{"status": "complete", "phase_done": 4, ...}` para `.security/state/patch-state.json`.
62
-
63
- ---
64
-
65
- ## Fase 0: Parse de argumentos e validação
66
-
67
- ### 0a. Parsear `$ARGUMENTS`
68
-
69
- Extrair: findings path (primeiro posicional), `--repo` (default `.`), `--top`, `--id`, `--fresh`.
70
- Se nenhum findings path: usar AskUserQuestion para solicitar.
71
-
72
- ### 0b. Validar o input
73
-
74
- Ler o arquivo de findings:
75
-
76
- - **`triage.json`** — ler `.findings[]`. **Filtrar por `status == "confirmed"`**. Este é o input canônico: já verificado, deduplicado, ranqueado, com owner.
77
- - **`security-findings.json`** — ler `.findings[]`. Não verificado; print `Warning: security-findings.json não passou por triage. Execute /eng-security-triage primeiro para melhor precisão.` e continuar.
78
- - **JSON genérico** com lista top-level ou array `findings`/`results`/`issues`/`vulnerabilities`.
79
-
80
- Print: `N achados confirmados encontrados em <findings_path>`.
81
-
82
- **Checkpoint:** Write `.security/state/patch-state.json` com `{"status": "running", "phase_done": 0, "args": {...}}`.
83
-
84
- ---
85
-
86
- ## Fase 1: Ingest e normalização
87
-
88
- ### 1a. Aliases de campos (canônico ← também aceito)
89
-
90
- | Canônico | Também aceitar |
91
- |------------------|-------------------------------------------------------------|
92
- | `file` | `path`, `location.file`, `filename` |
93
- | `line` | `line_number`, `location.line`, `lineno` |
94
- | `category` | `type`, `cwe`, `rule_id` |
95
- | `severity` | `severity_rating`, `level`, `priority`, `severity_derived` |
96
- | `title` | `name`, `summary`, `message` |
97
- | `description` | `details`, `report`, `body`, `evidence` |
98
- | `recommendation` | `fix`, `remediation`, `mitigation` |
99
- | `owner_hint` | `owner`, `component` |
100
-
101
- Preservar `id` do triage.json (padrão `F-NNN`). Adicionar `source` (path relativo do arquivo de input).
102
-
103
- ### 1b. Filtro e ordem
104
-
105
- - Se `--id F-NNN`: manter apenas esse achado.
106
- - Se `--top N`: ordenar por `severity` (HIGH > MEDIUM > LOW) depois `exploitability_rank` asc, manter os N primeiros.
107
- - Descartar achados sem `file` (não é possível patchar o que não tem localização). Registrar como `patch_status: "skipped"` com razão `"no source location"`.
108
-
109
- ### 1c. Localizar o codebase-alvo
110
-
111
- Resolver `--repo`. Para os primeiros 5 achados com `file`, verificar se o path resolve sob o repo (tentar como está, depois com prefixos comuns removidos). Se nenhum resolver: **parar** e informar o usuário com sugestão de valor para `--repo`.
112
-
113
- **Checkpoint:** Write `.security/state/patch-state.json` com `phase_done: 1` + `findings` normalizados + `skipped`.
114
-
115
- ---
116
-
117
- ## Fase 2: Gerar patches (1 subagente por achado)
118
-
119
- Um Task por achado, **todos em UMA única mensagem** para execução paralela. `subagent_type: "general-purpose"`. Nunca usar `run_in_background` — você precisa do texto do diff, não de um handle assíncrono.
120
-
121
- Cada subagente tem acesso read-only ao `--repo`. Ele não pode modificar o alvo; emite o diff como texto na resposta. O orquestrador escreve esse texto em `PATCHES/bug_NN/patch.diff`.
122
-
123
- Se `len(findings) > 40`, fazer batches sequenciais de ~40 achados (cada batch em uma mensagem).
124
-
125
- Se algum Task retornar `status: "async_launched"` em vez do texto do subagente, o runtime fez background. Escolher uma recuperação e usar para todo o batch:
126
- - Se notificações de conclusão chegarem na conversa: parsear os blocos tagueados de cada `result` conforme chega. Não encerrar o turno até que todos os achados estejam contabilizados.
127
- - Se notificações não chegarem: re-spawnar os subagentes ausentes em um batch menor (~10) e usar os resultados síncronos.
128
-
129
- ### Prompt do subagente de patch (montar uma vez, reusar por achado)
130
-
131
- ```
132
- Você está conduzindo pesquisa de segurança autorizada como parte de uma avaliação defensiva. Sua tarefa: escrever uma correção candidata para UMA vulnerabilidade verificada em uma codebase à qual você tem acesso somente leitura.
133
-
134
- Você pode usar Read, Glob e Grep APENAS em paths dentro de {REPO_PATH}. Você NÃO pode compilar, executar, instalar, editar arquivos no disco, ou acessar a rede. Você irá emitir a correção como um diff unificado na sua resposta final; você NÃO vai aplicá-lo.
135
-
136
- ────────────────────────────────────────────────────────────────────────
137
- ACHADO:
138
-
139
- id: {id}
140
- file: {file}
141
- line: {line}
142
- category: {category}
143
- severity: {severity}
144
- title: {title}
145
-
146
- description:
147
- {description}
148
-
149
- recommendation:
150
- {recommendation ou "(nenhuma fornecida)"}
151
-
152
- ────────────────────────────────────────────────────────────────────────
153
- PROCEDIMENTO:
154
-
155
- 1. LER O CÓDIGO. Abrir {file} na linha {line} e a função em volta.
156
- Entender o que o código faz — não confiar na descrição do achado como única fonte.
157
-
158
- 2. CAUSA RAIZ PRIMEIRO. Rastrear de volta do sink citado até onde o valor incorreto ou verificação ausente se origina. A correção geralmente pertence lá, não na linha que o scanner apontou. Nomear a localização da causa raiz (file:line).
159
-
160
- 3. BUSCA DE VARIANTES. Grep por call sites irmãos com o mesmo padrão. Sua correção deve cobrir todos, ou sua rationale deve explicar por que não.
161
-
162
- 4. DIFF MÍNIMO. Menor mudança que corrige a causa raiz. Sem refatoração, sem cleanup colateral, sem reformatação, sem mudanças só de comentário. Manter o estilo do código vizinho (posição de chaves, nomenclatura, tratamento de erros).
163
-
164
- 5. SELF-CHECK ADVERSARIAL. Reler seu diff como atacante. Nomear uma variação de input que atingiria o mesmo estado ruim sem acionar sua mudança. Se conseguir nomear uma, seu fix está na camada errada — voltar ao passo 2.
165
-
166
- 6. TESTE DE REGRESSÃO. Como parte do diff, adicionar UM caso de teste que falha antes da sua mudança e passa depois — colocado onde o projeto mantém seus testes (procurar test_*/, *_test.*, tests/, spec/). Se não existir diretório de testes, omitir o teste e explicar em <test_note>.
167
-
168
- ────────────────────────────────────────────────────────────────────────
169
- OUTPUT — sua resposta final DEVE conter exatamente estas tags. Emitir o diff verbatim entre os marcadores; NÃO envolver em ``` fences.
170
-
171
- <patch_diff>
172
- --- a/path/to/file
173
- +++ b/path/to/file
174
- @@ ... @@
175
- linha de contexto
176
- -linha removida
177
- +linha adicionada
178
- </patch_diff>
179
- <rationale>o que mudou e por que, mecanicamente — file:line da causa raiz, o que a mudança garante</rationale>
180
- <variants_checked>pares file:function que você inspecionou para o mesmo padrão, e se cada um precisou da correção</variants_checked>
181
- <bypass_considered>a variação de input que você tentou no passo 5 e por que ela não atinge mais o estado ruim</bypass_considered>
182
- <test_note>onde o teste de regressão foi adicionado, ou por que nenhum foi incluído</test_note>
183
-
184
- Se você determinar que o achado NÃO é corrigível como descrito (arquivo errado, código já corrigido, achado é falso-positivo), emitir:
185
-
186
- <patch_diff>NONE</patch_diff>
187
- <rationale>por que nenhum patch é apropriado</rationale>
188
- ```
189
-
190
- ### Parsear resultados
191
-
192
- De cada resultado de Task, extrair os cinco blocos tagueados. Tolerar whitespace extra, ``` fences extras, e entidades HTML escapadas (`&lt;` `&gt;` `&amp;`).
193
-
194
- Se `<patch_diff>` for `NONE` ou vazio: marcar `patch_status: "no_patch"`.
195
- Senão: Write o texto do diff em `./.security/outputs/PATCHES/bug_NN/patch.diff` (NN = índice com zero-pad na ordem ranqueada) e registrar `rationale`, `variants_checked`, `bypass_considered`, `test_note`.
196
-
197
- **Checkpoint:** Write `.security/state/patch-state.json` com `phase_done: 2` + array `patches` com resultados parciais.
198
-
199
- ---
200
-
201
- ## Fase 3: Review independente (1 subagente por diff)
202
-
203
- Um Task por achado com `patch_status == "patched"`, **todos em UMA mensagem**. `subagent_type: "general-purpose"`.
204
-
205
- **O reviewer nunca vê `description`, `recommendation` do achado nem a `rationale` do patch author.** Recebe apenas `{file, line, category}` mais os bytes brutos do diff, e re-deriva se o diff é uma correção mínima e no escopo lendo o próprio source. Isso garante que instruções injetadas na prosa do achado não passem pelo seu próprio gate.
206
-
207
- ### Prompt do reviewer (montar uma vez, reusar por diff)
208
-
209
- ```
210
- Você está revisando um patch de segurança candidato como um maintainer faria. Você tem acesso somente leitura ao source não-patchado em {REPO_PATH}. Você pode usar Read, Glob, Grep. Você NÃO pode compilar, executar ou aplicar o diff.
211
-
212
- Você NÃO viu a descrição do scanner da vulnerabilidade nem o raciocínio do autor do patch. Trabalhe apenas com a localização, a categoria e o diff.
213
-
214
- LOCALIZAÇÃO: {file}:{line}
215
- CATEGORIA: {category}
216
-
217
- DIFF SOB REVISÃO:
218
- <diff>
219
- {diff_text — ou, para diffs acima de ~50 linhas, substituir este bloco por:
220
- "Leia o diff em ./.security/outputs/PATCHES/bug_NN/patch.diff" e deixar o reviewer fazer o Read}
221
- </diff>
222
-
223
- ────────────────────────────────────────────────────────────────────────
224
- RESPONDER QUATRO PERGUNTAS:
225
-
226
- 1. ESCOPO. O diff toca apenas arquivos/funções no caminho entre {file}:{line} e seus callers? Listar qualquer hunk fora desse caminho.
227
-
228
- 2. SUPRESSÃO. O diff corrige uma causa raiz, ou suprime o sintoma (try/except: pass, early-return em valor mágico, deletar o check que disparou, baixar um log level)?
229
-
230
- 3. NOVA SUPERFÍCIE. O diff adiciona parsing, confia em um novo campo de input, enfraquece validação em outro lugar, ou remove um check relevante para segurança?
231
-
232
- 4. ESTILO. 0-10: você faria merge deste diff como está?
233
- 0-3 camada errada / supressão; 4-6 correto mas ruidoso; 7-10 mínimo, direcionado, mantém o estilo do código vizinho.
234
-
235
- ────────────────────────────────────────────────────────────────────────
236
- Terminar sua resposta com EXATAMENTE:
237
-
238
- REVIEW: ACCEPT | REJECT
239
- STYLE_SCORE: <0-10>
240
- OUT_OF_SCOPE_HUNKS: <file:line separados por vírgula, ou none>
241
- REASON: <2-4 frases citando hunks específicos do diff e linhas do source>
242
-
243
- ACCEPT requer: no escopo, correção de causa raiz, sem nova superfície de ataque, style >= 5. Caso contrário REJECT.
244
- ```
245
-
246
- ### Parsear e consolidar
247
-
248
- De cada resultado, parsear o bloco final. Anexar `review`, `style_score`, `out_of_scope_hunks`, `review_reason` ao achado. Definir `verified: "static_review_only"` para **todo** resultado estático — o label descreve a classe de verificação, não o resultado.
249
-
250
- **Checkpoint:** Write `.security/state/patch-state.json` com `phase_done: 3` + `patches` completos.
251
-
252
- ---
253
-
254
- ## Fase 4: Output
255
-
256
- ### 4a. `patch_result.json` por achado
257
-
258
- Para cada achado, Write `./.security/outputs/PATCHES/bug_NN/patch_result.json`:
259
-
260
- ```json
261
- {
262
- "id": "F-003",
263
- "source": "triage.json#2",
264
- "title": "...",
265
- "file": "...",
266
- "line": 0,
267
- "category": "...",
268
- "severity": "HIGH",
269
- "owner_hint": "...",
270
- "patch_status": "patched|no_patch|skipped",
271
- "verified": "static_review_only",
272
- "review": "ACCEPT|REJECT|null",
273
- "style_score": 0,
274
- "out_of_scope_hunks": [],
275
- "rationale": "...",
276
- "variants_checked": "...",
277
- "bypass_considered": "...",
278
- "test_note": "...",
279
- "review_reason": "..."
280
- }
281
- ```
282
-
283
- ### 4b. `./.security/outputs/PATCHES.json`
284
-
285
- Write `./.security/outputs/PATCHES.json`:
286
-
287
- ```json
288
- {
289
- "patch_completed": true,
290
- "repo": "...",
291
- "input_file": "triage.json",
292
- "summary": {
293
- "input_count": 0,
294
- "patched": 0,
295
- "no_patch": 0,
296
- "skipped": 0,
297
- "accepted": 0,
298
- "rejected": 0
299
- },
300
- "findings": [ { "...": "mesmo shape do patch_result.json" } ]
301
- }
302
- ```
303
-
304
- ### 4c. `./.security/outputs/PATCHES.md` (incremental)
305
-
306
- **Passo 1 — header.** Write `./.security/outputs/PATCHES.md` (sobrescreve se existir):
307
-
308
- ````markdown
309
- # Patches Candidatos
310
-
311
- > **Somente revisão estática.** Estes diffs foram criados e revisados por
312
- > agentes independentes lendo o source. Eles NÃO foram compilados, executados
313
- > ou re-atacados. Leia cada diff antes de aplicar — verifique: (1) escopo mínimo,
314
- > (2) causa raiz corrigida (não supressão de sintoma), (3) nenhuma nova superfície de ataque.
315
-
316
- **Input:** {findings_path} · **Repo:** {repo} · {N} achados → {M} diffs
317
-
318
- ---
319
- ````
320
-
321
- **Passo 2 — por achado** (ordenar: ACCEPT primeiro, depois por severity). Para cada achado, append a `./.security/outputs/PATCHES.md`:
322
-
323
- ````markdown
324
- ## bug_{NN}: [{severity}] {title} ({id})
325
-
326
- `{file}:{line}` · {category} · owner: {owner_hint ou "?"}
327
- **Status:** {verified} · review {review ou "n/a"} · style {style_score ou "n/a"}/10
328
- **Diff:** `.security/outputs/PATCHES/bug_{NN}/patch.diff`
329
-
330
- **Rationale:** {rationale}
331
- **Variantes verificadas:** {variants_checked}
332
- **Bypass considerado:** {bypass_considered}
333
- {se review == "REJECT":}
334
- > **Rejeitado pelo reviewer:** {review_reason}
335
- {se out_of_scope_hunks:}
336
- > **Hunks fora do escopo:** {out_of_scope_hunks}
337
-
338
- ---
339
- ````
340
-
341
- **Passo 3 — rodapé.** Append tabela `## Skipped` para achados sem `file` ou `patch_status == "no_patch"`, uma linha cada com a razão.
342
-
343
- **Checkpoint final:** Write `.security/state/patch-state.json` com `{"status": "complete", "phase_done": 4, ...}`.
344
-
345
- ### 4d. Sumário terminal
346
-
347
- Máximo ~10 linhas:
348
-
349
- ```
350
- Patches gerados (modo estático): {N} achados → {M} diffs.
351
-
352
- Aceitos: {n} {título do top aceito}
353
- Rejeitados: {n}
354
- Sem patch: {n}
355
- Skipped: {n}
356
-
357
- Escrito em ./.security/outputs/PATCHES/bug_NN/, ./.security/outputs/PATCHES.md, ./.security/outputs/PATCHES.json
358
- Estes são rascunhos. Revise cada diff antes de aplicar.
359
- ```
360
-
361
- ### Skills invocados durante a execução do skill
362
-
363
- | Passo | Skill | Condição |
364
- |-------|-------|----------|
365
- | — | Nenhuma — skill autocontida | — |
366
-
367
- ---
368
-
369
- ## Guard Rails
370
-
371
- - **O skill nunca aplica diffs.** Sem `git apply`, sem `patch`, sem Edit contra `--repo`. Se parecer necessário, o design está errado.
372
- - **Write somente em `./.security/outputs/PATCHES/` e `.security/state/`.**
373
- - **Isolamento do reviewer.** O prompt do reviewer recebe `{file, line, category, diff}` e nada mais do achado. Não passar `description`, `recommendation` nem a `rationale` do autor do patch.
374
- - **Todos os Task calls de uma fase em UMA mensagem.** Spawn serial está correto mas N× mais lento.
375
- - **`verified: "static_review_only"` sempre** em modo estático, independente de ACCEPT/REJECT.
376
- - **Checkpoint antes de iniciar a próxima fase**, sempre.
377
- - **Input canônico é `triage.json` com `status == "confirmed"`.** Patchar achado não-verificado gasta tokens em falso-positivo.
378
-
379
- ---
380
-
381
- ## Pipeline completo
382
-
383
- ```
384
- /eng-security-threat-model → /eng.security-audit → /eng-security-triage → /eng-security-patch
385
- (mapa) (scan guiado) (verifica+ranqueia) (fix candidato)
386
- ```
387
-
388
- Schemas de todos os artefatos em `docs/SECURITY-ARTIFACTS-SCHEMA.md`.
@@ -1,171 +0,0 @@
1
- ---
2
- name: eng-security-threat-model
3
- description: >-
4
- Produz THREAT_MODEL.md para o projeto corrente. Três modos: bootstrap (deriva o modelo
5
- do código sem owner), interview (walk com o owner do sistema), bootstrap-then-interview
6
- (bootstrap primeiro, entrevista refinadora depois). Lê código, histórico git e relatórios
7
- fornecidos — nunca executa, builda ou faz requests ao alvo. Invocar antes de
8
- eng.security-audit e eng-security-triage.
9
- argument-hint: "[bootstrap|interview|bootstrap-then-interview] [--fresh]"
10
- allowed-tools:
11
- - Read
12
- - Glob
13
- - Grep
14
- - Write
15
- - Bash(git log:*)
16
- - Bash(find:*)
17
- - Bash(ls:*)
18
- - AskUserQuestion
19
- metadata:
20
- author: jarvis-team
21
- version: "1.0"
22
- area: security
23
- ---
24
-
25
- # eng-security-threat-model
26
-
27
- Threat model é o **mapa** do sistema: o que pode dar errado, quem faria, e o que protege o sistema.
28
- Scan de vulnerabilidades é o detector de metais — sem o mapa, o detector varre o lugar errado.
29
-
30
- **Litmus test:** Se corrigir uma linha de código faz uma entrada desaparecer do modelo, era vulnerabilidade, não ameaça.
31
- Uma ameaça ("attacker achieves RCE via untrusted input parsing") sobrevive a qualquer patch individual.
32
- Uma vulnerabilidade ("buffer overflow em `parser.js:82`") desaparece quando corrigida. Este skill produz **ameaças** — vulnerabilidades aparecem apenas como `evidence` que eleva o score de likelihood.
33
-
34
- ---
35
-
36
- ## Step 0 — Fronteira read-only (sempre executa primeiro)
37
-
38
- Este skill realiza **análise estática apenas**. Lê código-fonte, histórico git e relatórios de vulnerabilidade fornecidos pelo usuário. **Nunca** builda, executa, fuzza ou modifica o código-alvo. **Nunca** faz requests de rede à infraestrutura do alvo.
39
-
40
- Confirme e declare na primeira resposta:
41
- 1. O diretório-alvo existe e é um checkout local legível.
42
- 2. Nenhum código do alvo será executado nesta sessão.
43
- 3. Se solicitado a validar ameaça por execução: declinar e orientar para pipeline de execução dedicado.
44
-
45
- ---
46
-
47
- ## Step 1 — Roteamento de modo
48
-
49
- Parsear `$ARGUMENTS`:
50
-
51
- | Primeiro token | Ação |
52
- |---|---|
53
- | `bootstrap` | Ir para **Seção C** |
54
- | `interview` | Ir para **Seção B** |
55
- | `bootstrap-then-interview` | Ir para **Seção D** |
56
- | vazio ou outro | Perguntar: **"Tem alguém que construiu ou conhece bem este sistema disponível para responder perguntas nesta sessão?"** — Sim + codebase disponível → recomendar `bootstrap-then-interview`. Sim sem codebase → `interview`. Não → `bootstrap`. |
57
-
58
- `--fresh`: ignorar `THREAT_MODEL.md` existente e criar do zero.
59
- Sem `--fresh`: se `THREAT_MODEL.md` existe, atualizar (adicionar/corrigir ameaças) sem sobrescrever seções válidas.
60
-
61
- ---
62
-
63
- ## Seção A — Schema de output
64
-
65
- Antes de escrever qualquer arquivo, reler `docs/SECURITY-ARTIFACTS-SCHEMA.md` seção 1 (THREAT_MODEL.md).
66
- Em sessões longas, o schema pode ser eviccionado da janela — o re-read garante o contrato correto.
67
-
68
- ---
69
-
70
- ## Seção B — Modo Interview
71
-
72
- Framework de 4 perguntas. Conduzir como conversa, não como formulário.
73
-
74
- | Q | Pergunta ao owner | Preenche schema |
75
- |---|---|---|
76
- | Q1 | O que estamos construindo? (o que faz, quem usa, onde roda, quais dados toca) | seções 1, 2, 3 |
77
- | Q2 | O que pode dar errado? (quem atacaria, por onde entraria, o que quereria) | seção 4: id, threat, actor, surface, asset |
78
- | Q3 | O que fazemos a respeito? (controles atuais, o que aceitamos como risco, o que depriorizamos) | seção 4: impact/likelihood/status/controls; seções 5 e 8 |
79
- | Q4 | Fizemos um bom trabalho? (cobriu STRIDE? ranking faz sentido? o que ficou em aberto?) | seção 6 (perguntas abertas); validar cobertura |
80
-
81
- **Durabilidade de contexto:** Interview é multi-turno. Não ler blocos grandes no início — ler seção por seção ao precisar. Para sobreviver a compactação, salvar estado em `.security/state/threat-model-interview.json` após cada Q.
82
-
83
- **Verificação de evidências (após Q2):** Para cada ameaça mencionada pelo owner, buscar no código evidência que a instancia (função, endpoint, dependência vulnerável). Registrar como `evidence` na tabela — evidência não é a ameaça.
84
-
85
- ---
86
-
87
- ## Seção C — Modo Bootstrap
88
-
89
- Análise do código sem owner presente. 5 fases em sequência:
90
-
91
- **Fase 1 — Recon** (leitura estrutural):
92
- - Ler manifesto do projeto: `package.json` / `pyproject.toml` / `go.mod` / `Cargo.toml` / equivalente
93
- - Listar entry points: `routes/`, `controllers/`, `handlers/`, `api/`, `views/`, `cmd/`
94
- - Listar integrações externas: clientes HTTP, queries de banco, leituras de arquivo, consumidores de fila
95
- - Git log recente: `git log --oneline -50` — procurar commits com "fix", "patch", "vuln", "sec", "auth", "cve"
96
-
97
- **Fase 2 — Assets & Entry Points** (seções 2 e 3):
98
- Com base no recon, listar:
99
- - Assets: tudo que vale proteger (dados de usuário, credenciais, integridade do serviço, dados financeiros, segredos de negócio)
100
- - Entry points: onde input não confiável entra (endpoints HTTP, uploads, mensagens de fila, args de CLI, env vars de origem externa)
101
-
102
- **Fase 3 — Threat table draft** (seção 4):
103
- Para cada entry point, formular ameaças no nível actor-wants-outcome. Cobertura mínima STRIDE:
104
- - **Spoofing**: autenticação pode ser bypassada?
105
- - **Tampering**: dados em trânsito ou armazenados podem ser alterados?
106
- - **Repudiation**: ações críticas são logadas e não-repudiáveis?
107
- - **Info Disclosure**: dados sensíveis podem ser expostos (resposta de erro, log, cache)?
108
- - **Denial of Service**: input malicioso pode esgotar recursos (CPU, memória, conexões)?
109
- - **Escalation of Privilege**: usuário pode obter mais permissões do que deveria (IDOR, RBAC bypass)?
110
- - **Supply Chain**: dependências externas podem ser comprometidas?
111
-
112
- **Fase 4 — Evidências** (seção 4, coluna `evidence`):
113
- Para cada ameaça na tabela:
114
- - Buscar padrão inseguro correspondente no código (queries sem parametrização, eval, exec com input, etc.)
115
- - Buscar no git log patches relacionados a essa superfície
116
- - Se dependência com CVE relevante: registrar CVE ID
117
-
118
- Evidência move `likelihood` para cima. Controles existentes movem para baixo. Registrar o **residual** após controles.
119
-
120
- **Fase 5 — Gap-fill e depriorizados** (seções 5 e 6):
121
- - Ameaças STRIDE sem cobertura e justificavelmente fora do escopo → seção 5 com `reason`
122
- - Dúvidas não resolvidas pelo código → seção 6 (perguntas abertas para owner futuro)
123
-
124
- ---
125
-
126
- ## Seção D — Modo Bootstrap-then-Interview
127
-
128
- Recomendado quando owner e codebase estão disponíveis na mesma sessão.
129
-
130
- 1. Informar o owner: *"Vou ler o código primeiro (~5-10 min) e voltar com um rascunho. Refinamos juntos. Prefere assim ou começar do zero?"* Só prosseguir se aceitar — senão, ir para Seção B (interview puro).
131
- 2. Executar Seção C (bootstrap) completo → escrever `THREAT_MODEL.md` rascunho.
132
- 3. Continuar para Seção B (interview) com o rascunho como seed:
133
- - Perguntas abertas da seção 6 do bootstrap viram os prompts Q1-Q4.
134
- - Owner confirma, corrige e adiciona — não descreve do zero.
135
- 4. Sobrescrever `THREAT_MODEL.md` com o modelo refinado. Provenance: `mode: bootstrap-then-interview`.
136
-
137
- ---
138
-
139
- ## Step 2 — Escrever output
140
-
141
- Ler Seção A antes de escrever. Escrever `.security/outputs/THREAT_MODEL.md` conforme schema de `docs/SECURITY-ARTIFACTS-SCHEMA.md`. Criar `.security/outputs/` se não existir.
142
-
143
- Criar `.security/state/` se não existir. Salvar `.security/state/threat-model-meta.json`:
144
-
145
- ```json
146
- {
147
- "generated_at": "<ISO-8601>",
148
- "mode": "<bootstrap|interview|bootstrap-then-interview>",
149
- "target": "<path>",
150
- "threat_count": 0,
151
- "top_threats": ["<T1: descrição>", "<T2: descrição>"]
152
- }
153
- ```
154
-
155
- ### Skills invocados durante a execução do skill
156
-
157
- | Passo | Skill | Condição |
158
- |-------|-------|----------|
159
- | — | Nenhuma — skill autocontida | — |
160
-
161
- ---
162
-
163
- ## Step 3 — Sumário ao usuário
164
-
165
- Após escrever o arquivo, exibir:
166
-
167
- 1. Path do `.security/outputs/THREAT_MODEL.md` gerado.
168
- 2. Top 5 ameaças por likelihood × impact (id, descrição em uma linha).
169
- 3. Para `bootstrap`: perguntas abertas da seção 6 — seed para entrevista futura ou review manual.
170
- 4. Para `interview`: afirmações do owner não verificadas no código — seed para revisão de código.
171
- 5. Próximo passo sugerido: *"Execute `/eng.security-audit` para scan de vulnerabilidades guiado pelo threat model."*