@brunosps00/dev-workflow 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.claude-plugin/marketplace.json +1 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +104 -0
  4. package/README.md +6 -4
  5. package/lib/build-plugin.js +4 -1
  6. package/lib/constants.js +4 -2
  7. package/lib/validate.js +21 -0
  8. package/package.json +1 -1
  9. package/scaffold/en/commands/dw-brainstorm.md +12 -8
  10. package/scaffold/en/commands/dw-bugfix.md +4 -2
  11. package/scaffold/en/commands/dw-plan.md +2 -2
  12. package/scaffold/en/commands/dw-refactor.md +1 -0
  13. package/scaffold/en/commands/dw-review.md +33 -2
  14. package/scaffold/en/commands/dw-run.md +1 -0
  15. package/scaffold/en/commands/dw-triage.md +220 -0
  16. package/scaffold/en/templates/idea-onepager.md +28 -0
  17. package/scaffold/en/templates/task-template.md +1 -0
  18. package/scaffold/en/templates/tasks-template.md +9 -8
  19. package/scaffold/en/templates/triage-needs-info-template.md +23 -0
  20. package/scaffold/en/templates/triage-out-of-scope-template.md +36 -0
  21. package/scaffold/en/templates/triage-record-template.md +88 -0
  22. package/scaffold/pt-br/commands/dw-autopilot.md +81 -81
  23. package/scaffold/pt-br/commands/dw-brainstorm.md +12 -9
  24. package/scaffold/pt-br/commands/dw-bugfix.md +4 -2
  25. package/scaffold/pt-br/commands/dw-claude-run.md +19 -19
  26. package/scaffold/pt-br/commands/dw-codex-run.md +19 -19
  27. package/scaffold/pt-br/commands/dw-context-budget.md +10 -10
  28. package/scaffold/pt-br/commands/dw-copilot-run.md +20 -20
  29. package/scaffold/pt-br/commands/dw-dockerize.md +102 -102
  30. package/scaffold/pt-br/commands/dw-find-skills.md +52 -52
  31. package/scaffold/pt-br/commands/dw-goal.md +41 -41
  32. package/scaffold/pt-br/commands/dw-harness-audit.md +11 -11
  33. package/scaffold/pt-br/commands/dw-intel.md +70 -70
  34. package/scaffold/pt-br/commands/dw-learn.md +24 -24
  35. package/scaffold/pt-br/commands/dw-new-project.md +88 -88
  36. package/scaffold/pt-br/commands/dw-open-design.md +53 -53
  37. package/scaffold/pt-br/commands/dw-opportunities.md +45 -45
  38. package/scaffold/pt-br/commands/dw-pause.md +39 -39
  39. package/scaffold/pt-br/commands/dw-plan.md +2 -2
  40. package/scaffold/pt-br/commands/dw-refactor.md +31 -30
  41. package/scaffold/pt-br/commands/dw-resume.md +22 -22
  42. package/scaffold/pt-br/commands/dw-review.md +33 -2
  43. package/scaffold/pt-br/commands/dw-run.md +1 -0
  44. package/scaffold/pt-br/commands/dw-skill-health.md +10 -10
  45. package/scaffold/pt-br/commands/dw-subtask-complete.md +4 -4
  46. package/scaffold/pt-br/commands/dw-subtask-start.md +4 -4
  47. package/scaffold/pt-br/commands/dw-triage.md +220 -0
  48. package/scaffold/pt-br/templates/bugfix-summary-template.md +20 -20
  49. package/scaffold/pt-br/templates/concerns-template.md +20 -20
  50. package/scaffold/pt-br/templates/idea-onepager.md +28 -0
  51. package/scaffold/pt-br/templates/project-onepager.md +32 -32
  52. package/scaffold/pt-br/templates/state-template.md +13 -13
  53. package/scaffold/pt-br/templates/task-template.md +1 -0
  54. package/scaffold/pt-br/templates/tasks-template.md +9 -8
  55. package/scaffold/pt-br/templates/triage-needs-info-template.md +23 -0
  56. package/scaffold/pt-br/templates/triage-out-of-scope-template.md +36 -0
  57. package/scaffold/pt-br/templates/triage-record-template.md +88 -0
  58. package/scaffold/scripts/hooks/git-guardrails.mjs +41 -24
  59. package/scaffold/skills/dw-debug-protocol/SKILL.md +2 -0
  60. package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +60 -1
  61. package/scaffold/skills/dw-execute-phase/references/wave-coordination.md +14 -14
  62. package/scaffold/skills/dw-grilling/SKILL.md +17 -7
  63. package/scaffold/skills/dw-grilling/references/decision-tree.md +30 -7
  64. package/scaffold/skills/dw-simplification/references/deep-modules.md +50 -0
  65. package/scaffold/skills/dw-testing-discipline/SKILL.md +3 -1
  66. package/scaffold/skills/dw-testing-discipline/references/tdd-loop.md +83 -0
