@edupia-tutor/spec-driven-docs 0.14.0 → 0.14.2

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 (162) hide show
  1. package/bin/index.js +12 -1
  2. package/commands/debug.md +436 -436
  3. package/commands/debug.tmpl +111 -111
  4. package/commands/define-product.md +350 -345
  5. package/commands/define-product.tmpl +69 -64
  6. package/commands/dev-gen-test.md +365 -365
  7. package/commands/dev-gen-test.tmpl +63 -63
  8. package/commands/dev-run-test.md +376 -376
  9. package/commands/dev-run-test.tmpl +74 -74
  10. package/commands/dev-smoke-test.md +341 -341
  11. package/commands/dev-smoke-test.tmpl +60 -60
  12. package/commands/fix-bug.md +403 -403
  13. package/commands/fix-bug.tmpl +78 -78
  14. package/commands/generate-bdd.md +513 -513
  15. package/commands/generate-bdd.tmpl +211 -211
  16. package/commands/generate-code.md +481 -483
  17. package/commands/generate-code.tmpl +179 -181
  18. package/commands/generate-design-spec.md +497 -497
  19. package/commands/generate-design-spec.tmpl +220 -220
  20. package/commands/generate-prd.md +452 -400
  21. package/commands/generate-prd.tmpl +50 -200
  22. package/commands/generate-spec-manifest.md +340 -340
  23. package/commands/generate-spec-manifest.tmpl +59 -59
  24. package/commands/generate-tech-docs.md +365 -365
  25. package/commands/generate-tech-docs.tmpl +84 -84
  26. package/commands/learn.md +347 -347
  27. package/commands/learn.tmpl +22 -22
  28. package/commands/map-testids.md +322 -322
  29. package/commands/map-testids.tmpl +41 -41
  30. package/commands/propose-scenario.md +335 -335
  31. package/commands/propose-scenario.tmpl +54 -54
  32. package/commands/qc-analyze.md +323 -324
  33. package/commands/qc-analyze.tmpl +42 -43
  34. package/commands/qc-design-test.md +304 -304
  35. package/commands/qc-design-test.tmpl +23 -23
  36. package/commands/qc-plan.md +297 -297
  37. package/commands/qc-plan.tmpl +16 -16
  38. package/commands/qc-report.md +302 -302
  39. package/commands/qc-report.tmpl +21 -21
  40. package/commands/qc-review.md +298 -298
  41. package/commands/qc-review.tmpl +17 -17
  42. package/commands/qc-run-test.md +337 -337
  43. package/commands/qc-run-test.tmpl +35 -35
  44. package/commands/refine-prd.md +428 -430
  45. package/commands/refine-prd.tmpl +62 -62
  46. package/commands/report-bug.md +351 -351
  47. package/commands/report-bug.tmpl +70 -70
  48. package/commands/review-code.md +364 -364
  49. package/commands/review-code.tmpl +39 -39
  50. package/commands/review-context.md +578 -580
  51. package/commands/review-context.tmpl +212 -212
  52. package/commands/review-tech-docs.md +427 -427
  53. package/commands/review-tech-docs.tmpl +146 -146
  54. package/commands/setup-ai-first.md +239 -239
  55. package/commands/setup-ai-first.tmpl +133 -133
  56. package/commands/sync.md +145 -145
  57. package/commands/sync.tmpl +93 -93
  58. package/commands/update-framework.md +88 -88
  59. package/commands/update-framework.tmpl +36 -36
  60. package/commands/validate-traces.md +381 -381
  61. package/commands/validate-traces.tmpl +100 -100
  62. package/core/FRAMEWORK_VERSION +1 -1
  63. package/core/commands/debug.md +436 -436
  64. package/core/commands/define-product.md +350 -345
  65. package/core/commands/dev-gen-test.md +365 -365
  66. package/core/commands/dev-run-test.md +376 -376
  67. package/core/commands/dev-smoke-test.md +341 -341
  68. package/core/commands/fix-bug.md +403 -403
  69. package/core/commands/generate-bdd.md +513 -513
  70. package/core/commands/generate-code.md +481 -483
  71. package/core/commands/generate-design-spec.md +497 -497
  72. package/core/commands/generate-prd.md +452 -400
  73. package/core/commands/generate-spec-manifest.md +340 -340
  74. package/core/commands/generate-tech-docs.md +365 -365
  75. package/core/commands/learn.md +347 -347
  76. package/core/commands/map-testids.md +322 -322
  77. package/core/commands/propose-scenario.md +335 -335
  78. package/core/commands/qc-analyze.md +323 -324
  79. package/core/commands/qc-design-test.md +304 -304
  80. package/core/commands/qc-plan.md +297 -297
  81. package/core/commands/qc-report.md +302 -302
  82. package/core/commands/qc-review.md +298 -298
  83. package/core/commands/qc-run-test.md +337 -337
  84. package/core/commands/refine-prd.md +428 -430
  85. package/core/commands/report-bug.md +351 -351
  86. package/core/commands/review-code.md +364 -364
  87. package/core/commands/review-context.md +578 -580
  88. package/core/commands/review-tech-docs.md +427 -427
  89. package/core/commands/setup-ai-first.md +239 -239
  90. package/core/commands/sync.md +145 -145
  91. package/core/commands/update-framework.md +88 -88
  92. package/core/commands/validate-traces.md +381 -381
  93. package/core/skills/code/SKILL.md +389 -389
  94. package/core/skills/debug/SKILL.md +391 -391
  95. package/core/skills/design-spec/SKILL.md +318 -318
  96. package/core/skills/discovery/SKILL.md +7 -547
  97. package/core/skills/prd/SKILL.md +298 -394
  98. package/core/skills/setup-ai-first/SKILL.md +80 -80
  99. package/core/skills/spec/SKILL.md +178 -178
  100. package/core/skills/test/SKILL.md +604 -604
  101. package/core/steps/capture-lesson.md +44 -44
  102. package/core/steps/context-loader.md +175 -175
  103. package/core/steps/gate.md +54 -54
  104. package/core/steps/report-footer.md +52 -52
  105. package/core/steps/review-fanout.md +85 -87
  106. package/core/steps/spawn-agent.md +45 -45
  107. package/core/steps/trace-mirror.md +21 -21
  108. package/core/templates/architecture.template.md +37 -37
  109. package/core/templates/design-spec.template.md +77 -77
  110. package/core/templates/platform-guide.template.md +47 -47
  111. package/core/templates/prd.template.md +107 -232
  112. package/core/templates/product-definition.template.md +101 -88
  113. package/core/templates/project-context.yaml +2 -2
  114. package/docs/01-getting-started/core-concepts.md +1 -1
  115. package/docs/01-getting-started/quickstart.md +7 -7
  116. package/docs/02-guides/developer/bdd-and-trace.md +1 -1
  117. package/docs/02-guides/developer/scenarios.md +5 -5
  118. package/docs/02-guides/product-owner/handoff-checklist.md +1 -1
  119. package/docs/02-guides/product-owner/scenarios.md +23 -23
  120. package/docs/02-guides/tester/bug-reporting.md +2 -2
  121. package/docs/02-guides/tester/reading-specs.md +2 -2
  122. package/docs/02-guides/tester/scenarios.md +1 -1
  123. package/docs/02-guides/tester/spec-manifest.md +3 -3
  124. package/docs/02-guides/tester/workflow.md +1 -1
  125. package/docs/03-concepts/architecture.md +3 -3
  126. package/docs/03-concepts/pipeline.md +3 -3
  127. package/docs/04-operations/publishing.md +20 -3
  128. package/docs/04-operations/sync-and-update.md +5 -5
  129. package/docs/05-reference/command-cheatsheet.md +2 -2
  130. package/docs/05-reference/commands.md +8 -8
  131. package/package.json +1 -1
  132. package/scripts/migrate-specs.js +5 -3
  133. package/scripts/rename-prd-files.js +174 -0
  134. package/skills/code/SKILL.md +389 -389
  135. package/skills/code/SKILL.tmpl +56 -56
  136. package/skills/debug/SKILL.md +391 -391
  137. package/skills/debug/SKILL.tmpl +60 -60
  138. package/skills/design-spec/SKILL.md +318 -318
  139. package/skills/design-spec/SKILL.tmpl +37 -37
  140. package/skills/discovery/SKILL.md +7 -547
  141. package/skills/discovery/SKILL.tmpl +7 -140
  142. package/skills/prd/SKILL.md +298 -394
  143. package/skills/prd/SKILL.tmpl +40 -151
  144. package/skills/setup-ai-first/SKILL.md +80 -80
  145. package/skills/setup-ai-first/SKILL.tmpl +28 -28
  146. package/skills/spec/SKILL.md +178 -178
  147. package/skills/spec/SKILL.tmpl +20 -20
  148. package/skills/test/SKILL.md +604 -604
  149. package/skills/test/SKILL.tmpl +44 -44
  150. package/steps/capture-lesson.md +44 -44
  151. package/steps/context-loader.md +175 -175
  152. package/steps/gate.md +54 -54
  153. package/steps/report-footer.md +52 -52
  154. package/steps/review-fanout.md +85 -87
  155. package/steps/spawn-agent.md +45 -45
  156. package/steps/trace-mirror.md +21 -21
  157. package/templates/architecture.template.md +37 -37
  158. package/templates/design-spec.template.md +77 -77
  159. package/templates/platform-guide.template.md +47 -47
  160. package/templates/prd.template.md +107 -232
  161. package/templates/product-definition.template.md +101 -88
  162. package/templates/project-context.yaml +2 -2
