@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
|
@@ -17,6 +17,20 @@
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
## Guard — PRD đã duyệt chưa
|
|
21
|
+
|
|
22
|
+
Đọc `| **Status** |` từ bảng Metadata của Business PRD nguồn:
|
|
23
|
+
- `Status: approved` → tiếp tục bình thường.
|
|
24
|
+
- `Status: draft` (hoặc khác `approved`) → **CHECKPOINT cảnh báo mềm** (không chặn cứng — cho phép prototype song song):
|
|
25
|
+
```
|
|
26
|
+
⚠️ Business PRD đang ở Status: {status} (chưa duyệt). Design Spec dựng trên PRD chưa chốt có thể phải làm lại theo PRD.
|
|
27
|
+
Khuyến nghị: PO duyệt PRD (đặt `| **Status** | approved |`) rồi mới sinh Design Spec.
|
|
28
|
+
Vẫn sinh Design Spec bây giờ? (Y/N)
|
|
29
|
+
```
|
|
30
|
+
Chỉ tiếp tục khi người dùng chọn Y.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
20
34
|
## Platform Check
|
|
21
35
|
|
|
22
36
|
Dùng `active_module` và `platform_type` suy ra từ context loading:
|
|
@@ -46,6 +60,30 @@ Dùng `active_module` và `platform_type` suy ra từ context loading:
|
|
|
46
60
|
|
|
47
61
|
---
|
|
48
62
|
|
|
63
|
+
## Version Check (PRD drift)
|
|
64
|
+
|
|
65
|
+
Trước khi sinh, kiểm tra design-spec đã tồn tại cho platform này:
|
|
66
|
+
`{paths.specs_dir}/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{active_platform}-{slug}.md`
|
|
67
|
+
Đọc `| **Version** |` hiện tại của PRD từ Metadata (vd `1.3`).
|
|
68
|
+
|
|
69
|
+
- **Không tồn tại** → sinh mới; ghi `| **Built from PRD** | v{prd_version hiện tại} |`.
|
|
70
|
+
- **Tồn tại** → đọc row `| **Built from PRD** |` của nó, so với `| **Version** |` PRD hiện tại:
|
|
71
|
+
- **Bằng nhau** → hỏi: "Design Spec đã dựng từ PRD v{x}. Sinh lại? (Y/N)".
|
|
72
|
+
- **Khác** (PRD đã đổi) → CHECKPOINT drift:
|
|
73
|
+
```
|
|
74
|
+
⚠️ Phát hiện PRD version drift
|
|
75
|
+
Design Spec dựng từ PRD v{old}; PRD giờ ở v{new}.
|
|
76
|
+
Thay đổi kể từ v{old} (đọc # Change Log của PRD):
|
|
77
|
+
{changelog rows}
|
|
78
|
+
Options:
|
|
79
|
+
Y — cập nhật phần ảnh hưởng (màn / flow đổi)
|
|
80
|
+
F — sinh lại toàn bộ
|
|
81
|
+
N — huỷ
|
|
82
|
+
```
|
|
83
|
+
- Khi sinh / sinh lại → cập nhật `| **Built from PRD** | v{prd_version hiện tại} |`, bump `| **Version** |` Design Spec, **reset `| **Status** | draft |`** (design đổi → sign-off lại), thêm row Changelog.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
49
87
|
## Screen Discovery
|
|
50
88
|
|
|
51
89
|
Từ Section 4 của PRD (User Flow + Wireframe), trích xuất mọi tên screen / page / modal được nhắc tới.
|
|
@@ -107,8 +145,8 @@ Nếu một màn chưa có design, gõ none cho màn đó.
|
|
|
107
145
|
|
|
108
146
|
**Gate bắt buộc (không abort — sinh ra draft):**
|
|
109
147
|
- Nếu **bất kỳ** màn nào ❌ Missing → spec được sinh dưới dạng **draft** với các màn đó
|
|
110
|
-
được gắn cờ,
|
|
111
|
-
|
|
148
|
+
được gắn cờ, `Status` giữ `draft` cho tới khi mọi màn có link frame đọc được, đã fetch.
|
|
149
|
+
`/generate-bdd` FE/App sẽ **cảnh báo mềm** (đồng bộ Guard PRD) nếu sinh BDD khi design-spec chưa `approved`. Ghi `missing_frames = [screens]`.
|
|
112
150
|
- Thêm một AI Assumption cho mỗi màn thiếu: "Không có Figma frame đọc được cho {screen} — spec
|
|
113
151
|
của màn này chỉ là text và không được sign off cho tới khi thêm link `node-id`."
|
|
114
152
|
|
|
@@ -194,6 +232,7 @@ Ghi `{paths.specs_dir}/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{
|
|
|
194
232
|
| **Service** | {active_service} |
|
|
195
233
|
| **Domain** | {domain} |
|
|
196
234
|
| **Business PRD** | [{TICKET-ID}](../{TICKET-ID}-{prd-slug}.md) |
|
|
235
|
+
| **Built from PRD** | v{prd_version — `\| **Version** \|` của PRD lúc sinh; dùng phát hiện drift} |
|
|
197
236
|
| **Figma** | {figma_url — link file feature} ({linked}/{N} frame đã link) |
|
|
198
237
|
| **Author** | {tên PO hoặc "AI-assisted"} |
|
|
199
238
|
| **Created** | {YYYY-MM-DD} |
|
|
@@ -421,7 +460,7 @@ Exit: {người dùng rời thế nào — back stack / chuyển tab / deeplink
|
|
|
421
460
|
|
|
422
461
|
---
|
|
423
462
|
|
|
424
|
-
##
|
|
463
|
+
## Self-Review Gate *(cổng tự-rà — bắt buộc chạy trước khi ghi)*
|
|
425
464
|
|
|
426
465
|
- [ ] Mọi màn trong Screen Inventory có Screen Spec đầy đủ ở Section 2
|
|
427
466
|
- [ ] Mọi màn có tối thiểu các state: default, loading, error
|
|
@@ -432,7 +471,12 @@ Exit: {người dùng rời thế nào — back stack / chuyển tab / deeplink
|
|
|
432
471
|
- [ ] Link cross-reference Business PRD là relative path hợp lệ
|
|
433
472
|
- [ ] Mọi màn có link Figma frame node-level (`?node-id=`) — và các màn có link đã được fetch qua Figma MCP và dùng để ground spec
|
|
434
473
|
- [ ] Mỗi màn ❌ Missing được gắn cờ trong spec (`> [DRAFT — no Figma frame...]`), liệt kê trong Figma Summary, và có một AI Assumption
|
|
435
|
-
- [ ] Nếu bất kỳ màn nào ❌ Missing → Status giữ `draft`
|
|
474
|
+
- [ ] Nếu bất kỳ màn nào ❌ Missing → Status giữ `draft` (generate-bdd FE/App cảnh báo mềm, không chặn cứng)
|
|
475
|
+
|
|
476
|
+
> **Đây là CỔNG, không phải nhắc nhở:** chạy từng mục trên TRƯỚC khi ghi file. Mục nào **FAIL** → **bắt buộc**:
|
|
477
|
+
> 1. ghi một dòng `⚠️ {mục thiếu — màn/section cụ thể}` vào section **"Giả định AI"** của file (đừng để lọt im lặng), VÀ
|
|
478
|
+
> 2. giữ `| **Status** | draft |` (chưa đủ điều kiện để PO+Designer sign-off `approved`).
|
|
479
|
+
> KHÔNG xuất design-spec như "hoàn chỉnh" khi còn mục fail chưa gắn cờ.
|
|
436
480
|
|
|
437
481
|
---
|
|
438
482
|
|
|
@@ -458,7 +502,7 @@ Next : Chia sẻ với Designer → PO + Designer sign-off (Status: approved)
|
|
|
458
502
|
Status : ⚠️ Warnings — {count} màn không có link Figma frame đọc được: {missing_frames ngăn cách bởi dấu phẩy}
|
|
459
503
|
Output Artifacts:
|
|
460
504
|
created {paths.specs_dir}/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{active_platform}-{slug}.md (v1.0, draft)
|
|
461
|
-
Next : 🔒
|
|
505
|
+
Next : 🔒 Khuyến nghị hoàn tất sign-off trước (đủ link Figma node-id); /generate-bdd FE/App sẽ cảnh báo nếu design-spec chưa approved.
|
|
462
506
|
1. Trong Figma: chọn mỗi frame còn thiếu → chuột phải → Copy link to selection
|
|
463
507
|
2. Chạy lại /generate-design-spec {prd-file} → AI fetch & ground các frame mới
|
|
464
508
|
```
|
package/commands/generate-prd.md
CHANGED
|
@@ -752,11 +752,14 @@ _(Nếu không có độ vênh: ghi "Không có — toàn bộ nội dung đã
|
|
|
752
752
|
|
|
753
753
|
# Change Log
|
|
754
754
|
|
|
755
|
-
|
|
755
|
+
> 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)*
|
|
756
756
|
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
757
|
+
<!-- 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;
|
|
758
|
+
cũ hơn → /refine-prd & /review-context tự dồn (rollover) sang file changelog/ ở link trên. -->
|
|
759
|
+
|
|
760
|
+
| Version | Date | Changes (UC/AC/BR bị ảnh hưởng) |
|
|
761
|
+
|---------|------|---------------------------------|
|
|
762
|
+
| 1.0 | {date} | Bản đầu — sinh từ product-definition. |
|
|
760
763
|
|
|
761
764
|
---
|
|
762
765
|
|
|
@@ -851,7 +854,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
851
854
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
852
855
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
853
856
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
854
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
857
|
+
| /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) |
|
|
855
858
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
856
859
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
857
860
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -901,4 +904,5 @@ Output Artifacts:
|
|
|
901
904
|
Pipeline : Discovery → [PRD ◀ bạn ở đây] → Design Spec → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
902
905
|
Next : /refine-prd {paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
903
906
|
→ rồi /review-context {prd-file} ← kiểm tra chất lượng PRD trước khi sinh BDD
|
|
907
|
+
→ khi sạch critical, PO đặt | **Status** | approved | (PRD mới sinh đang draft) → /generate-bdd
|
|
904
908
|
```
|
|
@@ -157,4 +157,5 @@ Output Artifacts:
|
|
|
157
157
|
Pipeline : Discovery → [PRD ◀ bạn ở đây] → Design Spec → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
158
158
|
Next : /refine-prd {paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
159
159
|
→ rồi /review-context {prd-file} ← kiểm tra chất lượng PRD trước khi sinh BDD
|
|
160
|
+
→ khi sạch critical, PO đặt | **Status** | approved | (PRD mới sinh đang draft) → /generate-bdd
|
|
160
161
|
```
|
|
@@ -595,7 +595,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
595
595
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
596
596
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
597
597
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
598
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
598
|
+
| /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) |
|
|
599
599
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
600
600
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
601
601
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -113,6 +113,7 @@ Chờ người dùng trả lời rõ ràng "Y" hoặc "N" rồi mới tiếp t
|
|
|
113
113
|
Rồi: /review-context --resume {feature-file} ← áp dụng các finding được chấp nhận còn lại
|
|
114
114
|
Rồi chạy lại: /generate-tech-docs {feature-file}
|
|
115
115
|
```
|
|
116
|
+
4. **Đồng thời** đọc `# @trace.status:` của `.feature` (tín hiệu duyệt chuẩn — B3): nếu ≠ `approved` → cảnh báo MỀM (đồng bộ qc-analyze/generate-code): "BDD chưa duyệt (@trace.status: {status}) — tech-docs sinh từ BDD chưa chốt có thể phải làm lại. Tiếp tục? (Y/N)". *(Nếu `approved` thì BDD đã sign-off; finding-gate ở trên vẫn chạy để chặn critical sót.)*
|
|
116
117
|
|
|
117
118
|
## Context
|
|
118
119
|
# Context Loader — Nạp toàn bộ context dự án
|
|
@@ -798,7 +799,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
798
799
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
799
800
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
800
801
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
801
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
802
|
+
| /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) |
|
|
802
803
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
803
804
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
804
805
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
Rồi: /review-context --resume {feature-file} ← áp dụng các finding được chấp nhận còn lại
|
|
26
26
|
Rồi chạy lại: /generate-tech-docs {feature-file}
|
|
27
27
|
```
|
|
28
|
+
4. **Đồng thời** đọc `# @trace.status:` của `.feature` (tín hiệu duyệt chuẩn — B3): nếu ≠ `approved` → cảnh báo MỀM (đồng bộ qc-analyze/generate-code): "BDD chưa duyệt (@trace.status: {status}) — tech-docs sinh từ BDD chưa chốt có thể phải làm lại. Tiếp tục? (Y/N)". *(Nếu `approved` thì BDD đã sign-off; finding-gate ở trên vẫn chạy để chặn critical sót.)*
|
|
28
29
|
|
|
29
30
|
## Context
|
|
30
31
|
{{include:steps/context-loader.md}}
|
package/commands/learn.md
CHANGED
|
@@ -579,7 +579,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
579
579
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
580
580
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
581
581
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
582
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
582
|
+
| /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) |
|
|
583
583
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
584
584
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
585
585
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/map-testids.md
CHANGED
|
@@ -526,7 +526,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
526
526
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
527
527
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
528
528
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
529
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
529
|
+
| /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) |
|
|
530
530
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
531
531
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
532
532
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -466,7 +466,10 @@ Viết Gherkin nhất quán với convention của `/generate-bdd` cho `active_p
|
|
|
466
466
|
|
|
467
467
|
Ghi vào `{paths.bdd_proposals_dir}/{UC-ID}-{slug}.md` (phân giải về `{spec_source}/feedback/bdd-proposals/` ở umbrella mode; tạo dir nếu cần).
|
|
468
468
|
KHÔNG đụng `.feature` canonical. Doc proposal chứa draft + metadata review
|
|
469
|
-
(xem Output)
|
|
469
|
+
(xem Output), **gồm dòng `Status: proposed`**. Nếu nguồn là một bug, tham chiếu `BUG-ID` của nó.
|
|
470
|
+
|
|
471
|
+
> **Vòng đời proposal** (máy đọc được để `/generate-bdd` intake đúng):
|
|
472
|
+
> `proposed` → PO/Dev duyệt đặt `accepted` (hoặc `rejected`) → `/generate-bdd` chèn cái `accepted` vào `.feature` rồi đặt `incorporated` + lưu trữ. **Chỉ `accepted` mới được đưa vào BDD.**
|
|
470
473
|
|
|
471
474
|
## Step 5 — Handoff (để PO/Dev thực sự thấy)
|
|
472
475
|
|
|
@@ -556,7 +559,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
556
559
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
557
560
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
558
561
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
559
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
562
|
+
| /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) |
|
|
560
563
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
561
564
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
562
565
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -612,7 +615,8 @@ Scenario đề xuất (DRAFT — chờ PO/Dev review):
|
|
|
612
615
|
|
|
613
616
|
Để PO/Dev promote:
|
|
614
617
|
[ ] AC mapping đúng? (hoặc cập nhật PRD nếu requirement thực sự mới)
|
|
615
|
-
[ ]
|
|
618
|
+
[ ] Đặt `Status: accepted` trong file proposal (để /generate-bdd đưa vào)
|
|
619
|
+
[ ] Chạy lại /generate-bdd {UC-ID} — nó tự chèn proposal `accepted` vào .feature rồi lưu trữ
|
|
616
620
|
[ ] Rồi: /generate-code {UC-ID} + /dev-gen-test {UC-ID}
|
|
617
621
|
|
|
618
622
|
Handoff : {✅ committed + pushed to spec repo | ⚠️ chạy git command ở trên / mở PR}
|
|
@@ -71,7 +71,10 @@ Viết Gherkin nhất quán với convention của `/generate-bdd` cho `active_p
|
|
|
71
71
|
|
|
72
72
|
Ghi vào `{paths.bdd_proposals_dir}/{UC-ID}-{slug}.md` (phân giải về `{spec_source}/feedback/bdd-proposals/` ở umbrella mode; tạo dir nếu cần).
|
|
73
73
|
KHÔNG đụng `.feature` canonical. Doc proposal chứa draft + metadata review
|
|
74
|
-
(xem Output)
|
|
74
|
+
(xem Output), **gồm dòng `Status: proposed`**. Nếu nguồn là một bug, tham chiếu `BUG-ID` của nó.
|
|
75
|
+
|
|
76
|
+
> **Vòng đời proposal** (máy đọc được để `/generate-bdd` intake đúng):
|
|
77
|
+
> `proposed` → PO/Dev duyệt đặt `accepted` (hoặc `rejected`) → `/generate-bdd` chèn cái `accepted` vào `.feature` rồi đặt `incorporated` + lưu trữ. **Chỉ `accepted` mới được đưa vào BDD.**
|
|
75
78
|
|
|
76
79
|
## Step 5 — Handoff (để PO/Dev thực sự thấy)
|
|
77
80
|
|
|
@@ -117,7 +120,8 @@ Scenario đề xuất (DRAFT — chờ PO/Dev review):
|
|
|
117
120
|
|
|
118
121
|
Để PO/Dev promote:
|
|
119
122
|
[ ] AC mapping đúng? (hoặc cập nhật PRD nếu requirement thực sự mới)
|
|
120
|
-
[ ]
|
|
123
|
+
[ ] Đặt `Status: accepted` trong file proposal (để /generate-bdd đưa vào)
|
|
124
|
+
[ ] Chạy lại /generate-bdd {UC-ID} — nó tự chèn proposal `accepted` vào .feature rồi lưu trữ
|
|
121
125
|
[ ] Rồi: /generate-code {UC-ID} + /dev-gen-test {UC-ID}
|
|
122
126
|
|
|
123
127
|
Handoff : {✅ committed + pushed to spec repo | ⚠️ chạy git command ở trên / mở PR}
|
package/commands/qc-analyze.md
CHANGED
|
@@ -411,6 +411,20 @@ Sau khi hoàn thành tất cả các bước, bạn đã nạp:
|
|
|
411
411
|
Tiếp tục sang bước kế tiếp của lệnh đang gọi.
|
|
412
412
|
|
|
413
413
|
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Guard — BDD đã duyệt chưa
|
|
417
|
+
|
|
418
|
+
Đọc `# @trace.status:` từ header file `.feature` của UC target:
|
|
419
|
+
- `approved` → tiếp tục bình thường.
|
|
420
|
+
- `draft` (hoặc khác `approved`) → **CHECKPOINT cảnh báo mềm** (không chặn cứng — cho phép QC sớm/prototype):
|
|
421
|
+
```
|
|
422
|
+
⚠️ BDD của {UC-ID} đang ở @trace.status: {status} (chưa duyệt). QC chạy trên BDD chưa chốt có thể phải làm lại.
|
|
423
|
+
Khuyến nghị: review-context (BDD) sạch + người duyệt đặt `# @trace.status: approved` rồi mới chạy QC.
|
|
424
|
+
Vẫn chạy QC bây giờ? (Y/N)
|
|
425
|
+
```
|
|
426
|
+
Chỉ tiếp khi chọn Y.
|
|
427
|
+
|
|
414
428
|
---
|
|
415
429
|
|
|
416
430
|
## Role
|
|
@@ -530,7 +544,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
530
544
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
531
545
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
532
546
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
533
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
547
|
+
| /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) |
|
|
534
548
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
535
549
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
536
550
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/qc-analyze.tmpl
CHANGED
|
@@ -18,6 +18,20 @@ ported_from: ai-automation-qc-base
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
## Guard — BDD đã duyệt chưa
|
|
22
|
+
|
|
23
|
+
Đọc `# @trace.status:` từ header file `.feature` của UC target:
|
|
24
|
+
- `approved` → tiếp tục bình thường.
|
|
25
|
+
- `draft` (hoặc khác `approved`) → **CHECKPOINT cảnh báo mềm** (không chặn cứng — cho phép QC sớm/prototype):
|
|
26
|
+
```
|
|
27
|
+
⚠️ BDD của {UC-ID} đang ở @trace.status: {status} (chưa duyệt). QC chạy trên BDD chưa chốt có thể phải làm lại.
|
|
28
|
+
Khuyến nghị: review-context (BDD) sạch + người duyệt đặt `# @trace.status: approved` rồi mới chạy QC.
|
|
29
|
+
Vẫn chạy QC bây giờ? (Y/N)
|
|
30
|
+
```
|
|
31
|
+
Chỉ tiếp khi chọn Y.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
21
35
|
## Role
|
|
22
36
|
|
|
23
37
|
Bạn là **QC Analyst** — stage đầu tiên của QC automation pipeline. Lấy requirement
|
|
@@ -515,7 +515,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
515
515
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
516
516
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
517
517
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
518
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
518
|
+
| /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) |
|
|
519
519
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
520
520
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
521
521
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/qc-plan.md
CHANGED
|
@@ -496,7 +496,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
496
496
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
497
497
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
498
498
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
499
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
499
|
+
| /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) |
|
|
500
500
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
501
501
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
502
502
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/qc-report.md
CHANGED
|
@@ -501,7 +501,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
501
501
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
502
502
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
503
503
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
504
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
504
|
+
| /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) |
|
|
505
505
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
506
506
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
507
507
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/qc-review.md
CHANGED
|
@@ -499,7 +499,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
499
499
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
500
500
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
501
501
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
502
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
502
|
+
| /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) |
|
|
503
503
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
504
504
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
505
505
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/qc-run-test.md
CHANGED
|
@@ -555,7 +555,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
555
555
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
556
556
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
557
557
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
558
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
558
|
+
| /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) |
|
|
559
559
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
560
560
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
561
561
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/refine-prd.md
CHANGED
|
@@ -631,7 +631,9 @@ Chạy review qua **Quy trình Review** ở trên (`steps/review-fanout.md`).
|
|
|
631
631
|
- **Tồn tại** + có `--full` → **FULL**: bỏ qua findings cũ, không truyền `CHANGED_SCOPE` (ép quét lại toàn bộ).
|
|
632
632
|
- **Tồn tại** + KHÔNG có `--full` → so `prd_version` trong findings cũ với `| **Version** |` của PRD hiện tại:
|
|
633
633
|
- **Bằng nhau** (PRD chưa đổi từ lần review trước) → DỪNG, báo: `"PRD chưa đổi từ v{X} (lần review gần nhất). Không có gì để review lại — dùng --full nếu vẫn muốn quét toàn bộ."`
|
|
634
|
-
- **Khác**
|
|
634
|
+
- **Khác** → kiểm tra `applied_to_version` trong findings cũ (version mà lần `--resume` gần nhất của CHÍNH lệnh này đã bump PRD tới) để biết ai gây ra thay đổi:
|
|
635
|
+
- **`applied_to_version` có mặt VÀ `==` version PRD hiện tại** → PRD đổi đúng bằng phần lệnh này tự áp, không actor khác động vào → **DELTA**: `CHANGED_SCOPE` = { `uc_id`/`section` của các finding `status: applied` trong findings cũ } ∪ { UC có trong PRD hiện tại nhưng chưa từng xuất hiện ở findings cũ }. Truyền `CHANGED_SCOPE` này vào Quy trình Review.
|
|
636
|
+
- **`applied_to_version` vắng mặt HOẶC `≠` version hiện tại** → PRD đã bị sửa bởi **actor khác** (lệnh `/review-context`, sửa tay…) sau lần resume này → KHÔNG tin được phạm vi hẹp → **FULL** (KHÔNG truyền `CHANGED_SCOPE`), kèm cảnh báo: `"PRD đổi ngoài tầm theo dõi của findings (applied_to_version={A} ≠ hiện tại={C}); quét lại toàn bộ để khỏi sót UC do người/lệnh khác sửa."`
|
|
635
637
|
|
|
636
638
|
**DIMENSIONS** = 4 lăng kính dưới đây — fan out một sub-agent cho mỗi lăng kính, mỗi cái quét
|
|
637
639
|
toàn bộ PRD qua đúng lăng kính của nó:
|
|
@@ -663,6 +665,7 @@ Ghi `{paths.refinement_dir}/{prd-slug}-findings.yaml`:
|
|
|
663
665
|
```yaml
|
|
664
666
|
prd_source: "{paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md"
|
|
665
667
|
prd_version: "{đọc | **Version** | từ metadata PRD lúc sinh findings — dùng để chọn full/delta lần chạy sau}"
|
|
668
|
+
applied_to_version: "" # để trống lúc phân tích; --resume sẽ ghi version PRD vừa bump tới. Lần delta sau: nếu version PRD hiện tại ≠ giá trị này → PRD bị actor khác sửa → fallback FULL (xem "Chọn full vs delta")
|
|
666
669
|
generated_at: "{ISO datetime}"
|
|
667
670
|
status: "pending_review"
|
|
668
671
|
|
|
@@ -684,14 +687,19 @@ findings:
|
|
|
684
687
|
# true = AI tự tin cao vào suggestion này; Review Board có thể hiển thị nút "quick accept"
|
|
685
688
|
# false = cần human đọc kỹ và ghi quyết định trước khi accept
|
|
686
689
|
# Resume Mode luôn áp dụng theo status (accepted|modified), bất kể auto_fixable.
|
|
690
|
+
# LƯU Ý: /refine-prd CỐ Ý không có `--fix` mode (khác /review-context) — finding 4 lăng kính
|
|
691
|
+
# là phán đoán QA/DEV/SA/PO, phải qua người duyệt ở Board; auto_fixable ở đây CHỈ là gợi ý
|
|
692
|
+
# quick-accept cho Board, KHÔNG để máy tự áp.
|
|
687
693
|
status: "pending"
|
|
688
|
-
|
|
694
|
+
applied_via: ""
|
|
695
|
+
# Vòng đời finding-level (CHUNG với /review-context — Review Board đọc cả hai loại file nên enum phải khớp):
|
|
689
696
|
# pending → finding mới, chưa được review
|
|
690
697
|
# accepted → reviewer chấp nhận suggestion gốc → Resume sẽ apply
|
|
691
698
|
# modified → reviewer đã sửa suggestion trong Review Board → Resume dùng suggestion đã sửa
|
|
692
699
|
# rejected → reviewer bác bỏ, không apply
|
|
693
|
-
# needs_discussion → hai suggestion xung đột,
|
|
694
|
-
#
|
|
700
|
+
# needs_discussion → hai suggestion xung đột, CHẶN --resume (bỏ qua + cảnh báo) tới khi con người quyết
|
|
701
|
+
# deferred → cố ý hoãn (không chặn), bỏ qua lượt này, xem lại sau
|
|
702
|
+
# applied → đã áp vào PRD; applied_via ghi cách áp: "resume" (qua --resume) — /review-context còn dùng "fix" (qua --fix)
|
|
695
703
|
|
|
696
704
|
summary:
|
|
697
705
|
total_findings: {N}
|
|
@@ -781,7 +789,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
781
789
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
782
790
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
783
791
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
784
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
792
|
+
| /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) |
|
|
785
793
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
786
794
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
787
795
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -834,7 +842,7 @@ Pipeline : Discovery → [PRD ◀ bạn ở đây] → Design Spec → BDD → T
|
|
|
834
842
|
Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
|
|
835
843
|
Next : Mở trong Review Board (chuột phải vào file) → Cập nhật PRD
|
|
836
844
|
→ /review-context {prd-file} ← kiểm tra chất lượng PRD trước khi sinh BDD
|
|
837
|
-
→ /generate-bdd {prd-file}
|
|
845
|
+
→ khi sạch critical, PO đặt | **Status** | approved | → /generate-bdd {prd-file}
|
|
838
846
|
```
|
|
839
847
|
|
|
840
848
|
Nếu có finding nào có `status: "needs_discussion"`, thêm warning block sau footer:
|
|
@@ -884,7 +892,7 @@ Với mỗi finding được chấp nhận, theo thứ tự severity (critical
|
|
|
884
892
|
### Phase 2.5 — Cập nhật file findings
|
|
885
893
|
|
|
886
894
|
Với mỗi finding đã áp dụng (status là `accepted` hoặc `modified`):
|
|
887
|
-
- Đặt `status: "applied"` trong `{paths.refinement_dir}/{prd-slug}-findings.yaml`.
|
|
895
|
+
- Đặt `status: "applied"` + `applied_via: "resume"` trong `{paths.refinement_dir}/{prd-slug}-findings.yaml`.
|
|
888
896
|
|
|
889
897
|
Cập nhật `status: "applied"` ở **root level** của file findings (không phải `summary.status`).
|
|
890
898
|
# Lifecycle file-level: pending_review → applied | partially_applied
|
|
@@ -901,10 +909,22 @@ Cập nhật `status: "applied"` ở **root level** của file findings (không
|
|
|
901
909
|
- `| **Version** | {new_version} |`
|
|
902
910
|
- `| **Updated** | {today YYYY-MM-DD} |`
|
|
903
911
|
- `| **Status** | draft |` ← reset về draft, phải được duyệt lại
|
|
904
|
-
5.
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
912
|
+
5. Cập nhật `# Change Log` của PRD — **bảng phẳng 1 dòng/version, cửa sổ trượt 5 entry** (nếu gặp format cũ `### v{X}` block → chuẩn hoá sang bảng phẳng khi cập nhật):
|
|
913
|
+
- Thêm row mới lên **đầu** bảng:
|
|
914
|
+
```
|
|
915
|
+
| {new_version} | {today} | {tóm tắt — KÈM UC/AC/BR bị ảnh hưởng, vd "UC2: sửa BR5; thêm AC7"} |
|
|
916
|
+
```
|
|
917
|
+
*(Nêu rõ UC/AC/BR giúp `/generate-bdd` Version Check biết scenario nào cần cập nhật.)*
|
|
918
|
+
- Cập nhật dòng đầu section: `> Hiện tại: **v{new_version}** ({today}) · Lịch sử đầy đủ → [changelog](./changelog/{TICKET-ID}-{prd-slug}.changelog.md)`
|
|
919
|
+
- **Rollover (giữ PRD gọn — đây là chuẩn chung, /review-context cũng theo):** nếu bảng `# Change Log` có **> 5 row** → chuyển **mọi row vượt 5** (cũ nhất) sang **đầu** bảng của file kho `{paths.specs_dir}/{domain}/{prd-slug}/changelog/{TICKET-ID}-{prd-slug}.changelog.md` (giữ thứ tự mới→cũ); PRD chỉ giữ **5 row gần nhất**. Tạo thư mục `changelog/` + file kho nếu chưa có, theo skeleton:
|
|
920
|
+
```
|
|
921
|
+
# Change Log (lịch sử) — {TICKET-ID}
|
|
922
|
+
> PRD: [../{TICKET-ID}-{prd-slug}.md](../{TICKET-ID}-{prd-slug}.md) — 5 version gần nhất nằm trong PRD; đây là phần cũ hơn.
|
|
923
|
+
|
|
924
|
+
| Version | Date | Changes |
|
|
925
|
+
|---------|------|---------|
|
|
926
|
+
```
|
|
927
|
+
6. Ghi `applied_to_version: "{new_version}"` ở **root level** của findings — đóng dấu "PRD đổi tới version này là do lệnh này áp", để lần review delta sau phân biệt được thay đổi của chính mình với thay đổi do actor khác (xem "Chọn full vs delta").
|
|
908
928
|
|
|
909
929
|
### Phase 4 — Report
|
|
910
930
|
|
|
@@ -918,7 +938,7 @@ Changes :
|
|
|
918
938
|
|
|
919
939
|
💡 Vừa áp {N} phương án (gồm bản PO tự sửa) → chạy lại /refine-prd {prd-file}
|
|
920
940
|
(delta tự động) để lòi edge case mà các phương án vừa áp có thể tạo ra.
|
|
921
|
-
⚠️ BDD có thể đã lỗi thời. Chạy:
|
|
941
|
+
⚠️ Status đã reset về draft (sửa rồi phải duyệt lại). BDD có thể đã lỗi thời. Chạy:
|
|
922
942
|
/review-context {prd-file} ← kiểm tra chất lượng PRD trước
|
|
923
|
-
→ /generate-bdd {prd-file}
|
|
943
|
+
→ PO đặt | **Status** | approved | khi hài lòng → /generate-bdd {prd-file}
|
|
924
944
|
```
|
package/commands/refine-prd.tmpl
CHANGED
|
@@ -48,7 +48,9 @@ Chạy review qua **Quy trình Review** ở trên (`steps/review-fanout.md`).
|
|
|
48
48
|
- **Tồn tại** + có `--full` → **FULL**: bỏ qua findings cũ, không truyền `CHANGED_SCOPE` (ép quét lại toàn bộ).
|
|
49
49
|
- **Tồn tại** + KHÔNG có `--full` → so `prd_version` trong findings cũ với `| **Version** |` của PRD hiện tại:
|
|
50
50
|
- **Bằng nhau** (PRD chưa đổi từ lần review trước) → DỪNG, báo: `"PRD chưa đổi từ v{X} (lần review gần nhất). Không có gì để review lại — dùng --full nếu vẫn muốn quét toàn bộ."`
|
|
51
|
-
- **Khác**
|
|
51
|
+
- **Khác** → kiểm tra `applied_to_version` trong findings cũ (version mà lần `--resume` gần nhất của CHÍNH lệnh này đã bump PRD tới) để biết ai gây ra thay đổi:
|
|
52
|
+
- **`applied_to_version` có mặt VÀ `==` version PRD hiện tại** → PRD đổi đúng bằng phần lệnh này tự áp, không actor khác động vào → **DELTA**: `CHANGED_SCOPE` = { `uc_id`/`section` của các finding `status: applied` trong findings cũ } ∪ { UC có trong PRD hiện tại nhưng chưa từng xuất hiện ở findings cũ }. Truyền `CHANGED_SCOPE` này vào Quy trình Review.
|
|
53
|
+
- **`applied_to_version` vắng mặt HOẶC `≠` version hiện tại** → PRD đã bị sửa bởi **actor khác** (lệnh `/review-context`, sửa tay…) sau lần resume này → KHÔNG tin được phạm vi hẹp → **FULL** (KHÔNG truyền `CHANGED_SCOPE`), kèm cảnh báo: `"PRD đổi ngoài tầm theo dõi của findings (applied_to_version={A} ≠ hiện tại={C}); quét lại toàn bộ để khỏi sót UC do người/lệnh khác sửa."`
|
|
52
54
|
|
|
53
55
|
**DIMENSIONS** = 4 lăng kính dưới đây — fan out một sub-agent cho mỗi lăng kính, mỗi cái quét
|
|
54
56
|
toàn bộ PRD qua đúng lăng kính của nó:
|
|
@@ -80,6 +82,7 @@ Ghi `{paths.refinement_dir}/{prd-slug}-findings.yaml`:
|
|
|
80
82
|
```yaml
|
|
81
83
|
prd_source: "{paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md"
|
|
82
84
|
prd_version: "{đọc | **Version** | từ metadata PRD lúc sinh findings — dùng để chọn full/delta lần chạy sau}"
|
|
85
|
+
applied_to_version: "" # để trống lúc phân tích; --resume sẽ ghi version PRD vừa bump tới. Lần delta sau: nếu version PRD hiện tại ≠ giá trị này → PRD bị actor khác sửa → fallback FULL (xem "Chọn full vs delta")
|
|
83
86
|
generated_at: "{ISO datetime}"
|
|
84
87
|
status: "pending_review"
|
|
85
88
|
|
|
@@ -101,14 +104,19 @@ findings:
|
|
|
101
104
|
# true = AI tự tin cao vào suggestion này; Review Board có thể hiển thị nút "quick accept"
|
|
102
105
|
# false = cần human đọc kỹ và ghi quyết định trước khi accept
|
|
103
106
|
# Resume Mode luôn áp dụng theo status (accepted|modified), bất kể auto_fixable.
|
|
107
|
+
# LƯU Ý: /refine-prd CỐ Ý không có `--fix` mode (khác /review-context) — finding 4 lăng kính
|
|
108
|
+
# là phán đoán QA/DEV/SA/PO, phải qua người duyệt ở Board; auto_fixable ở đây CHỈ là gợi ý
|
|
109
|
+
# quick-accept cho Board, KHÔNG để máy tự áp.
|
|
104
110
|
status: "pending"
|
|
105
|
-
|
|
111
|
+
applied_via: ""
|
|
112
|
+
# Vòng đời finding-level (CHUNG với /review-context — Review Board đọc cả hai loại file nên enum phải khớp):
|
|
106
113
|
# pending → finding mới, chưa được review
|
|
107
114
|
# accepted → reviewer chấp nhận suggestion gốc → Resume sẽ apply
|
|
108
115
|
# modified → reviewer đã sửa suggestion trong Review Board → Resume dùng suggestion đã sửa
|
|
109
116
|
# rejected → reviewer bác bỏ, không apply
|
|
110
|
-
# needs_discussion → hai suggestion xung đột,
|
|
111
|
-
#
|
|
117
|
+
# needs_discussion → hai suggestion xung đột, CHẶN --resume (bỏ qua + cảnh báo) tới khi con người quyết
|
|
118
|
+
# deferred → cố ý hoãn (không chặn), bỏ qua lượt này, xem lại sau
|
|
119
|
+
# applied → đã áp vào PRD; applied_via ghi cách áp: "resume" (qua --resume) — /review-context còn dùng "fix" (qua --fix)
|
|
112
120
|
|
|
113
121
|
summary:
|
|
114
122
|
total_findings: {N}
|
|
@@ -151,7 +159,7 @@ Pipeline : Discovery → [PRD ◀ bạn ở đây] → Design Spec → BDD → T
|
|
|
151
159
|
Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
|
|
152
160
|
Next : Mở trong Review Board (chuột phải vào file) → Cập nhật PRD
|
|
153
161
|
→ /review-context {prd-file} ← kiểm tra chất lượng PRD trước khi sinh BDD
|
|
154
|
-
→ /generate-bdd {prd-file}
|
|
162
|
+
→ khi sạch critical, PO đặt | **Status** | approved | → /generate-bdd {prd-file}
|
|
155
163
|
```
|
|
156
164
|
|
|
157
165
|
Nếu có finding nào có `status: "needs_discussion"`, thêm warning block sau footer:
|
|
@@ -201,7 +209,7 @@ Với mỗi finding được chấp nhận, theo thứ tự severity (critical
|
|
|
201
209
|
### Phase 2.5 — Cập nhật file findings
|
|
202
210
|
|
|
203
211
|
Với mỗi finding đã áp dụng (status là `accepted` hoặc `modified`):
|
|
204
|
-
- Đặt `status: "applied"` trong `{paths.refinement_dir}/{prd-slug}-findings.yaml`.
|
|
212
|
+
- Đặt `status: "applied"` + `applied_via: "resume"` trong `{paths.refinement_dir}/{prd-slug}-findings.yaml`.
|
|
205
213
|
|
|
206
214
|
Cập nhật `status: "applied"` ở **root level** của file findings (không phải `summary.status`).
|
|
207
215
|
# Lifecycle file-level: pending_review → applied | partially_applied
|
|
@@ -218,10 +226,22 @@ Cập nhật `status: "applied"` ở **root level** của file findings (không
|
|
|
218
226
|
- `| **Version** | {new_version} |`
|
|
219
227
|
- `| **Updated** | {today YYYY-MM-DD} |`
|
|
220
228
|
- `| **Status** | draft |` ← reset về draft, phải được duyệt lại
|
|
221
|
-
5.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
229
|
+
5. Cập nhật `# Change Log` của PRD — **bảng phẳng 1 dòng/version, cửa sổ trượt 5 entry** (nếu gặp format cũ `### v{X}` block → chuẩn hoá sang bảng phẳng khi cập nhật):
|
|
230
|
+
- Thêm row mới lên **đầu** bảng:
|
|
231
|
+
```
|
|
232
|
+
| {new_version} | {today} | {tóm tắt — KÈM UC/AC/BR bị ảnh hưởng, vd "UC2: sửa BR5; thêm AC7"} |
|
|
233
|
+
```
|
|
234
|
+
*(Nêu rõ UC/AC/BR giúp `/generate-bdd` Version Check biết scenario nào cần cập nhật.)*
|
|
235
|
+
- Cập nhật dòng đầu section: `> Hiện tại: **v{new_version}** ({today}) · Lịch sử đầy đủ → [changelog](./changelog/{TICKET-ID}-{prd-slug}.changelog.md)`
|
|
236
|
+
- **Rollover (giữ PRD gọn — đây là chuẩn chung, /review-context cũng theo):** nếu bảng `# Change Log` có **> 5 row** → chuyển **mọi row vượt 5** (cũ nhất) sang **đầu** bảng của file kho `{paths.specs_dir}/{domain}/{prd-slug}/changelog/{TICKET-ID}-{prd-slug}.changelog.md` (giữ thứ tự mới→cũ); PRD chỉ giữ **5 row gần nhất**. Tạo thư mục `changelog/` + file kho nếu chưa có, theo skeleton:
|
|
237
|
+
```
|
|
238
|
+
# Change Log (lịch sử) — {TICKET-ID}
|
|
239
|
+
> PRD: [../{TICKET-ID}-{prd-slug}.md](../{TICKET-ID}-{prd-slug}.md) — 5 version gần nhất nằm trong PRD; đây là phần cũ hơn.
|
|
240
|
+
|
|
241
|
+
| Version | Date | Changes |
|
|
242
|
+
|---------|------|---------|
|
|
243
|
+
```
|
|
244
|
+
6. Ghi `applied_to_version: "{new_version}"` ở **root level** của findings — đóng dấu "PRD đổi tới version này là do lệnh này áp", để lần review delta sau phân biệt được thay đổi của chính mình với thay đổi do actor khác (xem "Chọn full vs delta").
|
|
225
245
|
|
|
226
246
|
### Phase 4 — Report
|
|
227
247
|
|
|
@@ -235,7 +255,7 @@ Changes :
|
|
|
235
255
|
|
|
236
256
|
💡 Vừa áp {N} phương án (gồm bản PO tự sửa) → chạy lại /refine-prd {prd-file}
|
|
237
257
|
(delta tự động) để lòi edge case mà các phương án vừa áp có thể tạo ra.
|
|
238
|
-
⚠️ BDD có thể đã lỗi thời. Chạy:
|
|
258
|
+
⚠️ Status đã reset về draft (sửa rồi phải duyệt lại). BDD có thể đã lỗi thời. Chạy:
|
|
239
259
|
/review-context {prd-file} ← kiểm tra chất lượng PRD trước
|
|
240
|
-
→ /generate-bdd {prd-file}
|
|
260
|
+
→ PO đặt | **Status** | approved | khi hài lòng → /generate-bdd {prd-file}
|
|
241
261
|
```
|
package/commands/report-bug.md
CHANGED
|
@@ -566,7 +566,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
566
566
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
567
567
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
568
568
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
569
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
569
|
+
| /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) |
|
|
570
570
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
571
571
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
572
572
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/commands/review-code.md
CHANGED
|
@@ -515,7 +515,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
515
515
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
516
516
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
517
517
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
518
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
518
|
+
| /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) |
|
|
519
519
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
520
520
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
521
521
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|