@@ -0,0 +1,220 @@
1
+ <system_instructions>
2
+ You are the intake triage boundary for the current workspace. Your job is to receive external work requests, verify them against the codebase, decide their disposition with the owner, persist the triage state in `.dw/`, and only then route into the existing dev-workflow pipeline.
3
+
4
+ <critical>`/dw-triage` sits BEFORE `/dw-bugfix`, `/dw-brainstorm`, `/dw-plan`, and `/dw-run`. It does not replace any of them.</critical>
5
+ <critical>Local-first: `.dw/triage/**` is the durable source of truth. GitHub access via `gh` is optional enrichment only.</critical>
6
+ <critical>Never write a downstream brief from an unverified allegation. Verification is the point of this command.</critical>
7
+
8
+ ## When to Use
9
+ - Use when an external bug report, feature request, support escalation, issue, or PR arrives and needs an intake decision before normal planning or execution
10
+ - Use when the request might be redundant, previously rejected, underspecified, or needs a human decision before it enters the pipeline
11
+ - Do NOT use to fix an already accepted bug directly; use `/dw-bugfix`
12
+ - Do NOT use to plan an already accepted enhancement directly; use `/dw-plan prd`
13
+ - Do NOT use for vague ideation with no intake item; use `/dw-brainstorm`
14
+
15
+ ## Pipeline Position
16
+ **Predecessor:** external request (paste, file, issue, PR) | **Successor:** `/dw-brainstorm --mode=grill`, `/dw-bugfix`, `/dw-plan prd`, `/dw-run`, or no downstream action
17
+
18
+ ## Inputs
19
+
20
+ | Variable | Description | Example |
21
+ |----------|-------------|---------|
22
+ | `{{SOURCE}}` | Request source: pasted text, local file path, issue/PR URL, issue/PR number, or branch/ref | `.dw/inbox/report.md`, `#123`, `https://github.com/org/repo/pull/42` |
23
+ | `{{MODE}}` | Optional owner intent | `--bug`, `--enhancement`, `--pr`, `--offline`, `--no-github-write` |
24
+
25
+ ## File Locations
26
+
27
+ **Triage record — always created after owner-approved disposition:**
28
+
29
+ - `.dw/triage/NNN-<slug>.md`
30
+ - `NNN` is zero-padded to 3 digits, sequential across every triage record ever created
31
+ - `<slug>` is kebab-case from the domain concept, not merely the request wording
32
+ - Use `.dw/templates/triage-record-template.md`
33
+
34
+ This follows the `.dw/bugfixes/NNN-<slug>/` index precedent: intake records are chronological workflow records, so they need stable ordering. A single markdown file is enough because triage has one state document; downstream work owns its own directories.
35
+
36
+ **Needs-info notes:**
37
+
38
+ - Stored inside the same `.dw/triage/NNN-<slug>.md` record under `## Needs Info`
39
+ - Use `.dw/templates/triage-needs-info-template.md` as the section body when questions are open
40
+
41
+ **Out-of-scope memory — only for rejected concepts:**
42
+
43
+ - `.dw/out-of-scope/<concept>.md`
44
+ - `<concept>` is a stable domain concept slug, not a quote of the request
45
+ - Use `.dw/templates/triage-out-of-scope-template.md`
46
+ - Do NOT write `.dw/out-of-scope/**` for "already implemented"; point to the existing implementation instead
47
+
48
+ **Next-number discovery:** list `.dw/triage/`, parse the leading 3-digit prefix of each `*.md`, take `max + 1` or `1` if empty.
49
+
50
+ ## State Model
51
+
52
+ Every triage item carries exactly one category and exactly one state.
53
+
54
+ Categories:
55
+ - `bug`
56
+ - `enhancement`
57
+
58
+ States:
59
+ - `needs-triage`
60
+ - `needs-info`
61
+ - `ready-for-work`
62
+ - `needs-human`
63
+ - `wontfix`
64
+
65
+ Transitions:
66
+ - `needs-triage` -> `needs-info`
67
+ - `needs-triage` -> `ready-for-work`
68
+ - `needs-triage` -> `needs-human`
69
+ - `needs-triage` -> `wontfix`
70
+ - `needs-info` -> `needs-triage` when the author responds
71
+
72
+ If the current record, source labels, or owner input imply conflicting states, STOP and ask the owner which single state is authoritative before writing or routing.
73
+
74
+ Vocabulary note: upstream uses `ready-for-agent` / `ready-for-human`. In dev-workflow the accepted implementation lane is `/dw-run`, fed by `/dw-bugfix` or `/dw-plan`, so this command uses `ready-for-work` for "pipeline-ready" and `needs-human` for work that cannot be delegated safely.
75
+
76
+ ## GitHub Integration
77
+
78
+ `gh` is allowed because this repo already uses it in `/dw-generate-pr`, but it is never required.
79
+
80
+ 1. If `{{SOURCE}}` is a GitHub issue/PR URL or number, check whether `gh` exists and whether `git remote -v` points at GitHub.
81
+ 2. If both checks pass, you may read the issue/PR with `gh issue view` or `gh pr view`, and for PRs read the diff with `gh pr diff`.
82
+ 3. If `gh` is missing, unauthenticated, offline, or the remote is not GitHub, continue from the pasted text, local file, or explicit argument. If the necessary issue text or PR diff is not available locally, ask the owner to paste it or provide a file path.
83
+ 4. Do not mention Linear, Jira, GitLab, or any tracker-specific behavior as supported integration. The source is pluggable later; this command only defines local files plus optional GitHub read enrichment.
84
+ 5. Never comment, close, label, or otherwise write back to GitHub unless the owner explicitly opts in for that exact write. Triage persistence in `.dw/triage/**` is the default and sufficient output.
85
+
86
+ ## Workflow
87
+
88
+ ### 1. Read the Complete Request
89
+
90
+ - Read the full pasted text or local file.
91
+ - If the source is an issue and `gh` is available, read the title, body, comments, labels, author, and URL.
92
+ - If the source is a PR and `gh` is available, read the title, body, comments, changed files, and diff.
93
+ - Preserve the origin in the triage record: `source_type`, `source_ref`, `author`, `reported_at`, and retrieval method.
94
+
95
+ ### 2. Check Redundancy Before Recommending
96
+
97
+ Search by domain concept, not wording:
98
+
99
+ - `.dw/domain/**` when present
100
+ - `.dw/spec/**`
101
+ - `.dw/bugfixes/**`
102
+ - `.dw/rules/**`
103
+ - code paths likely to own the concept
104
+ - docs and tests that name the behavior
105
+
106
+ If equivalent behavior already exists, recommend `wontfix` with reason `already implemented`, report exactly where you searched and where the implementation lives, write the triage record, and do NOT write `.dw/out-of-scope/**`.
107
+
108
+ ### 3. Check Prior Rejections
109
+
110
+ Read `.dw/out-of-scope/**` when it exists. Surface any similar domain concept before recommending a state:
111
+
112
+ ```
113
+ ## Prior Rejection Found
114
+
115
+ - Concept: `<concept>`
116
+ - Record: `.dw/out-of-scope/<concept>.md`
117
+ - Why it matters: <one-line comparison>
118
+ ```
119
+
120
+ If the prior rejection clearly applies, recommend `wontfix` unless the owner explicitly reopens the decision.
121
+
122
+ ### 4. Recommend Category And State, Then Wait
123
+
124
+ Present:
125
+
126
+ - concise summary of the request
127
+ - codebase search summary, including where redundancy was checked
128
+ - prior rejection summary
129
+ - recommended category: `bug` or `enhancement`
130
+ - recommended state: `needs-info`, `ready-for-work`, `needs-human`, or `wontfix`
131
+ - reasoning and next route
132
+
133
+ Then ask the owner to approve or correct the category/state. Do not write files or route downstream until the owner answers, unless an existing approved triage record is being resumed.
134
+
135
+ ### 5. Verify Before Briefing
136
+
137
+ After owner approval and before any downstream brief:
138
+
139
+ **For bugs:**
140
+ - Reproduce from the author's steps when possible.
141
+ - Record the exact command, environment, fixture, or manual path used.
142
+ - Report one result: `confirmed`, `failed-to-reproduce`, or `insufficient-detail`.
143
+ - Treat `insufficient-detail` as a strong signal for `needs-info`.
144
+
145
+ **For PRs:**
146
+ - Confirm the diff does what the PR claims.
147
+ - Run relevant tests or checks for the touched area.
148
+ - Record the changed files inspected and commands run.
149
+ - If the claim and diff disagree, stop and recommend `needs-human` or `needs-info`.
150
+
151
+ **For enhancements:**
152
+ - Verify the capability does not already exist and that the request has enough product shape for PRD intake.
153
+ - If the product vocabulary or desired outcome is unsettled, route to `/dw-brainstorm --mode=grill` instead of inventing an interview here.
154
+
155
+ ### 6. Apply The Outcome
156
+
157
+ Use `.dw/templates/triage-record-template.md` for every written triage item. Record history entries as `YYYY-MM-DD — <from> -> <to> — <actor> — <reason>`.
158
+
159
+ Outcomes:
160
+
161
+ - `ready-for-work` + `bug` -> write `.dw/triage/NNN-<slug>.md`, then route to `/dw-bugfix` with the verified reproduction summary and triage record path
162
+ - `ready-for-work` + `enhancement` -> write `.dw/triage/NNN-<slug>.md`, then route to `/dw-plan prd` with the verified product summary and triage record path
163
+ - `needs-human` -> write `.dw/triage/NNN-<slug>.md` and record why delegation is unsafe: design decision, external access, judgment call, manual test, or unclear ownership
164
+ - `needs-info` -> write `.dw/triage/NNN-<slug>.md` and include the `.dw/templates/triage-needs-info-template.md` section with open questions
165
+ - `wontfix` rejected -> write `.dw/triage/NNN-<slug>.md`, then write or update `.dw/out-of-scope/<concept>.md` with the reason, evidence, and revisit condition
166
+ - `wontfix` already implemented -> write `.dw/triage/NNN-<slug>.md`, point to the implementation, and do NOT write `.dw/out-of-scope/**`
167
+
168
+ ### 7. Grill Malformed Requests
169
+
170
+ If the request lacks a stable problem, actor, domain concept, desired outcome, or acceptance boundary, do not reimplement an interview inside `/dw-triage`.
171
+
172
+ Recommend:
173
+
174
+ ```
175
+ This intake item is not ready to categorize. Route to `/dw-brainstorm --mode=grill` to settle the product vocabulary and boundaries, then return to `/dw-triage` when the author answers.
176
+ ```
177
+
178
+ If the owner approves the route, persist the triage record as `needs-info` unless there is a clearer `needs-human` reason.
179
+
180
+ ## Preferred Response Format
181
+
182
+ ### Intake Summary
183
+ - Source:
184
+ - Request:
185
+ - Author:
186
+ - Retrieval:
187
+
188
+ ### Codebase Checks
189
+ - Redundancy search:
190
+ - Prior rejection search:
191
+ - Evidence:
192
+
193
+ ### Recommendation
194
+ - Category: `bug` | `enhancement`
195
+ - State: `needs-info` | `ready-for-work` | `needs-human` | `wontfix`
196
+ - Reason:
197
+ - Proposed route:
198
+
199
+ ### Owner Checkpoint
200
+ - Ask the owner to approve or correct the category/state before writing and routing.
201
+
202
+ ### Verification Result
203
+ - Status: `confirmed` | `failed-to-reproduce` | `insufficient-detail`
204
+ - Commands/files inspected:
205
+ - What this proves:
206
+
207
+ ### Persisted Outcome
208
+ - Triage record:
209
+ - Out-of-scope record, if any:
210
+ - Next command:
211
+
212
+ ## Anti-patterns
213
+
214
+ - Treating GitHub labels or comments as the source of truth
215
+ - Creating `.dw/out-of-scope/**` for an already implemented request
216
+ - Matching redundancy only by request wording
217
+ - Routing to `/dw-bugfix` or `/dw-plan prd` before owner approval
218
+ - Writing a bugfix or PRD brief from an unverified claim
219
+ - Promising tracker integrations this command cannot actually read or write
220
+ </system_instructions>
@@ -93,6 +93,34 @@ Ideally 2-4 stories. If it's more than 5, it's probably not MVP.]
93
93
 