@@ -1,33 +1,33 @@
1
1
  # Platform Guide — {{SERVICE_NAME}}
2
2
 
3
- > This guide provides context that Claude uses when working in THIS service/repository.
4
- > Keep it concise and factual. Update when the architecture or domain model changes.
5
- > Reference: CLAUDE.md for project-wide standards. This file covers service-specific context.
3
+ > Guide này cung cấp context Claude dùng khi làm việc trong service/repository NÀY.
4
+ > Giữ ngắn gọn đúng sự thật. Cập nhật khi kiến trúc hoặc domain model thay đổi.
5
+ > Tham chiếu: CLAUDE.md cho chuẩn toàn dự án. File này phủ context riêng của service.
6
6
 
7
7
  ---
8
8
 
9
9
  # §1. Service Overview
10
10
 
11
- **Service name**: {{SERVICE_NAME}}
12
- **Purpose**: {{ONE_SENTENCE_PURPOSE}}
13
- **Bounded context**: {{BOUNDED_CONTEXT}} # e.g., "Owns all order lifecycle logic. Does NOT own payments or inventory."
11
+ **Tên service**: {{SERVICE_NAME}}
12
+ **Mục đích**: {{ONE_SENTENCE_PURPOSE}}
13
+ **Bounded context**: {{BOUNDED_CONTEXT}} # vd: "Sở hữu toàn bộ logic vòng đời order. KHÔNG sở hữu payment hay inventory."
14
14
  **Team**: {{TEAM_NAME}}
15
15
  **Repository**: {{REPO_URL}}
16
16
 
17
- Primary responsibilities:
17
+ Trách nhiệm chính:
18
18
  - {{RESPONSIBILITY_1}}
19
19
  - {{RESPONSIBILITY_2}}
20
20
  - {{RESPONSIBILITY_3}}
21
21
 
22
- This service does NOT handle:
23
- - {{OUT_OF_SCOPE_1}} # e.g., "Payment processingsee payment-service"
22
+ Service này KHÔNG xử lý:
23
+ - {{OUT_OF_SCOPE_1}} # vd: "Xử payment xem payment-service"
24
24
  - {{OUT_OF_SCOPE_2}}
25
25
 
26
26
  ---
27
27
 
