dw-kit 1.3.0 → 1.3.4
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/.claude/rules/dw.md +2 -0
- package/.claude/settings.json +9 -1
- package/.claude/skills/dw-execute/SKILL.md +30 -7
- package/.claude/skills/dw-handoff/SKILL.md +14 -3
- package/.claude/skills/dw-plan/SKILL.md +103 -6
- package/.claude/skills/dw-research/SKILL.md +18 -4
- package/.claude/skills/dw-retroactive/SKILL.md +84 -200
- package/.claude/skills/dw-task-init/SKILL.md +45 -33
- package/.dw/core/ROLES.md +257 -257
- package/MIGRATION-v1.3.md +5 -4
- package/package.json +1 -1
- package/src/commands/metrics.mjs +21 -1
- package/src/lib/cut-analysis.mjs +79 -0
package/.claude/rules/dw.md
CHANGED
|
@@ -65,6 +65,8 @@ All dw skills invoke via `/dw:{name}` (colon namespace separator).
|
|
|
65
65
|
|
|
66
66
|
Core workflow: `/dw:flow` · `/dw:task-init` · `/dw:research` · `/dw:plan` · `/dw:execute` · `/dw:commit` · `/dw:handoff`
|
|
67
67
|
|
|
68
|
+
`/dw:plan` includes **Quick Debate** (red/blue self-critique): default ON for `thorough`, auto-trigger on high-stakes signals for `standard`, off for `quick`. Override via `--debate` / `--no-debate` / `--debate-deep`.
|
|
69
|
+
|
|
68
70
|
Decisions: `/dw:decision [title]` — create ADR
|
|
69
71
|
|
|
70
72
|
Dev: `/dw:debug` · `/dw:review` · `/dw:thinking` · `/dw:prompt` · `/dw:docs-update`
|
package/.claude/settings.json
CHANGED
|
@@ -29,7 +29,15 @@
|
|
|
29
29
|
"Bash(bash -n /dev/stdin)",
|
|
30
30
|
"Bash(dos2unix .claude/hooks/pre-commit-gate.sh)",
|
|
31
31
|
"Bash(sed -i 's/\\\\r$//' .claude/hooks/pre-commit-gate.sh)",
|
|
32
|
-
"Bash(git add *)"
|
|
32
|
+
"Bash(git add *)",
|
|
33
|
+
"Edit(/.claude/skills/dw-task-init/**)",
|
|
34
|
+
"Edit(/.claude/skills/dw-retroactive/**)",
|
|
35
|
+
"Edit(/.claude/skills/dw-research/**)",
|
|
36
|
+
"Edit(/.claude/skills/dw-plan/**)",
|
|
37
|
+
"Edit(/.claude/skills/dw-execute/**)",
|
|
38
|
+
"Edit(/.claude/skills/dw-handoff/**)",
|
|
39
|
+
"Bash(git commit -m 'fix\\(v1.3.3\\): writer skills v1/v2 compat + cleanup legacy slash-command refs *)",
|
|
40
|
+
"Bash(git commit -m 'feat\\(v1.3.4\\): /dw:plan integrated Quick Debate \\(red/blue team\\) - depth-driven *)"
|
|
33
41
|
],
|
|
34
42
|
"additionalDirectories": [
|
|
35
43
|
"D:\\huygdv_projects\\dw-kit\\.claude\\rules"
|
|
@@ -18,8 +18,20 @@ Task: **$ARGUMENTS**
|
|
|
18
18
|
- `tracking.log_work` → ghi effort tracking không
|
|
19
19
|
- `workflow.default_depth` → `thorough` = cần docs-update, review bắt buộc
|
|
20
20
|
|
|
21
|
+
## Detect Task Format (v1 vs v2)
|
|
22
|
+
|
|
23
|
+
Kiểm tra `{paths.tasks}/$ARGUMENTS/`:
|
|
24
|
+
- **v2**: có `spec.md` + `tracking.md` → đọc/ghi 2 files này.
|
|
25
|
+
- **v1** (legacy): có `-context.md`/`-plan.md`/`-progress.md` → đọc/ghi bộ 3 files.
|
|
26
|
+
|
|
21
27
|
## Trước Khi Bắt Đầu
|
|
22
28
|
|
|
29
|
+
**v2:**
|
|
30
|
+
1. Đọc `{paths.tasks}/$ARGUMENTS/spec.md` — Intent, Scope, Subtasks, Success Criteria, Research Findings.
|
|
31
|
+
2. Đọc `{paths.tasks}/$ARGUMENTS/tracking.md` — Subtask Progress table, Changelog, Handoff Notes.
|
|
32
|
+
3. Xác nhận `spec.md` frontmatter có `status: Approved`.
|
|
33
|
+
|
|
34
|
+
**v1:**
|
|
23
35
|
1. Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-plan.md`
|
|
24
36
|
2. Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-context.md`
|
|
25
37
|
3. Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md`
|
|
@@ -52,16 +64,27 @@ Nếu có progress → tiếp tục từ subtask cuối cùng chưa done.
|
|
|
52
64
|
- Nếu `quality.block_on_fail = false` → cảnh báo, cho phép tiếp tục
|
|
53
65
|
|
|
54
66
|
### Step 5: Cập nhật Progress
|
|
55
|
-
Cập nhật `{paths.tasks}/$ARGUMENTS
|
|
67
|
+
**v2**: Cập nhật `{paths.tasks}/$ARGUMENTS/tracking.md`:
|
|
68
|
+
- Update row trong section `## Subtask Progress` table với status `✅ Done`, Date, Notes (commit SHA).
|
|
69
|
+
- Append entry vào `## Changelog` theo format:
|
|
70
|
+
```markdown
|
|
71
|
+
### {date} — ST-N complete
|
|
72
|
+
**Actions taken:** ...
|
|
73
|
+
```
|
|
74
|
+
- Update frontmatter `last_updated`.
|
|
75
|
+
|
|
76
|
+
**v1**: Cập nhật `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md`:
|
|
56
77
|
```markdown
|
|
57
78
|
| ST-N | [Subtask name] | Done | abc1234 | [ghi chú] |
|
|
58
79
|
```
|
|
59
80
|
|
|
60
|
-
Nếu `tracking.log_work = true`, ghi effort thực
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
81
|
+
Nếu `tracking.log_work = true`, ghi effort thực tế:
|
|
82
|
+
- **v2**: thêm cột "Actual" vào Subtask Progress table hoặc ghi trong Changelog entry.
|
|
83
|
+
- **v1**:
|
|
84
|
+
```markdown
|
|
85
|
+
### Effort Log
|
|
86
|
+
| Subtask | Estimate | Actual | Ghi chú |
|
|
87
|
+
```
|
|
65
88
|
|
|
66
89
|
### Step 6: Commit
|
|
67
90
|
```
|
|
@@ -91,7 +114,7 @@ Subtask ST-N of $ARGUMENTS
|
|
|
91
114
|
|
|
92
115
|
## Khi Hoàn Thành Tất Cả Subtasks
|
|
93
116
|
|
|
94
|
-
1. Cập nhật
|
|
117
|
+
1. Cập nhật status: **v2** `tracking.md` frontmatter `status: Done` · **v1** progress.md `Trạng thái: Done`.
|
|
95
118
|
2. Tóm tắt: subtasks completed, commits, issues encountered
|
|
96
119
|
3. Luôn gợi ý: "Tiếp theo: `/dw:review $ARGUMENTS`"
|
|
97
120
|
4. Nếu `workflow.default_depth = thorough`: "Cần chạy `/dw:docs-update $ARGUMENTS`"
|
|
@@ -22,7 +22,13 @@ git stash list # stashed work
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
### 2. Task progress
|
|
25
|
-
|
|
25
|
+
|
|
26
|
+
**Detect format**: Nếu có `tracking.md` → v2. Nếu có `-progress.md` → v1.
|
|
27
|
+
|
|
28
|
+
- **v2**: Đọc `{paths.tasks}/$ARGUMENTS/tracking.md` — Subtask Progress table, Changelog, Handoff Notes (nếu đã có).
|
|
29
|
+
- **v1**: Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md`.
|
|
30
|
+
|
|
31
|
+
Tìm:
|
|
26
32
|
- Subtask nào đã done?
|
|
27
33
|
- Subtask nào đang làm dở?
|
|
28
34
|
- Blockers nào đang tồn tại?
|
|
@@ -34,7 +40,11 @@ git stash list # stashed work
|
|
|
34
40
|
|
|
35
41
|
## Viết Handoff Notes
|
|
36
42
|
|
|
37
|
-
|
|
43
|
+
**v2**: Replace (hoặc append nếu muốn giữ lịch sử) section `## Handoff Notes` trong `{paths.tasks}/$ARGUMENTS/tracking.md`. Cũng update frontmatter `last_updated`.
|
|
44
|
+
|
|
45
|
+
**v1**: Ghi vào mục "Handoff Notes" trong `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md`.
|
|
46
|
+
|
|
47
|
+
Format (chung cho cả 2):
|
|
38
48
|
|
|
39
49
|
```markdown
|
|
40
50
|
## Handoff Notes
|
|
@@ -76,6 +86,7 @@ Sau khi ghi xong, hiển thị:
|
|
|
76
86
|
- Tóm tắt handoff notes
|
|
77
87
|
- Lệnh để người/agent tiếp theo bắt đầu:
|
|
78
88
|
```
|
|
79
|
-
Đọc: {paths.tasks}/$ARGUMENTS
|
|
89
|
+
Đọc: {paths.tasks}/$ARGUMENTS/tracking.md (v2)
|
|
90
|
+
hoặc {paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md (v1 legacy)
|
|
80
91
|
Tiếp tục: /dw:execute $ARGUMENTS
|
|
81
92
|
```
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dw:plan
|
|
3
|
-
description: "Lập kế hoạch implementation chi tiết sau khi đã research. Thiết kế giải pháp, phân chia subtasks, xác định rủi ro. DỪNG để chờ approval trước khi execute."
|
|
4
|
-
argument-hint: "[task-name]"
|
|
3
|
+
description: "Lập kế hoạch implementation chi tiết sau khi đã research. Thiết kế giải pháp, phân chia subtasks, xác định rủi ro. Tích hợp Quick Debate (red/blue team) tùy depth. DỪNG để chờ approval trước khi execute."
|
|
4
|
+
argument-hint: "[task-name] [--debate | --no-debate]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Grep
|
|
8
8
|
- Glob
|
|
9
|
+
- Agent
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# Lập Kế Hoạch Implementation
|
|
@@ -27,10 +28,18 @@ Task: **$ARGUMENTS**
|
|
|
27
28
|
- CHỈ đọc, phân tích, và viết plan
|
|
28
29
|
- DỪNG LẠI cuối cùng để chờ user/TL approve
|
|
29
30
|
|
|
31
|
+
## Detect Task Format (v1 vs v2)
|
|
32
|
+
|
|
33
|
+
Kiểm tra `{paths.tasks}/$ARGUMENTS/`:
|
|
34
|
+
- **v2**: có `spec.md` + `tracking.md` → plan output update trực tiếp vào `spec.md` (sections Scope/Subtasks/Risks/Success Criteria).
|
|
35
|
+
- **v1** (legacy): có `-context.md`/`-plan.md`/`-progress.md` → plan output ghi vào `$ARGUMENTS-plan.md`.
|
|
36
|
+
- Chưa có gì → gợi ý `/dw:task-init $ARGUMENTS` trước.
|
|
37
|
+
|
|
30
38
|
## Bước 1: Đọc Context
|
|
31
39
|
|
|
32
|
-
Đọc `{paths.tasks}/$ARGUMENTS
|
|
33
|
-
|
|
40
|
+
- **v2**: Đọc `{paths.tasks}/$ARGUMENTS/spec.md` (bao gồm section `## Research Findings` nếu đã chạy `/dw:research`).
|
|
41
|
+
- **v1**: Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-context.md` — file research đã tạo.
|
|
42
|
+
- Nếu chưa có research findings → thông báo: "Cần chạy `/dw:research $ARGUMENTS` trước."
|
|
34
43
|
|
|
35
44
|
## Bước 2: Thiết kế giải pháp
|
|
36
45
|
|
|
@@ -62,7 +71,15 @@ Thứ tự subtasks theo dependency graph:
|
|
|
62
71
|
|
|
63
72
|
## Bước 4: Viết plan
|
|
64
73
|
|
|
65
|
-
|
|
74
|
+
**v2**: Update `spec.md` trực tiếp — điền vào các section có sẵn:
|
|
75
|
+
- `## Scope → In Scope`: thêm ST-1, ST-2, ... với mô tả + acceptance + effort
|
|
76
|
+
- `## Scope → Out of Scope`: các điểm loại trừ rõ ràng
|
|
77
|
+
- `## Risks & Mitigations`: bảng risks
|
|
78
|
+
- `## Success Criteria`: tiêu chí measurable
|
|
79
|
+
- `## Dependencies`: blockers upstream / external
|
|
80
|
+
Frontmatter: đổi `status: Draft` → `status: Approved` chỉ SAU khi user approve.
|
|
81
|
+
|
|
82
|
+
**v1**: Ghi vào `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-plan.md` theo template:
|
|
66
83
|
|
|
67
84
|
```markdown
|
|
68
85
|
# Plan: [Task Name]
|
|
@@ -114,12 +131,92 @@ Ghi vào `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-plan.md`:
|
|
|
114
131
|
- Total: [sum]
|
|
115
132
|
```
|
|
116
133
|
|
|
134
|
+
## Bước 4.5: Quick Debate (depth-driven, pre-approval gate)
|
|
135
|
+
|
|
136
|
+
Trước khi trình bày cho user, chạy red/blue quick debate để tự phản biện plan. Tránh ceremony overhead:
|
|
137
|
+
|
|
138
|
+
### Khi nào chạy
|
|
139
|
+
|
|
140
|
+
| Depth | Behavior | Override |
|
|
141
|
+
|-------|----------|----------|
|
|
142
|
+
| `quick` | **SKIP** debate | `--debate` bật thủ công |
|
|
143
|
+
| `standard` | **SKIP** mặc định — CHẠY nếu detect signal high-stakes | `--debate` bật / `--no-debate` tắt |
|
|
144
|
+
| `thorough` | **DEFAULT ON** | `--no-debate` tắt |
|
|
145
|
+
|
|
146
|
+
**Auto-detect signal (standard depth)** — chạy nếu plan đụng:
|
|
147
|
+
- API contract changes (new endpoints, breaking signatures)
|
|
148
|
+
- Database schema migrations
|
|
149
|
+
- Auth / security / permissions
|
|
150
|
+
- Cross-module refactoring ≥3 modules
|
|
151
|
+
- Third-party integration mới
|
|
152
|
+
- Performance-critical path
|
|
153
|
+
|
|
154
|
+
Nếu nghi ngờ → chạy. Chi phí debate < chi phí rollback.
|
|
155
|
+
|
|
156
|
+
### Mode A — Lightweight (single-agent, 2-pass) — DEFAULT
|
|
157
|
+
|
|
158
|
+
Tự thực hiện 2 pass liên tiếp trong cùng session:
|
|
159
|
+
|
|
160
|
+
**Pass 1 — Red Team (attack)**: Đọc lại plan vừa viết, trả lời cụ thể:
|
|
161
|
+
1. Top 3 giả định đáng nghi nhất — cái nào chưa verify?
|
|
162
|
+
2. Top 3 failure modes — plan fail thế nào trong edge cases?
|
|
163
|
+
3. Subtask nào over-scoped (làm nhiều hơn cần) hoặc under-scoped (thiếu)?
|
|
164
|
+
4. Dependency nào bị missing / fragile?
|
|
165
|
+
|
|
166
|
+
**Pass 2 — Blue Team (strengthen)**: Respond từng red concern:
|
|
167
|
+
1. Concern đó valid? Nếu valid → đề xuất mitigation cụ thể.
|
|
168
|
+
2. Top 2 strengthenings để plan resilient hơn (thêm test, fallback, kiểm tra assumption).
|
|
169
|
+
|
|
170
|
+
### Mode B — Deep (parallel subagents) — opt-in `--debate-deep`
|
|
171
|
+
|
|
172
|
+
Chỉ khi stakes cực cao (breaking change, regulatory, production incident). Spawn 2 subagents parallel:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Agent[red-bot]: critique plan như tấn công — tìm failure modes, hidden assumptions, timing issues
|
|
176
|
+
Agent[blue-bot]: defend + strengthen — propose concrete improvements
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Dùng `Agent` tool với `subagent_type: general-purpose` (hoặc `Plan` cho review sâu). Prompt phải self-contained (subagent không thấy conversation).
|
|
180
|
+
|
|
181
|
+
### Output debate
|
|
182
|
+
|
|
183
|
+
**v2 format** — Append vào `tracking.md` section `## Agent Debate Log`:
|
|
184
|
+
|
|
185
|
+
```markdown
|
|
186
|
+
### {date} — Plan debate
|
|
187
|
+
|
|
188
|
+
**Mode:** lightweight / deep
|
|
189
|
+
**Red-bot findings:**
|
|
190
|
+
- [Concern 1] — severity: H/M/L
|
|
191
|
+
- [Concern 2] — ...
|
|
192
|
+
- [Concern 3] — ...
|
|
193
|
+
|
|
194
|
+
**Blue-bot response:**
|
|
195
|
+
- [Mitigation or counter-argument]
|
|
196
|
+
- [Strengthening proposal]
|
|
197
|
+
|
|
198
|
+
**Incorporated into plan:**
|
|
199
|
+
- [Specific change made to spec.md — e.g., "Added ST-X: validate schema migration on staging before prod"]
|
|
200
|
+
|
|
201
|
+
**Deferred (noted but not blocking):**
|
|
202
|
+
- [Lower-priority items for post-execute review]
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**v1 format** — Append "## Debate Log" vào `$ARGUMENTS-plan.md` với cùng cấu trúc.
|
|
206
|
+
|
|
207
|
+
### Nguyên tắc
|
|
208
|
+
|
|
209
|
+
- **Không ceremony**: nếu debate không catch gì mới sau 2 pass → ghi "No new concerns" rồi tiếp tục. Đừng tạo finding giả để fill template.
|
|
210
|
+
- **Incorporate hoặc defer rõ ràng**: mỗi red concern phải có quyết định (fix now / defer / won't fix + reason).
|
|
211
|
+
- **Thời gian cap**: Mode A ≤3 phút agent time. Mode B ≤10 phút.
|
|
212
|
+
|
|
117
213
|
## Bước 5: DỪNG & Trình bày
|
|
118
214
|
|
|
119
215
|
Trình bày plan cho user với:
|
|
120
216
|
1. Tóm tắt approach (3-5 câu)
|
|
121
217
|
2. Số subtasks và estimate tổng (nếu có)
|
|
122
218
|
3. Top 2 risks
|
|
123
|
-
4.
|
|
219
|
+
4. **Nếu chạy debate**: Top 2 debate findings + incorporated changes (1-2 dòng)
|
|
220
|
+
5. Yêu cầu: "Approve plan này để tiếp tục `/dw:execute $ARGUMENTS`"
|
|
124
221
|
|
|
125
222
|
Nếu team có TL: "Plan cần TL review trước khi execute."
|
|
@@ -24,10 +24,20 @@ Task: **$ARGUMENTS**
|
|
|
24
24
|
|
|
25
25
|
Đọc `.dw/config/dw.config.yml` → lấy `paths.tasks` để biết output location.
|
|
26
26
|
|
|
27
|
+
## Detect Task Format (v1 vs v2)
|
|
28
|
+
|
|
29
|
+
Kiểm tra `{paths.tasks}/$ARGUMENTS/`:
|
|
30
|
+
- Nếu có `spec.md` + `tracking.md` → **v2 format**. Output ghi vào spec.md section "## Research Findings".
|
|
31
|
+
- Nếu có `-context.md`/`-plan.md`/`-progress.md` → **v1 format** (legacy). Output ghi vào `$ARGUMENTS-context.md` như cũ.
|
|
32
|
+
- Nếu chưa có gì → gợi ý user chạy `/dw:task-init $ARGUMENTS` trước.
|
|
33
|
+
|
|
34
|
+
Trong các bước dưới, "context file" = `spec.md` (v2) hoặc `$ARGUMENTS-context.md` (v1).
|
|
35
|
+
|
|
27
36
|
## Bước 1: Đọc yêu cầu
|
|
28
37
|
|
|
29
|
-
- Đọc
|
|
30
|
-
-
|
|
38
|
+
- **v2**: Đọc `{paths.tasks}/$ARGUMENTS/spec.md` lấy Intent + Scope.
|
|
39
|
+
- **v1**: Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-plan.md` nếu đã có mô tả yêu cầu.
|
|
40
|
+
- Hoặc lấy yêu cầu từ conversation context.
|
|
31
41
|
|
|
32
42
|
## Bước 2: Khảo sát
|
|
33
43
|
|
|
@@ -53,7 +63,11 @@ Từ framework `.claude/skills/dw-thinking/THINKING.md`:
|
|
|
53
63
|
|
|
54
64
|
## Bước 4: Ghi kết quả
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
**v2 format**: Append (hoặc replace nếu đã có) section `## Research Findings` vào `spec.md`, đặt ngay sau section `## Intent`. Giữ frontmatter và các section khác không đổi.
|
|
67
|
+
|
|
68
|
+
**v1 format** (legacy): Ghi vào `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-context.md`.
|
|
69
|
+
|
|
70
|
+
Cấu trúc nội dung (dùng chung cho cả 2 format):
|
|
57
71
|
|
|
58
72
|
```markdown
|
|
59
73
|
# Context: [Task Name]
|
|
@@ -103,7 +117,7 @@ Dùng template `.claude/templates/agent-report.md` với:
|
|
|
103
117
|
- Details: key files, patterns, dependencies
|
|
104
118
|
- Next Steps: những gì planner cần biết
|
|
105
119
|
|
|
106
|
-
> Quick depth tasks: bỏ qua bước này — progress.md đã đủ.
|
|
120
|
+
> Quick depth tasks: bỏ qua bước này — tracking.md (v2) / progress.md (v1) đã đủ.
|
|
107
121
|
|
|
108
122
|
## Bước 6: Tóm tắt
|
|
109
123
|
|