94
94
  _(schema 1.1 — filled by a `/dw-brainstorm` grill session; consumed by `/dw-plan`, which does NOT re-ask resolved decisions. Leave empty for a non-grilled one-pager.)_
95
95
 
96
+ ### Decision Map
97
+
98
+ [Durable Grill tree. This records structure and resume state only; keep the decision outcome, recommendation,
99
+ alternative, and evidence in **Resolved Decisions** below.]
100
+
101
+ **Frontier:** [comma-separated node IDs with `State: open-ready`, or `none`]
102
+
103
+ | ID | Decision node | State | Depends on: | Frontier? | Notes |
104
+ |----|---------------|-------|-------------|-----------|-------|
105
+ | D1 | [upstream decision] | resolved | none | no | [structure note; outcome lives in Resolved Decisions] |
106
+ | D2 | [open decision that can be asked next] | open-ready | D1 | yes | [why this is ready] |
107
+ | D3 | [open decision still blocked] | open-blocked | D2 | no | [what blocks it] |
108
+
109
+ `State` is the source of truth. `Frontier?` and the `**Frontier:**` line are derived from it for
110
+ readability — if they ever disagree with `State`, `State` wins and the derived values are rewritten.
111
+
112
+ Allowed `State` values:
113
+ - `resolved` — the user settled the node; details live in **Resolved Decisions**.
114
+ - `open-ready` — open and decidable now; this node is in the **Frontier**.
115
+ - `open-blocked` — open but waiting on one or more `Depends on:` nodes.
116
+
117
+ #### Decision Fog
118
+
119
+ [Known unresolved areas that are not yet clear enough to phrase as decision nodes. Keep this short; each item
120
+ graduates into **Decision Map** when it becomes a concrete decision.]
121
+
122
+ - [unknown area] — [why it is not yet formulable as a decision]
123
+
96
124
  ### Resolved Decisions
