spec-lite 1.0.1 → 1.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.
@@ -5,7 +5,7 @@ status: draft
5
5
  owner: "{BA}"
6
6
  feature_id: "{Feature ID từ PRD Feature Index}"
7
7
  referenced_by:
8
- - conventions.md > 3. Main Artifacts > 3.2 Feature level > frd.md > Cấu trúc
8
+ - conventions.md > 3. Main Artifacts > 3.3 Feature level > frd.md > Cấu trúc
9
9
  - skills/spec-new/SKILL.md > Process > Bước 5: Write — sinh draft > Cascade Proposals > frd.md
10
10
  ---
11
11
 
@@ -15,44 +15,59 @@ referenced_by:
15
15
 
16
16
  {Mô tả feature này giải quyết vấn đề gì cho user nào, trong 2-3 câu.}
17
17
 
18
+ ## Components Consumed
19
+
20
+ Các component mà feature này dùng — tham chiếu đến `specs/main/component/{C-XXX}-...`.
21
+
22
+ | Component | Vai trò trong feature |
23
+ | --- | --- |
24
+ | `{C-XXX}-{component-name}` | {component này phục vụ cái gì cho feature này} |
25
+
18
26
  ## Feature-level Acceptance Criteria
19
27
 
20
28
  Criteria áp dụng cho toàn bộ feature — không gắn với story cụ thể (ví dụ: performance, security, accessibility).
29
+ AC ID format: `AC-F{NNN}-{seq}` — đánh số tăng dần toàn feature (không reset giữa sections).
21
30
 
22
- - [ ] GIVEN {precondition}
23
- WHEN {action}
24
- THEN {expected outcome}
31
+ - `AC-{F_ID}-001`
32
+ - **Given** {precondition}
33
+ - **When** {action}
34
+ - **Then** {expected outcome}
25
35
 
26
36
  ## User Stories
27
37
 
28
- ### US-001: {Story title}
38
+ US ID format: `US-F{NNN}-{seq}` — đánh số tăng dần toàn feature.
39
+
40
+ ### US-{F_ID}-001: {Story title}
29
41
 
30
- As a {persona}, I want to {action} so that {value}.
42
+ **{Persona}** muốn **{hành động}** để **{mục tiêu}**.
31
43
 
32
44
  **Priority:** Must / Should / Could
33
45
 
34
46
  **Acceptance Criteria:**
35
47
 
36
- - [ ] GIVEN {precondition}
37
- WHEN {action}
38
- THEN {expected outcome}
39
- - [ ] GIVEN {precondition}
40
- WHEN {action}
41
- THEN {expected outcome}
48
+ - `AC-{F_ID}-{seq}`
49
+ - **Given** {precondition}
50
+ - **When** {action}
51
+ - **Then** {expected outcome}
52
+ - `AC-{F_ID}-{seq}`
53
+ - **Given** {precondition}
54
+ - **When** {action}
55
+ - **Then** {expected outcome}
42
56
 
43
57
  ---
44
58
 
45
- ### US-002: {Story title}
59
+ ### US-{F_ID}-002: {Story title}
46
60
 
47
- As a {persona}, I want to {action} so that {value}.
61
+ **{Persona}** muốn **{hành động}** để **{mục tiêu}**.
48
62
 
49
63
  **Priority:** Must / Should / Could
50
64
 
51
65
  **Acceptance Criteria:**
52
66
 
53
- - [ ] GIVEN {precondition}
54
- WHEN {action}
55
- THEN {expected outcome}
67
+ - `AC-{F_ID}-{seq}`
68
+ - **Given** {precondition}
69
+ - **When** {action}
70
+ - **Then** {expected outcome}
56
71
 
57
72
  ---
58
73
 
@@ -39,6 +39,14 @@ Tại sao cần giải quyết bây giờ.
39
39
  | --- | --- | --- | --- | --- |
40
40
  | F-001 | {tên feature} | {mô tả ngắn — feature làm gì, cho ai} | High/Medium/Low | TODO/DONE |
41
41
 
42
+ ## Components
43
+
44
+ Các thành phần kỹ thuật của hệ thống — chi tiết về vai trò và thiết kế nằm trong `specs/main/component/{C-XXX}-{component-name}/`.
45
+
46
+ | ID | Component | Mô tả ngắn | Status |
47
+ | --- | --- | --- | --- |
48
+ | C-001 | {tên component} | {1 câu — component này chịu trách nhiệm gì} | TODO/DONE |
49
+
42
50
  ## Non-Functional Requirements
43
51
 
44
52
  | ID | Category | Requirement | Target | Priority |
