@anhth2/spec-driven-dev-plugin 0.10.0 → 0.12.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.
- package/commands/debug.md +43 -8
- package/commands/define-product.md +43 -8
- package/commands/dev-gen-test.md +44 -9
- package/commands/dev-gen-test.tmpl +1 -1
- package/commands/dev-run-test.md +48 -10
- package/commands/dev-run-test.tmpl +5 -2
- package/commands/dev-smoke-test.md +43 -8
- package/commands/fix-bug.md +79 -14
- package/commands/fix-bug.tmpl +36 -6
- package/commands/generate-bdd.md +49 -10
- package/commands/generate-bdd.tmpl +6 -2
- package/commands/generate-code.md +44 -9
- package/commands/generate-code.tmpl +1 -1
- package/commands/generate-design-spec.md +43 -8
- package/commands/generate-prd.md +43 -8
- package/commands/generate-spec-manifest.md +43 -8
- package/commands/generate-tech-docs.md +43 -8
- package/commands/learn.md +43 -8
- package/commands/propose-scenario.md +74 -19
- package/commands/propose-scenario.tmpl +31 -11
- package/commands/qc-analyze.md +534 -0
- package/commands/qc-analyze.tmpl +86 -0
- package/commands/qc-design-test.md +515 -0
- package/commands/qc-design-test.tmpl +67 -0
- package/commands/qc-plan.md +497 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +508 -0
- package/commands/qc-report.tmpl +60 -0
- package/commands/qc-review.md +501 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +549 -0
- package/commands/qc-run-test.tmpl +83 -0
- package/commands/refine-prd.md +43 -8
- package/commands/report-bug.md +59 -10
- package/commands/report-bug.tmpl +16 -2
- package/commands/review-code.md +43 -8
- package/commands/review-context.md +43 -8
- package/commands/review-tech-docs.md +43 -8
- package/commands/setup-ai-first.md +7 -0
- package/commands/sync.md +19 -9
- package/commands/sync.tmpl +12 -9
- package/commands/update-framework.md +7 -0
- package/commands/validate-traces.md +67 -12
- package/commands/validate-traces.tmpl +24 -4
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +43 -8
- package/core/commands/define-product.md +43 -8
- package/core/commands/dev-gen-test.md +44 -9
- package/core/commands/dev-run-test.md +48 -10
- package/core/commands/dev-smoke-test.md +43 -8
- package/core/commands/fix-bug.md +79 -14
- package/core/commands/generate-bdd.md +49 -10
- package/core/commands/generate-code.md +44 -9
- package/core/commands/generate-design-spec.md +43 -8
- package/core/commands/generate-prd.md +43 -8
- package/core/commands/generate-spec-manifest.md +43 -8
- package/core/commands/generate-tech-docs.md +43 -8
- package/core/commands/learn.md +43 -8
- package/core/commands/propose-scenario.md +74 -19
- package/core/commands/qc-analyze.md +534 -0
- package/core/commands/qc-design-test.md +515 -0
- package/core/commands/qc-plan.md +497 -0
- package/core/commands/qc-report.md +508 -0
- package/core/commands/qc-review.md +501 -0
- package/core/commands/qc-run-test.md +549 -0
- package/core/commands/refine-prd.md +43 -8
- package/core/commands/report-bug.md +59 -10
- package/core/commands/review-code.md +43 -8
- package/core/commands/review-context.md +43 -8
- package/core/commands/review-tech-docs.md +43 -8
- package/core/commands/setup-ai-first.md +7 -0
- package/core/commands/sync.md +19 -9
- package/core/commands/update-framework.md +7 -0
- package/core/commands/validate-traces.md +67 -12
- package/core/modules/qc-playwright/stack-profile.yaml +65 -0
- package/core/skills/code/SKILL.md +50 -8
- package/core/skills/debug/SKILL.md +57 -8
- package/core/skills/design-spec/SKILL.md +43 -8
- package/core/skills/discovery/SKILL.md +43 -8
- package/core/skills/prd/SKILL.md +14 -0
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/core/skills/qc/qa-analyst/business-rules.md +59 -0
- package/core/skills/qc/qa-analyst/data-flow.md +64 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/core/skills/qc/qa-designer/functional/api.md +45 -0
- package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/core/skills/qc/qa-designer/integration/api.md +42 -0
- package/core/skills/qc/qa-designer/integration/db.md +39 -0
- package/core/skills/qc/qa-designer/integration/gui.md +40 -0
- package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/core/skills/qc/qa-designer/non-functional.md +40 -0
- package/core/skills/qc/qa-planner/test-plan.md +120 -0
- package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/core/skills/qc/qa-runner/e2e.md +49 -0
- package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/core/skills/qc/qa-runner/functional/api.md +35 -0
- package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/core/skills/qc/qa-runner/integration.md +47 -0
- package/core/skills/qc/qa-runner/non-functional.md +49 -0
- package/core/skills/qc/qa-runner/report/report.md +37 -0
- package/core/skills/setup-ai-first/SKILL.md +7 -0
- package/core/skills/spec/SKILL.md +14 -0
- package/core/skills/test/SKILL.md +93 -16
- package/core/steps/context-loader.md +36 -8
- package/core/steps/report-footer.md +7 -0
- package/core/templates/project-context.yaml +27 -1
- package/docs/01-getting-started/README.md +19 -0
- package/docs/01-getting-started/core-concepts.md +102 -0
- package/docs/01-getting-started/installation.md +156 -0
- package/docs/01-getting-started/quickstart.md +85 -0
- package/docs/02-guides/README.md +27 -0
- package/docs/02-guides/developer/README.md +46 -0
- package/docs/02-guides/developer/bdd-and-trace.md +123 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +15 -0
- package/docs/02-guides/developer/scenarios.md +448 -0
- package/docs/02-guides/developer/workflow.md +61 -0
- package/docs/02-guides/product-owner/README.md +77 -0
- package/docs/02-guides/product-owner/commands.md +30 -0
- package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
- package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
- package/docs/02-guides/product-owner/scenarios.md +357 -0
- package/docs/02-guides/qc-automation.md +157 -0
- package/docs/02-guides/tester/README.md +74 -0
- package/docs/02-guides/tester/bug-reporting.md +117 -0
- package/docs/02-guides/tester/reading-specs.md +79 -0
- package/docs/02-guides/tester/scenarios.md +186 -0
- package/docs/02-guides/tester/spec-manifest.md +124 -0
- package/docs/02-guides/tester/test-checklist.md +31 -0
- package/docs/02-guides/tester/workflow.md +80 -0
- package/docs/03-concepts/README.md +19 -0
- package/docs/03-concepts/architecture.md +245 -0
- package/docs/03-concepts/pipeline.md +262 -0
- package/docs/03-concepts/traceability.md +149 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +362 -0
- package/docs/04-operations/publishing.md +137 -0
- package/docs/04-operations/sync-and-update.md +365 -0
- package/docs/05-reference/README.md +29 -0
- package/docs/05-reference/commands.md +229 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +152 -0
- package/docs/README.md +51 -0
- package/modules/qc-playwright/stack-profile.yaml +65 -0
- package/package.json +2 -2
- package/skills/code/SKILL.md +50 -8
- package/skills/debug/SKILL.md +57 -8
- package/skills/design-spec/SKILL.md +43 -8
- package/skills/discovery/SKILL.md +43 -8
- package/skills/prd/SKILL.md +14 -0
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/skills/qc/qa-analyst/business-rules.md +59 -0
- package/skills/qc/qa-analyst/data-flow.md +64 -0
- package/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/skills/qc/qa-designer/functional/api.md +45 -0
- package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/skills/qc/qa-designer/integration/api.md +42 -0
- package/skills/qc/qa-designer/integration/db.md +39 -0
- package/skills/qc/qa-designer/integration/gui.md +40 -0
- package/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/skills/qc/qa-designer/non-functional.md +40 -0
- package/skills/qc/qa-planner/test-plan.md +120 -0
- package/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/skills/qc/qa-runner/e2e.md +49 -0
- package/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/skills/qc/qa-runner/functional/api.md +35 -0
- package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/skills/qc/qa-runner/integration.md +47 -0
- package/skills/qc/qa-runner/non-functional.md +49 -0
- package/skills/qc/qa-runner/report/report.md +37 -0
- package/skills/setup-ai-first/SKILL.md +7 -0
- package/skills/spec/SKILL.md +14 -0
- package/skills/test/SKILL.md +93 -16
- package/steps/context-loader.md +36 -8
- package/steps/report-footer.md +7 -0
- package/templates/project-context.yaml +27 -1
- package/ARCHITECTURE.md +0 -258
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
[📚 Docs](../../README.md) › [Guides](../README.md) › Product Owner / BA
|
|
2
|
+
|
|
3
|
+
# Hướng Dẫn PO/BA — Spec-Driven Dev
|
|
4
|
+
|
|
5
|
+
Tài liệu dành cho **Product Owner (PO)** và **Business Analyst (BA)** — vai trò, commands, các tình huống thực tế, và quy tắc viết PRD.
|
|
6
|
+
|
|
7
|
+
## Mục Lục
|
|
8
|
+
|
|
9
|
+
| Trang | Nội dung |
|
|
10
|
+
|---|---|
|
|
11
|
+
| [Commands](commands.md) | Bảng lệnh cho PO/BA · project lessons · xử lý feedback tester |
|
|
12
|
+
| [Tình huống thực tế](scenarios.md) | 11 scenario: tính năng mới, design spec, BDD, PRD thay đổi, conflict, brownfield, ... |
|
|
13
|
+
| [Quy tắc viết PRD](prd-writing-rules.md) | Platform-agnostic · testable AC · negative path · BR numbering |
|
|
14
|
+
| [Checklist handoff](handoff-checklist.md) | Checklist verify trước khi thông báo dev team bắt đầu |
|
|
15
|
+
|
|
16
|
+
## Vai Trò PO/BA Trong Framework
|
|
17
|
+
|
|
18
|
+
PO/BA là người duy nhất viết và approve tài liệu đầu vào + BDD:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
PO/BA Dev team
|
|
22
|
+
────────────────────── ──────────────────────────────
|
|
23
|
+
/define-product đọc product-definition + BDD
|
|
24
|
+
/generate-prd → /review-context (xác nhận PRD)
|
|
25
|
+
/refine-prd (SA review) /generate-tech-docs
|
|
26
|
+
/review-context /generate-code + tests
|
|
27
|
+
/generate-design-spec → /review-code / /dev-run-test
|
|
28
|
+
/generate-bdd (web)
|
|
29
|
+
/generate-bdd (app)
|
|
30
|
+
/generate-bdd (system)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**PO/BA chịu trách nhiệm:**
|
|
34
|
+
- Đảm bảo PRD platform-agnostic (không chứa UI details hay API specs)
|
|
35
|
+
- Đặt `@trace.domain` đúng để dev team routing hoạt động
|
|
36
|
+
- Cập nhật `@trace.status: approved` trước khi handoff
|
|
37
|
+
- **Generate BDD cho tất cả platforms** (web, app, system) trong spec repo
|
|
38
|
+
- Thông báo dev team khi có PRD hoặc BDD mới/update
|
|
39
|
+
|
|
40
|
+
**PO/BA KHÔNG cần quan tâm:**
|
|
41
|
+
- Tech docs — dev team tự generate
|
|
42
|
+
- Source code — hoàn toàn dev team
|
|
43
|
+
|
|
44
|
+
### Tại sao BDD thuộc trách nhiệm của PO?
|
|
45
|
+
|
|
46
|
+
Đặt BDD trong spec repo giúp **tổng hợp toàn bộ tài liệu nghiệp vụ về một chỗ**.
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
PRD (WHAT + WHY) → BDD (HOW verified) → Code (HOW built)
|
|
50
|
+
↑ PO/BA ↑ PO/BA ↑ Dev
|
|
51
|
+
spec repo spec repo dev repo
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
> **Sau khi BDD approved → QC chạy pipeline tự động:** Khi BDD của một UC được approve, 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: [QC Automation Guide](../qc-automation.md).
|
|
55
|
+
|
|
56
|
+
**3 lý do chính BDD thuộc PO:**
|
|
57
|
+
|
|
58
|
+
**1. Tổng hợp tài liệu nghiệp vụ tại một nơi** — Khi BDD nằm trong spec repo cùng PRD, mọi spec nghiệp vụ đều ở một chỗ — dễ review, audit, và generate báo cáo. Dev team đọc spec từ submodule, không cần tự suy ra scenarios.
|
|
59
|
+
|
|
60
|
+
**2. BDD viết ở mức nghiệp vụ — PO hiểu được** — BDD trong spec repo mô tả **hành vi hệ thống** bằng ngôn ngữ nghiệp vụ, không phải implementation detail:
|
|
61
|
+
|
|
62
|
+
| Platform | BDD trong spec repo (PO viết) | Test code (Dev viết) |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| Web | `When user submits login → sees dashboard` | `await page.click('#login-btn')` |
|
|
65
|
+
| App | `When user taps Login → navigates to Home` | `element(by.id('login')).tap()` |
|
|
66
|
+
| System | `When login request received → returns auth token` | `POST /api/auth/login assertions` |
|
|
67
|
+
|
|
68
|
+
**3. System BDD là nguồn sự thật cho BE** — tổng hợp từ FE + App BDD:
|
|
69
|
+
- FE BDD: "User expects auth token để truy cập tiếp"
|
|
70
|
+
- App BDD: "App expects user profile sau khi đăng nhập"
|
|
71
|
+
- System BDD: "BE phải trả `{ token, user_profile }` để thỏa mãn cả 2 platform"
|
|
72
|
+
|
|
73
|
+
> Xem [Concepts › Traceability](../../03-concepts/traceability.md) để hiểu trace chain PRD → BDD → Code.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
*Xem thêm:* [Developer Guide](../developer/README.md) · [Tester Guide](../tester/README.md) · [QC Automation Guide](../qc-automation.md) · [Reference › Commands](../../05-reference/commands.md)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Commands
|
|
2
|
+
|
|
3
|
+
# Commands Dành Cho PO/BA
|
|
4
|
+
|
|
5
|
+
| Command | Mục đích | Khi nào dùng |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `/setup-ai-first` | Khởi tạo spec repo | 1 lần duy nhất khi bắt đầu project |
|
|
8
|
+
| `/define-product` | Tạo product definition | Trước khi viết PRD — capture ý tưởng tính năng |
|
|
9
|
+
| `/generate-prd` | Tạo PRD từ product definition | Sau khi product definition đủ rõ |
|
|
10
|
+
| `/refine-prd` | Review PRD qua 4 lens (QA/DEV/SA/PO) — fan-out song song + critic loop → findings đầy đủ trong 1 lần chạy | Trước khi share với dev team |
|
|
11
|
+
| `/review-context` | Review chất lượng + consistency của PRD (P-B check groups fan-out song song) | Sau refine, trước khi approve |
|
|
12
|
+
| `/review-context --fix` | Auto-fix các lỗi nhỏ trong PRD | Khi có nhiều lỗi minor tự sửa được |
|
|
13
|
+
| `/review-context --resume` | Apply các fix sau Review Board | Sau khi review findings |
|
|
14
|
+
| `/generate-design-spec` | Tạo Design Spec cho FE/App (cần Figma link node-level `?node-id=` cho từng screen) | Sau khi PRD approved, trước khi generate BDD |
|
|
15
|
+
| `/generate-bdd` | Tạo BDD cho web / app / system | Sau khi PRD + Design Spec approved |
|
|
16
|
+
| `/learn {text}` | Ghi lại lỗi AI hay lặp khi gen PRD/BDD thành guardrail | Khi AI lặp lại cùng kiểu sai trong PRD/BDD |
|
|
17
|
+
|
|
18
|
+
> Danh mục đầy đủ mọi command: [Reference › Commands](../../05-reference/commands.md).
|
|
19
|
+
|
|
20
|
+
> **Brownfield shortcut:** Nếu API đã tồn tại trên hệ thống cũ, thêm `API Source: existing` vào PRD Metadata + điền section "Existing API Contract". BDD generation sẽ dùng contract đó trực tiếp, T7 sign-off gate tự động được bỏ qua. Chi tiết: [Tình huống 11](scenarios.md#tình-huống-11--brownfield-api-đã-tồn-tại-trên-hệ-thống-cũ).
|
|
21
|
+
|
|
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
|
+
|
|
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 → để Dev thêm scenario vào `.feature` (hoặc regen).
|
|
26
|
+
> - Là **PRD change request** (behavior chưa có trong PRD) → PO thêm/sửa AC → bump version → `/generate-bdd` lại.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
← [Product Owner Guide](README.md) · Tiếp theo: [Tình huống thực tế](scenarios.md)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Checklist Handoff
|
|
2
|
+
|
|
3
|
+
# Checklist Handoff Cho Dev Team
|
|
4
|
+
|
|
5
|
+
Trước khi thông báo dev team bắt đầu, kiểm tra:
|
|
6
|
+
|
|
7
|
+
**Metadata:**
|
|
8
|
+
- [ ] `@trace.id` có và đúng format (vd: FEAT-01)
|
|
9
|
+
- [ ] `@trace.domain` có và khớp với domain names đã thống nhất với dev team
|
|
10
|
+
- [ ] `@trace.status: approved` (không phải draft/in-review)
|
|
11
|
+
- [ ] `@trace.version` có (vd: 1.0)
|
|
12
|
+
|
|
13
|
+
**Nội dung PRD:**
|
|
14
|
+
- [ ] Tất cả `{{PLACEHOLDER}}` đã được điền
|
|
15
|
+
- [ ] Ít nhất 1 UC với format `{TICKET-ID}-UC1`
|
|
16
|
+
- [ ] Mỗi UC có: Description, Actors, Preconditions, AC, BR
|
|
17
|
+
- [ ] Có cả happy path và error cases trong AC
|
|
18
|
+
- [ ] Không có UI details (button colors, API paths) trong PRD
|
|
19
|
+
- [ ] Changelog section có ít nhất 1 entry
|
|
20
|
+
|
|
21
|
+
**Framework check:**
|
|
22
|
+
- [ ] `/review-context` cho kết quả `APPROVED` (0 critical findings)
|
|
23
|
+
- [ ] Không có P3 conflict với PRD khác trong cùng domain
|
|
24
|
+
|
|
25
|
+
**Cho FE/App thêm:**
|
|
26
|
+
- [ ] Design Spec đã tạo và `@trace.status: approved` (không còn `draft`)
|
|
27
|
+
- [ ] Mỗi screen có Figma link node-level (`?node-id=`) — không screen nào bị flag ❌ Missing
|
|
28
|
+
- [ ] Designer đã sign-off (gate này bị BLOCKED nếu còn screen thiếu node-id link)
|
|
29
|
+
|
|
30
|
+
**BDD (bắt buộc trước khi handoff):**
|
|
31
|
+
- [ ] BDD web đã gen: `specs/bdd/{domain}/web/{TICKET-ID}-UC*.feature`
|
|
32
|
+
- [ ] BDD app đã gen: `specs/bdd/{domain}/app/{TICKET-ID}-UC*.feature` (nếu project có app)
|
|
33
|
+
- [ ] System BDD đã gen: `specs/bdd/{domain}/system/{TICKET-ID}-UC*.feature`
|
|
34
|
+
- [ ] Tất cả BDD files đã được review và không có `MISSING` trong Coverage Matrix
|
|
35
|
+
|
|
36
|
+
**Git:**
|
|
37
|
+
- [ ] Đã commit và push toàn bộ (`specs/prd/`, `specs/design-spec/`, `specs/bdd/`) lên spec repo
|
|
38
|
+
- [ ] Thông báo dev team domain name và BDD path để họ cập nhật `git submodule update --remote`
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
← [Quy tắc viết PRD](prd-writing-rules.md)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
[📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Quy tắc viết PRD
|
|
2
|
+
|
|
3
|
+
# Quy Tắc Viết PRD Hiệu Quả
|
|
4
|
+
|
|
5
|
+
## PRD là platform-agnostic
|
|
6
|
+
|
|
7
|
+
| ✅ Viết trong PRD | ❌ Không viết trong PRD |
|
|
8
|
+
|---|---|
|
|
9
|
+
| "Đăng nhập thành công → truy cập tính năng" | "Click button Login → hiển thị spinner" |
|
|
10
|
+
| "Sai password 5 lần → khoá 30 phút" | "API POST /auth/login trả về JWT" |
|
|
11
|
+
| "Session hết hạn → yêu cầu xác thực lại" | "Toast message màu đỏ ở góc phải" |
|
|
12
|
+
| "User có thể reset password qua email" | "Gọi sendgrid API để gửi email" |
|
|
13
|
+
|
|
14
|
+
UI details và API specs thuộc về:
|
|
15
|
+
- **Design Spec** → UI/UX cho FE/App
|
|
16
|
+
- **Tech Docs** → API contract, technical design (dev team tự generate). BE tech-design (API contract) nằm trong shared spec module khi `spec_source` được set.
|
|
17
|
+
|
|
18
|
+
## UC và AC phải testable
|
|
19
|
+
|
|
20
|
+
Mỗi AC phải trả lời được câu hỏi: **"Làm sao biết tính năng này hoạt động đúng?"**
|
|
21
|
+
|
|
22
|
+
❌ Không testable: `AC: "Hệ thống xử lý nhanh"` · `AC: "UI thân thiện với người dùng"`
|
|
23
|
+
|
|
24
|
+
✅ Testable: `AC: "Trang login load trong vòng 3 giây"` · `AC: "Error message hiển thị trong vòng 1 giây sau khi submit"`
|
|
25
|
+
|
|
26
|
+
## BR phải có ID liên tục
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
UC1 → BR1, BR2, BR3
|
|
30
|
+
UC2 → BR4, BR5 ← tiếp tục từ BR3, không reset về BR1
|
|
31
|
+
UC3 → BR6
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Luôn có negative path
|
|
35
|
+
|
|
36
|
+
Với mỗi AC happy path, cần có ít nhất 1 AC cho error case:
|
|
37
|
+
```
|
|
38
|
+
AC1 (happy): Đăng nhập thành công với email + password hợp lệ
|
|
39
|
+
AC2 (error): Đăng nhập thất bại khi password sai → hiển thị lỗi
|
|
40
|
+
AC3 (error): Tài khoản bị khoá → hiển thị thông báo + thời gian còn lại
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
← [Tình huống thực tế](scenarios.md) · Tiếp theo: [Checklist handoff](handoff-checklist.md)
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
[📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Tình huống thực tế
|
|
2
|
+
|
|
3
|
+
# Tình Huống Thực Tế
|
|
4
|
+
|
|
5
|
+
## Tình huống 1 — Bắt đầu tính năng mới từ đầu
|
|
6
|
+
|
|
7
|
+
**Bối cảnh:** PO nhận yêu cầu tính năng mới, cần viết tài liệu để dev team implement.
|
|
8
|
+
|
|
9
|
+
**Bước 1 — Capture ý tưởng:**
|
|
10
|
+
```
|
|
11
|
+
/define-product
|
|
12
|
+
```
|
|
13
|
+
Agent sẽ hỏi: Tên tính năng, domain · Mô tả ngắn · Vấn đề cần giải quyết · Actors liên quan · Kết quả mong muốn.
|
|
14
|
+
|
|
15
|
+
Output: `specs/product-definition/FEAT-01-login.md`
|
|
16
|
+
|
|
17
|
+
**Bước 2 — Generate PRD:**
|
|
18
|
+
```
|
|
19
|
+
/generate-prd specs/product-definition/FEAT-01-login.md
|
|
20
|
+
```
|
|
21
|
+
Agent tự động: đọc product definition · expand thành PRD đầy đủ với UC, AC, BR · nhắc nếu bạn viết UI details · kiểm tra terminology với business-dictionary.
|
|
22
|
+
|
|
23
|
+
Output: `specs/prd/auth/FEAT-01-login-prd.md`
|
|
24
|
+
|
|
25
|
+
**Bước 3 — Review nội dung:**
|
|
26
|
+
```
|
|
27
|
+
/refine-prd specs/prd/auth/FEAT-01-login-prd.md
|
|
28
|
+
```
|
|
29
|
+
Agent fan-out 4 lens (QA/DEV/SA/PO) chạy song song, rồi chạy completeness-critic loop cho đến khi một vòng không tìm ra finding mới, cuối cùng dedup + resolve conflict. Findings đầy đủ trong 1 lần chạy.
|
|
30
|
+
|
|
31
|
+
Mở findings file, xem xét từng finding: `accepted` → apply · `modified` → viết note · `rejected` → bỏ qua.
|
|
32
|
+
```
|
|
33
|
+
/review-context --resume specs/prd/auth/FEAT-01-login-prd.md
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Bước 4 — Final check:**
|
|
37
|
+
```
|
|
38
|
+
/review-context specs/prd/auth/FEAT-01-login-prd.md
|
|
39
|
+
```
|
|
40
|
+
Kiểm tra: `@trace.status`, `@trace.domain`, completeness.
|
|
41
|
+
|
|
42
|
+
**Bước 5 — Approve PRD:**
|
|
43
|
+
```yaml
|
|
44
|
+
# Trong file PRD, cập nhật:
|
|
45
|
+
@trace.status: approved
|
|
46
|
+
@trace.version: 1.0
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Bước 6 — Tạo Design Spec (FE/App):**
|
|
50
|
+
```
|
|
51
|
+
/generate-design-spec specs/prd/auth/FEAT-01-login-prd.md
|
|
52
|
+
```
|
|
53
|
+
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.
|
|
54
|
+
|
|
55
|
+
Sau khi Designer review + confirm đủ Figma node-id links → `@trace.status: approved`.
|
|
56
|
+
|
|
57
|
+
**Bước 7 — Generate BDD:**
|
|
58
|
+
```
|
|
59
|
+
/generate-bdd specs/prd/auth/FEAT-01-login-prd.md
|
|
60
|
+
```
|
|
61
|
+
Agent hỏi: **"Platform? (1) web (2) app (3) system"**
|
|
62
|
+
- Chọn `web` → `specs/bdd/auth/web/FEAT-01-UC1-login-web.feature`
|
|
63
|
+
- Chạy lại, chọn `app` → `specs/bdd/auth/app/FEAT-01-UC1-login-app.feature`
|
|
64
|
+
- Chạy lại, chọn `system` → Agent tổng hợp từ web+app BDDs → `specs/bdd/auth/system/FEAT-01-UC1-login-system.feature`
|
|
65
|
+
|
|
66
|
+
> Nếu project chỉ có web → chỉ cần gen `web` rồi `system`.
|
|
67
|
+
|
|
68
|
+
**Bước 8 — Push và thông báo:**
|
|
69
|
+
```bash
|
|
70
|
+
git add specs/prd/ specs/design-spec/ specs/bdd/
|
|
71
|
+
git commit -m "feat(auth): add FEAT-01 PRD, design spec, and BDD"
|
|
72
|
+
git push
|
|
73
|
+
```
|
|
74
|
+
**Thông báo dev team:** "FEAT-01 PRD + BDD đã sẵn sàng, domain: `auth`. BDD tại `specs/bdd/auth/`"
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Tình huống 2 — Viết PRD khi dev team chưa setup
|
|
79
|
+
|
|
80
|
+
**Bối cảnh:** PO bắt đầu viết tài liệu, dev team chưa có umbrella repo. **Không cần đợi dev team.**
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
/define-product → product definition
|
|
84
|
+
/generate-prd → PRD với @trace.domain: auth
|
|
85
|
+
/review-context --fix → auto-fix
|
|
86
|
+
/generate-design-spec → design spec cho FE (nếu có designer)
|
|
87
|
+
/generate-bdd → web → specs/bdd/auth/web/
|
|
88
|
+
/generate-bdd → system → specs/bdd/auth/system/ (tổng hợp từ web)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Điều duy nhất cần làm:** thống nhất domain names với dev team trước.
|
|
92
|
+
```bash
|
|
93
|
+
# Khi /setup-ai-first hỏi "List your business domains":
|
|
94
|
+
# → nhập: auth, payment, loyalty
|
|
95
|
+
|
|
96
|
+
# Communicate với dev team:
|
|
97
|
+
# "Domain names của project: auth, payment, loyalty
|
|
98
|
+
# Khi setup umbrella, dùng đúng tên này làm services keys"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Tình huống 3 — Tạo Design Spec và BDD sau khi PRD approved
|
|
104
|
+
|
|
105
|
+
**Bối cảnh:** PRD đã được approve. Cần tạo Design Spec + BDD trước khi handoff.
|
|
106
|
+
|
|
107
|
+
**Điều kiện:** Có Figma link **node-level** (URL chứa `?node-id=`, right-click frame → "Copy link to selection") cho từng screen.
|
|
108
|
+
|
|
109
|
+
**Bước 1 — Design Spec:**
|
|
110
|
+
```
|
|
111
|
+
/generate-design-spec specs/prd/auth/FEAT-01-login-prd.md
|
|
112
|
+
```
|
|
113
|
+
Output: `specs/design-spec/auth/FEAT-01-design-spec-web.md`
|
|
114
|
+
|
|
115
|
+
Mỗi screen cần Figma link node-id. Screen thiếu → flag ❌ Missing, BLOCKED. Sau khi Designer review → `@trace.status: approved`.
|
|
116
|
+
|
|
117
|
+
**Bước 2 — Generate BDD:**
|
|
118
|
+
```
|
|
119
|
+
/generate-bdd specs/prd/auth/FEAT-01-login-prd.md
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
| Lần | Platform | Output |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| 1 | `web` | `specs/bdd/auth/web/FEAT-01-UC1-login-web.feature` |
|
|
125
|
+
| 2 | `app` | `specs/bdd/auth/app/FEAT-01-UC1-login-app.feature` |
|
|
126
|
+
| 3 | `system` | `specs/bdd/auth/system/FEAT-01-UC1-login-system.feature` |
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
git add specs/design-spec/ specs/bdd/
|
|
130
|
+
git commit -m "feat(auth): add FEAT-01 design spec and BDD (web+app+system)"
|
|
131
|
+
git push
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Tình huống 4 — PRD bị review trả lại (NEEDS_REVISION)
|
|
137
|
+
|
|
138
|
+
**Bước 1 — Đọc findings:**
|
|
139
|
+
```bash
|
|
140
|
+
cat .agent/review/FEAT-01-login-prd-review-context-findings.yaml
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Bước 2 — Xử lý từng finding:** set status `accepted` · `modified: "note của bạn"` · `rejected`.
|
|
144
|
+
|
|
145
|
+
**Bước 3 — Apply:**
|
|
146
|
+
```
|
|
147
|
+
/review-context --resume specs/prd/auth/FEAT-01-login-prd.md
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Bước 4 — Re-review:**
|
|
151
|
+
```
|
|
152
|
+
/review-context specs/prd/auth/FEAT-01-login-prd.md
|
|
153
|
+
```
|
|
154
|
+
Lặp lại cho đến khi `recommendation: APPROVED`.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Tình huống 5 — Requirements thay đổi sau khi PRD đã approved
|
|
159
|
+
|
|
160
|
+
**Bước 1 — Đổi status về draft:**
|
|
161
|
+
```yaml
|
|
162
|
+
@trace.status: draft
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Bước 2 — Sửa nội dung:**
|
|
166
|
+
```
|
|
167
|
+
/refine-prd specs/prd/auth/FEAT-01-login-prd.md "Thêm yêu cầu: hỗ trợ đăng nhập bằng OTP"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Bước 3 — Review lại:**
|
|
171
|
+
```
|
|
172
|
+
/review-context specs/prd/auth/FEAT-01-login-prd.md
|
|
173
|
+
/review-context --resume (nếu cần fix)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Bước 4 — Approve và thông báo:**
|
|
177
|
+
```yaml
|
|
178
|
+
@trace.status: approved
|
|
179
|
+
@trace.version: 1.1 # minor bump vì chỉ thêm AC
|
|
180
|
+
# major bump (2.0) nếu thay đổi cơ bản
|
|
181
|
+
```
|
|
182
|
+
```bash
|
|
183
|
+
git add specs/prd/auth/FEAT-01-login-prd.md
|
|
184
|
+
git commit -m "feat(auth): update FEAT-01 PRD v1.1 — add OTP login AC"
|
|
185
|
+
git push
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Bước 5 — Re-generate BDD cho các platform bị ảnh hưởng:**
|
|
189
|
+
```
|
|
190
|
+
/generate-bdd → web (nếu thay đổi ảnh hưởng FE behavior)
|
|
191
|
+
/generate-bdd → app (nếu project có app)
|
|
192
|
+
/generate-bdd → system
|
|
193
|
+
→ BDD mới phản ánh AC đã thay đổi
|
|
194
|
+
```
|
|
195
|
+
```bash
|
|
196
|
+
git add specs/bdd/
|
|
197
|
+
git commit -m "feat(auth): update BDD for FEAT-01 v1.1 — OTP login scenarios"
|
|
198
|
+
git push
|
|
199
|
+
```
|
|
200
|
+
> **Lưu ý:** Dev **KHÔNG tự generate BDD** — đây là trách nhiệm của PO. Nếu bỏ qua bước này, dev sẽ code theo BDD cũ và traces sẽ broken.
|
|
201
|
+
|
|
202
|
+
**Thông báo dev team:** "FEAT-01 PRD + BDD updated v1.0 → v1.1, domain: `auth`. Pull spec submodule và bắt đầu với BDD mới."
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Tình huống 6 — Thêm domain mới vào project
|
|
207
|
+
|
|
208
|
+
**Bước 1 — Cập nhật project-context.yaml:**
|
|
209
|
+
```yaml
|
|
210
|
+
domains:
|
|
211
|
+
- auth
|
|
212
|
+
- payment
|
|
213
|
+
- loyalty # ← thêm vào đây
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Bước 2 — Thông báo dev team cập nhật umbrella config:**
|
|
217
|
+
```yaml
|
|
218
|
+
services:
|
|
219
|
+
loyalty:
|
|
220
|
+
path: "loyalty-service"
|
|
221
|
+
module: "java-spring"
|
|
222
|
+
specs_dir: "loyalty-service/specs/bdd"
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Bước 3 — Viết PRD bình thường với `@trace.domain: loyalty`.**
|
|
226
|
+
|
|
227
|
+
> **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.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Tình huống 7 — Conflict giữa 2 PRDs (P3 check)
|
|
232
|
+
|
|
233
|
+
**Bối cảnh:** FEAT-01 quy định "session hết hạn sau 30 phút", FEAT-05 quy định "session hết hạn sau 2 giờ".
|
|
234
|
+
|
|
235
|
+
1. Đọc findings file — P3 liệt kê cả 2 PRD và điểm mâu thuẫn.
|
|
236
|
+
2. Quyết định PRD nào đúng.
|
|
237
|
+
3. Sửa file:
|
|
238
|
+
```
|
|
239
|
+
/review-context --resume specs/prd/auth/FEAT-01-login-prd.md
|
|
240
|
+
# với finding P3: modified: "session timeout cập nhật thành 2 giờ theo FEAT-05"
|
|
241
|
+
```
|
|
242
|
+
4. Cả 2 PRD phải nhất quán trước khi dev team generate BDD.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Tình huống 8 — Cập nhật Business Dictionary
|
|
247
|
+
|
|
248
|
+
**Cách 1 — Thủ công:** Mở `specs/domain-knowledge/business-dictionary.md` → thêm vào Canonical Terms hoặc Banned Terms.
|
|
249
|
+
|
|
250
|
+
**Cách 2 — Để agent phát hiện:** Khi chạy `/generate-prd` hoặc `/review-context`, agent sẽ hỏi nếu phát hiện term mới chưa có trong dictionary.
|
|
251
|
+
|
|
252
|
+
**Sau khi cập nhật:**
|
|
253
|
+
```bash
|
|
254
|
+
git add specs/domain-knowledge/business-dictionary.md
|
|
255
|
+
git commit -m "docs: add/update business dictionary — {term}"
|
|
256
|
+
git push
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
> ⚠️ Sau khi ban một term mới, chạy `/review-context --fix` trên các PRDs hiện tại để replace banned terms tự động.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Tình huống 9 — Quản lý nhiều PRD song song
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
specs/prd/
|
|
267
|
+
├── auth/
|
|
268
|
+
│ ├── FEAT-01-login-prd.md (approved)
|
|
269
|
+
│ └── FEAT-08-sso-prd.md (draft)
|
|
270
|
+
├── payment/
|
|
271
|
+
│ ├── FEAT-03-checkout-prd.md (approved)
|
|
272
|
+
│ └── FEAT-11-refund-prd.md (draft)
|
|
273
|
+
└── loyalty/
|
|
274
|
+
└── FEAT-06-points-prd.md (in-review)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**Gợi ý:** Hoàn thiện 1 PRD đến `approved` trước khi bắt đầu PRD tiếp theo. Chỉ PRD `approved` mới được dev team sử dụng.
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# Xem nhanh tất cả PRDs và status:
|
|
281
|
+
grep -r "@trace.status" specs/prd/ --include="*.md"
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Tình huống 10 — Handoff PRD cho dev team
|
|
287
|
+
|
|
288
|
+
**Checklist trước khi thông báo:**
|
|
289
|
+
```yaml
|
|
290
|
+
@trace.id: FEAT-01 ✅ có
|
|
291
|
+
@trace.domain: auth ✅ khớp với services keys của dev team
|
|
292
|
+
@trace.status: approved ✅ đã approved
|
|
293
|
+
@trace.version: 1.0 ✅ có version number
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
/review-context specs/prd/auth/FEAT-01-login-prd.md
|
|
298
|
+
→ Phải thấy recommendation: APPROVED và 0 critical findings
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Template thông báo cho dev team:**
|
|
302
|
+
```
|
|
303
|
+
[FEAT-01] PRD Login đã approved — sẵn sàng implement
|
|
304
|
+
|
|
305
|
+
Domain: auth
|
|
306
|
+
File: my-project-specs/specs/prd/auth/FEAT-01-login-prd.md
|
|
307
|
+
Version: 1.0
|
|
308
|
+
Design Spec (Web): my-project-specs/specs/design-spec/auth/FEAT-01-design-spec-web.md
|
|
309
|
+
|
|
310
|
+
Lệnh để bắt đầu:
|
|
311
|
+
git submodule update --remote my-project-specs
|
|
312
|
+
/review-context my-project-specs/specs/prd/auth/FEAT-01-login-prd.md
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Tình huống 11 — Brownfield: API đã tồn tại trên hệ thống cũ
|
|
318
|
+
|
|
319
|
+
**Bước 1 — Thêm `API Source: existing` vào PRD Metadata:**
|
|
320
|
+
```markdown
|
|
321
|
+
| **API Source** | existing |
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Bước 2 — Điền section "Existing API Contract" trong Appendix:**
|
|
325
|
+
```markdown
|
|
326
|
+
## Existing API Contract
|
|
327
|
+
|
|
328
|
+
| Method | Path | Auth | Request | Response |
|
|
329
|
+
|--------|------|------|---------|----------|
|
|
330
|
+
| POST | /api/v1/orders | Bearer | `{ product_id, quantity }` | `{ id, status, total }` |
|
|
331
|
+
| GET | /api/v1/orders/:id | Bearer | — | `{ id, items[], status, created_at }` |
|
|
332
|
+
|
|
333
|
+
**Error responses:**
|
|
334
|
+
|
|
335
|
+
| HTTP Status | Error Code | Khi nào xảy ra |
|
|
336
|
+
|-------------|------------|----------------|
|
|
337
|
+
| 404 | ORDER_NOT_FOUND | Order ID không tồn tại |
|
|
338
|
+
| 422 | INSUFFICIENT_STOCK | Số lượng vượt tồn kho |
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Bước 3 — Generate BDD như bình thường:**
|
|
342
|
+
```
|
|
343
|
+
/generate-bdd → system
|
|
344
|
+
```
|
|
345
|
+
Framework tự nhận ra `API Source: existing`, dùng contract trong PRD trực tiếp.
|
|
346
|
+
|
|
347
|
+
**Bước 4 — Generate Tech Docs:**
|
|
348
|
+
```
|
|
349
|
+
/generate-tech-docs
|
|
350
|
+
```
|
|
351
|
+
Chạy ở mode **Reverse-document**: mô tả lại API đã tồn tại, ghi chú gaps.
|
|
352
|
+
|
|
353
|
+
**Không cần:** Sign-off gate T7 (tự động skip) · `--phase=ui` (API đã live).
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
← [Commands](commands.md) · Tiếp theo: [Quy tắc viết PRD](prd-writing-rules.md)
|