@brunosps00/dev-workflow 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/lib/constants.js +2 -0
- package/lib/install-deps.js +39 -1
- package/package.json +1 -1
- package/scaffold/en/commands/dw-brainstorm.md +50 -15
- package/scaffold/en/commands/dw-code-review.md +10 -0
- package/scaffold/en/commands/dw-create-prd.md +10 -1
- package/scaffold/en/commands/dw-generate-pr.md +4 -1
- package/scaffold/en/commands/dw-help.md +3 -0
- package/scaffold/en/commands/dw-quick.md +9 -7
- package/scaffold/en/commands/dw-review-implementation.md +11 -0
- package/scaffold/en/commands/dw-security-check.md +271 -0
- package/scaffold/en/templates/brainstorm-matrix.md +12 -4
- package/scaffold/en/templates/idea-onepager.md +90 -0
- package/scaffold/pt-br/commands/dw-brainstorm.md +54 -19
- package/scaffold/pt-br/commands/dw-code-review.md +10 -0
- package/scaffold/pt-br/commands/dw-create-prd.md +10 -1
- package/scaffold/pt-br/commands/dw-generate-pr.md +4 -1
- package/scaffold/pt-br/commands/dw-help.md +3 -0
- package/scaffold/pt-br/commands/dw-quick.md +9 -7
- package/scaffold/pt-br/commands/dw-review-implementation.md +11 -0
- package/scaffold/pt-br/commands/dw-security-check.md +271 -0
- package/scaffold/pt-br/templates/brainstorm-matrix.md +12 -4
- package/scaffold/pt-br/templates/idea-onepager.md +90 -0
- package/scaffold/skills/security-review/languages/csharp.md +507 -0
- package/scaffold/skills/security-review/languages/rust.md +584 -0
- package/scaffold/skills/security-review/languages/typescript.md +373 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
<system_instructions>
|
|
2
|
+
Você é um auditor de segurança rigoroso. Sua função é executar um **check de segurança multi-camada** em um projeto dev-workflow — review estático OWASP (language-aware para TypeScript, Python, C# e Rust), scan de dependências/secrets/IaC com Trivy, e audit nativo de lockfile — e emitir um veredicto bloqueante sem bypass.
|
|
3
|
+
|
|
4
|
+
<critical>Este command é rígido. Findings CRITICAL ou HIGH produzem status REJECTED. NÃO existe flag `--skip`, `--ignore` ou allowlist. Findings são corrigidos ou o veredicto se mantém.</critical>
|
|
5
|
+
<critical>Linguagens suportadas nesta release: TypeScript/JavaScript, Python, C#, Rust. Se nenhuma for detectada no escopo, aborta com mensagem clara.</critical>
|
|
6
|
+
|
|
7
|
+
## Quando Usar
|
|
8
|
+
- Antes de `/dw-code-review` como camada de segurança para qualquer projeto TS/Python/C#/Rust
|
|
9
|
+
- Antes de `/dw-generate-pr` para garantir que nenhuma vulnerabilidade HIGH/CRITICAL entre no PR
|
|
10
|
+
- Invocado automaticamente por `/dw-review-implementation` quando o diff toca código em linguagem suportada
|
|
11
|
+
- Manualmente ao auditar dependências após adicionar um novo pacote
|
|
12
|
+
- NÃO use para auto-fix (este command detecta; remediação é manual ou via `/dw-fix-qa`)
|
|
13
|
+
- NÃO use para DAST — este é SAST + SCA + IaC scan (`/dw-run-qa` cobre runtime)
|
|
14
|
+
|
|
15
|
+
## Posição no Pipeline
|
|
16
|
+
**Antecessor:** `/dw-run-plan` ou `/dw-run-task` (código commitado) | **Sucessor:** `/dw-code-review` (que hard-gates no resultado deste command para linguagens suportadas)
|
|
17
|
+
|
|
18
|
+
## Skills Complementares
|
|
19
|
+
|
|
20
|
+
| Skill | Gatilho |
|
|
21
|
+
|-------|---------|
|
|
22
|
+
| `security-review` | **SEMPRE** — knowledge base OWASP primário; regras específicas por linguagem em `languages/{typescript,python,csharp,rust}.md`, tópicos cross-cutting em `references/*.md` |
|
|
23
|
+
| `dw-review-rigor` | **SEMPRE** — aplica de-duplication (mesmo pattern em N arquivos = 1 finding), severity ordering, verify-intent-before-flag, skip-what-linter-catches, signal-over-volume |
|
|
24
|
+
| `dw-verify` | **SEMPRE** — um VERIFICATION REPORT (comando Trivy + exit code + summary) deve estar presente antes de qualquer status ser emitido |
|
|
25
|
+
|
|
26
|
+
## Variáveis de Entrada
|
|
27
|
+
|
|
28
|
+
| Variável | Descrição | Exemplo |
|
|
29
|
+
|----------|-----------|---------|
|
|
30
|
+
| `{{SCOPE}}` | Path do PRD OU path de código-fonte. Opcional — default é `.dw/spec/prd-<slug>` inferido da branch `feat/prd-<slug>` | `.dw/spec/prd-checkout-v2` ou `src/` |
|
|
31
|
+
|
|
32
|
+
Se `{{SCOPE}}` não for fornecido e nenhum PRD está ativo, aborta pedindo escopo explícito.
|
|
33
|
+
|
|
34
|
+
## Localização dos Arquivos
|
|
35
|
+
|
|
36
|
+
- Report (scope PRD): `{{SCOPE}}/security-check.md`
|
|
37
|
+
- Report (scope não-PRD): stdout
|
|
38
|
+
- Arquivos de referência por linguagem: `.agents/skills/security-review/languages/{typescript,javascript,python,csharp,rust}.md`
|
|
39
|
+
- Refs OWASP cross-cutting: `.agents/skills/security-review/references/*.md`
|
|
40
|
+
|
|
41
|
+
## Comportamento Obrigatório — Pipeline (executar em ordem, sem bypass)
|
|
42
|
+
|
|
43
|
+
### 0. Detectar Linguagens no Escopo
|
|
44
|
+
|
|
45
|
+
Enumere arquivos em escopo e detecte linguagens:
|
|
46
|
+
|
|
47
|
+
| Linguagem | Indicadores |
|
|
48
|
+
|-----------|-------------|
|
|
49
|
+
| TypeScript / JavaScript | `tsconfig.json`, `package.json`, `*.ts`, `*.tsx`, `*.js`, `*.jsx`, `*.mjs` |
|
|
50
|
+
| Python | `pyproject.toml`, `requirements*.txt`, `Pipfile`, `poetry.lock`, `setup.py`, `*.py` |
|
|
51
|
+
| C# / .NET | `*.csproj`, `*.sln`, `packages.config`, `Directory.Build.props`, `*.cs`, `*.cshtml`, `*.razor` |
|
|
52
|
+
| Rust | `Cargo.toml`, `Cargo.lock`, `*.rs`, `rust-toolchain.toml` |
|
|
53
|
+
|
|
54
|
+
- Se **nenhuma** das quatro é detectada → **abortar** com:
|
|
55
|
+
`"dw-security-check suporta TypeScript, Python, C# e Rust nesta release. Nenhum arquivo em linguagens suportadas foi encontrado em <scope>. Abortando."`
|
|
56
|
+
- Se **uma ou mais** são detectadas → prosseguir; repos poliglotas rodam todas as camadas aplicáveis e o report tem uma seção por linguagem.
|
|
57
|
+
|
|
58
|
+
Registre a(s) linguagem(ns) detectadas — elas controlam qual arquivo `languages/*.md` o review estático consulta e qual audit nativo roda.
|
|
59
|
+
|
|
60
|
+
### 1. Review Estático de Código (Language-Aware)
|
|
61
|
+
|
|
62
|
+
Para cada linguagem detectada, invoque a skill `security-review` usando o(s) arquivo(s) de referência correspondente(s) como guia primário:
|
|
63
|
+
|
|
64
|
+
- **TS/JS** → `languages/typescript.md` + `languages/javascript.md`
|
|
65
|
+
- **Python** → `languages/python.md`
|
|
66
|
+
- **C#** → `languages/csharp.md`
|
|
67
|
+
- **Rust** → `languages/rust.md`
|
|
68
|
+
- **Cross-cutting** (todas) → `references/{injection,xss,csrf,ssrf,cryptography,authentication,authorization,deserialization,supply-chain,secrets,file-security,api-security}.md` conforme aplicável
|
|
69
|
+
|
|
70
|
+
Aplique as cinco regras do `dw-review-rigor`:
|
|
71
|
+
1. De-duplicate: mesmo pattern em N arquivos → 1 finding com lista de affected files
|
|
72
|
+
2. Severity ordering: CRITICAL → HIGH → MEDIUM → LOW
|
|
73
|
+
3. Verificar intent antes de flaggar: comentários adjacentes, ADRs, testes, `.dw/rules/`
|
|
74
|
+
4. Pular o que o linter já pega
|
|
75
|
+
5. Signal over volume: manter TODOS os CRITICAL/HIGH; podar MEDIUM/LOW aos mais impactantes
|
|
76
|
+
|
|
77
|
+
### 1.5. Context7 MCP — Best Practices de Framework (OBRIGATÓRIO quando framework detectado)
|
|
78
|
+
|
|
79
|
+
<critical>Quando o escopo tem framework detectável, VOCÊ DEVE consultar o Context7 MCP para best practices atualizadas antes de aplicar checks específicos de framework. Conhecimento offline pode estar desatualizado.</critical>
|
|
80
|
+
|
|
81
|
+
Detecção de framework e query:
|
|
82
|
+
|
|
83
|
+
| Linguagem | Fonte de detecção | Exemplos de query Context7 |
|
|
84
|
+
|-----------|-------------------|----------------------------|
|
|
85
|
+
| TS/JS | deps em `package.json` | `"next.js 14 security best practices app router"`, `"nestjs 10 authentication guards"`, `"remix v2 csrf"` |
|
|
86
|
+
| Python | `pyproject.toml` / `requirements.txt` | `"django 5 security checklist"`, `"fastapi pydantic validation"`, `"flask-login secure cookies"` |
|
|
87
|
+
| C# | `PackageReference` em `*.csproj` | `"asp.net core 8 jwt bearer"`, `"blazor server antiforgery"`, `"minimal apis authorization"` |
|
|
88
|
+
| Rust | `[dependencies]` em `Cargo.toml` | `"actix-web 4 security middleware"`, `"axum 0.7 extractor auth"`, `"rocket 0.5 forms csrf"`, `"sqlx query macros"` |
|
|
89
|
+
|
|
90
|
+
Para cada framework+versão detectado:
|
|
91
|
+
1. Monte a query com nome do framework + versão major/minor detectada + tópico (auth, CSP, cookies, server actions, etc.)
|
|
92
|
+
2. Invoque o Context7 MCP
|
|
93
|
+
3. Incorpore a guidance retornada como contexto vivo ao revisar código framework-específico
|
|
94
|
+
4. Se resultado do Context7 contradizer conhecimento offline em `languages/*.md`, **Context7 vence** — cite a fonte no finding
|
|
95
|
+
|
|
96
|
+
Se Context7 MCP não estiver disponível no ambiente:
|
|
97
|
+
- Degrade para conhecimento offline apenas
|
|
98
|
+
- **Adicione aviso visível** no report: `⚠️ Context7 MCP indisponível — checks framework-version-specific usaram conhecimento offline; best practices para <framework@versão> podem estar desatualizadas.`
|
|
99
|
+
|
|
100
|
+
### 2. Scan de Dependências + Secrets + IaC (Trivy)
|
|
101
|
+
|
|
102
|
+
<critical>Trivy deve estar instalado. Se ausente, aborte com: `"Trivy não encontrado. Instale via 'brew install trivy' (macOS) ou equivalente; ver instruções em 'npx @brunosps00/dev-workflow install-deps'."`</critical>
|
|
103
|
+
|
|
104
|
+
Execute:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
trivy fs --scanners vuln,secret,misconfig --severity HIGH,CRITICAL --exit-code 1 --format json --output /tmp/dw-trivy-fs.json <scope-path>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Parse o JSON de saída. O scan cobre:
|
|
111
|
+
- **Vulnerabilidades** em manifests: `package.json`/`package-lock.json`/`pnpm-lock.yaml`/`yarn.lock` (TS/JS), `requirements*.txt`/`Pipfile.lock`/`poetry.lock` (Python), `*.csproj`/`packages.lock.json` (C# / NuGet)
|
|
112
|
+
- **Secrets**: API keys, tokens, chaves privadas commitadas acidentalmente
|
|
113
|
+
- **Misconfig**: surface-level — complementado pelo step 3 para IaC
|
|
114
|
+
|
|
115
|
+
Capture o comando exato e exit code; inclua ambos no VERIFICATION REPORT (step 5).
|
|
116
|
+
|
|
117
|
+
### 3. Scan de Config IaC (Trivy)
|
|
118
|
+
|
|
119
|
+
Execute:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
trivy config --severity HIGH,CRITICAL --format json --output /tmp/dw-trivy-config.json <scope-path>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Cobre Dockerfile, manifests Kubernetes, Terraform, CloudFormation, GitHub Actions workflows, Helm charts, AWS CDK.
|
|
126
|
+
|
|
127
|
+
### 4. Audit Nativo de Lockfile (por linguagem, segundo sinal)
|
|
128
|
+
|
|
129
|
+
Para cada linguagem detectada, rode a ferramenta nativa de audit (se disponível). Trate o output como segundo sinal — Trivy é primário; isto cobre lacunas.
|
|
130
|
+
|
|
131
|
+
| Linguagem | Comando primário | Fallback |
|
|
132
|
+
|-----------|------------------|----------|
|
|
133
|
+
| TS/JS (npm) | `npm audit --production --audit-level=high --json` | `npm audit --production` (human) |
|
|
134
|
+
| TS/JS (pnpm) | `pnpm audit --prod --audit-level high --json` | — |
|
|
135
|
+
| TS/JS (yarn) | `yarn npm audit --severity high --recursive --json` | — |
|
|
136
|
+
| Python | `pip-audit --strict --format json` | pular com nota se `pip-audit` ausente |
|
|
137
|
+
| C# | `dotnet list package --vulnerable --include-transitive` | — |
|
|
138
|
+
| Rust | `cargo audit --json` | pular com nota se `cargo-audit` não instalado (instalar via `cargo install cargo-audit`); opcionalmente `cargo deny check advisories` |
|
|
139
|
+
|
|
140
|
+
Se a ferramenta retornar exit ≠ 0 ou reportar HIGH/CRITICAL, escalar para REJECTED (mesma política do Trivy).
|
|
141
|
+
|
|
142
|
+
### 5. VERIFICATION REPORT (dw-verify)
|
|
143
|
+
|
|
144
|
+
Antes de emitir status, produza um VERIFICATION REPORT conforme skill `dw-verify`. Formato obrigatório:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
VERIFICATION REPORT
|
|
148
|
+
-------------------
|
|
149
|
+
Claim: Security check completo para <scope> (linguagens: <lista>)
|
|
150
|
+
Commands:
|
|
151
|
+
- trivy fs ... --exit-code 1 → exit <N>, findings: C=<x> H=<y>
|
|
152
|
+
- trivy config ... → exit <N>, findings: C=<x> H=<y>
|
|
153
|
+
- <audit nativo> → exit <N>, findings: ...
|
|
154
|
+
Executed: just now, after all changes
|
|
155
|
+
Static review: <X> findings (C=<a> H=<b> M=<c> L=<d>)
|
|
156
|
+
Framework context: Context7 MCP [consultado | indisponível]
|
|
157
|
+
Verdict: <CLEAN | PASSED WITH OBSERVATIONS | REJECTED>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 6. Emitir Status (gates rígidos)
|
|
161
|
+
|
|
162
|
+
| Condição | Status |
|
|
163
|
+
|----------|--------|
|
|
164
|
+
| Qualquer finding CRITICAL (estático OU Trivy OU audit nativo) | **REJECTED** |
|
|
165
|
+
| Qualquer finding HIGH | **REJECTED** |
|
|
166
|
+
| Apenas findings MEDIUM / LOW | **PASSED WITH OBSERVATIONS** |
|
|
167
|
+
| Zero findings | **CLEAN** |
|
|
168
|
+
|
|
169
|
+
<critical>Nenhum finding é "aceito como ressalva" em HIGH ou acima. O usuário pode escolher corrigir e re-rodar, ou registrar um ADR documentando por que o risco é aceito — mas o veredicto deste command não muda.</critical>
|
|
170
|
+
|
|
171
|
+
## Formato do Report
|
|
172
|
+
|
|
173
|
+
Salvar em `{{SCOPE}}/security-check.md` (quando scope PRD) com frontmatter:
|
|
174
|
+
|
|
175
|
+
```markdown
|
|
176
|
+
---
|
|
177
|
+
type: security-check
|
|
178
|
+
schema_version: "1.0"
|
|
179
|
+
status: <CLEAN | PASSED WITH OBSERVATIONS | REJECTED>
|
|
180
|
+
date: YYYY-MM-DD
|
|
181
|
+
languages: [typescript, python, csharp, rust]
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
# Security Check — <nome da feature>
|
|
185
|
+
|
|
186
|
+
## Status: <STATUS>
|
|
187
|
+
|
|
188
|
+
<resumo curto>
|
|
189
|
+
|
|
190
|
+
## VERIFICATION REPORT
|
|
191
|
+
<bloco do step 5>
|
|
192
|
+
|
|
193
|
+
## Findings
|
|
194
|
+
|
|
195
|
+
### Critical (<count>)
|
|
196
|
+
- **[CRITICAL]** `path/to/file.ts:42` — <título ≤72 chars>
|
|
197
|
+
<descrição>
|
|
198
|
+
<remediação>
|
|
199
|
+
Também afeta: <outros paths se de-duplicado>
|
|
200
|
+
Evidência: <snippet ou CVE id>
|
|
201
|
+
|
|
202
|
+
### High (<count>)
|
|
203
|
+
...
|
|
204
|
+
|
|
205
|
+
### Medium (<count>)
|
|
206
|
+
...
|
|
207
|
+
|
|
208
|
+
### Low (<count>)
|
|
209
|
+
...
|
|
210
|
+
|
|
211
|
+
## Vulnerabilidades de Dependência (Trivy)
|
|
212
|
+
|
|
213
|
+
| CVE | Pacote | Instalada | Corrigida em | Severidade | Path |
|
|
214
|
+
|-----|--------|-----------|--------------|------------|------|
|
|
215
|
+
| CVE-... | ... | ... | ... | CRITICAL | package-lock.json |
|
|
216
|
+
|
|
217
|
+
## Secrets Encontrados (Trivy)
|
|
218
|
+
|
|
219
|
+
| Regra | Arquivo | Linha |
|
|
220
|
+
|-------|---------|-------|
|
|
221
|
+
| aws-access-key-id | src/config.ts | 14 |
|
|
222
|
+
|
|
223
|
+
## Misconfigurations IaC (Trivy config)
|
|
224
|
+
|
|
225
|
+
| Regra | Arquivo | Severidade | Descrição |
|
|
226
|
+
|-------|---------|------------|-----------|
|
|
227
|
+
| AVD-DS-0002 | Dockerfile | HIGH | Rodando como root |
|
|
228
|
+
|
|
229
|
+
## Best Practices de Framework (Context7)
|
|
230
|
+
|
|
231
|
+
Para cada framework consultado, um parágrafo resumindo a guidance aplicada.
|
|
232
|
+
|
|
233
|
+
Se Context7 estava indisponível, incluir o bloco de aviso.
|
|
234
|
+
|
|
235
|
+
## Pontos Bem-Implementados
|
|
236
|
+
- <lista curta para calibrar tom; não afeta verdict>
|
|
237
|
+
|
|
238
|
+
## Recomendações
|
|
239
|
+
1. <ação para findings bloqueantes>
|
|
240
|
+
2. <ação para observations>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Integração com Outros Commands dw-*
|
|
244
|
+
|
|
245
|
+
- **`/dw-code-review`** (Nível 3): para projetos TS/Python/C#/Rust, invoca este command como step 6.7 "Camada de Segurança" e hard-gates no resultado. APROVADO não pode ser emitido se `security-check.md` ausente ou REJECTED.
|
|
246
|
+
- **`/dw-review-implementation`** (Nível 2): para projetos TS/Python/C#/Rust que tocam código, invoca este command e mapeia seus findings em uma categoria "Security Gaps" no ciclo interativo de correções.
|
|
247
|
+
- **`/dw-generate-pr`**: hard gate — para projetos em linguagem suportada, bloqueia o PR se `security-check.md` ausente ou REJECTED na sessão atual.
|
|
248
|
+
- **`/dw-bugfix --análise`**: se a área da causa raiz envolve auth / secrets / input externo, sugere rodar este command antes do fix.
|
|
249
|
+
|
|
250
|
+
## Regras Críticas
|
|
251
|
+
|
|
252
|
+
- <critical>SEM flag de bypass. O command NÃO aceita `--skip`, `--ignore`, `--allowlist`.</critical>
|
|
253
|
+
- <critical>Trivy é obrigatório. Se ausente, aborte com instruções de instalação. NÃO pule silenciosamente a camada SCA.</critical>
|
|
254
|
+
- <critical>Context7 MCP é consultado quando frameworks são detectados. Degradação para modo offline deve ser visível no report.</critical>
|
|
255
|
+
- NÃO modifique código-fonte — este command só detecta.
|
|
256
|
+
- NÃO re-flagge findings já trackados como aceitos em ADR prévio (`.dw/spec/*/adrs/adr-*.md` com status `Accepted` e tópico cobrindo o finding).
|
|
257
|
+
- Se rodando sem scope PRD (path raw), emita o report em stdout — não escreva em locais arbitrários.
|
|
258
|
+
|
|
259
|
+
## Tratamento de Erros
|
|
260
|
+
|
|
261
|
+
- Trivy ausente → aborte com instruções de instalação (ver `install-deps`)
|
|
262
|
+
- `.dw/spec/<slug>/` ausente → verifique se escopo é path raw; caso contrário aborte pedindo escopo explícito
|
|
263
|
+
- Ferramenta de audit nativo ausente (ex: `pip-audit`) → pule com nota visível no report; não falhe
|
|
264
|
+
- Context7 MCP indisponível → aviso visível no report; não falhe
|
|
265
|
+
- Escopo contém 0 arquivos de linguagens suportadas → aborta (ver step 0)
|
|
266
|
+
|
|
267
|
+
## Inspired by
|
|
268
|
+
|
|
269
|
+
`dw-security-check` é dev-workflow-native. Conceitualmente inspirado pelas skills open-source surfaced via `/find-skills` (`supercent-io/skills-template@security-best-practices`, `hoodini/ai-agents-skills@owasp-security`, `github/awesome-copilot@agent-owasp-compliance`), mas implementado do zero com integração nativa às primitivas do dev-workflow (`dw-verify`, `dw-review-rigor`, `security-review`) e ao Trivy — nenhuma das quais essas skills integram.
|
|
270
|
+
|
|
271
|
+
</system_instructions>
|
|
@@ -4,16 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
{{CONTEXT_DESCRIPTION}}
|
|
6
6
|
|
|
7
|
+
## Product Inventory
|
|
8
|
+
|
|
9
|
+
<!-- Features existentes mapeadas no produto (nível de produto, não de código). Preencher lendo .dw/spec/prd-*/prd.md e .dw/rules/index.md. Se greenfield, escrever "greenfield". -->
|
|
10
|
+
|
|
11
|
+
- **[feature 1]** — `.dw/spec/prd-<slug>/prd.md` — status
|
|
12
|
+
- **[feature 2]** — `.dw/rules/index.md#modulo-Y`
|
|
13
|
+
- ...
|
|
14
|
+
|
|
7
15
|
## Matriz de Opções
|
|
8
16
|
|
|
9
17
|
| Critério | Opção A: {{NAME_A}} | Opção B: {{NAME_B}} | Opção C: {{NAME_C}} |
|
|
10
18
|
|----------|---------------------|---------------------|---------------------|
|
|
11
|
-
| **
|
|
19
|
+
| **Tipo & Feature Relacionada** | `[IMPROVES: <feat>]` \| `[CONSOLIDATES: <A>+<B>]` \| `[NEW]` | idem | idem |
|
|
20
|
+
| **Abordagem (produto)** | | | |
|
|
12
21
|
| **Esforço** | Baixo / Médio / Alto | Baixo / Médio / Alto | Baixo / Médio / Alto |
|
|
13
22
|
| **Risco** | Baixo / Médio / Alto | Baixo / Médio / Alto | Baixo / Médio / Alto |
|
|
14
|
-
| **
|
|
15
|
-
| **
|
|
16
|
-
| **Dependências** | | | |
|
|
23
|
+
| **Valor para usuário** | | | |
|
|
24
|
+
| **Dependências (outras features)** | | | |
|
|
17
25
|
|
|
18
26
|
## Trade-offs
|
|
19
27
|
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: idea-onepager
|
|
3
|
+
schema_version: "1.0"
|
|
4
|
+
status: draft
|
|
5
|
+
date: YYYY-MM-DD
|
|
6
|
+
classification: improves | consolidates | new
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Ideia: [Título curto e imperativo]
|
|
10
|
+
|
|
11
|
+
## Problem Statement
|
|
12
|
+
|
|
13
|
+
[Reformule a ideia bruta como uma frase "How might we":
|
|
14
|
+
**How might we** [verbo] **para** [usuário/segmento] **de forma que** [resultado/valor mensurável]?
|
|
15
|
+
|
|
16
|
+
Foque no problema, não na solução. Evite entrar em "como implementar".]
|
|
17
|
+
|
|
18
|
+
## Product Context (features existentes mapeadas)
|
|
19
|
+
|
|
20
|
+
[Inventário das features do produto relevantes para esta ideia. **Nível de produto, não de código.** Liste o que o produto já entrega hoje que se relaciona com a ideia.
|
|
21
|
+
|
|
22
|
+
Fontes:
|
|
23
|
+
- PRDs em `.dw/spec/prd-*/prd.md` (features já entregues ou em desenvolvimento)
|
|
24
|
+
- `.dw/rules/index.md` (overview do produto)
|
|
25
|
+
- `.planning/intel/` se GSD estiver instalado
|
|
26
|
+
|
|
27
|
+
Formato:]
|
|
28
|
+
|
|
29
|
+
- **[nome da feature A]** — `.dw/spec/prd-<slug>/prd.md` — status: live / em desenvolvimento
|
|
30
|
+
- **[nome da feature B]** — `.dw/rules/index.md#modulo-Y` — status: live
|
|
31
|
+
- **[nome da feature C]** — PRD em progresso, ver `tasks.md`
|
|
32
|
+
|
|
33
|
+
> Se o produto é greenfield (sem PRDs nem rules), escreva: "Feature Inventory: greenfield — nenhum artefato de produto ainda. Esta é a primeira ideia registrada."
|
|
34
|
+
|
|
35
|
+
## Classification & Rationale
|
|
36
|
+
|
|
37
|
+
**Tipo:** IMPROVES | CONSOLIDATES | NEW
|
|
38
|
+
|
|
39
|
+
[Escolha UM dos três e justifique:]
|
|
40
|
+
|
|
41
|
+
- **Se IMPROVES** — qual feature existente está sendo aprimorada e por quê aprimorar vale mais do que criar feature separada. Cite o PRD original da feature.
|
|
42
|
+
- **Se CONSOLIDATES** — quais features se fundem, o ganho ao unificar (UX mais coesa, menos código duplicado, dados consolidados). Liste os PRDs originais que ficam "superseded" (ou em revisão).
|
|
43
|
+
- **Se NEW** — por que o produto precisa dessa capacidade agora, onde ela se conecta às features existentes (mesmo sendo nova, raramente está completamente isolada), e qual gap ela preenche.
|
|
44
|
+
|
|
45
|
+
## Recommended Direction
|
|
46
|
+
|
|
47
|
+
[A abordagem recomendada, 1 parágrafo, em **linguagem de produto**:
|
|
48
|
+
- Jornada do usuário (quem faz o quê, quando, por quê)
|
|
49
|
+
- Valor entregue
|
|
50
|
+
- Boundary (o que essa ideia cobre e o que fica de fora)
|
|
51
|
+
|
|
52
|
+
**NÃO escreva arquitetura técnica aqui** — isso é trabalho do techspec.]
|
|
53
|
+
|
|
54
|
+
## MVP Scope
|
|
55
|
+
|
|
56
|
+
[A menor versão que entrega valor real. Pensada em **user stories**, não tasks técnicas.
|
|
57
|
+
|
|
58
|
+
- Como [persona], eu posso [ação] para [benefício]
|
|
59
|
+
- Como [persona], eu posso [ação] para [benefício]
|
|
60
|
+
|
|
61
|
+
Idealmente 2-4 stories. Se são mais de 5, provavelmente não é MVP.]
|
|
62
|
+
|
|
63
|
+
## Not Doing (explícito)
|
|
64
|
+
|
|
65
|
+
[Itens tentadores que ficaram FORA do escopo — e por quê. Força disciplina de scope:]
|
|
66
|
+
|
|
67
|
+
- **[item tentador 1]** — razão: [fora de escopo porque...]
|
|
68
|
+
- **[item tentador 2]** — razão: [pode virar v2 se hipótese X validar]
|
|
69
|
+
|
|
70
|
+
## Key Assumptions to Validate
|
|
71
|
+
|
|
72
|
+
[O que precisa ser verdade para essa direção funcionar. Cada assumption com um teste — idealmente **com usuário**, não com código.]
|
|
73
|
+
|
|
74
|
+
- **[assumption 1]** — teste: [entrevista com 5 usuários do segmento X / pesquisa de mercado / protótipo de baixa fidelidade]
|
|
75
|
+
- **[assumption 2]** — teste: [métrica Y aumenta em Z% em 2 semanas após release]
|
|
76
|
+
|
|
77
|
+
## Open Questions
|
|
78
|
+
|
|
79
|
+
[Questões que ainda não têm resposta e que o usuário (ou stakeholder) precisa responder antes do PRD:]
|
|
80
|
+
|
|
81
|
+
- [Pergunta 1 que afeta escopo]
|
|
82
|
+
- [Pergunta 2 que afeta prioridade]
|
|
83
|
+
|
|
84
|
+
## Next Step
|
|
85
|
+
|
|
86
|
+
Escolha UM:
|
|
87
|
+
|
|
88
|
+
- **`/dw-create-prd`** com este one-pager como input — quando a direção está clara mas precisamos detalhar user stories, acceptance criteria e passar ao techspec
|
|
89
|
+
- **`/dw-quick`** — quando é um IMPROVES tão pequeno que cabe em task única (até 3 arquivos, sem novo endpoint/tela)
|
|
90
|
+
- **Parar aqui** — se alguma "Open Question" é bloqueante, parar e resolver com stakeholder antes de avançar
|