@@ -1,176 +0,0 @@
1
- ---
2
- name: spec-domain
3
- description: Điền hoặc cập nhật domain.md — Domain Knowledge (entities, business rules, terminology). Dùng sau khi prd.md đã có nội dung.
4
- ---
5
-
6
- # spec-domain
7
-
8
- ## Overview
9
-
10
- Tạo nội dung cho `specs/main/domain.md` thông qua interview có cấu trúc. Domain là ngôn ngữ chung của hệ thống — nó định nghĩa các khái niệm business, entities, business rules, và events mà toàn bộ team (cả business lẫn tech) dùng chung.
11
-
12
- Domain không chứa: implementation details, DB schema, framework-specific code, hay bất cứ thứ gì thuộc về `sad.md`, `fdd.md`.
13
-
14
- ## When to Use
15
-
16
- - `domain.md` chưa có hoặc còn rỗng, và `prd.md` đã có nội dung
17
- - Cần bổ sung entity hoặc business rule mới phát sinh từ một integration
18
- - Cascade proposals từ `spec.md` hoặc `tech.md` yêu cầu cập nhật domain
19
-
20
- ## When NOT to Use
21
-
22
- - `prd.md` chưa có nội dung → chạy `/spec-prd` trước
23
- - Đang muốn thiết kế kiến trúc kỹ thuật → dùng `/spec-sad`
24
- - Đang muốn định nghĩa feature-level requirements → dùng `/spec-frd`
25
-
26
- ---
27
-
28
- ## Process
29
-
30
- ### Bước 1: Kiểm tra preconditions
31
-
32
- **Đọc `specs/main/prd.md`:**
33
-
34
- - **Chưa tồn tại hoặc là template** → dừng ngay:
35
- > `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước để có PRD trước khi định nghĩa domain.
36
-
37
- - **Đã có nội dung** → đọc để lấy context: scope, problem statement, target users. Dùng làm nền để hỏi về entities.
38
-
39
- **Đọc `specs/main/domain.md`:**
40
-
41
- - **Chưa tồn tại** → tạo thư mục `specs/main/` nếu chưa có, tiến hành Bước 2 (full interview).
42
-
43
- - **Đã có nội dung thực** → quét toàn bộ sections, hiển thị trạng thái từng section, rồi hỏi user muốn làm gì.
44
-
45
- **Các sections cần quét** (theo thứ tự):
46
-
47
- | # | Section | Có nội dung thực? |
48
- | --- | --- | --- |
49
- | 1 | Terminology | ✓ đã có / ✗ trống/thiếu |
50
- | 2 | Entities | ✓ đã có / ✗ trống/thiếu |
51
- | 3 | Business Rules | ✓ đã có / ✗ trống/thiếu |
52
- | 4 | Domain Events | ✓ đã có / ✗ trống/thiếu |
53
-
54
- Một section được coi là **trống/thiếu** nếu: không tồn tại trong file, hoặc chỉ chứa placeholder template (dấu `{}`), hoặc không có dòng nội dung thực. Ngoài các sections trên, **ghi nhận các sections thừa** — những `##` heading có trong file nhưng không có trong template.
55
-
56
- Sau khi quét, liệt kê tất cả sections **theo đúng thứ tự xuất hiện trong file**, đánh số liên tục:
57
-
58
- ```
59
- domain.md hiện tại:
60
- [1] Terminology ✓ đã có
61
- [2] Entities ✓ đã có
62
- [3] Business Rules ✗ chưa có — cần bổ sung
63
- [4] Risks ⚠ không có trong template
64
- [5] Domain Events ✓ đã có
65
- [A] Interview tất cả sections
66
-
67
- Chọn số hoặc A:
68
- ```
69
-
70
- - User chọn số section thuộc template → interview section đó rồi merge vào file.
71
- - User chọn số section thừa (⚠) → xoá section đó khỏi file ngay, không hỏi thêm.
72
- - User chọn A → interview tuần tự tất cả sections thuộc template (sections thừa không bị đụng tới).
73
-
74
- ---
75
-
76
- ### Bước 2: Gather — interview có cấu trúc
77
-
78
- Trước khi hỏi, tóm tắt ngắn context đọc được từ `prd.md` (nếu có) và surface assumptions:
79
-
80
- ```
81
- TỪ PRD TÔI HIỂU:
82
- - Hệ thống giải quyết: {problem statement ngắn gọn}
83
- - Các khái niệm tôi thấy xuất hiện: {list terms từ prd}
84
-
85
- ASSUMPTIONS TÔI ĐANG ĐẶT RA:
86
- 1. {assumption 1}
87
- 2. {assumption 2}
88
- → Sửa lại nếu sai trước khi tiếp tục.
89
- ```
90
-
91
- Sau đó hỏi tuần tự từng phần — không hỏi tất cả cùng lúc:
92
-
93
- **Phần 1 — Terminology:**
94
- > Có thuật ngữ nghiệp vụ nào đặc thù cần định nghĩa rõ không? (Ví dụ: "đơn hàng" trong hệ thống này nghĩa là gì chính xác?)
95
- > Liệt kê những term hay bị dùng sai hoặc có nhiều cách hiểu.
96
-
97
- **Phần 2 — Entities:**
98
- > Hệ thống làm việc với những "đối tượng" nghiệp vụ nào? (Ví dụ: User, Order, Product...)
99
- > Với mỗi entity: nó đại diện cho cái gì trong business? Attributes nào quan trọng? Có lifecycle (state machine) không?
100
-
101
- Với mỗi entity được đề cập, hỏi tiếp:
102
- > Entity này có trạng thái (state) thay đổi theo thời gian không? Nếu có, các trạng thái đó là gì và khi nào chuyển đổi?
103
-
104
- **Phần 3 — Business Rules:**
105
- > Có quy tắc nghiệp vụ nào bất biến không? (Ví dụ: "Không thể hủy đơn hàng đã giao", "User chưa verify không được thanh toán")
106
- > Ghi theo format: rule — khi nào apply — ngoại lệ nếu có.
107
-
108
- **Phần 4 — Domain Events:** *(hỏi nếu hệ thống có event-driven behavior)*
109
- > Có sự kiện nghiệp vụ nào quan trọng cần track không? (Ví dụ: OrderPlaced, PaymentFailed...)
110
- > Khi nào xảy ra? Data gì đi kèm?
111
-
112
- Nếu câu trả lời vague → hỏi lại. Ví dụ:
113
- - "có nhiều loại user" → "liệt kê cụ thể từng loại và điểm khác nhau giữa chúng là gì?"
114
- - "đơn hàng có nhiều trạng thái" → "liệt kê hết các trạng thái và vẽ luồng chuyển đổi"
115
-
116
- ---
117
-
118
- ### Bước 3: Write — sinh draft
119
-
120
- Dùng `.claude/templates/main/domain-template.md` làm skeleton, điền nội dung từ interview vào từng section.
121
-
122
- Hiển thị draft cho user xem — **chưa ghi file**.
123
-
124
- ---
125
-
126
- ### Bước 4: Review — xác nhận với user
127
-
128
- Trình bày draft và hỏi:
129
- > Draft Domain trên đã đúng chưa? Có entity nào thiếu, business rule nào sai không?
130
-
131
- Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → cập nhật draft → hỏi lại.
132
-
133
- ---
134
-
135
- ### Bước 5: Save
136
-
137
- Ghi nội dung đã được confirm vào `specs/main/domain.md`.
138
-
139
- Thông báo kết quả:
140
- ```
141
- ✓ specs/main/domain.md đã được cập nhật (status: draft)
142
-
143
- Bước tiếp theo:
144
- - /spec-sad → thiết kế kiến trúc kỹ thuật (dùng prd.md + domain.md làm context)
145
- - (sau sad) /spec-frd {feature-name} → định nghĩa requirements của từng feature
146
- ```
147
-
148
- ---
149
-
150
- ## Common Rationalizations
151
-
152
- | Rationalization | Reality |
153
- | --- | --- |
154
- | "Entities thì ai cũng biết rồi, không cần ghi" | Entity chưa được viết ra là entity chưa được đồng thuận. Dev và BA có thể hiểu khác nhau. |
155
- | "Business rules thì ghi trong code thôi" | Business rules trong code không ai đọc được ngoài dev. Domain là ngôn ngữ chung cho cả team. |
156
- | "State machine phức tạp, thêm sau" | State machine ảnh hưởng trực tiếp đến data model và API design. Thiếu nó là thiếu constraint quan trọng. |
157
- | "Terminology thì khỏi cần, ai cũng hiểu" | "Order" trong hệ thống bán lẻ khác "Order" trong hệ thống sản xuất. Định nghĩa rõ tránh miscommunication. |
158
-
159
- ## Red Flags
160
-
161
- - Entity chỉ có tên, không có attributes hay mô tả
162
- - Business rules ghi dưới dạng technical ("validate bằng regex") thay vì business ("số điện thoại phải là số Việt Nam")
163
- - Terminology section trống trong khi domain có nhiều thuật ngữ đặc thù
164
- - Attributes dùng DB type (`VARCHAR`, `INT`) thay vì business type (`text`, `number`)
165
-
166
- ## Verification
167
-
168
- Trước khi kết thúc, kiểm tra:
169
-
170
- - [ ] Frontmatter đầy đủ và đúng schema
171
- - [ ] Mỗi term trong Terminology có definition rõ ràng, không mơ hồ
172
- - [ ] Mỗi entity có mô tả business context (không chỉ là tên)
173
- - [ ] Attributes dùng business type, không phải DB type
174
- - [ ] State machine chỉ có ở entity có lifecycle thực sự
175
- - [ ] Business rules có ID (`DOM-R01`...), condition, và exception rõ ràng
176
- - [ ] User đã confirm trước khi file được ghi