28
28
  # §2. Domain Model
29
29
 
30
- Key entities and their relationships:
30
+ Các entity chính quan hệ của chúng:
31
31
 
32
32
  ```
33
33
  {{ENTITY_1}} (aggregate root)
@@ -39,31 +39,31 @@ Key entities and their relationships:
39
39
  ```
40
40
 
41
41
  **{{ENTITY_1}}**:
42
- - Key fields: {{KEY_FIELDS}}
43
- - Status lifecycle: {{STATUS_1}} → {{STATUS_2}} → {{STATUS_3}}
44
- - Business rules: {{KEY_RULE_1}}
42
+ - Field chính: {{KEY_FIELDS}}
43
+ - Vòng đời status: {{STATUS_1}} → {{STATUS_2}} → {{STATUS_3}}
44
+ - Business rule: {{KEY_RULE_1}}
45
45
 
46
46
  **{{ENTITY_2}}**:
47
- - Key fields: {{KEY_FIELDS}}
48
- - Relationships: {{RELATIONSHIP_DESCRIPTION}}
47
+ - Field chính: {{KEY_FIELDS}}
48
+ - Quan hệ: {{RELATIONSHIP_DESCRIPTION}}
49
49
 
50
50
  ---
51
51
 
52
52
  # §3. Common Patterns
53
53
 
54
- Patterns specific to this service (supplement the project-wide standards in CLAUDE.md):
54
+ Các pattern riêng của service này (bổ sung cho chuẩn toàn dự án trong CLAUDE.md):
55
55
 
56
56
  ## {{PATTERN_NAME_1}}
57
57
  ```
58
- // When to use: {{USE_CASE}}
59
- // Example:
58
+ // Khi nào dùng: {{USE_CASE}}
59
+ // Ví dụ:
60
60
  {{CODE_EXAMPLE}}
61
61
  ```
62
62
 
63
63
  ## {{PATTERN_NAME_2}}
64
64
  ```
65
- // When to use: {{USE_CASE}}
66
- // Example:
65
+ // Khi nào dùng: {{USE_CASE}}
66
+ // Ví dụ:
67
67
  {{CODE_EXAMPLE}}
68
68
  ```
69
69
 