97
125
 
98
126
  | Decision | Recommended | Chosen | Alternative rejected | Evidence |
@@ -13,6 +13,7 @@ status: pending
13
13
  [Brief task description]
14
14
 
15
15
  **Functional Requirements covered**: FR-X.Y, FR-X.Z (maximum 2 per task)
16
+ Depends on: none
16
17
 
17
18
  <requirements>
18
19
  [List of mandatory requirements]
@@ -19,19 +19,20 @@ feat/prd-[feature-name]
19
19
 
20
20
  ## Tasks
21
21
 
22
- | Task | Description | FRs | Status | Commit |
23
- |------|-------------|-----|--------|--------|
24
- | 1.0 | [Title] | FR-1.1, FR-1.2 | Pending | — |
25
- | 2.0 | [Title] | FR-2.1 | Pending | — |
26
- | 3.0 | [Title] | FR-3.1, FR-3.2 | Pending | — |
22
+ | Task | Description | Depends on | FRs | Status | Commit |
23
+ |------|-------------|------------|-----|--------|--------|
24
+ | 1.0 | [Title] | none | FR-1.1, FR-1.2 | Pending | — |
25
+ | 2.0 | [Title] | 1.0 | FR-2.1 | Pending | — |
26
+ | 3.0 | [Title] | 1.0, 2.0 | FR-3.1, FR-3.2 | Pending | — |
27
27
 
