dw-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.claude/agents/executor.md +80 -0
  2. package/.claude/agents/planner.md +100 -0
  3. package/.claude/agents/quality-checker.md +86 -0
  4. package/.claude/agents/researcher.md +93 -0
  5. package/.claude/agents/reviewer.md +126 -0
  6. package/.claude/hooks/post-write.sh +62 -0
  7. package/.claude/hooks/pre-commit-gate.sh +90 -0
  8. package/.claude/hooks/progress-ping.sh +47 -0
  9. package/.claude/hooks/safety-guard.sh +54 -0
  10. package/.claude/rules/code-style.md +37 -0
  11. package/.claude/rules/commit-standards.md +37 -0
  12. package/.claude/rules/workflow-rules.md +62 -0
  13. package/.claude/settings.json +71 -0
  14. package/.claude/settings.local.json +12 -0
  15. package/.claude/skills/dw-arch-review/SKILL.md +119 -0
  16. package/.claude/skills/dw-archive/SKILL.md +81 -0
  17. package/.claude/skills/dw-commit/SKILL.md +81 -0
  18. package/.claude/skills/dw-config-init/SKILL.md +91 -0
  19. package/.claude/skills/dw-config-validate/SKILL.md +75 -0
  20. package/.claude/skills/dw-dashboard/SKILL.md +209 -0
  21. package/.claude/skills/dw-debug/SKILL.md +97 -0
  22. package/.claude/skills/dw-docs-update/SKILL.md +125 -0
  23. package/.claude/skills/dw-estimate/SKILL.md +90 -0
  24. package/.claude/skills/dw-execute/SKILL.md +98 -0
  25. package/.claude/skills/dw-flow/SKILL.md +274 -0
  26. package/.claude/skills/dw-handoff/SKILL.md +81 -0
  27. package/.claude/skills/dw-log-work/SKILL.md +69 -0
  28. package/.claude/skills/dw-plan/SKILL.md +125 -0
  29. package/.claude/skills/dw-plan/template-plan.md +47 -0
  30. package/.claude/skills/dw-requirements/SKILL.md +98 -0
  31. package/.claude/skills/dw-research/SKILL.md +98 -0
  32. package/.claude/skills/dw-research/template-research.md +51 -0
  33. package/.claude/skills/dw-review/SKILL.md +66 -0
  34. package/.claude/skills/dw-review/checklist.md +88 -0
  35. package/.claude/skills/dw-rollback/SKILL.md +90 -0
  36. package/.claude/skills/dw-sprint-review/SKILL.md +99 -0
  37. package/.claude/skills/dw-task-init/SKILL.md +59 -0
  38. package/.claude/skills/dw-test-plan/SKILL.md +113 -0
  39. package/.claude/skills/dw-thinking/SKILL.md +70 -0
  40. package/.claude/skills/dw-thinking/THINKING.md +91 -0
  41. package/.claude/skills/dw-upgrade/SKILL.md +82 -0
  42. package/.claude/templates/en/task-context.md +73 -0
  43. package/.claude/templates/en/task-plan.md +79 -0
  44. package/.claude/templates/en/task-progress.md +65 -0
  45. package/.claude/templates/pr-template.md +56 -0
  46. package/.claude/templates/task-context.md +73 -0
  47. package/.claude/templates/task-plan.md +79 -0
  48. package/.claude/templates/task-progress.md +65 -0
  49. package/.dw/adapters/claude-cli/extensions/.gitkeep +0 -0
  50. package/.dw/adapters/claude-cli/extensions/README.md +36 -0
  51. package/.dw/adapters/claude-cli/generated/README.md +23 -0
  52. package/.dw/adapters/claude-cli/generated/agents/.gitkeep +0 -0
  53. package/.dw/adapters/claude-cli/generated/skills/.gitkeep +0 -0
  54. package/.dw/adapters/claude-cli/overrides/README.md +35 -0
  55. package/.dw/adapters/claude-cli/overrides/agents/.gitkeep +0 -0
  56. package/.dw/adapters/claude-cli/overrides/skills/.gitkeep +0 -0
  57. package/.dw/adapters/generic/AGENT.md +169 -0
  58. package/.dw/adapters/generic/README.md +21 -0
  59. package/.dw/config/config.schema.json +121 -0
  60. package/.dw/config/dw.config.yml +82 -0
  61. package/.dw/config/presets/enterprise.yml +52 -0
  62. package/.dw/config/presets/small-team.yml +39 -0
  63. package/.dw/config/presets/solo-quick.yml +37 -0
  64. package/.dw/core/QUALITY.md +220 -0
  65. package/.dw/core/ROLES.md +257 -0
  66. package/.dw/core/THINKING.md +126 -0
  67. package/.dw/core/WORKFLOW.md +450 -0
  68. package/.dw/core/templates/vi/task-context.md +92 -0
  69. package/.dw/core/templates/vi/task-plan.md +93 -0
  70. package/.dw/core/templates/vi/task-progress.md +56 -0
  71. package/CLAUDE.md +98 -0
  72. package/LICENSE +21 -0
  73. package/README.md +183 -0
  74. package/bin/dw.mjs +28 -0
  75. package/package.json +52 -0
  76. package/scripts/e2e-local-check.sh +76 -0
  77. package/scripts/migrate-v03-to-v1.sh +243 -0
  78. package/scripts/upgrade.sh +246 -0
  79. package/setup.sh +382 -0
  80. package/src/cli.mjs +68 -0
  81. package/src/commands/doctor.mjs +149 -0
  82. package/src/commands/init.mjs +332 -0
  83. package/src/commands/migrate.mjs +215 -0
  84. package/src/commands/upgrade.mjs +262 -0
  85. package/src/commands/validate.mjs +102 -0
  86. package/src/lib/config.mjs +75 -0
  87. package/src/lib/copy.mjs +110 -0
  88. package/src/lib/platform.mjs +39 -0
  89. package/src/lib/ui.mjs +66 -0
  90. package/src/smoke-test.mjs +315 -0
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: dw-config-validate
3
+ description: "Kiểm tra .dw/config/dw.config.yml có hợp lệ không. Phát hiện unknown keys, typos, invalid values. Chạy sau khi sửa config thủ công."
4
+ argument-hint: ""
5
+ ---
6
+
7
+ # Validate Config
8
+
9
+ Kiểm tra `.dw/config/dw.config.yml` trong project hiện tại.
10
+
11
+ ## Bước 1: Đọc config
12
+
13
+ Đọc toàn bộ `.dw/config/dw.config.yml`.
14
+
15
+ ## Bước 2: Kiểm tra top-level keys
16
+
17
+ **Known top-level keys:**
18
+ ```
19
+ project, level, team, flags, routing, estimation, metrics, paths
20
+ ```
21
+
22
+ Nếu có key nào khác → **WARN**: "Unknown top-level key: `[key]` — có thể là typo?"
23
+
24
+ ## Bước 3: Kiểm tra `flags` keys
25
+
26
+ **Known flag keys:**
27
+ ```
28
+ research, plan, execute, commit, review, debug,
29
+ living_docs, docs_update_on_commit,
30
+ estimation, log_work, metrics_tracking, dora_metrics,
31
+ pre_commit_tests, pre_commit_lint, block_commit_on_fail,
32
+ handoff, thinking_framework,
33
+ requirements_skill, test_plan_skill, arch_review_skill, dashboard_skill
34
+ ```
35
+
36
+ Nếu có flag key nào khác → **WARN**: "Unknown flag: `[key]` — có thể là typo? Flag này sẽ bị ignore."
37
+
38
+ ## Bước 4: Kiểm tra flag values
39
+
40
+ Mỗi flag phải có giá trị `true`, `false`, hoặc `"skip"`.
41
+ Nếu giá trị khác → **ERROR**: "Flag `[key]` có giá trị không hợp lệ: `[value]`. Phải là true | false | \"skip\"."
42
+
43
+ ## Bước 5: Kiểm tra `level`
44
+
45
+ - Phải là `1`, `2`, hoặc `3`.
46
+ - Nếu `level: 3` → **INFO**: "Level 3 đang ở beta — living docs automation, DORA auto-calculation, và dashboard HTML export chưa fully implemented."
47
+
48
+ ## Bước 6: Kiểm tra `project.language`
49
+
50
+ - Phải là `"vi"` hoặc `"en"`.
51
+ - Nếu `"en"` → kiểm tra `.claude/templates/en/` có tồn tại không. Nếu không → **WARN**: "English templates chưa có. Chạy `/dw-upgrade` để lấy templates mới nhất."
52
+
53
+ ## Bước 7: Báo cáo kết quả
54
+
55
+ ```
56
+ === Config Validation Report ===
57
+
58
+ File: .dw/config/dw.config.yml
59
+ Project: [project.name]
60
+ Level: [level]
61
+ Language: [language]
62
+
63
+ ERRORS (phải fix):
64
+ [danh sách lỗi nếu có]
65
+
66
+ WARNINGS (nên xem xét):
67
+ [danh sách warnings nếu có]
68
+
69
+ INFO:
70
+ [thông tin thêm]
71
+
72
+ [OK] Config hợp lệ / [FAIL] Có X error(s) cần fix
73
+ ```
74
+
75
+ Nếu không có lỗi: "Config hợp lệ. X flags đang bật, Y flags đang tắt."
@@ -0,0 +1,209 @@
1
+ ---
2
+ name: dw-dashboard
3
+ description: "Tạo báo cáo tổng hợp cho PM: trạng thái tasks, metrics DORA, effort tracking, velocity. Ghi ra file report để share."
4
+ argument-hint: "[sprint-name | period: last-week | last-month | all]"
5
+ allowed-tools:
6
+ - Read
7
+ - Glob
8
+ - Grep
9
+ - "Bash(git log *)"
10
+ - "Bash(git diff *)"
11
+ - "Bash(ls *)"
12
+ ---
13
+
14
+ # PM Dashboard — Báo Cáo Dự Án
15
+
16
+ Period: **$ARGUMENTS**
17
+
18
+ ## Đọc Config
19
+
20
+ Đọc `.dw/config/dw.config.yml`:
21
+ - `paths.tasks` → location task docs
22
+ - `tracking.log_work` → có data effort tracking không
23
+ - `workflow.default_depth` → level of reporting detail
24
+
25
+ ## Thu Thập Dữ Liệu
26
+
27
+ ### 1. Tasks Overview
28
+ ```bash
29
+ ls {paths.tasks}/ # danh sách tasks
30
+ ```
31
+
32
+ Đọc từng `*-progress.md` để lấy:
33
+ - Trạng thái (Not Started / In Progress / Blocked / Done)
34
+ - Subtasks done/total
35
+ - Blockers hiện tại
36
+
37
+ ### 2. Git Metrics (DORA)
38
+ ```bash
39
+ # Commits trong period
40
+ git log --oneline --after="[start-date]" --before="[end-date]"
41
+
42
+ # Lead time: time from first commit to merge
43
+ git log --format="%H %ad" --date=short
44
+
45
+ # Frequency
46
+ git log --format="%ad" --date=short | sort | uniq -c
47
+ ```
48
+
49
+ ### 3. Effort Data
50
+ Đọc `{.dw/metrics}/effort-log.json` nếu có.
51
+
52
+ ### 4. Quality Metrics
53
+ Đọc review reports (nếu có) để lấy:
54
+ - Critical issues found/fixed
55
+ - Test coverage trend
56
+
57
+ ## Tính DORA Metrics
58
+
59
+ ```
60
+ Deployment Frequency = commits merged / working days
61
+ Lead Time = avg(merge_date - first_commit_date) per feature
62
+ Change Failure Rate = (hotfixes + rollbacks) / total deploys × 100%
63
+ MTTR = avg time from incident_detected to resolved
64
+ ```
65
+
66
+ So sánh với thresholds trong config và xếp loại: Elite / High / Medium / Low.
67
+
68
+ ## Tính DORA Tự Động Từ Git
69
+
70
+ ```bash
71
+ # Deployment frequency (commits/merges per day trong period)
72
+ git log --oneline --after="[start]" --before="[end]" | wc -l
73
+
74
+ # Lead time: trung bình từ commit đầu đến commit cuối của mỗi feature branch
75
+ git log --format="%H %ad %s" --date=iso --after="[start]"
76
+
77
+ # Change failure rate: đếm commits có message chứa "fix", "hotfix", "revert"
78
+ git log --oneline --after="[start]" | grep -iE "(hotfix|revert|fix:)" | wc -l
79
+
80
+ # MTTR: thời gian từ "fix commit" đến "hotfix commit" liền sau (nếu có)
81
+ ```
82
+
83
+ Xếp loại theo DORA elite benchmarks: Deployment Frequency (daily), Lead Time (<1h), MTTR (<1h), Change Failure Rate (<5%).
84
+
85
+ ## Tạo Report (Markdown + HTML)
86
+
87
+ Ghi ra `{paths.reports}/dashboard-[date].md` VÀ `{paths.reports}/dashboard-[date].html`:
88
+
89
+ ```markdown
90
+ # Dashboard: [Project Name]
91
+ ## Period: $ARGUMENTS | Generated: [date]
92
+
93
+ ---
94
+
95
+ ## 🎯 Tóm Tắt Nhanh (Executive Summary)
96
+
97
+ | Metric | Giá trị | Trend | Target |
98
+ |--------|---------|-------|--------|
99
+ | Tasks Done | X/Y | ↑ | |
100
+ | Velocity | Xh/week | → | |
101
+ | Blocked Tasks | X | ↓ better | 0 |
102
+ | Estimation Accuracy | X% | | >80% |
103
+
104
+ ---
105
+
106
+ ## 📋 Trạng Thái Tasks
107
+
108
+ | Task | Trạng thái | Progress | Blockers | ETA |
109
+ |------|-----------|----------|----------|-----|
110
+ | task-a | ✅ Done | 100% | — | — |
111
+ | task-b | 🔄 In Progress | 60% | — | [date] |
112
+ | task-c | ❌ Blocked | 30% | [mô tả] | TBD |
113
+
114
+ ---
115
+
116
+ ## 📊 DORA Metrics
117
+
118
+ | Metric | Giá trị | Level | Mục tiêu |
119
+ |--------|---------|-------|----------|
120
+ | Deployment Frequency | X/week | 🟡 High | Elite: daily |
121
+ | Lead Time | X days | 🟢 High | Elite: <1 day |
122
+ | Change Failure Rate | X% | 🟢 Elite | <5% |
123
+ | MTTR | X hours | 🟡 High | Elite: <1h |
124
+
125
+ > Thang điểm: 🟢 Elite | 🔵 High | 🟡 Medium | 🔴 Low
126
+
127
+ ---
128
+
129
+ ## ⏱️ Effort & Velocity
130
+
131
+ | Dev | Estimated | Actual | Accuracy | Tasks |
132
+ |----|----------|--------|----------|-------|
133
+ | [name] | Xh | Yh | Z% | N |
134
+ | **Team** | **Xh** | **Yh** | **Z%** | **N** |
135
+
136
+ **Velocity**: X story-points/sprint (or X hours/week)
137
+
138
+ ---
139
+
140
+ ## 🔍 Highlights
141
+
142
+ ### ✅ Điểm tốt tuần này
143
+ - [Achievement 1]
144
+
145
+ ### ⚠️ Rủi ro cần theo dõi
146
+ - [Risk 1] — Owner: [name]
147
+
148
+ ### 🎯 Focus tuần tới
149
+ - [Priority 1]
150
+ ```
151
+
152
+ ## HTML Report
153
+
154
+ File HTML được generate kèm với markdown:
155
+
156
+ ```html
157
+ <!DOCTYPE html>
158
+ <html lang="vi">
159
+ <head>
160
+ <meta charset="UTF-8">
161
+ <title>Dashboard: [Project] — [Period]</title>
162
+ <style>
163
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
164
+ max-width: 960px; margin: 40px auto; padding: 0 20px; color: #333; }
165
+ h1 { color: #1a1a2e; border-bottom: 3px solid #4361ee; padding-bottom: 8px; }
166
+ h2 { color: #16213e; margin-top: 32px; }
167
+ table { width: 100%; border-collapse: collapse; margin: 16px 0; }
168
+ th { background: #4361ee; color: white; padding: 10px 12px; text-align: left; }
169
+ td { padding: 9px 12px; border-bottom: 1px solid #e9ecef; }
170
+ tr:hover { background: #f8f9fa; }
171
+ .badge-elite { background: #2ecc71; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; }
172
+ .badge-high { background: #3498db; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; }
173
+ .badge-medium{ background: #f39c12; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; }
174
+ .badge-low { background: #e74c3c; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; }
175
+ .summary-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin: 20px 0; }
176
+ .summary-card { background: #f8f9fa; border-left: 4px solid #4361ee;
177
+ padding: 16px; border-radius: 4px; }
178
+ .summary-card .value { font-size: 28px; font-weight: 700; color: #4361ee; }
179
+ .summary-card .label { font-size: 13px; color: #666; margin-top: 4px; }
180
+ footer { margin-top: 48px; font-size: 12px; color: #999; border-top: 1px solid #eee; padding-top: 12px; }
181
+ </style>
182
+ </head>
183
+ <body>
184
+ <h1>Dashboard: [Project Name]</h1>
185
+ <p>Period: <strong>[period]</strong> &nbsp;|&nbsp; Generated: [date]</p>
186
+
187
+ <div class="summary-grid">
188
+ <div class="summary-card"><div class="value">[X/Y]</div><div class="label">Tasks Done</div></div>
189
+ <div class="summary-card"><div class="value">[X]h</div><div class="label">Velocity / week</div></div>
190
+ <div class="summary-card"><div class="value">[X]%</div><div class="label">Est. Accuracy</div></div>
191
+ <div class="summary-card"><div class="value">[X]</div><div class="label">Blocked Tasks</div></div>
192
+ </div>
193
+
194
+ <!-- Tasks table, DORA table, Effort table — populate từ data thu thập -->
195
+ [CONTENT_PLACEHOLDER]
196
+
197
+ <footer>Generated by dv-workflow-kit &nbsp;|&nbsp; <a href="../.dw/tasks/">Task Docs</a></footer>
198
+ </body>
199
+ </html>
200
+ ```
201
+
202
+ Điền `[CONTENT_PLACEHOLDER]` với các bảng HTML tương ứng với nội dung markdown report.
203
+
204
+ ## Lưu & Thông Báo
205
+
206
+ Sau khi tạo:
207
+ - Thông báo đường dẫn: `{paths.reports}/dashboard-[date].md` và `.html`
208
+ - Tóm tắt 3-5 bullets cho PM đọc nhanh
209
+ - Gợi ý: "Mở file .html trong browser để xem report đẹp hơn. Share .md qua Slack/email."
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: dw-debug
3
+ description: "Debug có hệ thống theo quy trình Investigate → Diagnose → Fix. Dùng khi gặp lỗi, test fail, hoặc behavior bất thường."
4
+ argument-hint: "[mô tả vấn đề]"
5
+ ---
6
+
7
+ # Debug Có Hệ Thống
8
+
9
+ Vấn đề: **$ARGUMENTS**
10
+
11
+ ## Đọc Config
12
+
13
+ Đọc `.dw/config/dw.config.yml` → `paths.tasks`, `workflow.default_depth`.
14
+
15
+ ---
16
+
17
+ ## Phase 1: INVESTIGATE — Thu thập thông tin
18
+
19
+ ### 1.1 Xác định symptoms
20
+ - Error message đầy đủ là gì? (stack trace, log)
21
+ - Reproduction steps: làm gì để trigger lỗi?
22
+ - Xảy ra lần đầu khi nào? Có gì thay đổi gần đây?
23
+ - Tần suất: always / flaky / one-time?
24
+ - Môi trường: dev / staging / production?
25
+
26
+ ### 1.2 Thu thập evidence
27
+ ```bash
28
+ # Git: thay đổi gần đây
29
+ git log --oneline -10
30
+ git diff HEAD~3
31
+
32
+ # Tìm error trong code
33
+ grep -r "[error keyword]" --include="*.ts"
34
+ ```
35
+
36
+ ### 1.3 Xác định phạm vi
37
+ - Feature nào bị ảnh hưởng?
38
+ - Chỉ 1 user hay tất cả?
39
+ - Data cụ thể nào trigger lỗi?
40
+
41
+ ---
42
+
43
+ ## Phase 2: DIAGNOSE — Tìm root cause
44
+
45
+ ### 2.1 Đặt giả thuyết
46
+ Liệt kê 2-4 giả thuyết có thể về nguyên nhân, ưu tiên từ khả năng cao nhất.
47
+
48
+ ### 2.2 Kiểm chứng từng giả thuyết
49
+ - Đọc code liên quan
50
+ - Trace data flow
51
+ - Kiểm tra config, environment variables
52
+ - Xem test coverage có bỏ sót case này không
53
+
54
+ ### 2.3 Thu hẹp phạm vi
55
+ - Loại trừ dần từng giả thuyết
56
+ - Tìm exact line/function gây lỗi
57
+ - Xác định root cause (không phải symptom)
58
+
59
+ ---
60
+
61
+ ## Phase 3: FIX — Sửa và verify
62
+
63
+ ### 3.1 Implement fix tối thiểu
64
+ - Fix đúng root cause, không phải workaround
65
+ - Không thay đổi scope ngoài bug fix
66
+
67
+ ### 3.2 Viết regression test TRƯỚC khi fix
68
+ ```
69
+ // Test phải FAIL trước fix, PASS sau fix
70
+ test("should handle [edge case that caused bug]", () => { ... })
71
+ ```
72
+
73
+ ### 3.3 Verify
74
+ - Test mới pass
75
+ - Existing tests không bị break
76
+ - Manual verify reproduction steps
77
+
78
+ ### 3.4 Ghi lại
79
+
80
+ ```markdown
81
+ ## Debug Report
82
+
83
+ **Root Cause**: [giải thích ngắn gọn]
84
+ **Fix**: [mô tả thay đổi]
85
+ **Prevention**: [làm sao tránh lặp lại]
86
+ **Test added**: [tên test]
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Khi Bị Bí
92
+
93
+ Nếu sau 2 giả thuyết vẫn không tìm được root cause:
94
+ 1. Mô rộng hơn: xem toàn bộ data flow
95
+ 2. Thêm logging tạm thời để narrow down
96
+ 3. Bisect git: `git bisect` để tìm commit gây lỗi
97
+ 4. Hỏi: trình bày findings cho user, propose next steps
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: dw-docs-update
3
+ description: "Cập nhật living docs khi code thay đổi. Phát hiện docs lỗi thời và cập nhật tự động. Dùng sau khi execute hoặc commit."
4
+ argument-hint: "[scope: all | architecture | api | models | task-name]"
5
+ ---
6
+
7
+ # Cập Nhật Living Docs
8
+
9
+ Scope: **$ARGUMENTS**
10
+
11
+ ## Đọc Config
12
+
13
+ Đọc `.dw/config/dw.config.yml` → kiểm tra:
14
+ - `paths.docs` → thư mục living docs (mặc định: `.dw/docs`)
15
+ - `workflow.default_depth` → nếu `quick`, gợi ý nhưng không bắt buộc
16
+
17
+ ## Living Docs Structure
18
+
19
+ ```
20
+ {paths.docs}/
21
+ ├── ARCHITECTURE.md # Kiến trúc tổng quan hệ thống
22
+ ├── API.md # API endpoints & contracts
23
+ ├── DATA-MODELS.md # Database schema & data models
24
+ ├── DECISIONS.md # Architecture Decision Records (ADR)
25
+ ├── GLOSSARY.md # Thuật ngữ dự án
26
+ ├── SETUP.md # Hướng dẫn setup & chạy dự án
27
+ └── modules/
28
+ └── [module-name].md # Docs riêng cho từng module
29
+ ```
30
+
31
+ ## Quy Trình
32
+
33
+ ### Bước 0: Scaffold (lần đầu chạy)
34
+
35
+ Nếu `{paths.docs}/` không tồn tại hoặc trống → tạo cấu trúc ban đầu:
36
+ ```bash
37
+ mkdir -p {paths.docs}/modules
38
+ ```
39
+ Tạo các file skeleton: `ARCHITECTURE.md`, `API.md`, `DATA-MODELS.md`, `DECISIONS.md`, `GLOSSARY.md`, `SETUP.md`.
40
+ Thông báo: "Khởi tạo living docs tại `{paths.docs}/` — lần chạy đầu tiên."
41
+
42
+ ### Nếu scope = "all" hoặc không có argument
43
+
44
+ 1. **Detect changes**:
45
+ ```bash
46
+ git diff --name-only HEAD~10 # 10 commits gần nhất
47
+ git diff --name-only --cached # staged changes
48
+ ```
49
+
50
+ 2. **Classify changes** theo pattern:
51
+ | Pattern file | Docs cần update |
52
+ |-------------|-----------------|
53
+ | `*model*`, `*schema*`, `*migration*`, `*entity*` | `DATA-MODELS.md` |
54
+ | `*route*`, `*controller*`, `*handler*`, `*endpoint*` | `API.md` |
55
+ | `*config*`, `*app.*`, `package.json`, `*.yml` | `ARCHITECTURE.md` |
56
+ | `*.md` trong project (không phải `.dw/docs/`) | Kiểm tra DECISIONS.md |
57
+ | Thư mục mới xuất hiện | `ARCHITECTURE.md` + tạo `modules/[name].md` |
58
+
59
+ 3. **Stale check**: Với mỗi doc cần update, đọc nội dung hiện tại, so sánh với code thực tế. Ghi rõ: "Phần X đang mô tả Y nhưng code hiện tại là Z."
60
+
61
+ 4. **Update**: Chỉ cập nhật những gì thực sự lỗi thời. Thêm timestamp cuối mỗi update.
62
+
63
+ ### Nếu scope = "architecture"
64
+ - Đọc cấu trúc thư mục, main config files, entry points
65
+ - Cập nhật ARCHITECTURE.md với cấu trúc hiện tại
66
+
67
+ ### Nếu scope = "api"
68
+ - Grep tất cả route/endpoint definitions
69
+ - Cập nhật API.md với danh sách endpoints hiện tại
70
+
71
+ ### Nếu scope = "models"
72
+ - Đọc schema definitions, migration files, model files
73
+ - Cập nhật DATA-MODELS.md
74
+
75
+ ### Nếu scope = [task-name]
76
+ - Đọc progress file của task
77
+ - Cập nhật docs liên quan đến thay đổi của task
78
+
79
+ ## Khi Tạo Doc Mới (lần đầu)
80
+
81
+ Nếu file doc chưa tồn tại → tạo mới với cấu trúc chuẩn:
82
+
83
+ ### ARCHITECTURE.md
84
+ ```markdown
85
+ # Kiến Trúc Hệ Thống
86
+
87
+ ## Tổng Quan
88
+ [Mô tả high-level]
89
+
90
+ ## Tech Stack
91
+ | Layer | Technology |
92
+ |-------|-----------|
93
+
94
+ ## Cấu Trúc Thư Mục
95
+ [Tree structure]
96
+
97
+ ## Modules
98
+ | Module | Vai trò | Entry point |
99
+ |--------|---------|-------------|
100
+
101
+ ## Data Flow
102
+ [Diagram]
103
+
104
+ ## Cập nhật lần cuối: [date]
105
+ ```
106
+
107
+ ### DECISIONS.md (ADR Format)
108
+ ```markdown
109
+ # Architecture Decision Records
110
+
111
+ ## ADR-001: [Tiêu đề]
112
+ - **Ngày**: [date]
113
+ - **Trạng thái**: Accepted | Superseded | Deprecated
114
+ - **Bối cảnh**: [Tại sao cần quyết định]
115
+ - **Quyết định**: [Đã chọn gì]
116
+ - **Hệ quả**: [Ảnh hưởng]
117
+ ```
118
+
119
+ ## Output
120
+
121
+ Sau khi cập nhật, báo cáo:
122
+ - Files đã cập nhật: [danh sách]
123
+ - Thay đổi chính: [tóm tắt]
124
+ - Docs vẫn có thể stale: [nếu có]
125
+ - Ghi timestamp "Cập nhật lần cuối" vào mỗi doc file
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: dw-estimate
3
+ description: "Ước lượng effort cho task. Phân tích subtasks từ plan và đưa ra estimate theo đơn vị cấu hình (hours/story-points/t-shirt). Dùng sau /plan."
4
+ argument-hint: "[task-name]"
5
+ allowed-tools:
6
+ - Read
7
+ - Grep
8
+ - Glob
9
+ ---
10
+
11
+ # Ước Lượng Effort
12
+
13
+ Task: **$ARGUMENTS**
14
+
15
+ ## Đọc Config
16
+
17
+ Đọc `.dw/config/dw.config.yml`:
18
+ - `tracking.estimation` — nếu `false` → thông báo "Estimation chưa bật cho project này" và DỪNG
19
+ - `tracking.estimation_unit` → đơn vị (hours / story-points / t-shirt)
20
+ - `paths.tasks` → location task docs
21
+
22
+ ## Điều Kiện
23
+
24
+ Nếu chưa có plan (`{paths.tasks}/$ARGUMENTS/$ARGUMENTS-plan.md`) → thông báo cần chạy `/dw-plan` trước.
25
+
26
+ ## Quy Trình Estimation
27
+
28
+ ### 1. Đọc plan & context
29
+ - Đọc toàn bộ subtasks
30
+ - Đọc context để hiểu technical complexity
31
+ - Hiểu dependencies giữa subtasks
32
+
33
+ ### 2. Estimate từng subtask
34
+
35
+ Với mỗi subtask, phân tích:
36
+ - **Complexity**: Low / Medium / High
37
+ - Low: Rõ ràng, ít dependencies, code cũ đã có pattern
38
+ - Medium: Cần thiết kế, có vài dependencies
39
+ - High: Phức tạp, nhiều unknowns, cần research thêm
40
+ - **Uncertainty**: Low / Medium / High (có unknown chưa giải quyết?)
41
+ - **Estimate**: Dựa trên complexity + uncertainty
42
+
43
+ **Reference nhanh (hours):**
44
+ | Complexity | Low uncertainty | Medium | High uncertainty |
45
+ |-----------|-----------------|--------|-----------------|
46
+ | Low | 1-2h | 2-4h | 4-8h |
47
+ | Medium | 2-4h | 4-8h | 8-16h |
48
+ | High | 4-8h | 8-16h | 16-40h |
49
+
50
+ **Reference (story points - Fibonacci):** 1, 2, 3, 5, 8, 13, 21
51
+ **Reference (t-shirt):** XS(<2h), S(2-4h), M(4-8h), L(8-16h), XL(16-40h), XXL(>40h)
52
+
53
+ ### 3. Uncertainty buffer
54
+
55
+ - Low uncertainty overall: +0%
56
+ - Medium: +20%
57
+ - High: +50%
58
+ - Nhiều unknowns / first-time tech: +100% (double)
59
+
60
+ ### 4. Breakdown theo categories
61
+
62
+ ```
63
+ Research: [X]
64
+ Planning: [done]
65
+ Coding: [X per subtask]
66
+ Testing: [X — thường 20-30% coding]
67
+ Review: [X — thường 10-15% coding]
68
+ Documentation: [X — nếu living docs bật]
69
+ Buffer: [X%]
70
+ Total: [sum]
71
+ ```
72
+
73
+ ## Ghi Vào Plan
74
+
75
+ Cập nhật phần "Estimation Tổng" trong plan file.
76
+
77
+ ## Trình Bày
78
+
79
+ ```markdown
80
+ ## Estimation Summary: $ARGUMENTS
81
+
82
+ | Subtask | Complexity | Uncertainty | Estimate |
83
+ |---------|-----------|-------------|---------|
84
+ | ST-1 | Low | Low | 2h |
85
+ | ST-2 | Medium | Medium | 6h |
86
+
87
+ **Total Estimate**: X hours (với buffer Y%)
88
+ **Confidence**: High / Medium / Low
89
+ **Risk note**: [nếu có unknowns lớn]
90
+ ```
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: dw-execute
3
+ description: "Thực hiện implementation theo plan đã được approve. Tuân thủ TDD, commit sau mỗi subtask. Chỉ dùng khi plan đã được duyệt."
4
+ argument-hint: "[task-name]"
5
+ ---
6
+
7
+ # Thực Hiện Implementation
8
+
9
+ Task: **$ARGUMENTS**
10
+
11
+ ## Đọc Config
12
+
13
+ Đọc `.dw/config/dw.config.yml` → lấy:
14
+ - `paths.tasks` → location task docs
15
+ - `quality.test_command` → lệnh chạy tests (nếu có)
16
+ - `quality.lint_command` → lệnh chạy linter (nếu có)
17
+ - `quality.block_on_fail` → có block commit khi fail không
18
+ - `tracking.log_work` → ghi effort tracking không
19
+ - `workflow.default_depth` → `thorough` = cần docs-update, review bắt buộc
20
+
21
+ ## Trước Khi Bắt Đầu
22
+
23
+ 1. Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-plan.md`
24
+ 2. Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-context.md`
25
+ 3. Đọc `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md`
26
+ 4. Xác nhận plan có `Trạng thái: Approved`
27
+
28
+ Nếu plan chưa approved → **DỪNG**, yêu cầu approve trước.
29
+ Nếu chưa có plan → **DỪNG**, yêu cầu chạy `/dw-plan $ARGUMENTS`.
30
+ Nếu có progress → tiếp tục từ subtask cuối cùng chưa done.
31
+
32
+ ## Quy Trình Cho MỖI Subtask
33
+
34
+ ### Step 1: Chuẩn bị
35
+ - Đọc subtask từ plan (mô tả, files, criteria)
36
+ - Cập nhật progress: subtask → `in_progress`
37
+
38
+ ### Step 2: Test First (TDD)
39
+ - Viết test cho subtask (nếu applicable)
40
+ - Chạy test → confirm FAIL (red)
41
+ - Nếu test đã pass → kiểm tra lại, có thể test sai
42
+
43
+ ### Step 3: Implement
44
+ - Code theo spec trong plan
45
+ - Tuân thủ conventions trong `.claude/rules/code-style.md`
46
+ - KHÔNG thay đổi scope ngoài plan
47
+
48
+ ### Step 4: Verify
49
+ - Chạy test → confirm PASS (green)
50
+ - Nếu `quality.lint_command` không rỗng: chạy linter
51
+ - Nếu `quality.block_on_fail = true` và fail → DỪNG, fix trước
52
+ - Nếu `quality.block_on_fail = false` → cảnh báo, cho phép tiếp tục
53
+
54
+ ### Step 5: Cập nhật Progress
55
+ Cập nhật `{paths.tasks}/$ARGUMENTS/$ARGUMENTS-progress.md`:
56
+ ```markdown
57
+ | ST-N | [Subtask name] | Done | abc1234 | [ghi chú] |
58
+ ```
59
+
60
+ Nếu `tracking.log_work = true`, ghi effort thực tế vào:
61
+ ```markdown
62
+ ### Effort Log
63
+ | Subtask | Estimate | Actual | Ghi chú |
64
+ ```
65
+
66
+ ### Step 6: Commit
67
+ ```
68
+ <type>(<scope>): <mô tả subtask>
69
+
70
+ Subtask ST-N of $ARGUMENTS
71
+ ```
72
+
73
+ ## Khi Phát Hiện Vấn Đề
74
+
75
+ ### Giả định sai / Scope thay đổi
76
+ 1. **DỪNG** implementation ngay
77
+ 2. Ghi vào progress → mục "Phát Hiện Mới"
78
+ 3. Thông báo user: vấn đề gì, ảnh hưởng gì
79
+ 4. Đề xuất: tiếp tục / cập nhật plan / thay đổi hướng
80
+ 5. **CHỜ** quyết định từ user
81
+
82
+ ### Test fail không rõ nguyên nhân
83
+ 1. KHÔNG sửa test để pass (trừ khi test sai)
84
+ 2. Chạy `/dw-debug` nếu cần
85
+ 3. Ghi vào progress nếu mất thời gian
86
+
87
+ ### Conflict với code khác
88
+ 1. Ghi vào progress
89
+ 2. Thông báo user
90
+ 3. Đề xuất giải quyết
91
+
92
+ ## Khi Hoàn Thành Tất Cả Subtasks
93
+
94
+ 1. Cập nhật progress: Trạng thái → `Done`
95
+ 2. Tóm tắt: subtasks completed, commits, issues encountered
96
+ 3. Luôn gợi ý: "Tiếp theo: `/dw-review $ARGUMENTS`"
97
+ 4. Nếu `workflow.default_depth = thorough`: "Cần chạy `/dw-docs-update $ARGUMENTS`"
98
+ 5. Nếu `tracking.log_work = true`: Hiển thị estimate vs actual, gợi ý `/dw-log-work $ARGUMENTS`