@@ -71,30 +71,30 @@ Patterns specific to this service (supplement the project-wide standards in CLAU
71
71
 
72
72
  # §4. Integration Points
73
73
 
74
- ## Upstream Dependencies (this service calls these)
74
+ ## Upstream Dependencies (service này gọi các bên dưới)
75
75
 
76
- | Service / System | What we call | Protocol | Auth |
76
+ | Service / System | Cái ta gọi | Protocol | Auth |
77
77
  |------------------|--------------|----------|------|
78
78
  | {{UPSTREAM_1}} | {{WHAT}} | REST/gRPC/Event | {{AUTH_METHOD}} |
79
79
  | {{UPSTREAM_2}} | {{WHAT}} | REST/gRPC/Event | {{AUTH_METHOD}} |
80
80
 
81
- ## Downstream Consumers (these services call us or consume our events)
81
+ ## Downstream Consumers (các bên dưới gọi ta hoặc tiêu thụ event của ta)
82
82
 
83
- | Consumer | What they use | Protocol |
83
+ | Consumer | Cái họ dùng | Protocol |
84
84
  |----------|---------------|----------|
85
85
  | {{DOWNSTREAM_1}} | {{WHAT}} | REST/Event |
86
86
  | {{DOWNSTREAM_2}} | {{WHAT}} | REST/Event |
87
87
 
88
- ## Events Produced
88
+ ## Event phát ra (Produced)
89
89
 
90
- | Event name | Trigger | Payload summary |
90
+ | Tên event | Trigger | Tóm tắt payload |
91
91
  |------------|---------|-----------------|
92
92
  | {{EVENT_1}} | {{WHEN}} | {{PAYLOAD_FIELDS}} |
93
93
  | {{EVENT_2}} | {{WHEN}} | {{PAYLOAD_FIELDS}} |
94
94
 
95
- ## Events Consumed
95
+ ## Event tiêu thụ (Consumed)
96
96
 
97
- | Event name | From service | What we do with it |
97
+ | Tên event | Từ service | Ta làm với |
98
98
  |------------|-------------|-------------------|
99
99
  | {{EVENT_1}} | {{SOURCE}} | {{HANDLER_ACTION}} |
100
100
 
@@ -102,20 +102,20 @@ Patterns specific to this service (supplement the project-wide standards in CLAU
102
102
 
103
103
  # §5. Known Constraints
104
104
 
105
- ## Performance Constraints
106
- - {{PERF_CONSTRAINT_1}} # e.g., "Order list endpoint must respond < 200ms for up to 1000 orders"
105
+ ## Ràng buộc hiệu năng (Performance)
106
+ - {{PERF_CONSTRAINT_1}} # vd: "Endpoint danh sách order phải phản hồi < 200ms cho tới 1000 order"
107
107
  - {{PERF_CONSTRAINT_2}}
108
108
 
109
- ## Business Rule Constraints
110
- - {{BUSINESS_CONSTRAINT_1}} # e.g., "Cannot cancel an order after it has been shipped"
109
+ ## Ràng buộc business rule
110
+ - {{BUSINESS_CONSTRAINT_1}} # vd: "Không thể huỷ order sau khi đã ship"
111
111
  - {{BUSINESS_CONSTRAINT_2}}
112
112
 
113
- ## External Dependencies
114
- - {{EXTERNAL_DEP_1}} # e.g., "Requires inventory-service to be available for order creation"
113
+ ## Phụ thuộc bên ngoài (External)
114
+ - {{EXTERNAL_DEP_1}} # vd: "Cần inventory-service sẵn sàng để tạo order"
115
115
  - {{EXTERNAL_DEP_2}}
116
116
 
117
- ## Known Technical Debt
118
- - {{TECH_DEBT_1}} # e.g., "OrderItem.price is duplicated from catalog — sync via nightly job"
117
+ ## Technical Debt đã biết
118
+ - {{TECH_DEBT_1}} # vd: "OrderItem.price bị nhân bản từ catalog — đồng bộ qua job hằng đêm"
119
119
 
120
120
  ---
121
121
 
@@ -123,23 +123,23 @@ Patterns specific to this service (supplement the project-wide standards in CLAU
123
123
 
124
124
  ```
125
125
  {{SERVICE_ROOT}}/
126
- ├── {{SOURCE_DIR}}/ # Main source code
127
- │ ├── {{LAYER_1}}/ # e.g., controller/ or handler/
126
+ ├── {{SOURCE_DIR}}/ # Code nguồn chính
127
+ │ ├── {{LAYER_1}}/ # vd: controller/ hoặc handler/
128
128
  │ │ └── {{EXAMPLE_FILE}}
129
- │ ├── {{LAYER_2}}/ # e.g., service/ or usecase/
129
+ │ ├── {{LAYER_2}}/ # vd: service/ hoặc usecase/
130
130
  │ │ └── {{EXAMPLE_FILE}}
131
- │ ├── {{LAYER_3}}/ # e.g., repository/ or repo/
131
+ │ ├── {{LAYER_3}}/ # vd: repository/ hoặc repo/
132
132
  │ │ └── {{EXAMPLE_FILE}}
133
- │ └── {{LAYER_4}}/ # e.g., model/ or domain/
133
+ │ └── {{LAYER_4}}/ # vd: model/ hoặc domain/
134
134
  │ └── {{EXAMPLE_FILE}}
135
- ├── {{TEST_DIR}}/ # Tests mirroring src structure
136
- ├── specs/ # BDD feature files
135
+ ├── {{TEST_DIR}}/ # Test phản chiếu cấu trúc src
136
+ ├── specs/ # File BDD feature
137
137
  │ └── bdd/
138
138
  │ └── {{DOMAIN}}/
139
139
  │ └── {{UC-ID}}-{{slug}}.feature
140
- └── {{CONFIG_FILE}} # e.g., application.yaml / appsettings.json
140
+ └── {{CONFIG_FILE}} # vd: application.yaml / appsettings.json
141
141
  ```
142
142
 
143
- **Key conventions for this repo:**
144
- - {{CONVENTION_1}} # e.g., "All DTOs are in the api/ package, not mixed with domain models"
145
- - {{CONVENTION_2}} # e.g., "Integration tests are in src/test/java/.../integration/ with @Tag(\"integration\")"
143
+ **Convention chính của repo này:**
144
+ - {{CONVENTION_1}} # vd: "Mọi DTO nằm trong package api/, không trộn với domain model"
145
+ - {{CONVENTION_2}} # vd: "Integration test nằm src/test/java/.../integration/ với @Tag(\"integration\")"
@@ -1,90 +1,60 @@
1
- # {TICKET-ID} Tên tính năng/Feature Name
1
+ # {TICKET}-{N} {Feature Name}
2
2
 
3
3
  <!--
4
4
  Template này được sử dụng bởi workflow /generate-prd.
5
5
  AI Agent sẽ điền các section dựa trên input từ PO.
6
6
  Các placeholder {…} cần được thay thế bằng nội dung thực tế.
7
7
 
8
- ╔══════════════════════════════════════════════════════════════════════╗
9
- ║ TERMINOLOGY RULES Business Dictionary Enforcement ║
10
- ║ Source: specs/domain-knowledge/business-dictionary.md ║
11
- ║ AI Agent PHẢI tuân thủ 100% khi sinh nội dung PRD. ║
12
- ╚══════════════════════════════════════════════════════════════════════╝
13
-
14
- THUẬT NGỮ BẮT BUỘC (phải dùng đúng keyword):
15
- ┌─────────────────────────┬──────────────────────────────────────────┐
16
- │ Keyword chuẩn │ Ngữ cảnh │
17
- ├─────────────────────────┼──────────────────────────────────────────┤
18
- Consumer │ Khách hàng (global entity)
19
- Merchant / Tenant │ Merchant = nghiệp vụ, Tenant = kỹ thuật│
20
- Online Storefront │ Tính năng bán hàng trên Zalo Mini App │
21
- │ Branch │ Chi nhánh vật lý (projection từ KVS) │
22
- │ Loyalty Member │ Quan hệ Consumer ↔ Merchant │
23
- │ Order │ Đơn hàng (chỉ completed → Loyalty) │
24
- │ OrderItem │ Chi tiết dòng hàng trong Order │
25
- │ Product │ Hàng hóa (projection từ KVS) │
26
- │ ProductCategory │ Nhóm hàng (hierarchical) │
27
- │ ProductAttribute │ Định nghĩa loại thuộc tính │
28
- │ ProductAttributeMap │ Mapping thuộc tính → sản phẩm cụ thể │
29
- │ ProductImage │ Hình ảnh sản phẩm (nhiều ảnh, có rank) │
30
- │ Address │ Địa chỉ đa hình (polymorphic) │
31
- │ SourceSystem │ Hệ thống partner (map → X-App-Id) │
32
- │ ExternalId │ ID tham chiếu từ hệ thống nguồn (KVS) │
33
- │ Onboarding │ Quy trình khởi tạo gian hàng lần đầu │
34
- │ revision │ Row version — delta sync │
35
- │ KVLoyalty Widget │ Thư viện tích hợp frontend (JS qua CDN) │
36
- └─────────────────────────┴──────────────────────────────────────────┘
37
-
38
- THUẬT NGỮ BỊ CẤM — TUYỆT ĐỐI KHÔNG xuất hiện trong PRD:
39
- ┌─────────────────────────┬─────────────────────────────────────────────────┐
40
- │ ❌ KHÔNG dùng │ ✅ Thay thế bằng │
41
- ├─────────────────────────┼─────────────────────────────────────────────────┤
42
- │ Customer │ Consumer │
43
- │ SKU │ Product + ProductAttribute + ProductAttributeMap│
44
- │ JS SDK / JavaScript SDK │ KVLoyalty Widget │
45
- │ CDC │ Event bus (Kafka) │
46
- │ primaryBranchId │ Branch.isPrimary │
47
- │ Cửa hàng (= storefront)│ Online Storefront / Gian hàng online │
48
- └─────────────────────────┴─────────────────────────────────────────────────┘
49
-
50
- QUY TẮC BỔ SUNG:
51
- - Luôn dùng SourceSystem cho partners, ExternalId cho external references.
52
- - Status/Enum values → tham chiếu core-entities.md Global Enum Registry.
53
- - Khi nhắc "SKU" → diễn giải bằng Product con (masterProductId) + ProductAttributeMap.
54
- - Consumer là global entity — 1 Consumer có thể mua hàng ở nhiều Merchant.
55
- - Nếu phát hiện banned term trong input PO → thay thế bằng term chuẩn và ghi chú trong "Giả định AI".
56
- - CROSS-REFERENCE (BẮT BUỘC): Bất kỳ chỗ nào trong tài liệu có nhắc đến một tính năng/ticket khác
57
- (dù là pre-condition, business rule, giả định, AC, hay bất kỳ section nào) → PHẢI gắn inline link:
58
- [TICKET-ID](./TICKET-ID-slug.md)
59
- Không được để TICKET-ID dạng plain text nếu tồn tại file PRD tương ứng.
8
+ FORMAT CHUẨN: Business Rule = bảng 3 cột
9
+ ID | Business Rule | Business Logic (KHÔNG tách Business Logic ra khối riêng).
10
+
11
+ TERMINOLOGY:
12
+ - Tuân thủ 100% từ điển project: specs/domain-knowledge/business-dictionary.md
13
+ (KHÔNG dùng từ điển của project khác). Thay banned term bằng canonical term;
14
+ nếu phát hiện banned term trong input PO → thay + ghi chú trong "Giả định AI".
15
+ - Status/Enum values → tham chiếu core-entities.md (Enum Registry).
16
+
17
+ CROSS-REFERENCE (BẮT BUỘC): Bất kỳ chỗ nào nhắc đến một tính năng/ticket khác
18
+ (pre-condition, business rule, giả định, AC, hay bất kỳ section nào) → PHẢI gắn inline link:
19
+ [TICKET-ID khác](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md)
20
+ Không để TICKET-ID dạng plain text nếu tồn tại file PRD tương ứng. (Mỗi PRD nằm trong feature-package riêng nên link trỏ sang folder anh em `../{prd-slug-khác}/`.)
60
21
  Ngoài ra, ghi rõ quan hệ phụ thuộc trong "Tài liệu tham khảo" ở Appendix.
61
- - NEW TERM DETECTION: Nếu trong input PO xuất hiện thuật ngữ CHƯA CÓ trong business-dictionary.md
62
- thuật ngữ đó lặp lại 2 lần DỪNG lại, hỏi PO confirm trước khi tiếp tục:
63
- + Thuật ngữ đó nghĩa trong ngữ cảnh hệ thống?
22
+
23
+ NEW TERM DETECTION: Nếu input PO xuất hiện thuật ngữ CHƯA trong business-dictionary.md
24
+ lặp lại 2 lần DỪNG lại, hỏi PO confirm trước khi tiếp tục:
25
+ + Thuật ngữ đó nghĩa gì trong ngữ cảnh hệ thống?
64
26
  + English term chuẩn nên dùng là gì?
65
27
  + Có cần bổ sung vào business-dictionary.md không?
66
- Sau khi PO confirm → cập nhật business-dictionary.md (nếu PO đồng ý) rồi mới tiếp tục sinh PRD.
28
+ Sau khi PO confirm → cập nhật business-dictionary.md (nếu PO đồng ý) rồi mới tiếp tục.
29
+
30
+ NUMBERING:
31
+ - UC ID: {TICKET}-{N}-UC{n} (n bắt đầu từ 1, tăng theo từng use case)
32
+ - BR ID: {TICKET}-{N}-UC{n}-BR{m} (m tăng LIÊN TỤC xuyên suốt PRD, KHÔNG reset mỗi UC)
67
33
  -->
68
34
 
69
35
  ---
70
36
 
71
37
  ## Metadata
72
38
 
73
- | Field | Value |
74
- |---------------|---------------------------------|
75
- | **PRD ID** | {TICKET-ID} |
76
- | **Version** | 1.0 |
77
- | **Status** | draft / review / approved |
78
- | **Author** | {PO name or "AI-assisted"} |
79
- | **Domain** | {domain: loyalty, identity, …} |
80
- | **Created** | {YYYY-MM-DD} |
81
- | **Updated** | {YYYY-MM-DD} |
39
+ | Field | Value |
40
+ |---------------|------------------------------------------|
41
+ | **PRD ID** | {TICKET}-{N} |
42
+ | **Version** | 1.0 |
43
+ | **Status** | draft |
44
+ | **Author** | AI-assisted |
45
+ | **Domain** | {domain} |
46
+ | **Created** | {date} |
47
+ | **Updated** | {date} |
48
+ | **Jira Ticket** | [{TICKET}-{N}]({ticket_url}) |
49
+ | **API Source** | *(để trống nếu greenfield — chỉ điền `existing` khi PRD bọc một API đã chạy production)* |
82
50
 
83
51
  ---
84
52
 
85
53
  # Feature
86
54
 
87
- {Tên tính năng chính và mô tả capability hoặc chức năng mà sản phẩm cung cấp.}
55
+ **{Feature Name}**
56
+
57
+ {Đoạn mô tả tổng quan: feature làm gì, cho ai, giải quyết vấn đề gì — lấy từ product-definition.}
88
58
 
89
59
  ---
90
60
 
@@ -92,184 +62,83 @@
92
62
 
93
63
  ## a. User Story
94
64
 
95
- <!--
96
- ĐỊNH NGHĨA: tả ngắn gọn nhu cầu của người dùng theo góc nhìn nghiệp vụ.
97
- Trả lời câu hỏi: "Ai cần gì và tại sao?" — KHÔNG mô tả kỹ thuật.
98
-
99
- QUY TẮC VIẾT:
100
- - {User role} → Vai trò người dùng (ví dụ: Consumer, Merchant Admin, Cashier)
101
- - {User goal} → Mục tiêu người dùng muốn đạt được (hành động/chức năng cụ thể)
102
- - {Business value}→ Giá trị nghiệp vụ mang lại (lý do tại sao người dùng cần điều này)
103
- -->
104
-
105
- - **As a** {User role}
106
- - **I want to** {User goal}
107
- - **So that** {Business value}
65
+ - **Là một (As a)** {persona}
66
+ - **Tôi muốn (I want to)** {action}
67
+ - **Để (So that)** {benefit}
108
68
 
109
69
  ## b. Phạm vi
110
70
 
111
- <!--
112
- ĐỊNH NGHĨA: Liệt kê danh sách các chức năng thuộc feature này.
113
- Trả lời câu hỏi: "Feature này làm gì?" — giúp xác định ranh giới, tránh scope creep.
114
-
115
- QUY TẮC VIẾT:
116
- - Mỗi dòng là một chức năng/capability cụ thể mà feature này cung cấp.
117
- - Chỉ liệt kê những gì được làm trong ticket này. Nếu có chức năng liên quan nhưng
118
- KHÔNG thuộc ticket này → KHÔNG đưa vào danh sách.
119
- - Viết ngắn gọn, súc tích, đủ để người đọc hiểu mà không cần giải thích thêm.
120
- -->
121
-
122
71
  **In Scope**
72
+ - {hạng mục trong phạm vi 1}
73
+ - {hạng mục trong phạm vi 2}
123
74
 
124
- - {Chức năng thuộc feature}
75
+ **Out of Scope** *(chỉ thêm khi có ranh giới cần nói rõ)*
76
+ - {hạng mục ngoài phạm vi + lý do / chủ sở hữu}
125
77
 
126
78
  ---
127
79
 
128
80
  # 2. Acceptance Criteria
129
81
 
130
- <!--
131
- ĐỊNH NGHĨA: Danh sách điều kiện cần thỏa mãn để tính năng được coi là hoàn thành.
132
- Trả lời câu hỏi: "Khi nào thì feature này được coi là DONE?" — tiêu chí để QA kiểm thử và PO sign-off.
133
-
134
- QUY TẮC VIẾT:
135
- - Viết theo góc nhìn người dùng: "Người dùng có thể...", "Hệ thống cho phép..."
136
- - Mỗi AC phải testable (có thể kiểm tra được — pass hoặc fail rõ ràng).
137
- - Chỉ ghi các tiêu chí CỐT LÕI — khi tính năng đạt được những điều này thì người dùng
138
- đã có thể sử dụng được. Không ghi tiêu chí phụ hoặc edge case nhỏ.
139
-
140
- KHÔNG viết AC về:
141
- - UI/UX (màu sắc, vị trí nút, font chữ, animation) → thuộc Wireframe.
142
- - Chi tiết kỹ thuật hoặc logic xử lý nội bộ → thuộc Business Rule / Business Logic.
143
- -->
82
+ **AC1:** {Tiêu chí nghiệm thu, văn xuôi, kiểm chứng được.}
144
83
 
145
- - **AC1:** {Điều kiện chấp nhận}
146
- - **AC2:** {Điều kiện chấp nhận}
147
- - **AC3:** {Điều kiện chấp nhận}
84
+ **AC2:** {}
148
85
 
149
86
  ---
150
87
 
151
88
  # 3. Use Case
152
89
 
153
- <!--
154
- ĐỊNH NGHĨA — USE CASE (UC):
155
- Mô tả một kịch bản nghiệp vụ cụ thể từ góc nhìn người dùng tương tác với hệ thống.
156
- Trả lời câu hỏi: "Người dùng tương tác với hệ thống như thế nào trong từng tình huống?"
157
- - Actor → Ai thực hiện hành động trong kịch bản này
158
- - Description → Tóm tắt kịch bản bằng 1 câu
159
- - Pre-condition → Điều kiện PHẢI đúng TRƯỚC KHI Use Case bắt đầu (trạng thái hệ thống, quyền, dữ liệu)
160
- - Post-condition→ Trạng thái/kết quả SAU KHI Use Case hoàn thành thành công
161
-
162
- ĐỊNH NGHĨA — BUSINESS RULE (BR):
163
- Quy tắc nghiệp vụ mà hệ thống bắt buộc phải tuân theo — viết thành một câu rõ ràng, ngắn gọn, dễ hiểu.
164
- Trả lời câu hỏi: "Hệ thống PHẢI làm gì / KHÔNG được làm gì?" (WHAT)
165
- - Là ràng buộc không thể thương lượng, xuất phát từ yêu cầu nghiệp vụ.
166
- - Mỗi BR chỉ phát biểu MỘT quy tắc duy nhất, không gộp nhiều quy tắc vào một dòng.
167
-
168
- ĐỊNH NGHĨA — BUSINESS LOGIC (BL):
169
- Cách thực thi cụ thể của một Business Rule — mô tả các điều kiện và logic chi tiết.
170
- Trả lời câu hỏi: "Hệ thống thực hiện quy tắc đó cụ thể như thế nào?" (HOW)
171
- - Các điều kiện rẽ nhánh (if/else, trường hợp A / trường hợp B)
172
- - Công thức tính toán hoặc quy tắc áp dụng theo từng trường hợp
173
- - Thứ tự xử lý, ưu tiên, các trường hợp ngoại lệ
174
- - Đây là input trực tiếp để developer implement.
175
-
176
- NUMBERING CONVENTION:
177
- - UC ID: format {TICKET_ID}-UC{N}
178
- + {TICKET_ID} = Jira Ticket ID (e.g., LOYAL-29)
179
- + {N} = UC number within this PRD (1, 2, 3, ...)
180
- + E.g.: LOYAL-29-UC1, LOYAL-29-UC2, LOYAL-29-UC3, ...
181
- - BR ID: format {TICKET_ID}-UC{N}-BR{M}
182
- + {M} = BR number incrementing from 1 across the PRD (not reset per UC, not global)
183
- + E.g.: LOYAL-29-UC1-BR1, LOYAL-29-UC1-BR2, LOYAL-29-UC2-BR3, ...
184
- -->
90
+ #### {TICKET}-{N}-UC1: {Tên use case}
185
91
 
186
- #### {TICKET_ID}-UC1: {Tên Use Case}
92
+ **Actor:** {actor}
187
93
 
188
- - **Actor:** {Người dùng thực hiện}
189
- - **Description:** {Mô tả ngắn gọn kịch bản nghiệp vụ}
190
- - **Pre-condition:** {Điều kiện cần trước khi Use Case bắt đầu}
191
- - **Post-condition:** {Kết quả sau khi Use Case hoàn thành}
94
+ **Description:** { tả luồng}
192
95
 
193
- **Business Rule**
96
+ **Pre-condition:**
97
+ - {điều kiện trước 1}
194
98
 
195
- | ID | Business Rule |
196
- |----|---------------|
197
- | {TICKET_ID}-UC1-BR1 | |
99
+ **Post-condition:**
100
+ - {kết quả sau 1}
198
101
 
199
- **Business Logic**
102
+ **Business Rule**
200
103
 
201
- **{TICKET_ID}-UC1-BR1:**
202
- - Logic 1
203
- - Logic 2
204
- - Logic 3
104
+ | ID | Business Rule | Business Logic |
105
+ |----|---------------|----------------|
106
+ | {TICKET}-{N}-UC1-BR1 | {luật ngắn gọn} | - {logic chi tiết, xuống dòng bằng `<br/>`}<br/>- {…} |
107
+ | {TICKET}-{N}-UC1-BR2 | {…} | - {…} |
205
108
 
206
109
  ---
207
110
 
208
- # 4. UI/UX Guidelines
209
-
210
- ## a. User Flow
111
+ #### {TICKET}-{N}-UC2: {Tên use case}
211
112
 
212
- <!--
213
- ĐỊNH NGHĨA: Sơ đồ trực quan mô tả trình tự các bước và nhánh quyết định mà người dùng đi qua.
214
- Trả lời câu hỏi: "Người dùng đi qua những bước nào và hệ thống phản hồi ra sao?"
113
+ {lặp cấu trúc UC như trên; BR đánh số tiếp tục BR3, BR4…}
215
114
 
216
- QUY TẮC VIẾT (Mermaid flowchart):
217
- - Start/Entry → Điểm vào: người dùng bắt đầu từ đâu (màn hình nào, hành động nào)
218
- - Process → Bước xử lý: hình chữ nhật [ ] — hành động hoặc hiển thị của hệ thống
219
- - Decision → Điểm rẽ nhánh: hình thoi { } — điều kiện dẫn đến kết quả khác nhau
220
- - End State → Trạng thái kết thúc: kết quả cuối cùng người dùng nhận được
115
+ ---
221
116
 
222
- Mỗi nhánh Decision phải có label rõ ràng (|Có|, |Không|, |Thành công|, |Thất bại|...).
223
- Bao gồm cả luồng lỗi / luồng ngoại lệ quan trọng (không chỉ happy path).
224
- -->
117
+ # 4. UI/UX Guidelines
225
118
 
226
- {Flowchart tả trình tự các bước và các nhánh quyết định (Start/Entry → Process → Decision → End State)}
119
+ ## a. User Flow
227
120
 
228
121
  ```mermaid
229
122
  flowchart TD
230
- A[Bước 1: ...] --> B[Bước 2: ...]
231
- B --> C{Điều kiện?}
232
- C -->|Có| D[Bước 3a: ...]
233
- C -->|Không| E[Bước 3b: ...]
123
+ START(["{điểm bắt đầu}"]) --> A{"{điểm quyết định}"}
124
+ A -->|{nhánh}| B["{bước}"]
234
125
  ```
235
126
 
236
127
  ## b. Wireframe
237
128
 
238
- <!--
239
- ĐỊNH NGHĨA: Mô tả bố cục và thành phần UI của từng màn hình.
240
- Trả lời câu hỏi: "Màn hình trông như thế nào và người dùng tương tác với nó ra sao?"
241
- Là cầu nối giữa nghiệp vụ và thiết kế UI. Có thể kèm link Figma hoặc ảnh mockup.
242
-
243
- CẤU TRÚC BẢNG CHUẨN (3 thành phần chính):
244
- - Screen → Tên màn hình / modal / trạng thái đang mô tả
245
- - Components → Danh sách các thành phần UI hiển thị (button, label, list, input, bar...)
246
- - Actions → Hành động người dùng thực hiện và kết quả/màn hình tiếp theo tương ứng
247
-
248
- LƯU Ý — CẤU TRÚC LINH HOẠT THEO ĐỘ PHỨC TẠP:
249
- Với màn đơn giản → dùng bảng 3 cột chuẩn (Screen / Components / Actions) là đủ.
250
- Với màn phức tạp (nhiều trạng thái, nhiều modal, nhiều luồng lỗi) → có thể mở rộng:
251
- - Tách riêng từng màn / modal / trạng thái thay vì gộp chung một bảng.
252
- - Thêm các field chi tiết hơn nếu cần (UI Pattern, Header, Footer, Toast, Entry Point...).
253
- Nguyên tắc: ưu tiên sự rõ ràng hơn tuân thủ cứng nhắc cấu trúc —
254
- miễn là designer, dev, QA đọc vào hiểu đúng ý định của màn hình đó.
255
- -->
256
-
257
- **Screen N: {Tên màn hình}**
258
-
259
- **Screen:** {Tên màn hình}
129
+ ### Screen 1: {Tên màn}
260
130
 
261
- **Components:**
262
- - {Component 1}
263
- - {Component 2}
264
- - {Component 3}
131
+ | Thành phần | Chi tiết |
132
+ |------------|----------|
133
+ | **Screen** | {tên/ngữ cảnh màn} |
134
+ | **Components** | - {thành phần 1}<br/>- {thành phần 2} |
135
+ | **Actions** | - {hành động 1 → kết quả}<br/>- {hành động 2 → kết quả} |
265
136
 
266
- **Actions:**
267
- - {Hành động 1} → {Kết quả}
268
- - {Hành động 2} → {Kết quả}
137
+ ---
269
138
 
270
- <!-- Figma Design: {Link Figma — xóa dòng này nếu không có URL} -->
139
+ ### Screen 2: {Tên màn}
271
140
 
272
- <!-- ![Wireframe tả](./assets/wireframe-name.png) -->
141
+ {lặp bảng như trên cho từng màn}
273
142
 
274
143
  ---
275
144
 
@@ -277,51 +146,57 @@ flowchart TD
277
146
 
278
147
  ## Input gốc từ PO
279
148
 
280
- > Lưu lại nguyên văn input ban đầu (text + links đến hình ảnh).
281
-
282
- {Paste original input here}
149
+ > {Trích nguyên văn input/ghi chú gốc của PO + đường dẫn product-definition nguồn.}
283
150
 
284
151
  ## Tài liệu tham khảo
285
152
 
153
+ - [{TICKET liên quan}](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md) — {quan hệ: pre-condition / overlapping / related…}
154
+ - Từ điển nghiệp vụ: `{path}/business-dictionary.md`
155
+ - Domain knowledge: `{path}/{domain}.md`
156
+
157
+ ## Existing API Contract *(CHỈ brownfield — điền khi API Source = existing; greenfield BỎ QUA cả section này)*
158
+
286
159
  <!--
287
- Cross-reference PRD liên quan dùng format: [TICKET-ID](./TICKET-ID-slug.md) {quan hệ phụ thuộc}
288
- dụ:
289
- - [LOYAL-23](./LOYAL-23-cau-hinh-chi-nhanh.md) Pre-condition: Branch phải được cấu hình trước
290
- - [LOYAL-10](./LOYAL-10-onboarding-merchant.md) Entity dùng chung: Merchant/Tenant
160
+ Chỉ dùng khi PRD bọc một API đã tồn tại trên hệ thống. PO ghi lại contract để:
161
+ - /generate-bdd (system) dùng trực tiếp làm input — không cần tổng hợp từ FE/App BDD;
162
+ - /generate-tech-docs chạy mode reverse-document (mô tả lại as-is, không design mới);
163
+ - /review-tech-docs bỏ qua cổng T7 cross-team sign-off (contract đã cố định).
164
+ Nếu greenfield (thiết kế mới) → xoá toàn bộ section này.
291
165
  -->
292
166
 
293
- - {[TICKET-ID](./TICKET-ID-slug.md) tả quan hệ phụ thuộc}
167
+ | Method | Path | Auth | Request | Response |
168
+ |--------|------|------|---------|----------|
169
+ | {GET/POST/PUT/DELETE} | {/api/v1/path} | {Bearer / none} | `{ field: type }` | `{ field: type }` |
170
+
171
+ **Error responses:**
172
+
173
+ | HTTP Status | Error Code | Khi nào xảy ra |
174
+ |-------------|------------|----------------|
175
+ | {4xx/5xx} | {ERR_CODE} | {condition} |
294
176
 
295
177
  ## Giả định AI
296
178
 
297
- > Các giả định AI đưa ra khi PO chọn "skip" hoặc thông tin chưa đầy đủ.
298
- > Mỗi giả định cần được PO review và confirm.
179
+ > {Giả định / độ vênh AI phát hiện khi đối chiếu product-definition với domain-knowledge cần PO review. AI KHÔNG tự hoà giải.}
299
180
 
300
- - {Giả định 1 — [AI DRAFT]}
301
- - {Giả định 2 — [AI DRAFT]}
181
+ - **Q1 — [AI DRAFT] {tiêu đề}:** {mô tả độ vênh + nguồn}. **Cần PO chốt {điều gì}.**
302
182
 
303
- ---
183
+ _(Nếu không có độ vênh: ghi "Không có — toàn bộ nội dung đã được PO xác nhận qua Product Definition.")_
304
184
 
305
- ## Changelog
185
+ ---
306
186
 
307
- <!--
308
- Version history — mỗi lần PRD được cập nhật (qua /refine-prd --resume hoặc PO tự sửa)
309
- → thêm 1 dòng mới vào đầu bảng này với version mới.
187
+ # Change Log
310
188
 
311
- Version bumping rules:
312
- - Major (X.0 → X+1.0): thêm/xoá Use Case, thay đổi scope lớn, breaking BR change
313
- - Minor (x.Y → x.Y+1): làm rõ AC/BR, thêm edge case, cập nhật wording
189
+ ### v1.0 — {mô tả} ({date})
314
190
 
315
- BDD Code đọc version này qua @trace.prd_version để detect drift.
316
- -->
191
+ | Mục | Thay đổi |
192
+ |-----|----------|
193
+ | — | Bản đầu — sinh từ product-definition. |
317
194
 
318
- | Version | Date | Changes |
319
- |---------|------|---------|
320
- | 1.0 | {YYYY-MM-DD} | Initial version |
195
+ ---
321
196
 
322
- <!--
197
+ <!--
323
198
  NEXT STEPS:
324
199
  Khi PRD được approve (status: approved), chạy:
325
- /generate-bdd "path/to/this-prd.md"
200
+ /generate-bdd "specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md"
326
201
  để sinh BDD feature specs từ PRD này.
327
202
  -->