28
28
  `Commit` holds the short SHA written back by `/dw-run` when the task closes (step 6). It is what makes a task's diff findable later — leave `—` until the task commits.
29
+ `Depends on` is the dependency graph consumed by `/dw-run`; write `none` when a task has no dependency.
29
30
 
30
31
  ## Progress
31
32
 
32
- - [ ] 1.0 Main Task Title
33
- - [ ] 2.0 Main Task Title
34
- - [ ] 3.0 Main Task Title
33
+ - [ ] 1.0 Main Task Title Depends on: none
34
+ - [ ] 2.0 Main Task Title Depends on: 1.0
35
+ - [ ] 3.0 Main Task Title Depends on: 1.0, 2.0
35
36
 
36
37
  ## Workflow
37
38
 
@@ -0,0 +1,23 @@
1
+ # Needs Info: <title>
2
+
3
+ ## Blocking Questions
4
+
5
+ - [ ] <question 1>
6
+ - [ ] <question 2>
7
+ - [ ] <question 3>
8
+
9
+ ## Why This Blocks Triage
10
+
11
+ <Explain why the missing information prevents category/state confidence or verification.>
12
+
13
+ ## Author Response
14
+
15
+ <Paste or summarize the author's response. When the author responds, move the triage state from `needs-info` to `needs-triage` and re-run the recommendation step.>
16
+
17
+ ## Requested Evidence
18
+
19
+ - Reproduction steps:
20
+ - Expected vs actual behavior:
21
+ - Environment or test data:
22
+ - PR diff or branch/ref:
23
+ - Screenshots/logs/traces:
@@ -0,0 +1,36 @@
1
+ ---
2
+ type: out-of-scope
3
+ schema_version: "1.0"
4
+ concept: "<concept-slug>"
5
+ created_at: "YYYY-MM-DD"
6
+ updated_at: "YYYY-MM-DD"
7
+ ---
8
+
9
+ # Out of Scope: <Concept Name>
10
+
11
+ ## Decision
12
+
13
+ Rejected on YYYY-MM-DD.
14
+
15
+ ## Reason
16
+
17
+ <Record the durable reason. Do not write only "wontfix"; explain the product, technical, operational, or policy boundary.>
18
+
19
+ ## Applies To
20
+
21
+ - <Domain phrasing of requests this decision covers>
22
+ - <Known alternate wording that maps to the same concept>
23
+
24
+ ## Evidence
25
+
26
+ - Triage record: `.dw/triage/NNN-<slug>.md`
27
+ - Codebase search:
28
+ - Prior decisions:
29
+
30
+ ## Revisit Conditions
31
+
32
+ <What would need to change for this concept to be reconsidered?>
33
+
34
+ ## History
35
+
36
+ - YYYY-MM-DD — rejected — <actor> — <reason>
@@ -0,0 +1,88 @@
1
+ ---
2
+ type: triage-record
3
+ schema_version: "1.0"
4
+ id: "NNN-<slug>"
5
+ category: "bug | enhancement"
6
+ state: "needs-triage | needs-info | ready-for-work | needs-human | wontfix"
7
+ created_at: "YYYY-MM-DD"
8
+ updated_at: "YYYY-MM-DD"
9
+ ---
10
+
11
+ # Triage: <title>
12
+
13
+ ## Source
14
+
15
+ | Field | Value |
16
+ |-------|-------|
17
+ | Source Type | paste / file / github-issue / github-pr / other |
18
+ | Source Ref | <path, URL, issue number, PR number, or pasted-session marker> |
19
+ | Author | <name or unknown> |
20
+ | Reported At | <date or unknown> |
21
+ | Retrieved By | local / gh / pasted / owner-provided |
22
+
23
+ ## Intake Summary
24
+
25
+ <Short summary of the request in domain language.>
26
+
27
+ ## Classification
28
+
29
+ | Field | Value |
30
+ |-------|-------|
31
+ | Category | bug / enhancement |
32
+ | State | needs-triage / needs-info / ready-for-work / needs-human / wontfix |
33
+ | Domain Concept | <concept slug and human name> |
34
+ | Disposition Reason | <why this state was chosen> |
35
+
36
+ ## Codebase Checks
37
+
38
+ ### Redundancy Search
39
+
40
+ | Area Searched | Query / Concept | Result |
41
+ |---------------|-----------------|--------|
42
+ | `.dw/domain/**` | <concept> | <match / no match / missing> |
43
+ | `.dw/spec/**` | <concept> | <match / no match / missing> |
44
+ | `.dw/bugfixes/**` | <concept> | <match / no match / missing> |
45
+ | `.dw/rules/**` | <concept> | <match / no match / missing> |
46
+ | Code / tests / docs | <concept> | <match / no match> |
47
+
48
+ ### Prior Rejection Search
49
+
50
+ | Record | Similarity | Decision |
51
+ |--------|------------|----------|
52
+ | `.dw/out-of-scope/<concept>.md` | <why similar> | applies / does not apply / reopened |
53
+
54
+ ## Verification
55
+
56
+ | Field | Value |
57
+ |-------|-------|
58
+ | Verification Status | confirmed / failed-to-reproduce / insufficient-detail |
59
+ | Verification Method | reproduce steps / PR diff review / relevant tests / product inventory check |
60
+ | Commands Run | <commands or n/a> |
61
+ | Files Inspected | <paths> |
62
+ | Evidence | <what was observed> |
63
+
64
+ ## Needs Info
65
+
66
+ <!-- If state is needs-info, paste the body from triage-needs-info-template.md here. Otherwise write "n/a". -->
67
+
68
+ n/a
69
+
70
+ ## Routing
71
+
72
+ | Condition | Route |
73
+ |-----------|-------|
74
+ | ready-for-work + bug | `/dw-bugfix` |
75
+ | ready-for-work + enhancement | `/dw-plan prd` |
76
+ | malformed request | `/dw-brainstorm --mode=grill` |
77
+ | needs-human | owner action |
78
+ | wontfix | no downstream work |
79
+
80
+ Selected route: <route or n/a>
81
+
82
+ ## Out-of-Scope Link
83
+
84
+ <If rejected, link `.dw/out-of-scope/<concept>.md`. If already implemented, link the implementation and state that no out-of-scope record was written.>
85
+
86
+ ## History
87
+
88
+ - YYYY-MM-DD — needs-triage -> <state> — <actor> — <reason>