@edupia-tutor/spec-driven-docs 0.14.6 → 0.14.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +1 -1
- package/commands/debug.md +1 -1
- package/commands/define-product.md +1 -1
- package/commands/dev-gen-test.md +1 -1
- package/commands/dev-run-test.md +1 -1
- package/commands/dev-smoke-test.md +1 -1
- package/commands/fix-bug.md +1 -1
- package/commands/generate-bdd.md +74 -5
- package/commands/generate-bdd.tmpl +73 -4
- package/commands/generate-code.md +19 -2
- package/commands/generate-code.tmpl +18 -1
- package/commands/generate-design-spec.md +50 -6
- package/commands/generate-design-spec.tmpl +49 -5
- package/commands/generate-prd.md +9 -5
- package/commands/generate-prd.tmpl +1 -0
- package/commands/generate-spec-manifest.md +1 -1
- package/commands/generate-tech-docs.md +2 -1
- package/commands/generate-tech-docs.tmpl +1 -0
- package/commands/learn.md +1 -1
- package/commands/map-testids.md +1 -1
- package/commands/propose-scenario.md +7 -3
- package/commands/propose-scenario.tmpl +6 -2
- package/commands/qc-analyze.md +15 -1
- package/commands/qc-analyze.tmpl +14 -0
- package/commands/qc-design-test.md +1 -1
- package/commands/qc-plan.md +1 -1
- package/commands/qc-report.md +1 -1
- package/commands/qc-review.md +1 -1
- package/commands/qc-run-test.md +1 -1
- package/commands/refine-prd.md +33 -13
- package/commands/refine-prd.tmpl +32 -12
- package/commands/report-bug.md +1 -1
- package/commands/review-code.md +1 -1
- package/commands/review-context.md +49 -27
- package/commands/review-context.tmpl +48 -26
- package/commands/review-tech-docs.md +1 -1
- package/commands/setup-ai-first.md +10 -10
- package/commands/setup-ai-first.tmpl +9 -9
- package/commands/sync.md +1 -1
- package/commands/update-framework.md +1 -1
- package/commands/validate-traces.md +2 -1
- package/commands/validate-traces.tmpl +1 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +1 -1
- package/core/commands/define-product.md +1 -1
- package/core/commands/dev-gen-test.md +1 -1
- package/core/commands/dev-run-test.md +1 -1
- package/core/commands/dev-smoke-test.md +1 -1
- package/core/commands/fix-bug.md +1 -1
- package/core/commands/generate-bdd.md +74 -5
- package/core/commands/generate-code.md +19 -2
- package/core/commands/generate-design-spec.md +50 -6
- package/core/commands/generate-prd.md +9 -5
- package/core/commands/generate-spec-manifest.md +1 -1
- package/core/commands/generate-tech-docs.md +2 -1
- package/core/commands/learn.md +1 -1
- package/core/commands/map-testids.md +1 -1
- package/core/commands/propose-scenario.md +7 -3
- package/core/commands/qc-analyze.md +15 -1
- package/core/commands/qc-design-test.md +1 -1
- package/core/commands/qc-plan.md +1 -1
- package/core/commands/qc-report.md +1 -1
- package/core/commands/qc-review.md +1 -1
- package/core/commands/qc-run-test.md +1 -1
- package/core/commands/refine-prd.md +33 -13
- package/core/commands/report-bug.md +1 -1
- package/core/commands/review-code.md +1 -1
- package/core/commands/review-context.md +49 -27
- package/core/commands/review-tech-docs.md +1 -1
- package/core/commands/setup-ai-first.md +10 -10
- package/core/commands/sync.md +1 -1
- package/core/commands/update-framework.md +1 -1
- package/core/commands/validate-traces.md +2 -1
- package/core/skills/code/SKILL.md +7 -759
- package/core/skills/debug/SKILL.md +9 -859
- package/core/skills/design-spec/SKILL.md +3 -582
- package/core/skills/prd/SKILL.md +5 -464
- package/core/skills/setup-ai-first/SKILL.md +3 -208
- package/core/skills/spec/SKILL.md +7 -450
- package/core/skills/test/SKILL.md +10 -1290
- package/core/steps/report-footer.md +1 -1
- package/core/steps/spawn-agent.md +12 -7
- package/core/templates/prd.template.md +7 -4
- package/core/templates/project-context.yaml +2 -2
- package/docs/01-getting-started/core-concepts.md +3 -3
- package/docs/01-getting-started/quickstart.md +4 -3
- package/docs/02-guides/bdd-input-checklist.md +68 -0
- package/docs/02-guides/developer/README.md +3 -0
- package/docs/02-guides/developer/bdd-and-trace.md +4 -3
- package/docs/02-guides/developer/commands.md +3 -3
- package/docs/02-guides/developer/pr-checklist.md +1 -0
- package/docs/02-guides/developer/scenarios.md +2 -2
- package/docs/02-guides/developer/workflow.md +3 -3
- package/docs/02-guides/prd-input-checklist.md +94 -0
- package/docs/02-guides/product-owner/README.md +5 -3
- package/docs/02-guides/product-owner/commands.md +1 -1
- package/docs/02-guides/product-owner/handoff-checklist.md +5 -5
- package/docs/02-guides/product-owner/scenarios.md +19 -17
- package/docs/02-guides/tech-docs-input-checklist.md +82 -0
- package/docs/02-guides/tester/README.md +1 -1
- package/docs/02-guides/tester/bug-reporting.md +1 -1
- package/docs/02-guides/tester/qc-automation.md +1 -1
- package/docs/03-concepts/README.md +1 -0
- package/docs/03-concepts/mechanisms-explained.md +34 -0
- package/docs/03-concepts/pipeline.md +12 -9
- package/docs/03-concepts/traceability.md +7 -4
- package/docs/04-operations/bug-flow.md +2 -0
- package/docs/04-operations/sync-and-update.md +3 -3
- package/docs/05-reference/command-cheatsheet.md +9 -9
- package/docs/05-reference/commands.md +12 -10
- package/docs/05-reference/trace-schema.md +2 -1
- package/package.json +1 -1
- package/skills/code/SKILL.md +7 -759
- package/skills/code/SKILL.tmpl +7 -164
- package/skills/debug/SKILL.md +9 -859
- package/skills/debug/SKILL.tmpl +9 -252
- package/skills/design-spec/SKILL.md +3 -582
- package/skills/design-spec/SKILL.tmpl +3 -87
- package/skills/prd/SKILL.md +5 -464
- package/skills/prd/SKILL.tmpl +5 -63
- package/skills/setup-ai-first/SKILL.md +3 -208
- package/skills/setup-ai-first/SKILL.tmpl +3 -108
- package/skills/spec/SKILL.md +7 -450
- package/skills/spec/SKILL.tmpl +7 -162
- package/skills/test/SKILL.md +10 -1290
- package/skills/test/SKILL.tmpl +10 -288
- package/steps/report-footer.md +1 -1
- package/steps/spawn-agent.md +12 -7
- package/templates/prd.template.md +7 -4
- package/templates/project-context.yaml +2 -2
|
@@ -60,7 +60,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
60
60
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
61
61
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
62
62
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
63
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
63
|
+
| /review-context (PRD) | Khi 0 critical → PO đặt `Status: approved`, rồi FE/App: `/generate-design-spec {prd-file}` (→ design sign-off → BDD); BE: `/generate-bdd {prd-file}`. Còn critical/NEEDS_FIX → sửa PRD (giữ draft) |
|
|
64
64
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
65
65
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
66
66
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -71,14 +71,18 @@ Dựng payload và gọi Agent tool cho từng UC:
|
|
|
71
71
|
```json
|
|
72
72
|
{
|
|
73
73
|
"_agent_mode": true,
|
|
74
|
-
"command":
|
|
75
|
-
"uc_id":
|
|
76
|
-
"target_file":
|
|
77
|
-
"uc_section":
|
|
78
|
-
"context":
|
|
74
|
+
"command": "generate-bdd",
|
|
75
|
+
"uc_id": "{TICKET-ID}-UC{N}",
|
|
76
|
+
"target_file": "{đường dẫn tuyệt đối tới PRD hoặc feature file}",
|
|
77
|
+
"uc_section": { "line_start": {N}, "line_end": {N} },
|
|
78
|
+
"context": { "<context gọn từ Bước A>" },
|
|
79
|
+
"active_platform": "{web|app|system — platform orchestrator đã chọn ở Platform Selection}",
|
|
80
|
+
"design_coverage": { "<Screen States + AC-UI behavioral orchestrator đã trích ở 'Design Spec — Gate & Load' (B1); rỗng nếu BE / không có design-spec>" }
|
|
79
81
|
}
|
|
80
82
|
```
|
|
81
83
|
|
|
84
|
+
> **Truyền state orchestrator đã phân giải (quan trọng):** orchestrator (session chính) đã chạy các Guard + chọn platform + nạp design-spec MỘT LẦN *trước* khi spawn. Phải kèm `active_platform` và `design_coverage` vào payload để sub-agent áp đúng (đặc biệt phủ Screen States + AC-UI cho FE/App). KHÔNG kèm → sub-agent sinh BDD thiếu phần design (PRD lớn mất B1).
|
|
85
|
+
|
|
82
86
|
> **Phạm vi lệnh**: Chỉ `/generate-bdd` khởi động chế độ orchestration. `/generate-code` và `/dev-gen-test` có thể chạy như sub-agent (chúng tôn trọng `_agent_mode: true` từ Gate Bước 0), nhưng không spawn thêm sub-agent — phạm vi của chúng vốn đã là một UC duy nhất.
|
|
83
87
|
|
|
84
88
|
Serialize JSON này và truyền làm `$ARGUMENTS` khi gọi lệnh sub-agent.
|
|
@@ -108,8 +112,9 @@ Khi `gate.md Bước 0` phát hiện `_agent_mode: true`:
|
|
|
108
112
|
2. **Bỏ qua context-loader.md** — dùng trực tiếp `payload.context`
|
|
109
113
|
3. **Chỉ giới hạn ở `payload.uc_id`** — không xử lý các UC khác trong file
|
|
110
114
|
4. Chỉ đọc section PRD giữa `payload.uc_section.line_start` và `line_end`
|
|
111
|
-
5.
|
|
112
|
-
6.
|
|
115
|
+
5. **Dùng state orchestrator đã phân giải:** `active_platform` = `payload.active_platform`; `design_coverage` = `payload.design_coverage`. **KHÔNG chạy lại** các Guard (PRD approved / Design-Spec) hay tự nạp lại design-spec / hỏi platform — orchestrator đã làm một lần ở session chính.
|
|
116
|
+
6. Thực thi logic thường của lệnh cho riêng UC này (dùng `design_coverage` từ payload để phủ Screen States + AC-UI)
|
|
117
|
+
7. Trả về JSON kết quả có cấu trúc (định dạng Bước E ở trên)
|
|
113
118
|
|
|
114
119
|
---
|
|
115
120
|
|
|
@@ -197,11 +197,14 @@ _(Nếu không có độ vênh: ghi "Không có — toàn bộ nội dung đã
|
|
|
197
197
|
|
|
198
198
|
# Change Log
|
|
199
199
|
|
|
200
|
-
|
|
200
|
+
> Hiện tại: **v1.0** ({date}) · Lịch sử đầy đủ → [changelog](./changelog/{TICKET}-{N}-{slug}.changelog.md) *(file kho chỉ tạo khi changelog vượt 5 version)*
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
<!-- Bảng phẳng, MỘT dòng/version, MỚI NHẤT TRÊN CÙNG. Chỉ giữ tối đa 5 version gần nhất ở đây;
|
|
203
|
+
cũ hơn → /refine-prd & /review-context tự dồn (rollover) sang file changelog/ ở link trên. -->
|
|
204
|
+
|
|
205
|
+
| Version | Date | Changes (UC/AC/BR bị ảnh hưởng) |
|
|
206
|
+
|---------|------|---------------------------------|
|
|
207
|
+
| 1.0 | {date} | Bản đầu — sinh từ product-definition. |
|
|
205
208
|
|
|
206
209
|
---
|
|
207
210
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# 3. When a workflow says "→ key.subkey", look up that key
|
|
15
15
|
# and use the resolved value as the actual path
|
|
16
16
|
# 4. All paths are RELATIVE to workspace root
|
|
17
|
-
# 5. For "{domain}", substitute
|
|
17
|
+
# 5. For "{domain}", substitute the feature's domain (PRD: row `Domain` in Metadata / folder path; .feature: @trace.domain)
|
|
18
18
|
# =============================================================
|
|
19
19
|
|
|
20
20
|
project:
|
|
@@ -132,7 +132,7 @@ domains:
|
|
|
132
132
|
# With spec_source set, only ONE override is needed instead of four separate dir vars.
|
|
133
133
|
#
|
|
134
134
|
# services: # domain → service submodule routing
|
|
135
|
-
# {{DOMAIN_1}}: # must match
|
|
135
|
+
# {{DOMAIN_1}}: # must match the PRD's `Domain` (Metadata row) / folder path segment
|
|
136
136
|
# path: "{{SERVICE_SUBMODULE_DIR}}" # relative path to service submodule (code + .trace/)
|
|
137
137
|
# module: "{{STACK_MODULE}}" # e.g., java-spring, nextjs, flutter
|
|
138
138
|
# # NOTE: with spec_source set, BDD + tech-docs are cross-team and live in the spec repo —
|
|
@@ -18,7 +18,7 @@ Các khái niệm cốt lõi trong 5 phút. Đào sâu hơn ở [../03-concepts]
|
|
|
18
18
|
|
|
19
19
|
- Con người định nghĩa *WHAT* — acceptance criteria, business rules, platform requirements.
|
|
20
20
|
- AI sinh ra *HOW* — BDD scenarios, tech design, code, tests — thích ứng theo platform.
|
|
21
|
-
- Mỗi artifact được review trước khi sang phase kế tiếp
|
|
21
|
+
- Mỗi artifact được review (AI tìm findings) rồi **người duyệt** (đặt `Status` / `@trace.status: approved`) trước khi sang phase kế tiếp; sửa nội dung sau khi duyệt → tự về `draft`. Lệnh tiêu thụ **cảnh báo mềm** nếu nguồn chưa approved.
|
|
22
22
|
- Mỗi dòng code truy ngược về một scenario trong file `.feature`.
|
|
23
23
|
|
|
24
24
|
**PRD platform-agnostic (Option C):** một PRD phục vụ mọi platform — chỉ mô tả nghiệp vụ, không có chi tiết UI hay API. FE/App đọc PRD → Design Spec → BDD; BE đọc PRD trực tiếp → BDD. Thêm platform mới sau không cần sửa PRD.
|
|
@@ -50,7 +50,7 @@ Mỗi artifact link tới artifact khác qua `@trace.*` tags:
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
product-definition.md
|
|
53
|
-
└─► PRD.md (Service, Module
|
|
53
|
+
└─► PRD.md (Domain, Status, Service, Module — bảng Metadata)
|
|
54
54
|
└─► specs/{domain}/{prd-slug}/bdd/{web|app|system}/{UC-ID}.feature (@trace.prd_version)
|
|
55
55
|
└─► specs/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design*.md (@trace.bdd_version)
|
|
56
56
|
└─► src/ code — service submodule (@trace.implements)
|
|
@@ -93,7 +93,7 @@ my-project-umbrella/ ← mở Claude Code ở đây
|
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
- **Spec module** (`{spec_source}/`): chứa PRD, Design Spec, **ALL BDD (web/app/system)**, tech-docs (BE API contract + FE tech-design), domain-knowledge, feedback — shared để mọi umbrella đọc cùng nguồn. Report canonical của Living Docs cũng sinh tại `{spec_source}/.living-docs/`.
|
|
96
|
-
- **Routing:** context-loader đọc
|
|
96
|
+
- **Routing:** context-loader đọc row `Domain` (bảng Metadata) từ PRD → tra trong `services` config → route **code** vào đúng service submodule; **BDD + tech-docs + specs + `.trace/` + feedback** đều ở spec module (cross-team, một chỗ cho PM). PRD phải có row `Domain` khớp một key trong `services`.
|
|
97
97
|
|
|
98
98
|
Setup umbrella đầy đủ, file ownership, two-layer commit, multi-platform → [Operations › Sync & Update §4 Umbrella mode](../04-operations/sync-and-update.md#4-umbrella-mode--git-submodule).
|
|
99
99
|
|
|
@@ -45,16 +45,17 @@ Discovery → PRD → BDD → Tech Design → Code → Dev self-check:
|
|
|
45
45
|
→ specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
46
46
|
/refine-prd specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # AI suggestions → Review Board
|
|
47
47
|
/refine-prd --resume specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # apply + bump version
|
|
48
|
-
/review-context specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # quality gate (
|
|
48
|
+
/review-context specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # quality gate (P0–P5)
|
|
49
49
|
/review-context --resume specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
50
|
-
→ ✅
|
|
50
|
+
→ ✅ 0 critical → PO đặt | **Status** | approved | trong Metadata → tiếp Phase 3
|
|
51
51
|
|
|
52
52
|
# PHASE 3 — SPEC & DESIGN
|
|
53
53
|
# (FE/App only) /generate-design-spec specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md → designer + PO sign-off
|
|
54
54
|
/generate-bdd specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
55
55
|
→ specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature
|
|
56
56
|
/review-context specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature
|
|
57
|
-
/review-context --resume specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature # apply + bump bdd_version
|
|
57
|
+
/review-context --resume specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature # apply + bump bdd_version + reset @trace.status draft
|
|
58
|
+
→ ✅ 0 critical → đặt # @trace.status: approved trong .feature → tiếp Tech Design
|
|
58
59
|
/generate-tech-docs specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature
|
|
59
60
|
→ specs/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md
|
|
60
61
|
/review-tech-docs specs/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Guides](README.md) › Checklist Input BDD (System/BE)
|
|
2
|
+
|
|
3
|
+
# Checklist Input BDD (System / BE) — Để BDD Chuẩn Ngay Lần Đầu
|
|
4
|
+
|
|
5
|
+
> Áp cho `/generate-bdd` khi chọn platform **`system`** (BDD cho BE). Chuẩn bị đúng đầu vào để không phải sinh lại.
|
|
6
|
+
|
|
7
|
+
## Hiểu trước cho đúng: System BDD có HAI kiểu sinh
|
|
8
|
+
|
|
9
|
+
Khi chọn platform `system`, lệnh tự phân loại:
|
|
10
|
+
|
|
11
|
+
- **BE thuần** (feature không có web/app) → System BDD **sinh thẳng từ PRD** (AC / Business Rules / Business Logic).
|
|
12
|
+
- **BE trong feature đa-platform** → System BDD **tổng hợp từ web + app BDD đã có** (BE suy ra để phục vụ các luồng client).
|
|
13
|
+
|
|
14
|
+
→ Biết mình ở kiểu nào mới chuẩn bị đúng.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Phần CHUNG — cả hai kiểu đều cần
|
|
19
|
+
|
|
20
|
+
**1. PRD đã duyệt + Luật/AC rõ ràng** *(đòn bẩy số 1)*
|
|
21
|
+
System BDD phủ **mỗi AC và mỗi Business Rule → ít nhất 1 scenario**. PRD mơ hồ ở Business Rules / Logic = BDD mơ hồ. Đây là chỗ quyết định nhiều nhất.
|
|
22
|
+
|
|
23
|
+
**2. Loại API đã chốt đúng trong PRD**
|
|
24
|
+
- **"Đã có sẵn"** (brownfield) → bảng **Existing API Contract trong PRD phải đầy đủ**, không còn dấu "⛔ còn thiếu". Lệnh dùng bảng này làm chuẩn và **bỏ qua bước tổng hợp**. Còn thiếu = BDD dễ bịa / sai shape.
|
|
25
|
+
- **"Tự làm mới"** → contract thiết kế sau; BDD chỉ tả hành vi nghiệp vụ.
|
|
26
|
+
|
|
27
|
+
**3. Từ điển + danh sách thực thể đã cập nhật**
|
|
28
|
+
System BDD viết bằng **ngôn ngữ sự kiện nghiệp vụ** ("hệ thống nhận X → trả về Y"), **không** dùng từ giao diện (click/tap), **không** chốt cứng shape JSON kỹ thuật. Tên thực thể / trường / enum phải đúng `core-entities.md`.
|
|
29
|
+
|
|
30
|
+
**4. Domain khớp cấu hình service** *(chế độ umbrella)*
|
|
31
|
+
Domain trong PRD phải khớp một service trong config; lệch là lệnh **dừng**.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Phần RIÊNG theo kiểu
|
|
36
|
+
|
|
37
|
+
### Nếu BE trong feature đa-platform (tổng hợp)
|
|
38
|
+
|
|
39
|
+
**5. Đã sinh web + app BDD TRƯỚC — đúng thứ tự outside-in**
|
|
40
|
+
Nếu sinh `system` khi **chưa có** web/app BDD → lệnh tưởng là "BE thuần", sinh từ PRD và **bỏ lỡ** các kỳ vọng client thật (token, profile, redirect…). Phải theo thứ tự **web → app → system**.
|
|
41
|
+
|
|
42
|
+
**6. Sẵn sàng quyết "xung đột cross-platform"**
|
|
43
|
+
Nếu web và app **kỳ vọng khác nhau** (response / lỗi / luật) → lệnh **dừng ở CHECKPOINT** bắt PO chọn cách hoà: gộp chung / phân biệt theo platform / tách endpoint. Web+app BDD nên nhất quán, hoặc PO sẵn sàng quyết ngay — nếu không sẽ tắc.
|
|
44
|
+
|
|
45
|
+
### Nếu BE thuần
|
|
46
|
+
|
|
47
|
+
Bỏ qua câu 5–6. Dồn lực vào câu 1–3: PRD Business Rules / Logic + contract + thực thể.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Checklist nhanh — trước khi `/generate-bdd` (system)
|
|
52
|
+
|
|
53
|
+
- [ ] PRD `approved`, mỗi AC/BR đủ rõ để suy ra scenario
|
|
54
|
+
- [ ] Loại API đã chốt; brownfield → bảng Existing API Contract **đầy đủ** (hết ⛔)
|
|
55
|
+
- [ ] `business-dictionary` + `core-entities` cập nhật (sự kiện / thực thể)
|
|
56
|
+
- [ ] Domain khớp cấu hình service (umbrella)
|
|
57
|
+
- [ ] *(đa-platform)* web + app BDD đã sinh + review **trước** system
|
|
58
|
+
- [ ] *(đa-platform)* sẵn sàng quyết xung đột cross-platform
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Sau khi sinh BDD
|
|
63
|
+
|
|
64
|
+
`/review-context` (BDD) bắt nốt sạn (coverage, Gherkin R1–R10, thuật ngữ); khi 0 critical → người duyệt đặt `# @trace.status: approved` rồi mới sang Tech Docs / Code / QC. Chuẩn bị tốt checklist trên thì bước review nhẹ.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
← [Guides](README.md) · Liên quan: [Checklist Input PRD](prd-input-checklist.md) · [Checklist Input Tech-Docs (BE)](tech-docs-input-checklist.md)
|
|
@@ -10,6 +10,8 @@ Tài liệu dành cho **Developer (FE / BE / App)** — vai trò, commands, trac
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| [Commands](commands.md) | Bảng lệnh cho dev · project lessons · xử lý feedback tester · khi nào dùng `--phase` |
|
|
12
12
|
| [BDD & Trace System](bdd-and-trace.md) | Tại sao BDD quan trọng với dev · `@trace.*` fields · trace chain · khi nào `/validate-traces` |
|
|
13
|
+
| [Checklist input BDD (System/BE)](../bdd-input-checklist.md) | Chuẩn bị để `/generate-bdd` (system) chuẩn ngay lần đầu |
|
|
14
|
+
| [Checklist input Tech-Docs (BE)](../tech-docs-input-checklist.md) | BDD khác tech-doc thế nào · chuẩn bị để `/generate-tech-docs` (BE) ra API contract chuẩn lần đầu |
|
|
13
15
|
| [Workflow](workflow.md) | Luồng làm việc cơ bản từ nhận PRD đến tạo PR |
|
|
14
16
|
| [Tình huống thực tế](scenarios.md) | 8 scenario: nhận PRD mới, đọc System/Web BDD, PRD đổi, API sign-off, bug từ tester, design spec, brownfield, umbrella, validate-traces |
|
|
15
17
|
| [Checklist trước khi tạo PR](pr-checklist.md) | Checklist verify trước khi mở PR |
|
|
@@ -34,6 +36,7 @@ PO/BA Dev
|
|
|
34
36
|
- Đọc và hiểu PRD + BDD từ spec submodule trước khi bắt đầu
|
|
35
37
|
- **KHÔNG tự generate BDD** — BDD đã được PO generate trong spec repo
|
|
36
38
|
- Đảm bảo code trace về đúng BDD scenario, BDD trace về đúng PRD
|
|
39
|
+
- **Duyệt BDD:** sau khi `/review-context` (BDD) sạch critical, Dev-lead/SA đặt `# @trace.status: approved` trong `.feature` (cổng trước tech-docs / code / QC)
|
|
37
40
|
- Báo PO/BA khi PRD hoặc BDD có gì không rõ hoặc mâu thuẫn — không tự suy diễn
|
|
38
41
|
|
|
39
42
|
**Dev KHÔNG làm:**
|
|
@@ -57,11 +57,12 @@ Framework dùng metadata `@trace.*` để liên kết PRD → BDD → Code. (Chi
|
|
|
57
57
|
|
|
58
58
|
| Field | Vị trí | Ý nghĩa |
|
|
59
59
|
|---|---|---|
|
|
60
|
-
|
|
|
60
|
+
| `Domain` | bảng Metadata PRD | Domain của feature (auth, payment, ...) — dùng để route vào đúng service submodule |
|
|
61
61
|
| `@trace.module` | BDD / Tech Doc header | Module trong codebase sẽ implement |
|
|
62
62
|
| `@trace.prd` | BDD / Tech Doc header | Link về PRD gốc |
|
|
63
63
|
| `@trace.bdd` | Code comment / test | Link về BDD scenario |
|
|
64
|
-
|
|
|
64
|
+
| `Status` | bảng Metadata PRD | `draft` / `approved` — chỉ code khi `approved` |
|
|
65
|
+
| `@trace.status` | BDD `.feature` header | `draft` / `approved` — Dev-lead/SA đặt approved sau review-context BDD sạch; mirror → `uc_status` (dashboard) |
|
|
65
66
|
| `dev_selftest` | Trace TSV | `pass` / `fail` / `not_run` — kết quả dev self-check, set bởi `/dev-run-test`. Surfaced trong Living Docs để QC biết dev đã chạy self-check — **KHÔNG phải coverage chính thức** |
|
|
66
67
|
| `dev_selftest_at` | Trace TSV | Timestamp lần chạy `/dev-run-test` gần nhất |
|
|
67
68
|
| `qc_status` | Trace TSV | `pass` / `fail` / `skip` / `not_run` — kết quả **QC chính thức**, set bởi `/qc-run-test` (do QC chạy, KHÔNG phải dev). Orthogonal với `dev_selftest` và với coverage `status` |
|
|
@@ -70,7 +71,7 @@ Framework dùng metadata `@trace.*` để liên kết PRD → BDD → Code. (Chi
|
|
|
70
71
|
### Ví dụ trace chain hoàn chỉnh
|
|
71
72
|
|
|
72
73
|
```
|
|
73
|
-
specs/auth/login/{TICKET-ID}-login.md ←
|
|
74
|
+
specs/auth/login/{TICKET-ID}-login.md ← Metadata: Domain: auth, Status: approved
|
|
74
75
|
↓
|
|
75
76
|
specs/auth/login/bdd/system/FT-001-UC1-login.feature ← @trace.prd: FT-001 · web/app/system riêng (system tổng hợp từ web+app)
|
|
76
77
|
↓
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
| `/update-framework` | Nâng cấp **bản thân framework** (`.agent/commands/`, steps/, modules/) từ npm | Khi có version framework mới — không đụng project-context/CLAUDE.md |
|
|
9
9
|
| `/review-context {prd-file}` | Đọc + xác nhận PRD + BDD đủ rõ trước khi code — fan-out review dimension thành sub-agent song song + completeness-critic loop, findings file đầy đủ ngay trong 1 lần chạy | **Bước đầu tiên** khi nhận PRD mới |
|
|
10
10
|
| `/generate-tech-docs {feature-file}` | **Platform-aware.** BE (`system`): API contract (endpoints, DB, caching). FE/App (`web`/`app`): client design (components, state, API-integration map theo BE contract, routing) — **GATED**: cần System BDD + BE contract approved trước, nếu thiếu sẽ HALT | BE: sau khi đọc System BDD. FE: sau `--phase=ui`, khi BE contract đã approved |
|
|
11
|
-
| `/generate-code {bdd-file}` | Sinh code — BE hoặc FE khi API đã sẵn sàng | Sau khi tech docs `approved` |
|
|
11
|
+
| `/generate-code {bdd-file}` | Sinh code — BE hoặc FE khi API đã sẵn sàng. Guard mềm: BDD `@trace.status` approved; FE/App design-spec approved+fresh+sanity | Sau khi tech docs `approved` |
|
|
12
12
|
| `/generate-code {bdd-file} --phase=ui` | FE: gen UI + mock adapter. Mock **shape** từ BE contract nếu có (chuẩn) → else infer từ System BDD + warn (`mock_source=contract\|system-bdd`); fixture values luôn từ System BDD | Ngay sau khi đọc BDD (BE chưa cần deploy API) |
|
|
13
13
|
| `/generate-code {bdd-file} --phase=integration` | FE: wire API thật thay mock | Sau khi sign-off gate `approved` |
|
|
14
14
|
| `/dev-gen-test {bdd-file}` | **Dev self-check** — sinh test cases từ BDD để dev tự verify code mình vừa gen (KHÔNG phải bộ test chính thức của QC/dev-team) | Song song hoặc sau generate-code |
|
|
15
|
-
| `/review-code {file}` | Review code theo 4
|
|
15
|
+
| `/review-code {file}` | Review code theo 4 lăng kính (Traceability/Layer/Coding Standards/Spec Compliance) | Trước khi tạo PR |
|
|
16
16
|
| `/review-tech-docs {tech-doc-file}` | Review chất lượng Tech Docs | Sau generate-tech-docs |
|
|
17
17
|
| `/dev-run-test` | **Dev self-check** — chạy test do dev tự gen để xác nhận code mình hoạt động (smoke/self-verify, KHÔNG phải coverage chính thức) — *umbrella mode: tự `cd` vào service_root, dùng service's `test_command`*. Ghi `dev_selftest` (pass/fail) vào trace TSV | Sau khi code + tests sẵn sàng |
|
|
18
18
|
| `/fix-bug {issue}` | Phân tích + fix bug có trace | Khi có bug report |
|
|
@@ -53,7 +53,7 @@ Tester gửi bug report (`/report-bug`) và đề xuất scenario (`/propose-sce
|
|
|
53
53
|
|
|
54
54
|
Dev hành động theo phân loại:
|
|
55
55
|
- **Bug report** → `/fix-bug {BUG-ID}` (report đã có sẵn spec-context + AC bị vi phạm + layer)
|
|
56
|
-
- **Scenario proposal map vào AC sẵn có** →
|
|
56
|
+
- **Scenario proposal map vào AC sẵn có** → đặt `Status: accepted` trong file proposal → `/generate-bdd` tự chèn vào `.feature` rồi lưu trữ (`incorporated`); hoặc thêm tay. Rồi `/generate-code` + `/dev-gen-test`
|
|
57
57
|
- **Proposal là yêu cầu mới (PRD change request)** → chuyển PO sửa PRD trước
|
|
58
58
|
|
|
59
59
|
> Bug reports có thể đến từ hai nguồn: Tester dùng `/report-bug` trực tiếp, **hoặc** từ kết quả QC automation (`qc_status: fail` trong `.trace/*.tsv` → QC (hoặc tester) chạy `/report-bug` → `/sync` → dev thấy tại đây). Cả hai đều dùng cùng luồng `/fix-bug`.
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
- [ ] `/review-code` → không có issue Critical hoặc Major chưa xử lý
|
|
8
8
|
- [ ] Code trace về đúng BDD scenarios trong `my-project-specs/specs/{domain}/{prd-slug}/bdd/`
|
|
9
9
|
- [ ] Code có `@trace.bdd` comment cho các function implement BDD scenario
|
|
10
|
+
- [ ] BDD `@trace.status: approved` (đã duyệt) trước khi code/PR; FE/App: Design Spec `Status: approved` + `Built from PRD` khớp PRD hiện tại
|
|
10
11
|
- [ ] Tech Docs đã được update nếu có thay đổi API/DB schema
|
|
11
12
|
- [ ] **Không tự sửa BDD** — BDD là của PO, nếu cần update thì báo PO rồi pull lại
|
|
12
13
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
(lấy PRD + BDD mới nhất từ PO)
|
|
22
22
|
|
|
23
23
|
2. /review-context my-project-specs/specs/payment/checkout/{TICKET-ID}-checkout.md
|
|
24
|
-
→ Kiểm tra
|
|
24
|
+
→ Kiểm tra Status = approved (bảng Metadata PRD; không code khi còn draft)
|
|
25
25
|
→ Đọc kỹ AC, UC, BR
|
|
26
26
|
|
|
27
27
|
3. Đọc BDD tương ứng theo platform của mình:
|
|
@@ -343,7 +343,7 @@ code . ← hoặc claude .
|
|
|
343
343
|
# → sync Living Docs panel
|
|
344
344
|
|
|
345
345
|
# 4. Framework tự detect umbrella mode từ project-context.yaml
|
|
346
|
-
# Khi chạy /review-context với PRD có
|
|
346
|
+
# Khi chạy /review-context với PRD có Domain: be (bảng Metadata)
|
|
347
347
|
# → CODE route tới mass-product-be/ · BDD đọc từ spec repo mass-product-spec/specs/{domain}/{prd-slug}/bdd/ (spec_source set)
|
|
348
348
|
```
|
|
349
349
|
|
|
@@ -27,7 +27,7 @@ flowchart TD
|
|
|
27
27
|
|
|
28
28
|
TD --> E["/dev-gen-test → /dev-run-test<br/>dev tự kiểm (dev_selftest)<br/>ghi vào spec .trace"]
|
|
29
29
|
E --> F["/validate-traces<br/>cập nhật Living Docs (.living-docs)"]
|
|
30
|
-
F --> G["/review-code — 4
|
|
30
|
+
F --> G["/review-code — 4 lăng kính:<br/>Traceability · Layer · Coding Standards · Spec Compliance"]
|
|
31
31
|
G --> H([Tạo PR → notify PO/SA review])
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -45,7 +45,7 @@ Nhận thông báo PRD + BDD mới từ PO
|
|
|
45
45
|
│
|
|
46
46
|
▼
|
|
47
47
|
/review-context {prd-file}
|
|
48
|
-
→ Kiểm tra
|
|
48
|
+
→ Kiểm tra Domain, Status = approved (bảng Metadata PRD)
|
|
49
49
|
→ Đọc hiểu AC, UC, BR trong PRD
|
|
50
50
|
→ Đọc BDD tương ứng trong specs/{domain}/{prd-slug}/bdd/{platform}/
|
|
51
51
|
→ Nếu có gì không rõ: hỏi PO TRƯỚC khi tiếp tục
|
|
@@ -98,7 +98,7 @@ FE/App track (web|app) ── KHÔNG chặn chờ BE ──
|
|
|
98
98
|
│
|
|
99
99
|
▼
|
|
100
100
|
/review-code {files}
|
|
101
|
-
→ 4
|
|
101
|
+
→ 4 lăng kính: Traceability / Layer Architecture / Coding Standards / Spec Compliance
|
|
102
102
|
→ Fix issues trước khi tạo PR
|
|
103
103
|
│
|
|
104
104
|
▼
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Guides](README.md) › Checklist Input PRD
|
|
2
|
+
|
|
3
|
+
# Checklist Input PRD — Để PRD Chuẩn Ngay Lần Đầu
|
|
4
|
+
|
|
5
|
+
> Muốn `/generate-prd` ra PRD tốt **ngay lần đầu**, đừng trông vào `/refine-prd` để vá — hãy chuẩn bị đúng đầu vào trước.
|
|
6
|
+
|
|
7
|
+
## Hiểu trước cho đúng
|
|
8
|
+
|
|
9
|
+
- **PRD sinh ra từ một file khảo sát (product-definition)** — output của `/define-product`. Bạn **không gõ thẳng** PRD.
|
|
10
|
+
- **Không có "generate-prd cho BE" riêng.** PRD là tài liệu nghiệp vụ **dùng chung cho mọi platform** (một bản phục vụ cả FE/App/BE). Cái "system/BE" chỉ xuất hiện ở bước sau (`/generate-bdd`).
|
|
11
|
+
- Vì vậy "PRD chuẩn ngay lần đầu" = **chuẩn bị tốt 7 thứ dưới đây trước khi chạy `/generate-prd`**.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 7 câu tự hỏi trước khi bấm `/generate-prd`
|
|
16
|
+
|
|
17
|
+
**1. Bản khảo sát đã làm xong chưa?**
|
|
18
|
+
Đã chạy `/define-product` đi hết 7 bước, không bỏ dở. Máy sẽ **không cho** sinh PRD nếu còn dang dở.
|
|
19
|
+
→ *Vì PRD là tài liệu để ký duyệt — không dựng từ thứ chưa chốt.*
|
|
20
|
+
|
|
21
|
+
**2. "Luật" và "cách xử lý" của tính năng đã viết rõ chưa?** *(quan trọng nhất)*
|
|
22
|
+
Hệ thống **phải làm gì / không được làm gì** (Business Rules), và **xử lý ra sao** trong từng trường hợp (Business Logic). Viết cụ thể, đừng để câu chung chung kiểu "xử lý hợp lý".
|
|
23
|
+
→ *Đây là phần dev dựa vào để code. Mơ hồ ở đây = code sai ở đó.*
|
|
24
|
+
|
|
25
|
+
**3. Đã liệt kê các trường hợp hỏng chưa?**
|
|
26
|
+
Không chỉ lúc chạy ngon, mà cả lúc lỗi: thiếu dữ liệu, điều kiện không thoả, hai người bấm cùng lúc, service khác chết.
|
|
27
|
+
→ *Hệ thống sống nhờ xử lý đúng mấy ca lỗi này; quên là lỗ hổng.*
|
|
28
|
+
|
|
29
|
+
**4. Tính năng này cần gì từ service/đội khác không?**
|
|
30
|
+
Ghi rõ: **cần dữ liệu/khả năng gì, lấy từ ai, để làm gì**. Nếu không cần thì ghi "Không có".
|
|
31
|
+
→ *Tính năng hiếm khi đứng một mình; thiếu mục này dễ tắc giữa chừng.*
|
|
32
|
+
|
|
33
|
+
**5. API của tính năng thuộc loại nào? — phải quyết trước**
|
|
34
|
+
Chọn 1 trong 3:
|
|
35
|
+
- **Đã có sẵn** (API chạy production rồi) → **đưa đường dẫn tới tài liệu API thật** (file swagger/openapi, link, hoặc thư mục code BE) **mà máy mở được**. Mở không được → PRD sẽ ghi "còn thiếu", chưa chuẩn.
|
|
36
|
+
- **Tự làm mới** → để trống, thiết kế sau ở `/generate-tech-docs`.
|
|
37
|
+
- **Đối tác đang làm song song** → chọn loại này (đừng chọn "đã có sẵn").
|
|
38
|
+
→ *Đây là chỗ quyết định độ chuẩn nhiều nhất cho tính năng BE.*
|
|
39
|
+
|
|
40
|
+
**6. Mỗi tiêu chí nghiệm thu (AC) có kiểm được đúng/sai rõ ràng không?**
|
|
41
|
+
Tránh kiểu "nhanh", "ổn". Phải đo được.
|
|
42
|
+
→ *AC mơ hồ thì sau này không ai biết tính năng "đạt" hay "chưa".*
|
|
43
|
+
|
|
44
|
+
**7. Tên gọi và dữ liệu đã dùng đúng từ điển chung chưa?**
|
|
45
|
+
Đảm bảo `business-dictionary.md` (từ chuẩn) và `core-entities.md` (danh sách thực thể/trường dữ liệu) đã cập nhật cho tính năng này.
|
|
46
|
+
→ *Gọi sai tên một bảng/trường là lệch cả chuỗi sau.*
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Checklist nhanh
|
|
51
|
+
|
|
52
|
+
- [ ] Khảo sát `/define-product` đã xong (7 bước, không gap)
|
|
53
|
+
- [ ] Business Rules + cách xử lý viết rõ, không mơ hồ *(đòn bẩy lớn nhất)*
|
|
54
|
+
- [ ] Đã liệt kê đủ các ca lỗi / trường hợp hỏng
|
|
55
|
+
- [ ] Phụ thuộc service/đội khác ghi rõ (hoặc "Không có")
|
|
56
|
+
- [ ] Đã quyết **loại API**; nếu "đã có sẵn" → đường dẫn contract **mở được**
|
|
57
|
+
- [ ] Mỗi AC kiểm được đúng/sai rõ ràng
|
|
58
|
+
- [ ] Từ điển chung + danh sách thực thể đã cập nhật
|
|
59
|
+
- [ ] Định danh đúng: Domain (khớp cấu hình service), PO, mã Ticket
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Riêng tính năng BE — chú ý nhất ở đâu?
|
|
64
|
+
|
|
65
|
+
BE không có Design Spec / màn hình đỡ phía trước, nên **PRD chính là spec**. Hai thứ quyết định độ chuẩn:
|
|
66
|
+
|
|
67
|
+
1. **Business Rules + Business Logic (câu 2)** — vì BE đọc PRD thẳng rồi sinh System BDD từ đây.
|
|
68
|
+
2. **Loại API (câu 5)** — BE "đã có sẵn" mà đường dẫn contract mở không được thì PRD sẽ kẹt ở trạng thái "còn thiếu".
|
|
69
|
+
|
|
70
|
+
> Tính năng BE thuần **không có màn hình** → phần Wireframe để trống/N/A là đúng; đừng để máy bịa màn hình.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Sau khi sinh PRD
|
|
75
|
+
|
|
76
|
+
`/refine-prd` và `/review-context` là để **nhặt sạn** (làm rõ, bắt mâu thuẫn, thêm edge case) — **không phải** để vá cái thiếu từ khâu khảo sát. Chuẩn bị tốt 7 thứ trên thì hai bước này nhẹ tênh.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Map sang các bước của `/define-product` *(cho ai muốn chính xác)*
|
|
81
|
+
|
|
82
|
+
| Câu hỏi | Nằm ở bước nào của discovery |
|
|
83
|
+
|---|---|
|
|
84
|
+
| 1. Khảo sát xong | toàn bộ Phase 1–7, `Status: completed` |
|
|
85
|
+
| 2. Luật + cách xử lý | Phase 4 (Business Rules) + Phase 5 (Business Logic) |
|
|
86
|
+
| 3. Ca lỗi | Phase 2 (Edge Cases) |
|
|
87
|
+
| 4. Phụ thuộc liên service | Phase 1, câu 8 |
|
|
88
|
+
| 5. Loại API | hỏi lúc `/generate-prd` (API Source) |
|
|
89
|
+
| 6. AC kiểm được | Phase 6 (Acceptance Criteria) |
|
|
90
|
+
| 7. Từ điển / thực thể | Phase 0 (Knowledge Sync) + `business-dictionary.md` / `core-entities.md` |
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
← [Guides](README.md) · Liên quan: [Checklist Input BDD (System/BE)](bdd-input-checklist.md) · [Quy tắc viết PRD](product-owner/prd-writing-rules.md) · [Checklist handoff](product-owner/handoff-checklist.md)
|
|
@@ -10,6 +10,8 @@ Tài liệu dành cho **Product Owner (PO)** và **Business Analyst (BA)** — v
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| [Commands](commands.md) | Bảng lệnh cho PO/BA · project lessons · xử lý feedback tester |
|
|
12
12
|
| [Tình huống thực tế](scenarios.md) | 12 scenario: tính năng mới, design spec, BDD, PRD thay đổi, brownfield, **System BDD synthesis & cross-platform conflict**, ... |
|
|
13
|
+
| [Checklist input PRD](../prd-input-checklist.md) | 7 câu chuẩn bị để PRD chuẩn ngay lần đầu (kèm lưu ý BE) |
|
|
14
|
+
| [Checklist input BDD (System/BE)](../bdd-input-checklist.md) | Chuẩn bị để `/generate-bdd` (system) chuẩn ngay lần đầu |
|
|
13
15
|
| [Quy tắc viết PRD](prd-writing-rules.md) | Platform-agnostic · testable AC · negative path · BR numbering |
|
|
14
16
|
| [Checklist handoff](handoff-checklist.md) | Checklist verify trước khi thông báo dev team bắt đầu |
|
|
15
17
|
|
|
@@ -32,8 +34,8 @@ PO/BA Dev team
|
|
|
32
34
|
|
|
33
35
|
**PO/BA chịu trách nhiệm:**
|
|
34
36
|
- Đảm bảo PRD platform-agnostic (không chứa UI details hay API specs)
|
|
35
|
-
- Đặt
|
|
36
|
-
- Cập nhật
|
|
37
|
+
- Đặt row `Domain` (bảng Metadata) đúng để dev team routing hoạt động
|
|
38
|
+
- Cập nhật `Status: approved` (bảng Metadata) trước khi handoff
|
|
37
39
|
- **Generate BDD cho tất cả platforms** theo thứ tự **outside-in: web → app → system** — System BDD được **tổng hợp từ web+app BDD** (project chỉ-BE thì system gen thẳng từ PRD). Xem [scenarios](scenarios.md).
|
|
38
40
|
- Thông báo dev team khi có PRD hoặc BDD mới/update
|
|
39
41
|
|
|
@@ -51,7 +53,7 @@ PRD (WHAT + WHY) → BDD (HOW verified) → Code (HOW built)
|
|
|
51
53
|
spec repo spec repo dev repo
|
|
52
54
|
```
|
|
53
55
|
|
|
54
|
-
> **Sau khi BDD approved → QC chạy pipeline tự động:** Khi BDD của một UC được
|
|
56
|
+
> **Sau khi BDD approved → QC chạy pipeline tự động:** Khi BDD của một UC được duyệt (đặt `@trace.status: approved` sau review-context BDD sạch), QC team chạy bộ lệnh native `/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report` — đọc official `.feature`, generate + run Playwright/pytest, rồi ghi `qc_status` (official QC coverage) vào Living Docs. PO không chạy QC, nhưng nên biết bước này tồn tại ở downstream. Chi tiết: [chương QC Automation](../tester/qc-automation.md).
|
|
55
57
|
|
|
56
58
|
**3 lý do chính BDD thuộc PO:**
|
|
57
59
|
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
> **Project Lessons:** Nếu AI cứ lặp lại một kiểu sai khi gen PRD/BDD (vd: quên negative path, dùng sai thuật ngữ), chạy `/learn "AI hay X, đúng phải Y"` (category `prd`/`bdd`). Lesson được nạp vào đầu mọi lệnh → AI không lặp lại. Commit file lessons để cả team dùng chung.
|
|
23
23
|
|
|
24
24
|
> **Xử lý feedback từ tester:** Tester `/report-bug` và `/propose-scenario` commit vào `{spec_source}/feedback/` của spec repo. PO/Dev **thấy chúng khi chạy `/sync`** (dòng `📥 New tester feedback` liệt kê bug + proposal mới kéo về). PO review proposal:
|
|
25
|
-
> - **Map vào AC sẵn có** → coverage gap thật →
|
|
25
|
+
> - **Map vào AC sẵn có** → coverage gap thật → PO/Dev đặt `Status: accepted` trong file proposal → `/generate-bdd` tự chèn vào `.feature` rồi lưu trữ (`incorporated`); hoặc Dev thêm tay.
|
|
26
26
|
> - Là **PRD change request** (behavior chưa có trong PRD) → PO thêm/sửa AC → bump version → `/generate-bdd` lại.
|
|
27
27
|
|
|
28
28
|
---
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
Trước khi thông báo dev team bắt đầu, kiểm tra:
|
|
6
6
|
|
|
7
7
|
**Metadata:**
|
|
8
|
-
- [ ]
|
|
9
|
-
- [ ]
|
|
10
|
-
- [ ]
|
|
11
|
-
- [ ]
|
|
8
|
+
- [ ] Row `Ticket` (bảng Metadata) có và đúng format (vd: FEAT-01)
|
|
9
|
+
- [ ] Row `Domain` có và khớp với domain names đã thống nhất với dev team
|
|
10
|
+
- [ ] Row `Status` = `approved` (không phải draft)
|
|
11
|
+
- [ ] Row `Version` có (vd: 1.0)
|
|
12
12
|
|
|
13
13
|
**Nội dung PRD:**
|
|
14
14
|
- [ ] Tất cả `{{PLACEHOLDER}}` đã được điền
|
|
@@ -23,7 +23,7 @@ Trước khi thông báo dev team bắt đầu, kiểm tra:
|
|
|
23
23
|
- [ ] Không có P3 conflict với PRD khác trong cùng domain
|
|
24
24
|
|
|
25
25
|
**Cho FE/App thêm:**
|
|
26
|
-
- [ ] Design Spec đã tạo và
|
|
26
|
+
- [ ] Design Spec đã tạo và `Status: approved` trong Metadata (không còn `draft`)
|
|
27
27
|
- [ ] Mỗi screen có Figma link node-level (`?node-id=`) — không screen nào bị flag ❌ Missing
|
|
28
28
|
- [ ] Designer đã sign-off (gate này bị BLOCKED nếu còn screen thiếu node-id link)
|
|
29
29
|
|
|
@@ -40,13 +40,13 @@ Mở findings file, xem xét từng finding: `accepted` → apply · `modified`
|
|
|
40
40
|
```
|
|
41
41
|
/review-context specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
42
42
|
```
|
|
43
|
-
Kiểm tra:
|
|
43
|
+
Kiểm tra: `Status`, `Domain` (bảng Metadata), completeness.
|
|
44
44
|
|
|
45
45
|
**Bước 5 — Approve PRD:**
|
|
46
46
|
```yaml
|
|
47
|
-
# Trong
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
# Trong bảng Metadata của PRD, cập nhật:
|
|
48
|
+
# | **Status** | approved |
|
|
49
|
+
# | **Version** | 1.0 |
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
**Bước 6 — Tạo Design Spec (FE/App):**
|
|
@@ -55,7 +55,7 @@ Kiểm tra: `@trace.status`, `@trace.domain`, completeness.
|
|
|
55
55
|
```
|
|
56
56
|
Agent hỏi platform (web / app). PO phải cung cấp **Figma link node-level** (URL chứa `?node-id=`, lấy bằng right-click vào frame → "Copy link to selection") cho **mỗi screen**. Screen nào thiếu link → bị flag ❌ Missing, Status giữ `draft`, `/generate-bdd` bị BLOCKED cho đến khi đủ link.
|
|
57
57
|
|
|
58
|
-
Sau khi Designer review + confirm đủ Figma node-id links →
|
|
58
|
+
Sau khi Designer review + confirm đủ Figma node-id links → đặt `Status: approved` trong Metadata Design Spec.
|
|
59
59
|
|
|
60
60
|
**Bước 7 — Generate BDD:**
|
|
61
61
|
```
|
|
@@ -84,7 +84,7 @@ git push
|
|
|
84
84
|
|
|
85
85
|
```
|
|
86
86
|
/define-product → product definition
|
|
87
|
-
/generate-prd → PRD với
|
|
87
|
+
/generate-prd → PRD với Domain: auth (bảng Metadata)
|
|
88
88
|
/review-context --fix → auto-fix
|
|
89
89
|
/generate-design-spec → design spec cho FE (nếu có designer)
|
|
90
90
|
/generate-bdd → web → specs/auth/FEAT-01-login/bdd/web/
|
|
@@ -115,7 +115,7 @@ git push
|
|
|
115
115
|
```
|
|
116
116
|
Output: `specs/auth/FEAT-01-login/design-spec/FEAT-01-design-spec-web.md`
|
|
117
117
|
|
|
118
|
-
Mỗi screen cần Figma link node-id. Screen thiếu → flag ❌ Missing, BLOCKED. Sau khi Designer review →
|
|
118
|
+
Mỗi screen cần Figma link node-id. Screen thiếu → flag ❌ Missing, BLOCKED. Sau khi Designer review → đặt `Status: approved` trong Metadata Design Spec.
|
|
119
119
|
|
|
120
120
|
**Bước 2 — Generate BDD:**
|
|
121
121
|
```
|
|
@@ -162,7 +162,8 @@ Lặp lại cho đến khi `recommendation: APPROVED`.
|
|
|
162
162
|
|
|
163
163
|
**Bước 1 — Đổi status về draft:**
|
|
164
164
|
```yaml
|
|
165
|
-
|
|
165
|
+
# Trong bảng Metadata PRD:
|
|
166
|
+
# | **Status** | draft |
|
|
166
167
|
```
|
|
167
168
|
|
|
168
169
|
**Bước 2 — Sửa nội dung:**
|
|
@@ -178,9 +179,9 @@ Lặp lại cho đến khi `recommendation: APPROVED`.
|
|
|
178
179
|
|
|
179
180
|
**Bước 4 — Approve và thông báo:**
|
|
180
181
|
```yaml
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
# Trong bảng Metadata PRD:
|
|
183
|
+
# | **Status** | approved |
|
|
184
|
+
# | **Version** | 1.1 | # minor bump (chỉ thêm AC); major (2.0) nếu thay đổi cơ bản
|
|
184
185
|
```
|
|
185
186
|
```bash
|
|
186
187
|
git add specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
@@ -225,7 +226,7 @@ services:
|
|
|
225
226
|
specs_dir: "loyalty-service/specs/bdd"
|
|
226
227
|
```
|
|
227
228
|
|
|
228
|
-
**Bước 3 — Viết PRD bình thường với
|
|
229
|
+
**Bước 3 — Viết PRD bình thường với `Domain: loyalty` (bảng Metadata).**
|
|
229
230
|
|
|
230
231
|
> **Lưu ý:** Nếu dev team chưa cập nhật services config → `/review-context` P0 check sẽ cảnh báo domain không match.
|
|
231
232
|
|
|
@@ -281,7 +282,7 @@ specs/
|
|
|
281
282
|
|
|
282
283
|
```bash
|
|
283
284
|
# Xem nhanh tất cả PRDs và status:
|
|
284
|
-
grep -
|
|
285
|
+
grep -rn "\*\*Status\*\*" specs/ --include="*.md"
|
|
285
286
|
```
|
|
286
287
|
|
|
287
288
|
---
|
|
@@ -290,10 +291,11 @@ grep -r "@trace.status" specs/ --include="*.md"
|
|
|
290
291
|
|
|
291
292
|
**Checklist trước khi thông báo:**
|
|
292
293
|
```yaml
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
294
|
+
# Bảng Metadata PRD:
|
|
295
|
+
# | **Ticket** | FEAT-01 | ✅ có (đúng format)
|
|
296
|
+
# | **Domain** | auth | ✅ khớp services keys của dev team
|
|
297
|
+
# | **Status** | approved | ✅ đã approved
|
|
298
|
+
# | **Version** | 1.0 | ✅ có version number
|
|
297
299
|
```
|
|
298
300
|
|
|
299
301
|
```
|