@educa-corp/sdd-framework 0.2.4 → 0.2.6

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 (152) hide show
  1. package/commands/generate-architecture.md +706 -0
  2. package/commands/generate-architecture.tmpl +194 -0
  3. package/commands/generate-code.md +35 -9
  4. package/commands/generate-code.tmpl +35 -9
  5. package/commands/generate-tech-docs.md +259 -246
  6. package/commands/generate-tech-docs.tmpl +21 -0
  7. package/core/FRAMEWORK_VERSION +1 -1
  8. package/core/commands/generate-architecture.md +706 -0
  9. package/core/commands/generate-code.md +35 -9
  10. package/core/commands/generate-tech-docs.md +259 -246
  11. package/core/skills/setup-ai-first/SKILL.md +12 -4
  12. package/core/templates/architecture.template.md +392 -111
  13. package/core/templates/tech-design.template.md +238 -246
  14. package/docs/01-getting-started/installation.md +47 -112
  15. package/docs/01-getting-started/quickstart.md +58 -72
  16. package/docs/01-getting-started/what-is-sdd.md +75 -0
  17. package/docs/02-concepts/architecture.md +109 -0
  18. package/docs/02-concepts/glossary.md +87 -0
  19. package/docs/02-concepts/overview.md +93 -0
  20. package/docs/02-concepts/pipeline-steps/00-setup.md +102 -0
  21. package/docs/02-concepts/pipeline-steps/01-discovery.md +129 -0
  22. package/docs/02-concepts/pipeline-steps/02-specification.md +130 -0
  23. package/docs/02-concepts/pipeline-steps/03-design-spec.md +90 -0
  24. package/docs/02-concepts/pipeline-steps/04-bdd.md +120 -0
  25. package/docs/02-concepts/pipeline-steps/05-tech-docs.md +101 -0
  26. package/docs/02-concepts/pipeline-steps/06-code.md +119 -0
  27. package/docs/02-concepts/pipeline-steps/07-dev-selftest.md +92 -0
  28. package/docs/02-concepts/pipeline-steps/08-qc-automation.md +102 -0
  29. package/docs/02-concepts/pipeline-steps/09-validate-traces.md +104 -0
  30. package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +105 -0
  31. package/docs/02-concepts/pipeline-steps/README.md +92 -0
  32. package/docs/02-concepts/roles-and-hitl.md +73 -0
  33. package/docs/02-concepts/traceability.md +94 -0
  34. package/docs/03-guides/architect.md +98 -0
  35. package/docs/03-guides/developer.md +76 -0
  36. package/docs/03-guides/product-owner.md +68 -0
  37. package/docs/03-guides/tester-qa.md +70 -0
  38. package/docs/04-reference/commands.md +105 -0
  39. package/docs/04-reference/configuration.md +94 -0
  40. package/docs/04-reference/model-selection.md +68 -0
  41. package/docs/04-reference/modules.md +74 -0
  42. package/docs/04-reference/trace-schema.md +93 -0
  43. package/docs/README.md +29 -40
  44. package/docs/explain/00-setup-ai-first.md +77 -0
  45. package/docs/explain/00b-generate-architecture.md +76 -0
  46. package/docs/explain/01-define-product.md +79 -0
  47. package/docs/explain/02-generate-prd.md +78 -0
  48. package/docs/explain/03-refine-prd.md +86 -0
  49. package/docs/explain/04-review-context.md +100 -0
  50. package/docs/explain/05-generate-design-spec.md +73 -0
  51. package/docs/explain/06-generate-bdd.md +77 -0
  52. package/docs/explain/07-generate-tech-docs.md +71 -0
  53. package/docs/explain/08-review-tech-docs.md +79 -0
  54. package/docs/explain/09-generate-code.md +78 -0
  55. package/docs/explain/10-review-code.md +70 -0
  56. package/docs/explain/11-map-testids.md +69 -0
  57. package/docs/explain/12-dev-gen-test.md +66 -0
  58. package/docs/explain/13-dev-run-test.md +69 -0
  59. package/docs/explain/14-dev-smoke-test.md +67 -0
  60. package/docs/explain/15-qc-analyze.md +68 -0
  61. package/docs/explain/16-qc-plan.md +61 -0
  62. package/docs/explain/17-qc-design-test.md +61 -0
  63. package/docs/explain/18-qc-review.md +59 -0
  64. package/docs/explain/19-qc-run-test.md +67 -0
  65. package/docs/explain/20-qc-report.md +61 -0
  66. package/docs/explain/21-validate-traces.md +68 -0
  67. package/docs/explain/22-generate-spec-manifest.md +60 -0
  68. package/docs/explain/23-fix-bug.md +69 -0
  69. package/docs/explain/24-debug.md +61 -0
  70. package/docs/explain/25-report-bug.md +65 -0
  71. package/docs/explain/26-propose-scenario.md +63 -0
  72. package/docs/explain/27-learn.md +65 -0
  73. package/docs/explain/28-sync.md +70 -0
  74. package/docs/explain/29-update-framework.md +65 -0
  75. package/docs/explain/README.md +134 -0
  76. package/package.json +1 -1
  77. package/skills/setup-ai-first/SKILL.md +12 -4
  78. package/skills/setup-ai-first/SKILL.tmpl +12 -4
  79. package/templates/architecture.template.md +392 -111
  80. package/templates/tech-design.template.md +238 -246
  81. package/docs/01-getting-started/README.md +0 -19
  82. package/docs/01-getting-started/core-concepts.md +0 -102
  83. package/docs/02-guides/README.md +0 -26
  84. package/docs/02-guides/bdd-input-checklist.md +0 -68
  85. package/docs/02-guides/developer/README.md +0 -49
  86. package/docs/02-guides/developer/bdd-and-trace.md +0 -126
  87. package/docs/02-guides/developer/commands.md +0 -76
  88. package/docs/02-guides/developer/pr-checklist.md +0 -16
  89. package/docs/02-guides/developer/scenarios.md +0 -460
  90. package/docs/02-guides/developer/workflow.md +0 -121
  91. package/docs/02-guides/prd-input-checklist.md +0 -94
  92. package/docs/02-guides/product-owner/README.md +0 -81
  93. package/docs/02-guides/product-owner/commands.md +0 -30
  94. package/docs/02-guides/product-owner/handoff-checklist.md +0 -42
  95. package/docs/02-guides/product-owner/prd-writing-rules.md +0 -45
  96. package/docs/02-guides/product-owner/scenarios.md +0 -438
  97. package/docs/02-guides/tech-docs-input-checklist.md +0 -109
  98. package/docs/02-guides/tester/README.md +0 -75
  99. package/docs/02-guides/tester/bug-reporting.md +0 -117
  100. package/docs/02-guides/tester/qc-automation.md +0 -165
  101. package/docs/02-guides/tester/reading-specs.md +0 -79
  102. package/docs/02-guides/tester/scenarios.md +0 -186
  103. package/docs/02-guides/tester/spec-manifest.md +0 -130
  104. package/docs/02-guides/tester/test-checklist.md +0 -31
  105. package/docs/02-guides/tester/workflow.md +0 -77
  106. package/docs/03-concepts/README.md +0 -20
  107. package/docs/03-concepts/architecture.md +0 -248
  108. package/docs/03-concepts/mechanisms-explained.md +0 -124
  109. package/docs/03-concepts/pipeline.md +0 -278
  110. package/docs/03-concepts/traceability.md +0 -152
  111. package/docs/04-operations/README.md +0 -33
  112. package/docs/04-operations/bug-flow.md +0 -364
  113. package/docs/04-operations/publishing.md +0 -154
  114. package/docs/04-operations/sync-and-update.md +0 -522
  115. package/docs/05-reference/README.md +0 -34
  116. package/docs/05-reference/command-cheatsheet.md +0 -147
  117. package/docs/05-reference/commands.md +0 -234
  118. package/docs/05-reference/model-selection.md +0 -74
  119. package/docs/05-reference/modules.md +0 -110
  120. package/docs/05-reference/trace-schema.md +0 -154
  121. package/docs/06-commands/README.md +0 -75
  122. package/docs/06-commands/explain-debug.md +0 -32
  123. package/docs/06-commands/explain-define-product.md +0 -43
  124. package/docs/06-commands/explain-dev-gen-test.md +0 -28
  125. package/docs/06-commands/explain-dev-run-test.md +0 -24
  126. package/docs/06-commands/explain-dev-smoke-test.md +0 -25
  127. package/docs/06-commands/explain-fix-bug.md +0 -28
  128. package/docs/06-commands/explain-generate-bdd.md +0 -45
  129. package/docs/06-commands/explain-generate-code.md +0 -53
  130. package/docs/06-commands/explain-generate-design-spec.md +0 -54
  131. package/docs/06-commands/explain-generate-prd.md +0 -45
  132. package/docs/06-commands/explain-generate-spec-manifest.md +0 -20
  133. package/docs/06-commands/explain-generate-tech-docs.md +0 -56
  134. package/docs/06-commands/explain-learn.md +0 -21
  135. package/docs/06-commands/explain-map-testids.md +0 -28
  136. package/docs/06-commands/explain-propose-scenario.md +0 -24
  137. package/docs/06-commands/explain-qc-analyze.md +0 -22
  138. package/docs/06-commands/explain-qc-design-test.md +0 -20
  139. package/docs/06-commands/explain-qc-plan.md +0 -21
  140. package/docs/06-commands/explain-qc-report.md +0 -23
  141. package/docs/06-commands/explain-qc-review.md +0 -24
  142. package/docs/06-commands/explain-qc-run-test.md +0 -27
  143. package/docs/06-commands/explain-refine-prd.md +0 -51
  144. package/docs/06-commands/explain-report-bug.md +0 -24
  145. package/docs/06-commands/explain-review-code.md +0 -45
  146. package/docs/06-commands/explain-review-context.md +0 -68
  147. package/docs/06-commands/explain-review-tech-docs.md +0 -45
  148. package/docs/06-commands/explain-setup-ai-first.md +0 -25
  149. package/docs/06-commands/explain-sync.md +0 -24
  150. package/docs/06-commands/explain-update-framework.md +0 -22
  151. package/docs/06-commands/explain-validate-traces.md +0 -25
  152. package/docs/t-sample.md +0 -826
@@ -1,364 +0,0 @@
1
- [📚 Docs](../README.md) › [Operations](README.md) › Bug Flow
2
-
3
- # Bug Flow — PO · Dev · QC/Tester
4
-
5
- > Cách **PO, Dev, và QC/Tester phối hợp** khi phát hiện bug. Mọi bug đều được trace về spec layer để fix đúng chỗ và tránh lặp lại.
6
-
7
- > **QC cũng là nguồn bug.** Pipeline `/qc-*` đẩy vào **cùng** flow này: `/qc-run-test` FAIL = `product-gap` → `/report-bug {UC-ID}`; `/qc-analyze` `DOC_GAPS` blocker (spec sai/mơ hồ) → `/report-bug` (Case 2/3) hoặc thiếu coverage → `/propose-scenario`. Cùng phân loại Case 1–6 bên dưới. Chi tiết: [chương QC Automation](../02-guides/tester/qc-automation.md#khi-qc-tìm-thấy-bug--spec-gap--đẩy-lên-specs).
8
-
9
- ---
10
-
11
- ## Mục lục
12
-
13
- 1. [Bug thuộc layer nào?](#1-bug-thuộc-layer-nào)
14
- 2. [Bảng quyết định nhanh](#2-bảng-quyết-định-nhanh)
15
- 3. [Case 1 — Code Bug (Code ≠ BDD)](#3-case-1--code-bug-code--bdd)
16
- 4. [Case 2 — BDD Bug (BDD ≠ PRD)](#4-case-2--bdd-bug-bdd--prd)
17
- 5. [Case 3 — PRD Ambiguity (PRD không rõ)](#5-case-3--prd-ambiguity-prd-không-rõ)
18
- 6. [Case 4 — PRD Change (yêu cầu thay đổi)](#6-case-4--prd-change-yêu-cầu-thay-đổi)
19
- 7. [Case 5 — Design Spec Bug (UI ≠ Design Spec)](#7-case-5--design-spec-bug-ui--design-spec)
20
- 8. [Case 6 — Environment / Data Bug](#8-case-6--environment--data-bug)
21
- 9. [Giao tiếp hiệu quả — các format thông báo](#9-giao-tiếp-hiệu-quả--các-format-thông-báo)
22
- 10. [Checklist đóng bug](#10-checklist-đóng-bug)
23
-
24
- ---
25
-
26
- ## 1. Bug thuộc layer nào?
27
-
28
- Tester đọc spec chain **PRD → BDD → Code** để xác định layer của bug:
29
-
30
- ```
31
- ┌─────────────────────────────┐
32
- │ Bug được phát hiện │
33
- └──────────────┬──────────────┘
34
- ┌──────────────▼──────────────┐
35
- │ Tester đọc PRD → BDD → Code │
36
- └──────────────┬──────────────┘
37
- ┌────────────────────┼────────────────────┐
38
- ┌───────▼───────┐ ┌─────────▼─────────┐ ┌────────▼────────┐
39
- │ PRD mơ hồ / │ │ BDD sai so PRD / │ │ Code sai so BDD │
40
- │ yêu cầu đổi │ │ thiếu scenario │ │ (phổ biến nhất) │
41
- └───────┬───────┘ └─────────┬─────────┘ └────────┬────────┘
42
- → PO xử lý → Dev xử lý → Dev xử lý
43
- (Case 3, 4) (Case 2) (Case 1)
44
- ```
45
-
46
- ---
47
-
48
- ## 2. Bảng quyết định nhanh
49
-
50
- | PRD | BDD | Code | Chẩn đoán | Ai fix | Re-test |
51
- |---|---|---|---|---|---|
52
- | ✅ rõ ràng | ✅ đúng | ❌ sai | **Code bug** | Dev | Tester |
53
- | ✅ rõ ràng | ❌ sai | ❌ sai | **BDD bug** | Dev | Tester |
54
- | ❌ mơ hồ | bất kỳ | bất kỳ | **PRD ambiguity** | PO → Dev | Tester |
55
- | ✅ rõ ràng | ✅ đúng | ✅ đúng | **Env / data bug** | DevOps / Dev | Tester |
56
- | Yêu cầu thay đổi | cũ | cũ | **PRD change** | PO → Dev | Tester |
57
- | ✅ rõ ràng | ✅ đúng | ❌ UI sai | **Design Spec bug** | PO/Designer → Dev | Tester |
58
-
59
- > **Sửa PRD/BDD/Design Spec → phải duyệt lại:** mọi case mà PO sửa PRD (Case 3/4), Dev sửa BDD (Case 2), hoặc PO/Designer sửa Design Spec (Case 5) → artifact đó **tự về `draft`** (PRD/Design `Status` ở Metadata; BDD `@trace.status`). Phải `/review-context` lại + người **đặt `approved`** trước khi downstream (tech-docs / code / QC) tiêu thụ. Proposal scenario: PO/Dev đặt `Status: accepted` → `/generate-bdd` tự nạp rồi lưu trữ.
60
-
61
- ---
62
-
63
- ## 3. Case 1 — Code Bug (Code ≠ BDD)
64
-
65
- > Phổ biến nhất. Spec đúng, code implement sai.
66
-
67
- ```
68
- Tester Dev
69
- ────── ────────────────────────────────────────────
70
- Gửi bug report
71
- (kèm spec context:
72
- PRD path, BDD path,
73
- AC bị vi phạm,
74
- BDD scenario fail)
75
- Nhận bug report; đọc BDD scenario được chỉ định
76
- /fix-bug "{BUG-ID}: {mô tả}"
77
- → agent tìm divergence code vs BDD → propose fix
78
- Review + apply fix
79
- /dev-run-test → dev self-check pass ✅
80
- (dev_selftest — smoke check, KHÔNG phải official QC;
81
- QC pipeline /qc-run-test set qc_status ở flow riêng)
82
- /validate-traces → no broken
83
- Tạo PR + notify tester:
84
- "Fixed — root cause: {X}; Re-test: {BDD scenario}"
85
- Nhận thông báo; re-test scenario
86
- → PASS: đóng bug
87
- → FAIL: gửi lại với actual behavior mới
88
- ```
89
-
90
- **Ví dụ:**
91
-
92
- ```
93
- Bug: FT-001 — tài khoản khoá sau 6 lần sai, không phải 5
94
- PRD AC3 : "5 lần sai → khoá" ✅
95
- BDD SC3 : "When 5 failures, Then 423" ✅
96
- Code : if failCount > 5: lock() ❌ ← > thay vì >=
97
- Fix: đổi > thành >= → chạy BDD test → pass
98
- → notify: "Case 1 fixed, re-test FT-001-UC2-SC3"
99
- ```
100
-
101
- > **Nếu root cause là lỗi AI hay lặp khi gen code** (vd dùng `>` thay vì `>=` cho boundary, hay gọi repository thẳng từ controller): `/fix-bug` sẽ hỏi *"Record as a project lesson? (Y/N)"* → chọn **Y**. Lesson được nạp vào mọi lần gen sau. Hoặc chủ động `/learn "AI hay X, đúng phải Y"`.
102
-
103
- ---
104
-
105
- ## 4. Case 2 — BDD Bug (BDD ≠ PRD)
106
-
107
- > Dev gen BDD sai từ đầu, hoặc PRD đã update nhưng BDD chưa.
108
-
109
- ```
110
- Tester Dev PO/BA
111
- ────── ──────────── ──────
112
- Gửi bug report
113
- (BDD scenario mâu
114
- thuẫn với PRD AC)
115
- Đọc PRD → BDD: xác nhận BDD sai
116
- Nếu PRD rõ ràng:
117
- → update BDD scenario + code nếu cần
118
- → /dev-run-test → dev self-check pass
119
- → /validate-traces → PR + notify
120
- Nếu PRD chưa đủ rõ → báo PO
121
- Clarify PRD
122
- (không đổi version
123
- nếu chỉ làm rõ)
124
- Update BDD + code → PR + notify
125
- Re-test
126
- ```
127
-
128
- **Ví dụ:**
129
-
130
- ```
131
- Bug: FT-001 — BDD ghi "3 lần sai → khoá", PRD ghi "5 lần"
132
- PRD AC3 : "5 lần sai → khoá" ✅
133
- BDD SC3 : "When 3 failures, Then 423" ❌ ← dev gen BDD sai
134
- Code : if failCount >= 3: lock() ❌ ← code theo BDD sai
135
- Fix: 1) BDD 3→5 2) code >=3 → >=5 3) update test data
136
- → notify: "BDD + code fixed, re-test với 5 lần"
137
- ```
138
-
139
- ---
140
-
141
- ## 5. Case 3 — PRD Ambiguity (PRD không rõ)
142
-
143
- > Không ai sai — PRD viết thiếu, dev và tester hiểu khác nhau.
144
-
145
- ```
146
- Tester Dev PO/BA
147
- ────── ──────────── ──────
148
- Gửi bug report
149
- (AC mơ hồ: dev hiểu
150
- X, tester expect Y)
151
- Đọc PRD → xác nhận AC chưa đủ rõ
152
- KHÔNG tự fix code
153
- Báo PO: "AC3 mơ hồ: dev assume 5 lần,
154
- tester expect 3. Đúng là bao nhiêu?"
155
- Quyết định: 5 lần
156
- Update PRD AC3
157
- Bump version nếu
158
- thay đổi behavior
159
- Notify dev + tester
160
- Nhận PRD mới; update BDD/code nếu cần
161
- /validate-traces → PR + notify
162
- Re-test theo PRD mới
163
- ```
164
-
165
- **Ví dụ:**
166
-
167
- ```
168
- PRD AC3: "Sai password nhiều lần → khoá tài khoản" ← "nhiều lần" = bao nhiêu?
169
- Dev assume 5 lần; Tester expect 3 lần (thông lệ ngân hàng)
170
- → Không phải bug code/BDD — là PRD thiếu thông tin
171
- → PO quyết định 5 lần: "Sai password 5 lần liên tiếp → khoá 30 phút"
172
- → BDD đã đúng → chỉ close bug, không fix code
173
- ```
174
-
175
- ---
176
-
177
- ## 6. Case 4 — PRD Change (yêu cầu thay đổi)
178
-
179
- > Không phải bug — business requirement thay đổi sau khi đã implement.
180
-
181
- ```
182
- Tester Dev PO/BA
183
- ────── ──────────── ──────
184
- Gửi bug report
185
- (behavior đổi theo
186
- yêu cầu business mới)
187
- So sánh PRD version: code theo v1.0,
188
- tester expect v1.1 → báo PO xác nhận
189
- Xác nhận: PRD change,
190
- không phải bug
191
- Update PRD v1.1
192
- Notify dev + tester
193
- Nhận PRD v1.1
194
- /review-context → xem diff
195
- Update BDD + code + tests
196
- /validate-traces → PR + notify:
197
- "Implemented per PRD v1.1; re-test behavior mới"
198
- Re-test theo PRD v1.1
199
- ```
200
-
201
- **Lưu ý quan trọng:** Bug report phải được **re-classify** thành "PRD Change Request" trước khi xử lý — không đưa vào bug backlog.
202
-
203
- ---
204
-
205
- ## 7. Case 5 — Design Spec Bug (UI ≠ Design Spec)
206
-
207
- > Chỉ áp dụng cho FE/App. Code không khớp Design Spec.
208
-
209
- ```
210
- Tester Dev (FE/App) PO/BA + Designer
211
- ────── ──────────── ──────────────────
212
- Gửi bug report
213
- (screen X không khớp
214
- Design Spec section Y)
215
- Đọc Design Spec → xác nhận spec nói gì
216
- Nếu code sai Design Spec:
217
- → fix code theo spec → PR + notify
218
- Nếu Design Spec sai/lỗi thời:
219
- → báo PO/Designer
220
- Review + update Design Spec
221
- Notify dev
222
- Nhận Design Spec mới → fix code → PR + notify
223
- Re-test UI
224
- ```
225
-
226
- ---
227
-
228
- ## 8. Case 6 — Environment / Data Bug
229
-
230
- > Spec đúng hết, code đúng hết — lỗi ở infra hoặc test data.
231
-
232
- ```
233
- Dấu hiệu nhận biết:
234
- - Bug chỉ xảy ra trên staging, không reproduce local
235
- - Bug xảy ra với 1 user cụ thể, không với user khác
236
- - Bug xảy ra sau deploy, không trước
237
- - /dev-run-test (dev_selftest — dev self-check) pass nhưng manual / QC test fail
238
-
239
- Xử lý:
240
- Tester → cung cấp: environment, user ID, timestamp, request ID
241
- Dev → check logs, config, database state
242
- DevOps → check infra, env vars, deploy artifacts
243
- ```
244
-
245
- ---
246
-
247
- ## 9. Giao tiếp hiệu quả — các format thông báo
248
-
249
- ### Git flow của feedback loop (2 repo, 1 vòng)
250
-
251
- Mọi feedback đi qua **git**, không qua chat: file được ghi vào spec repo, commit+push, rồi PO/Dev kéo về bằng `/sync`. Đây là đường đi đầy đủ — từ lúc QC/Tester phát hiện tới lúc bug `Closed`:
252
-
253
- ```
254
- QC / Tester SPEC REPO (PO sở hữu) SERVICE SUBMODULE (Dev sở hữu)
255
- ───────────── ───────────────────── ──────────────────────────────
256
- /report-bug read-only
257
- /propose-scenario specs/code
258
- (QC: /qc-run-test FAIL,
259
- /qc-analyze DOC_GAPS)
260
- │ ghi file ──────────────▶ feedback/bug-reports/*.md (KHÔNG sửa specs/code trực tiếp)
261
- feedback/bdd-proposals/*.md
262
- feedback/prd-change-requests/*.md
263
- State: Open
264
- │ git commit + push (tầng spec repo)
265
-
266
- origin(spec) ──── /sync (PO/Dev pull) ────┐
267
-
268
- ┌──────────────── phân loại (Case 1–6) ───────────────┐
269
- ▼ ▼
270
- PRD/BDD gap → PO sửa PRD + bump Code bug → Dev /fix-bug {BUG-ID}
271
- → commit+push spec repo → set State: Fixed
272
- → /generate-bdd lại → commit+push service (tầng 1)
273
- │ + umbrella pointer (tầng 2)
274
- └───────────────────┬──────────────────┘
275
-
276
- QC /qc-run-test re-verify ──── pass ──▶ State: Closed
277
- (qc_owner / qc_blocked_by tự clear)
278
- ```
279
-
280
- - **2 tầng push** chỉ áp dụng phía service submodule (xem [Sync & Update §4.4](sync-and-update.md#44--commit-2-tầng-thay-đổi-trong-service-submodule)); feedback file nằm trong **spec repo** nên chỉ cần push 1 tầng ở đó.
281
- - `/sync` chỉ surface bug `State: Open`; `Fixed`/`Closed` để riêng (xem [§10](#10-checklist-đóng-bug)).
282
-
283
- ### Bug report (Tester → Dev)
284
-
285
- Tester chạy `/report-bug {UC-ID} {mô tả}` → tự sinh report theo format dưới (gồm phân loại layer + phát hiện coverage gap), commit+push vào **spec repo** `feedback/bug-reports/{BUG-ID}.md`. PO/Dev thấy khi chạy `/sync` (dòng `📥 New tester feedback`):
286
-
287
- ```
288
- [BUG-{ID}] {Feature} — {mô tả ngắn}
289
-
290
- Spec: {PRD path} v{x.x} | AC{N}: "{AC text}"
291
- BDD: {BDD path} → "{Scenario title}" (hoặc: ⚠️ no scenario covers this)
292
- Layer: Code / BDD / PRD / Env ← Tester đề xuất, Dev xác nhận
293
-
294
- Expected: {theo spec}
295
- Actual: {thực tế}
296
- Repro: {steps}
297
- Env: staging / {date deploy}
298
- ```
299
-
300
- > **Nếu Layer = "coverage gap"** (behavior đúng nhưng chưa scenario nào cover): tester chạy `/propose-scenario {UC-ID}` → draft scenario vào `bdd-proposals/` cho PO/Dev duyệt. Xem [Case 2](#4-case-2--bdd-bug-bdd--prd).
301
-
302
- ### Fix xong (Dev → Tester)
303
-
304
- ```
305
- [BUG-{ID}] Fixed ✅
306
-
307
- Root cause: Case {1..6} — {mô tả ngắn}
308
- Changed:
309
- - {file/component}: {what changed}
310
- - BDD: {updated / unchanged}
311
- - PRD: {unchanged / clarified by PO}
312
-
313
- Deploy: staging @ {time} — {commit/PR link}
314
- Re-test: {BDD scenario ID hoặc AC number}
315
- ```
316
-
317
- ### Cần PO clarify (Dev → PO)
318
-
319
- ```
320
- [PRD-CLARIFY] {Feature} — AC{N} mơ hồ
321
-
322
- Tình huống:
323
- Dev implement: {X}
324
- Tester expect: {Y}
325
- Triggered by: BUG-{ID}
326
-
327
- PRD AC hiện tại: "{AC text}"
328
-
329
- Câu hỏi: {câu hỏi cụ thể — 1 câu}
330
- Cần trả lời trước: {date} để unblock tester
331
- ```
332
-
333
- ---
334
-
335
- ## 10. Checklist đóng bug
336
-
337
- Trước khi đánh "Resolved":
338
-
339
- **Dev:**
340
- - [ ] Root cause xác định rõ (Case 1/2/3/4/5/6)
341
- - [ ] Fix đúng layer — không patch code khi lỗi ở BDD hoặc PRD
342
- - [ ] `/validate-traces` → no broken traces
343
- - [ ] `/dev-run-test` → dev self-check pass (`dev_selftest` — smoke check, KHÔNG thay official QC `qc_status` do `/qc-run-test` set)
344
- - [ ] Nếu root cause là lỗi AI gen hay lặp → đã `/learn` (hoặc accept prompt khi `/fix-bug`)
345
- - [ ] Notify tester với đầy đủ thông tin re-test
346
-
347
- **Tester / QC:**
348
- - [ ] Re-test đúng scenario được chỉ định (QC: `/qc-run-test {UC-ID}` lại → `qc_status` flip `fail → pass`)
349
- - [ ] Kiểm tra regression: các AC khác của cùng PRD không bị ảnh hưởng
350
- - [ ] Confirm PASS trước khi close
351
-
352
- **Vòng đời bug report (đừng để `feedback/` phình mãi):**
353
- - [ ] `State` của `feedback/bug-reports/{BUG-ID}.md`: `🟢 Open` → `🟡 Fixed` (set bởi `/fix-bug {BUG-ID}`) → `🟢 Closed` (sau khi `/qc-run-test` re-verify pass).
354
- - [ ] Khi `Closed`: `/qc-run-test` clear `qc_owner`/`qc_blocked_by` của SC (tự động khi `qc_status=pass`); tuỳ chọn move file sang `feedback/bug-reports/archive/`.
355
- - [ ] `/sync` chỉ surface bug `State: Open` là "đang chờ" — Fixed/Closed không làm nhiễu PO/PM.
356
-
357
- **PO** *(nếu PRD được cập nhật)*:
358
- - [ ] PRD version mới đã được bump
359
- - [ ] Changelog có entry cho thay đổi
360
- - [ ] Notify dev và tester về version mới
361
-
362
- ---
363
-
364
- *Xem thêm:* [Sync & Update](sync-and-update.md) · [Guide · Tester](../02-guides/tester/README.md) · [chương QC Automation](../02-guides/tester/qc-automation.md).
@@ -1,154 +0,0 @@
1
- [📚 Docs](../README.md) › [Operations](README.md) › Publishing
2
-
3
- # Publishing — Publish lên npm
4
-
5
- > Hướng dẫn publish package `@educa-corp/sdd-framework` lên npm: setup lần đầu, publish version mới, kiểm tra sau publish, và transfer ownership.
6
-
7
- Package: `@educa-corp/sdd-framework`
8
- Registry: <https://www.npmjs.com/package/@educa-corp/sdd-framework>
9
-
10
- ---
11
-
12
- ## Mục lục
13
-
14
- 1. [Yêu cầu](#1-yêu-cầu)
15
- 2. [Setup lần đầu](#2-setup-lần-đầu)
16
- 3. [Publish version mới](#3-publish-version-mới)
17
- 4. [Kiểm tra sau khi publish](#4-kiểm-tra-sau-khi-publish)
18
- 5. [Transfer package sang account khác](#5-transfer-package-sang-account-khác)
19
-
20
- ---
21
-
22
- ## 1. Yêu cầu
23
-
24
- - Node.js đã cài (`node -v`)
25
- - Tài khoản npm: <https://www.npmjs.com> — account có quyền publish vào scope `@edupia-tutor`
26
-
27
- ---
28
-
29
- ## 2. Setup lần đầu
30
-
31
- ### 2.1 — Đăng nhập npm
32
-
33
- ```powershell
34
- npm login
35
- ```
36
-
37
- Trình duyệt sẽ mở trang xác thực npm. Đăng nhập bằng account có quyền publish vào scope `@edupia-tutor`, sau đó quay lại terminal. Kiểm tra:
38
-
39
- ```powershell
40
- npm whoami
41
- # output: <npm-username>
42
- ```
43
-
44
- ### 2.2 — Tạo Access Token (nếu cần dùng CI hoặc tránh 2FA mỗi lần)
45
-
46
- 1. Vào <https://www.npmjs.com> → Avatar → **Access Tokens**
47
- 2. **Generate New Token** → **Granular Access Token**
48
- 3. Điền:
49
- - Name: `publish-spec-driven-docs`
50
- - Expiration: 1 year
51
- - **Bypass 2FA**: **bật** (bắt buộc — nếu không, publish sẽ bị chặn với lỗi `403 ... Two-factor authentication ... is required`)
52
- - Packages and scopes: chọn `@educa-corp/sdd-framework` (hoặc cả scope `@edupia-tutor`) → **Read and write**
53
- 4. Copy token, lưu vào nơi an toàn
54
-
55
- > ⚠️ **KHÔNG** có flag `npm publish --token <token>` — npm sẽ hiểu `<token>` là tên package và báo lỗi `404 Not Found`. Token phải nạp qua npm config/`.npmrc` như dưới.
56
-
57
- Publish với token — nạp token vào config trước, rồi publish:
58
-
59
- ```powershell
60
- # Nạp token (ghi đè token đăng nhập hiện tại trong .npmrc)
61
- npm config set //registry.npmjs.org/:_authToken <your-token>
62
-
63
- npm publish --access public
64
-
65
- # (tùy chọn) gỡ token khỏi .npmrc sau khi xong — sẽ phải npm login lại lần sau
66
- npm config delete //registry.npmjs.org/:_authToken
67
- ```
68
-
69
- **Cách khác — dùng OTP (nếu account đã bật 2FA app, không cần token bypass):**
70
-
71
- ```powershell
72
- npm publish --access public --otp=<mã-6-số>
73
- ```
74
-
75
- ---
76
-
77
- ## 3. Publish version mới
78
-
79
- ### Bước 1 — Cập nhật nội dung commands (nếu có thay đổi)
80
-
81
- Sửa các file trong thư mục `commands/`.
82
-
83
- ### Bước 2 — Tăng version trong `package.json` (semver)
84
-
85
- | Loại thay đổi | Lệnh | Ví dụ |
86
- |---|---|---|
87
- | Fix nhỏ, sửa lỗi | `npm version patch` | 0.1.0 → 0.1.1 |
88
- | Thêm command mới | `npm version minor` | 0.1.0 → 0.2.0 |
89
- | Thay đổi lớn, breaking | `npm version major` | 0.1.0 → 1.0.0 |
90
-
91
- ```powershell
92
- # Ví dụ: thêm command mới
93
- npm version minor
94
- ```
95
-
96
- Lệnh này tự động cập nhật `version` trong `package.json` và tạo git commit + tag.
97
-
98
- ### Bước 3 — Publish
99
-
100
- ```powershell
101
- npm publish
102
- ```
103
-
104
- > Nếu gặp `403 ... Two-factor authentication ... is required`: thêm `--otp=<mã-6-số>`, hoặc dùng granular token có **Bypass 2FA** (xem mục **2.2 — Tạo Access Token**). Access `public` đã set sẵn trong `package.json` (`publishConfig`).
105
-
106
- ### Bước 4 — Push git (bao gồm tag vừa tạo)
107
-
108
- ```powershell
109
- git push && git push --tags
110
- ```
111
-
112
- ---
113
-
114
- ## 4. Kiểm tra sau khi publish
115
-
116
- ```powershell
117
- # Xem version mới trên npm
118
- npm view @educa-corp/sdd-framework version
119
-
120
- # Chạy thử
121
- npx @educa-corp/sdd-framework@latest
122
- ```
123
-
124
- ---
125
-
126
- ## 5. Transfer package sang account khác
127
-
128
- Khi cần chuyển quyền sở hữu package cho người khác (ví dụ: sang account `edupia-tutor`):
129
-
130
- ### Thêm maintainer
131
-
132
- ```powershell
133
- npm owner add <npm-username> @educa-corp/sdd-framework
134
- ```
135
-
136
- ### Transfer toàn bộ
137
-
138
- ```powershell
139
- npm access grant read-write <npm-username> @educa-corp/sdd-framework
140
- ```
141
-
142
- Hoặc làm thủ công trên website:
143
-
144
- 1. Vào <https://www.npmjs.com/package/@educa-corp/sdd-framework>
145
- 2. Tab **Settings** → **Maintainers** → thêm username mới
146
-
147
- > **Lưu ý:** Nếu muốn đổi tên package, cần publish lại với tên mới vì npm không cho đổi tên package đã publish. Sau đó deprecate package cũ:
148
- > ```powershell
149
- > npm deprecate @educa-corp/sdd-framework "Moved to <new-package-name>"
150
- > ```
151
-
152
- ---
153
-
154
- *Xem thêm:* [Sync & Update](sync-and-update.md) (`/update-framework` kéo version mới từ npm về project) · [Bug Flow](bug-flow.md).