@edupia-tutor/spec-driven-docs 0.14.6 → 0.14.7
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 +15 -1
- package/commands/generate-bdd.tmpl +14 -0
- package/commands/generate-code.md +1 -1
- package/commands/generate-design-spec.md +15 -1
- package/commands/generate-design-spec.tmpl +14 -0
- package/commands/generate-prd.md +2 -1
- package/commands/generate-prd.tmpl +1 -0
- package/commands/generate-spec-manifest.md +1 -1
- package/commands/generate-tech-docs.md +1 -1
- package/commands/learn.md +1 -1
- package/commands/map-testids.md +1 -1
- package/commands/propose-scenario.md +1 -1
- package/commands/qc-analyze.md +1 -1
- 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 +18 -9
- package/commands/refine-prd.tmpl +17 -8
- package/commands/report-bug.md +1 -1
- package/commands/review-code.md +1 -1
- package/commands/review-context.md +39 -21
- package/commands/review-context.tmpl +38 -20
- 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 +1 -1
- 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 +15 -1
- package/core/commands/generate-code.md +1 -1
- package/core/commands/generate-design-spec.md +15 -1
- package/core/commands/generate-prd.md +2 -1
- package/core/commands/generate-spec-manifest.md +1 -1
- package/core/commands/generate-tech-docs.md +1 -1
- package/core/commands/learn.md +1 -1
- package/core/commands/map-testids.md +1 -1
- package/core/commands/propose-scenario.md +1 -1
- package/core/commands/qc-analyze.md +1 -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 +18 -9
- package/core/commands/report-bug.md +1 -1
- package/core/commands/review-code.md +1 -1
- package/core/commands/review-context.md +39 -21
- 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 +1 -1
- package/core/skills/code/SKILL.md +2 -2
- package/core/skills/debug/SKILL.md +3 -3
- package/core/skills/design-spec/SKILL.md +1 -1
- package/core/skills/prd/SKILL.md +1 -1
- package/core/skills/setup-ai-first/SKILL.md +1 -1
- package/core/skills/spec/SKILL.md +2 -2
- package/core/skills/test/SKILL.md +3 -3
- package/core/steps/report-footer.md +1 -1
- package/core/templates/project-context.yaml +2 -2
- package/docs/01-getting-started/core-concepts.md +1 -1
- package/docs/02-guides/developer/bdd-and-trace.md +3 -3
- package/docs/02-guides/developer/scenarios.md +2 -2
- package/docs/02-guides/developer/workflow.md +1 -1
- package/docs/02-guides/product-owner/README.md +2 -2
- package/docs/02-guides/product-owner/handoff-checklist.md +5 -5
- package/docs/02-guides/product-owner/scenarios.md +19 -17
- package/docs/03-concepts/traceability.md +3 -3
- package/docs/04-operations/sync-and-update.md +3 -3
- package/docs/05-reference/command-cheatsheet.md +1 -1
- package/package.json +1 -1
- package/skills/code/SKILL.md +2 -2
- package/skills/debug/SKILL.md +3 -3
- package/skills/design-spec/SKILL.md +1 -1
- package/skills/prd/SKILL.md +1 -1
- package/skills/setup-ai-first/SKILL.md +1 -1
- package/skills/spec/SKILL.md +2 -2
- package/skills/test/SKILL.md +3 -3
- package/steps/report-footer.md +1 -1
- package/templates/project-context.yaml +2 -2
|
@@ -641,7 +641,9 @@ Convergence: {convergence_rounds} vòng critic — file findings đã đầy đ
|
|
|
641
641
|
- **Tồn tại** + có `--full` → **FULL**: bỏ qua findings cũ.
|
|
642
642
|
- **Tồn tại** + KHÔNG `--full` → so `source_version` trong findings cũ với version target hiện tại (PRD: Metadata `Version`; BDD: `@trace.bdd_version`):
|
|
643
643
|
- **Bằng nhau** (target chưa đổi từ lần review trước) → DỪNG, báo: `"Target 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ộ."`
|
|
644
|
-
- **Khác** →
|
|
644
|
+
- **Khác** → kiểm tra `applied_to_version` trong findings cũ (version mà lần `--fix`/`--resume` gần nhất của CHÍNH lệnh này đã bump target tới) để biết ai gây ra thay đổi:
|
|
645
|
+
- **`applied_to_version` có mặt VÀ `==` version target hiện tại** → target đổ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 finding đã xử lý (status `accepted`/`modified`/`applied`) trong findings cũ } ∪ { UC có trong target hiện tại nhưng chưa từng xuất hiện ở findings cũ }.
|
|
646
|
+
- **`applied_to_version` vắng mặt HOẶC `≠` version hiện tại** → target đã bị sửa bởi **actor khác** (lệnh `/refine-prd`, `/generate-bdd` regen, sửa tay…) sau lần áp này → KHÔNG tin được phạm vi hẹp → **FULL** (KHÔNG truyền `CHANGED_SCOPE`), kèm cảnh báo: `"Target đổ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."`
|
|
645
647
|
|
|
646
648
|
---
|
|
647
649
|
|
|
@@ -653,7 +655,7 @@ Convergence: {convergence_rounds} vòng critic — file findings đã đầy đ
|
|
|
653
655
|
|
|
654
656
|
Khi `setup.mode = umbrella`, PRD phải có metadata routing đúng để context-loader Bước 1.5 có thể đưa output sinh ra tới đúng service submodule. Chạy các check này **trước P1–P5**:
|
|
655
657
|
|
|
656
|
-
> **Nguồn đọc:** PRD mang Domain
|
|
658
|
+
> **Nguồn đọc:** PRD mang **Domain** ở **bảng Metadata** (`| **Domain** | … |`) — **KHÔNG** phải frontmatter `@trace.*` (cái đó dành cho file `.feature`/tech-docs do máy đọc). Routing umbrella dựa trên Domain (bảng) + path, đúng như context-loader Bước 1.5.
|
|
657
659
|
|
|
658
660
|
**P0.1 — Row `Domain` có mặt trong Metadata**
|
|
659
661
|
- Đọc bảng Metadata của PRD, lấy row `| **Domain** |`.
|
|
@@ -673,11 +675,7 @@ Khi `setup.mode = umbrella`, PRD phải có metadata routing đúng để contex
|
|
|
673
675
|
- `suggestion`: "Cập nhật section services trong `.agent/project-context.yaml` với mapping domain-to-submodule trước khi sinh BDD."
|
|
674
676
|
- `auto_fixable: false`
|
|
675
677
|
|
|
676
|
-
**P0
|
|
677
|
-
- Nếu row `| **Status** |` **vắng mặt** → **minor**, `auto_fixable: true` (thêm `| **Status** | draft |`)
|
|
678
|
-
- Nếu `Status: draft` → **major**, `auto_fixable: false`:
|
|
679
|
-
- `finding`: "PRD status là `draft`. Team dev không nên sinh BDD từ một PRD chưa được duyệt."
|
|
680
|
-
- `suggestion`: "PO/SA nên review và cập nhật Status thành `approved` trước khi team dev tiếp tục."
|
|
678
|
+
> **Status KHÔNG còn là check của P0.** PRD chưa duyệt (`Status: draft`) là trạng thái **bình thường** lúc review — việc duyệt diễn ra *sau khi* review-context sạch, nên báo draft là "lỗi" ở đây chỉ gây nhiễu. Gác duyệt do `/generate-bdd` lo (cảnh báo mềm, áp **mọi mode**); lời nhắc đặt `approved` nằm ở Report (mọi mode). P4 chỉ lo trường hợp row Status **vắng mặt** (auto-fix mặc định `draft`).
|
|
681
679
|
|
|
682
680
|
> **P0 là một gate check:** Nếu P0.1 hoặc P0.2 cho finding critical, hiển thị cảnh báo trước khi tiếp tục:
|
|
683
681
|
> ```
|
|
@@ -741,7 +739,7 @@ hoặc định nghĩa lại field/status transition của một entity khác đi
|
|
|
741
739
|
- [ ] Có section `# Change Log`
|
|
742
740
|
- [ ] Không còn giá trị `{{PLACEHOLDER}}` chưa điền
|
|
743
741
|
|
|
744
|
-
→ Section/field thiếu hoặc lệch cấu trúc: **major**. AI có thể thêm skeleton khi `--resume` nếu được chấp nhận. Riêng **"Nhất quán 2 chiều"** lệch → **major**, `auto_fixable: false` (người xác nhận AC↔UC, AI không tự đoán). **API Source: existing thiếu contract** → **major**, `auto_fixable: false` (cần nguồn contract); **greenfield còn sót section "Existing API Contract" rỗng** → **minor**, `auto_fixable: true` (xoá section).
|
|
742
|
+
→ Section/field thiếu hoặc lệch cấu trúc: **major**. AI có thể thêm skeleton khi `--resume` nếu được chấp nhận. Riêng **"Nhất quán 2 chiều"** lệch → **major**, `auto_fixable: false` (người xác nhận AC↔UC, AI không tự đoán). **API Source: existing thiếu contract** → **major**, `auto_fixable: false` (cần nguồn contract); **greenfield còn sót section "Existing API Contract" rỗng** → **minor**, `auto_fixable: true` (xoá section). Riêng **row `Status` vắng mặt** → **minor**, `auto_fixable: true` (thêm `| **Status** | draft |`) — KHÔNG flag *giá trị* draft (đó là trạng thái bình thường lúc review; gác duyệt do `/generate-bdd` lo).
|
|
745
743
|
|
|
746
744
|
### P5 — Custom Criteria (tuỳ chọn)
|
|
747
745
|
|
|
@@ -826,6 +824,7 @@ Sau khi chạy hết các check, ghi `{paths.refinement_dir}/{slug}-review-*-fin
|
|
|
826
824
|
```yaml
|
|
827
825
|
source_file: "{absolute path to reviewed file}"
|
|
828
826
|
source_version: "{version target lúc sinh findings — PRD: Metadata Version; BDD: @trace.bdd_version — dùng chọn full/delta lần chạy sau}"
|
|
827
|
+
applied_to_version: "" # để trống lúc phân tích; --fix/--resume sẽ ghi version target vừa bump tới. Lần delta sau: nếu version target hiện tại ≠ giá trị này → target bị actor khác sửa → fallback FULL (xem "Chọn full vs delta")
|
|
829
828
|
generated_at: "{ISO datetime}"
|
|
830
829
|
review_type: "{prd | bdd}"
|
|
831
830
|
status: "pending_review"
|
|
@@ -840,7 +839,8 @@ findings:
|
|
|
840
839
|
finding: "{mô tả rõ ràng vấn đề}"
|
|
841
840
|
suggestion: "{bản fix cụ thể, hành động được — AI sẽ áp dụng khi --resume nếu được chấp nhận}"
|
|
842
841
|
auto_fixable: true # true = AI áp dụng được; false = người phải viết note trong Review Board
|
|
843
|
-
status: "pending" # pending | accepted | modified | rejected | deferred
|
|
842
|
+
status: "pending" # pending | accepted | modified | rejected | needs_discussion | deferred | applied (vòng đời chung — xem chú thích dưới)
|
|
843
|
+
applied_via: "" # set khi status='applied': "fix" (auto qua --fix) | "resume" (người duyệt qua --resume)
|
|
844
844
|
|
|
845
845
|
summary:
|
|
846
846
|
total_findings: {N}
|
|
@@ -850,6 +850,15 @@ summary:
|
|
|
850
850
|
recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
|
|
851
851
|
```
|
|
852
852
|
|
|
853
|
+
> **Vòng đời finding-level (CHUNG với `/refine-prd` — một Review Board đọc cả hai loại file nên enum phải khớp):**
|
|
854
|
+
> - `pending` → mới, chưa review
|
|
855
|
+
> - `accepted` → nhận suggestion gốc → `--resume` sẽ áp
|
|
856
|
+
> - `modified` → người đã sửa suggestion trong Review Board → `--resume` dùng bản đã sửa
|
|
857
|
+
> - `rejected` → bác bỏ, không áp
|
|
858
|
+
> - `needs_discussion` → xung đột/chưa ngã ngũ → **chặn** `--resume` (bỏ qua + cảnh báo) tới khi người quyết
|
|
859
|
+
> - `deferred` → cố ý hoãn (không chặn), bỏ qua lượt này, xem lại sau
|
|
860
|
+
> - `applied` → đã áp vào target; `applied_via` ghi cách áp: `"fix"` (auto qua `--fix`) hoặc `"resume"` (người duyệt qua `--resume`)
|
|
861
|
+
|
|
853
862
|
> **Field định vị (`quote` + `uc_id`) — bắt buộc cho source-jump của Review Board.**
|
|
854
863
|
> Với mỗi finding, copy một đoạn `quote` **nguyên văn** thẳng từ file đang review tại đúng
|
|
855
864
|
> chỗ lỗi xảy ra — KHÔNG diễn giải lại; nó được so khớp với tài liệu để định vị dòng.
|
|
@@ -928,7 +937,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
928
937
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
929
938
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
930
939
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
931
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
940
|
+
| /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) |
|
|
932
941
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
933
942
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
934
943
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -983,6 +992,10 @@ Lựa chọn tiếp theo:
|
|
|
983
992
|
→ áp dụng ngay mọi finding auto-fixable
|
|
984
993
|
B) Review Board: mở file findings → accept/modify/reject
|
|
985
994
|
→ /review-context --resume {target-file}
|
|
995
|
+
|
|
996
|
+
{CHỈ in khối này khi 0 finding critical còn lại — còn critical thì nhắc duyệt là vô nghĩa}:
|
|
997
|
+
✅ PRD đã sạch critical. Khi PO hài lòng → đặt `| **Status** | approved |` trong
|
|
998
|
+
Metadata PRD (dấu duyệt nghiệp vụ, do người quyết) → rồi /generate-bdd.
|
|
986
999
|
```
|
|
987
1000
|
|
|
988
1001
|
---
|
|
@@ -1012,10 +1025,9 @@ Với mỗi finding có `auto_fixable: true`, theo thứ tự (critical → majo
|
|
|
1012
1025
|
|
|
1013
1026
|
| check_id | Áp dụng gì |
|
|
1014
1027
|
|----------|--------------|
|
|
1015
|
-
| P0.3 (Thiếu status) | Thêm row `| **Status** | draft |` vào bảng Metadata |
|
|
1016
1028
|
| P1 (Banned term) | Thay mọi lần xuất hiện banned term bằng canonical term |
|
|
1017
1029
|
| P1 (Thuật ngữ kỹ thuật/UI) | Diễn đạt lại theo Business Language Guard (Nhóm 1) / chuyển Design Spec (2) / bỏ về Tech Docs (3) |
|
|
1018
|
-
| P4 (Structure) | Thêm skeleton section/metadata còn thiếu; greenfield → xoá section "Existing API Contract" rỗng |
|
|
1030
|
+
| P4 (Structure) | Thêm skeleton section/metadata còn thiếu (row Status vắng → thêm mặc định `draft`); greenfield → xoá section "Existing API Contract" rỗng |
|
|
1019
1031
|
|
|
1020
1032
|
> **Chạy Business Language Guard trên text vừa sửa TRƯỚC khi ghi** (xem section "Ngôn ngữ nghiệp vụ") — không để bản auto-fix tự kéo thuật ngữ kỹ thuật vào.
|
|
1021
1033
|
|
|
@@ -1033,13 +1045,14 @@ Với mỗi finding có `auto_fixable: true`, theo thứ tự (critical → majo
|
|
|
1033
1045
|
| B5 | Thêm @trace header còn thiếu, sinh lại Coverage Matrix / Pre-merge Checklist |
|
|
1034
1046
|
| B6 | Thêm `And <side-effect>` còn thiếu vào block Then |
|
|
1035
1047
|
|
|
1036
|
-
Sau khi áp dụng mỗi finding, đánh dấu nó `status: "
|
|
1048
|
+
Sau khi áp dụng mỗi finding, đánh dấu nó `status: "applied"` + `applied_via: "fix"` trong file findings.
|
|
1037
1049
|
|
|
1038
1050
|
### Phase 3 — Version bump
|
|
1039
1051
|
|
|
1040
|
-
- **PRD**: nếu ≥1 finding được áp dụng → bump version **minor** (auto-fix chỉ áp dụng thay banned-term P1 và thêm skeleton P4 — không bao giờ thay đổi cấu trúc UC hay nội dung BR, nên minor bump luôn đúng), thêm entry Changelog:
|
|
1052
|
+
- **PRD**: nếu ≥1 finding được áp dụng → bump version **minor** (auto-fix chỉ áp dụng thay banned-term P1 và thêm skeleton P4 — không bao giờ thay đổi cấu trúc UC hay nội dung BR, nên minor bump luôn đúng), **reset `| **Status** | draft |` trong Metadata** (PRD vừa đổi sau khi duyệt → con dấu duyệt cũ hết hiệu lực, phải duyệt lại — đồng bộ với /refine-prd), thêm entry Changelog:
|
|
1041
1053
|
`Auto-fix: applied {N} auto-fixable review-context findings`
|
|
1042
1054
|
- **BDD**: nếu ≥1 finding được áp dụng → tăng `@trace.bdd_version` lên 0.1
|
|
1055
|
+
- **Cả hai**: ghi `applied_to_version: "{version vừa bump tới}"` ở root level của findings — đóng dấu "target đổi tới version này là do lệnh này áp", để lần review delta sau phân biệt thay đổi của chính mình với thay đổi do actor khác (xem "Chọn full vs delta").
|
|
1043
1056
|
|
|
1044
1057
|
### Phase 4 — Report
|
|
1045
1058
|
|
|
@@ -1054,13 +1067,14 @@ Auto-fixed : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
|
1054
1067
|
Còn pending (cần quyết định của con người): {N}
|
|
1055
1068
|
- F00X [{severity}] {tóm tắt finding} ← mở file findings trong Review Board
|
|
1056
1069
|
|
|
1057
|
-
{If PRD}: Version bumped: {old} → {new}
|
|
1070
|
+
{If PRD}: Version bumped: {old} → {new} | Status: reset về draft (cần duyệt lại)
|
|
1058
1071
|
{If BDD}: bdd_version: {old} → {new}
|
|
1059
1072
|
|
|
1060
1073
|
File findings:
|
|
1061
1074
|
{If PRD}: {paths.refinement_dir}/{prd-slug}-review-context-findings.yaml
|
|
1062
1075
|
{If BDD}: {paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml
|
|
1063
1076
|
Chạy lại /review-context {file} để xác nhận 0 finding critical còn lại.
|
|
1077
|
+
Khi sạch critical + PO duyệt → đặt | **Status** | approved | trong Metadata rồi /generate-bdd.
|
|
1064
1078
|
```
|
|
1065
1079
|
|
|
1066
1080
|
Nếu 0 finding nào auto-fixable → in:
|
|
@@ -1082,26 +1096,28 @@ Mở file findings trong Review Board → rồi chạy: /review-context --resume
|
|
|
1082
1096
|
- PRD: `{paths.refinement_dir}/{prd-slug}-review-context-findings.yaml`
|
|
1083
1097
|
- BDD: `{paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml`
|
|
1084
1098
|
2. Đọc file findings.
|
|
1085
|
-
3. Gom các finding có `status: "accepted"` hoặc `status: "modified"`.
|
|
1099
|
+
3. Gom các finding có `status: "accepted"` hoặc `status: "modified"`. Bỏ qua `rejected`/`deferred`.
|
|
1086
1100
|
4. Nếu không có → báo "No accepted findings. File unchanged." và dừng.
|
|
1101
|
+
5. Nếu còn finding `status: "needs_discussion"` → cảnh báo (không dừng): `"⚠️ {N} finding chưa ngã ngũ (needs_discussion) — bỏ qua lần áp này; giải quyết trong Review Board rồi --resume lại."`
|
|
1087
1102
|
|
|
1088
1103
|
### Phase 2 — Áp dụng fix
|
|
1089
1104
|
|
|
1090
1105
|
Áp dụng theo thứ tự: critical → major → minor.
|
|
1091
1106
|
|
|
1107
|
+
Với mỗi finding `accepted`/`modified` sau khi áp xong → đặt `status: "applied"` + `applied_via: "resume"` trong findings (hoàn tất vòng đời, cùng quy ước với `--fix` và `/refine-prd`).
|
|
1108
|
+
|
|
1092
1109
|
> **Chạy Business Language Guard trên text vừa sửa TRƯỚC khi ghi** (xem section "Ngôn ngữ nghiệp vụ") — đặc biệt với P2 (sửa câu mơ hồ) / P4 skeleton: không để bản fix tự kéo thuật ngữ kỹ thuật-UI vào PRD.
|
|
1093
1110
|
|
|
1094
1111
|
**Với finding PRD:**
|
|
1095
1112
|
| check_id | Làm gì |
|
|
1096
1113
|
|----------|-----------|
|
|
1097
|
-
| P0.3 (Thiếu status) | Thêm row `| **Status** | draft |` vào bảng Metadata |
|
|
1098
1114
|
| P1 (Banned term) | Thay banned term bằng canonical; thuật ngữ kỹ thuật/UI → diễn đạt lại theo Business Language Guard |
|
|
1099
1115
|
| P2 (Ambiguity) | Áp dụng fix nêu trong `suggestion` hoặc note `modified` |
|
|
1100
1116
|
| P3 (Conflict) | Áp dụng cách giải quyết nêu trong note modified |
|
|
1101
|
-
| P4 (Structure) | Thêm section/metadata field còn thiếu |
|
|
1117
|
+
| P4 (Structure) | Thêm section/metadata field còn thiếu (row Status vắng → thêm mặc định `draft`) |
|
|
1102
1118
|
| P5 (Custom) | Áp dụng như nêu trong suggestion/note |
|
|
1103
1119
|
|
|
1104
|
-
→ Sau khi áp dụng, bump version PRD (minor)
|
|
1120
|
+
→ Sau khi áp dụng, bump version PRD (minor), **reset `| **Status** | draft |` trong Metadata** (PRD vừa đổi sau khi duyệt → phải duyệt lại — đồng bộ với /refine-prd), thêm entry Changelog, và ghi `applied_to_version: "{new_version}"` ở root level của findings (xem "Chọn full vs delta").
|
|
1105
1121
|
|
|
1106
1122
|
**Với finding BDD:**
|
|
1107
1123
|
| check_id | Làm gì |
|
|
@@ -1115,20 +1131,22 @@ Mở file findings trong Review Board → rồi chạy: /review-context --resume
|
|
|
1115
1131
|
|
|
1116
1132
|
→ Sau khi áp dụng, tăng `@trace.bdd_version` trong header file lên 0.1.
|
|
1117
1133
|
→ Đồng thời cập nhật `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv`: đặt cột `bdd_version` thành giá trị `@trace.bdd_version` mới cho mọi row, và đặt `last_updated` thành ngày hôm nay.
|
|
1134
|
+
→ Ghi `applied_to_version: "{@trace.bdd_version mới}"` ở root level của findings (xem "Chọn full vs delta").
|
|
1118
1135
|
|
|
1119
1136
|
### Phase 3 — Report
|
|
1120
1137
|
|
|
1121
1138
|
```
|
|
1122
1139
|
/review-context --resume Đã áp dụng — {target file}
|
|
1123
1140
|
Applied : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
1124
|
-
Skipped : {N} rejected/deferred
|
|
1141
|
+
Skipped : {N} rejected/deferred/needs_discussion
|
|
1125
1142
|
|
|
1126
1143
|
Changes:
|
|
1127
1144
|
- {tóm tắt change 1}
|
|
1128
1145
|
- {tóm tắt change 2}
|
|
1129
1146
|
|
|
1130
|
-
{If PRD}: Version bumped: {old} → {new}
|
|
1147
|
+
{If PRD}: Version bumped: {old} → {new} | Status: reset về draft (cần duyệt lại)
|
|
1131
1148
|
{If BDD}: bdd_version: {old} → {new}
|
|
1132
1149
|
|
|
1133
1150
|
Chạy lại /review-context {file} để xác nhận 0 finding critical còn lại.
|
|
1151
|
+
Khi sạch critical + PO duyệt → đặt | **Status** | approved | trong Metadata rồi /generate-bdd.
|
|
1134
1152
|
```
|
|
@@ -58,7 +58,9 @@ Suy ra tên file findings output:
|
|
|
58
58
|
- **Tồn tại** + có `--full` → **FULL**: bỏ qua findings cũ.
|
|
59
59
|
- **Tồn tại** + KHÔNG `--full` → so `source_version` trong findings cũ với version target hiện tại (PRD: Metadata `Version`; BDD: `@trace.bdd_version`):
|
|
60
60
|
- **Bằng nhau** (target chưa đổi từ lần review trước) → DỪNG, báo: `"Target 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ộ."`
|
|
61
|
-
- **Khác** →
|
|
61
|
+
- **Khác** → kiểm tra `applied_to_version` trong findings cũ (version mà lần `--fix`/`--resume` gần nhất của CHÍNH lệnh này đã bump target tới) để biết ai gây ra thay đổi:
|
|
62
|
+
- **`applied_to_version` có mặt VÀ `==` version target hiện tại** → target đổ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 finding đã xử lý (status `accepted`/`modified`/`applied`) trong findings cũ } ∪ { UC có trong target hiện tại nhưng chưa từng xuất hiện ở findings cũ }.
|
|
63
|
+
- **`applied_to_version` vắng mặt HOẶC `≠` version hiện tại** → target đã bị sửa bởi **actor khác** (lệnh `/refine-prd`, `/generate-bdd` regen, sửa tay…) sau lần áp này → KHÔNG tin được phạm vi hẹp → **FULL** (KHÔNG truyền `CHANGED_SCOPE`), kèm cảnh báo: `"Target đổ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."`
|
|
62
64
|
|
|
63
65
|
---
|
|
64
66
|
|
|
@@ -70,7 +72,7 @@ Suy ra tên file findings output:
|
|
|
70
72
|
|
|
71
73
|
Khi `setup.mode = umbrella`, PRD phải có metadata routing đúng để context-loader Bước 1.5 có thể đưa output sinh ra tới đúng service submodule. Chạy các check này **trước P1–P5**:
|
|
72
74
|
|
|
73
|
-
> **Nguồn đọc:** PRD mang Domain
|
|
75
|
+
> **Nguồn đọc:** PRD mang **Domain** ở **bảng Metadata** (`| **Domain** | … |`) — **KHÔNG** phải frontmatter `@trace.*` (cái đó dành cho file `.feature`/tech-docs do máy đọc). Routing umbrella dựa trên Domain (bảng) + path, đúng như context-loader Bước 1.5.
|
|
74
76
|
|
|
75
77
|
**P0.1 — Row `Domain` có mặt trong Metadata**
|
|
76
78
|
- Đọc bảng Metadata của PRD, lấy row `| **Domain** |`.
|
|
@@ -90,11 +92,7 @@ Khi `setup.mode = umbrella`, PRD phải có metadata routing đúng để contex
|
|
|
90
92
|
- `suggestion`: "Cập nhật section services trong `.agent/project-context.yaml` với mapping domain-to-submodule trước khi sinh BDD."
|
|
91
93
|
- `auto_fixable: false`
|
|
92
94
|
|
|
93
|
-
**P0
|
|
94
|
-
- Nếu row `| **Status** |` **vắng mặt** → **minor**, `auto_fixable: true` (thêm `| **Status** | draft |`)
|
|
95
|
-
- Nếu `Status: draft` → **major**, `auto_fixable: false`:
|
|
96
|
-
- `finding`: "PRD status là `draft`. Team dev không nên sinh BDD từ một PRD chưa được duyệt."
|
|
97
|
-
- `suggestion`: "PO/SA nên review và cập nhật Status thành `approved` trước khi team dev tiếp tục."
|
|
95
|
+
> **Status KHÔNG còn là check của P0.** PRD chưa duyệt (`Status: draft`) là trạng thái **bình thường** lúc review — việc duyệt diễn ra *sau khi* review-context sạch, nên báo draft là "lỗi" ở đây chỉ gây nhiễu. Gác duyệt do `/generate-bdd` lo (cảnh báo mềm, áp **mọi mode**); lời nhắc đặt `approved` nằm ở Report (mọi mode). P4 chỉ lo trường hợp row Status **vắng mặt** (auto-fix mặc định `draft`).
|
|
98
96
|
|
|
99
97
|
> **P0 là một gate check:** Nếu P0.1 hoặc P0.2 cho finding critical, hiển thị cảnh báo trước khi tiếp tục:
|
|
100
98
|
> ```
|
|
@@ -158,7 +156,7 @@ hoặc định nghĩa lại field/status transition của một entity khác đi
|
|
|
158
156
|
- [ ] Có section `# Change Log`
|
|
159
157
|
- [ ] Không còn giá trị `{{PLACEHOLDER}}` chưa điền
|
|
160
158
|
|
|
161
|
-
→ Section/field thiếu hoặc lệch cấu trúc: **major**. AI có thể thêm skeleton khi `--resume` nếu được chấp nhận. Riêng **"Nhất quán 2 chiều"** lệch → **major**, `auto_fixable: false` (người xác nhận AC↔UC, AI không tự đoán). **API Source: existing thiếu contract** → **major**, `auto_fixable: false` (cần nguồn contract); **greenfield còn sót section "Existing API Contract" rỗng** → **minor**, `auto_fixable: true` (xoá section).
|
|
159
|
+
→ Section/field thiếu hoặc lệch cấu trúc: **major**. AI có thể thêm skeleton khi `--resume` nếu được chấp nhận. Riêng **"Nhất quán 2 chiều"** lệch → **major**, `auto_fixable: false` (người xác nhận AC↔UC, AI không tự đoán). **API Source: existing thiếu contract** → **major**, `auto_fixable: false` (cần nguồn contract); **greenfield còn sót section "Existing API Contract" rỗng** → **minor**, `auto_fixable: true` (xoá section). Riêng **row `Status` vắng mặt** → **minor**, `auto_fixable: true` (thêm `| **Status** | draft |`) — KHÔNG flag *giá trị* draft (đó là trạng thái bình thường lúc review; gác duyệt do `/generate-bdd` lo).
|
|
162
160
|
|
|
163
161
|
### P5 — Custom Criteria (tuỳ chọn)
|
|
164
162
|
|
|
@@ -243,6 +241,7 @@ Sau khi chạy hết các check, ghi `{paths.refinement_dir}/{slug}-review-*-fin
|
|
|
243
241
|
```yaml
|
|
244
242
|
source_file: "{absolute path to reviewed file}"
|
|
245
243
|
source_version: "{version target lúc sinh findings — PRD: Metadata Version; BDD: @trace.bdd_version — dùng chọn full/delta lần chạy sau}"
|
|
244
|
+
applied_to_version: "" # để trống lúc phân tích; --fix/--resume sẽ ghi version target vừa bump tới. Lần delta sau: nếu version target hiện tại ≠ giá trị này → target bị actor khác sửa → fallback FULL (xem "Chọn full vs delta")
|
|
246
245
|
generated_at: "{ISO datetime}"
|
|
247
246
|
review_type: "{prd | bdd}"
|
|
248
247
|
status: "pending_review"
|
|
@@ -257,7 +256,8 @@ findings:
|
|
|
257
256
|
finding: "{mô tả rõ ràng vấn đề}"
|
|
258
257
|
suggestion: "{bản fix cụ thể, hành động được — AI sẽ áp dụng khi --resume nếu được chấp nhận}"
|
|
259
258
|
auto_fixable: true # true = AI áp dụng được; false = người phải viết note trong Review Board
|
|
260
|
-
status: "pending" # pending | accepted | modified | rejected | deferred
|
|
259
|
+
status: "pending" # pending | accepted | modified | rejected | needs_discussion | deferred | applied (vòng đời chung — xem chú thích dưới)
|
|
260
|
+
applied_via: "" # set khi status='applied': "fix" (auto qua --fix) | "resume" (người duyệt qua --resume)
|
|
261
261
|
|
|
262
262
|
summary:
|
|
263
263
|
total_findings: {N}
|
|
@@ -267,6 +267,15 @@ summary:
|
|
|
267
267
|
recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
|
|
268
268
|
```
|
|
269
269
|
|
|
270
|
+
> **Vòng đời finding-level (CHUNG với `/refine-prd` — một Review Board đọc cả hai loại file nên enum phải khớp):**
|
|
271
|
+
> - `pending` → mới, chưa review
|
|
272
|
+
> - `accepted` → nhận suggestion gốc → `--resume` sẽ áp
|
|
273
|
+
> - `modified` → người đã sửa suggestion trong Review Board → `--resume` dùng bản đã sửa
|
|
274
|
+
> - `rejected` → bác bỏ, không áp
|
|
275
|
+
> - `needs_discussion` → xung đột/chưa ngã ngũ → **chặn** `--resume` (bỏ qua + cảnh báo) tới khi người quyết
|
|
276
|
+
> - `deferred` → cố ý hoãn (không chặn), bỏ qua lượt này, xem lại sau
|
|
277
|
+
> - `applied` → đã áp vào target; `applied_via` ghi cách áp: `"fix"` (auto qua `--fix`) hoặc `"resume"` (người duyệt qua `--resume`)
|
|
278
|
+
|
|
270
279
|
> **Field định vị (`quote` + `uc_id`) — bắt buộc cho source-jump của Review Board.**
|
|
271
280
|
> Với mỗi finding, copy một đoạn `quote` **nguyên văn** thẳng từ file đang review tại đúng
|
|
272
281
|
> chỗ lỗi xảy ra — KHÔNG diễn giải lại; nó được so khớp với tài liệu để định vị dòng.
|
|
@@ -300,6 +309,10 @@ Lựa chọn tiếp theo:
|
|
|
300
309
|
→ áp dụng ngay mọi finding auto-fixable
|
|
301
310
|
B) Review Board: mở file findings → accept/modify/reject
|
|
302
311
|
→ /review-context --resume {target-file}
|
|
312
|
+
|
|
313
|
+
{CHỈ in khối này khi 0 finding critical còn lại — còn critical thì nhắc duyệt là vô nghĩa}:
|
|
314
|
+
✅ PRD đã sạch critical. Khi PO hài lòng → đặt `| **Status** | approved |` trong
|
|
315
|
+
Metadata PRD (dấu duyệt nghiệp vụ, do người quyết) → rồi /generate-bdd.
|
|
303
316
|
```
|
|
304
317
|
|
|
305
318
|
---
|
|
@@ -329,10 +342,9 @@ Với mỗi finding có `auto_fixable: true`, theo thứ tự (critical → majo
|
|
|
329
342
|
|
|
330
343
|
| check_id | Áp dụng gì |
|
|
331
344
|
|----------|--------------|
|
|
332
|
-
| P0.3 (Thiếu status) | Thêm row `| **Status** | draft |` vào bảng Metadata |
|
|
333
345
|
| P1 (Banned term) | Thay mọi lần xuất hiện banned term bằng canonical term |
|
|
334
346
|
| P1 (Thuật ngữ kỹ thuật/UI) | Diễn đạt lại theo Business Language Guard (Nhóm 1) / chuyển Design Spec (2) / bỏ về Tech Docs (3) |
|
|
335
|
-
| P4 (Structure) | Thêm skeleton section/metadata còn thiếu; greenfield → xoá section "Existing API Contract" rỗng |
|
|
347
|
+
| P4 (Structure) | Thêm skeleton section/metadata còn thiếu (row Status vắng → thêm mặc định `draft`); greenfield → xoá section "Existing API Contract" rỗng |
|
|
336
348
|
|
|
337
349
|
> **Chạy Business Language Guard trên text vừa sửa TRƯỚC khi ghi** (xem section "Ngôn ngữ nghiệp vụ") — không để bản auto-fix tự kéo thuật ngữ kỹ thuật vào.
|
|
338
350
|
|
|
@@ -350,13 +362,14 @@ Với mỗi finding có `auto_fixable: true`, theo thứ tự (critical → majo
|
|
|
350
362
|
| B5 | Thêm @trace header còn thiếu, sinh lại Coverage Matrix / Pre-merge Checklist |
|
|
351
363
|
| B6 | Thêm `And <side-effect>` còn thiếu vào block Then |
|
|
352
364
|
|
|
353
|
-
Sau khi áp dụng mỗi finding, đánh dấu nó `status: "
|
|
365
|
+
Sau khi áp dụng mỗi finding, đánh dấu nó `status: "applied"` + `applied_via: "fix"` trong file findings.
|
|
354
366
|
|
|
355
367
|
### Phase 3 — Version bump
|
|
356
368
|
|
|
357
|
-
- **PRD**: nếu ≥1 finding được áp dụng → bump version **minor** (auto-fix chỉ áp dụng thay banned-term P1 và thêm skeleton P4 — không bao giờ thay đổi cấu trúc UC hay nội dung BR, nên minor bump luôn đúng), thêm entry Changelog:
|
|
369
|
+
- **PRD**: nếu ≥1 finding được áp dụng → bump version **minor** (auto-fix chỉ áp dụng thay banned-term P1 và thêm skeleton P4 — không bao giờ thay đổi cấu trúc UC hay nội dung BR, nên minor bump luôn đúng), **reset `| **Status** | draft |` trong Metadata** (PRD vừa đổi sau khi duyệt → con dấu duyệt cũ hết hiệu lực, phải duyệt lại — đồng bộ với /refine-prd), thêm entry Changelog:
|
|
358
370
|
`Auto-fix: applied {N} auto-fixable review-context findings`
|
|
359
371
|
- **BDD**: nếu ≥1 finding được áp dụng → tăng `@trace.bdd_version` lên 0.1
|
|
372
|
+
- **Cả hai**: ghi `applied_to_version: "{version vừa bump tới}"` ở root level của findings — đóng dấu "target đổi tới version này là do lệnh này áp", để lần review delta sau phân biệt thay đổi của chính mình với thay đổi do actor khác (xem "Chọn full vs delta").
|
|
360
373
|
|
|
361
374
|
### Phase 4 — Report
|
|
362
375
|
|
|
@@ -371,13 +384,14 @@ Auto-fixed : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
|
371
384
|
Còn pending (cần quyết định của con người): {N}
|
|
372
385
|
- F00X [{severity}] {tóm tắt finding} ← mở file findings trong Review Board
|
|
373
386
|
|
|
374
|
-
{If PRD}: Version bumped: {old} → {new}
|
|
387
|
+
{If PRD}: Version bumped: {old} → {new} | Status: reset về draft (cần duyệt lại)
|
|
375
388
|
{If BDD}: bdd_version: {old} → {new}
|
|
376
389
|
|
|
377
390
|
File findings:
|
|
378
391
|
{If PRD}: {paths.refinement_dir}/{prd-slug}-review-context-findings.yaml
|
|
379
392
|
{If BDD}: {paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml
|
|
380
393
|
Chạy lại /review-context {file} để xác nhận 0 finding critical còn lại.
|
|
394
|
+
Khi sạch critical + PO duyệt → đặt | **Status** | approved | trong Metadata rồi /generate-bdd.
|
|
381
395
|
```
|
|
382
396
|
|
|
383
397
|
Nếu 0 finding nào auto-fixable → in:
|
|
@@ -399,26 +413,28 @@ Mở file findings trong Review Board → rồi chạy: /review-context --resume
|
|
|
399
413
|
- PRD: `{paths.refinement_dir}/{prd-slug}-review-context-findings.yaml`
|
|
400
414
|
- BDD: `{paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml`
|
|
401
415
|
2. Đọc file findings.
|
|
402
|
-
3. Gom các finding có `status: "accepted"` hoặc `status: "modified"`.
|
|
416
|
+
3. Gom các finding có `status: "accepted"` hoặc `status: "modified"`. Bỏ qua `rejected`/`deferred`.
|
|
403
417
|
4. Nếu không có → báo "No accepted findings. File unchanged." và dừng.
|
|
418
|
+
5. Nếu còn finding `status: "needs_discussion"` → cảnh báo (không dừng): `"⚠️ {N} finding chưa ngã ngũ (needs_discussion) — bỏ qua lần áp này; giải quyết trong Review Board rồi --resume lại."`
|
|
404
419
|
|
|
405
420
|
### Phase 2 — Áp dụng fix
|
|
406
421
|
|
|
407
422
|
Áp dụng theo thứ tự: critical → major → minor.
|
|
408
423
|
|
|
424
|
+
Với mỗi finding `accepted`/`modified` sau khi áp xong → đặt `status: "applied"` + `applied_via: "resume"` trong findings (hoàn tất vòng đời, cùng quy ước với `--fix` và `/refine-prd`).
|
|
425
|
+
|
|
409
426
|
> **Chạy Business Language Guard trên text vừa sửa TRƯỚC khi ghi** (xem section "Ngôn ngữ nghiệp vụ") — đặc biệt với P2 (sửa câu mơ hồ) / P4 skeleton: không để bản fix tự kéo thuật ngữ kỹ thuật-UI vào PRD.
|
|
410
427
|
|
|
411
428
|
**Với finding PRD:**
|
|
412
429
|
| check_id | Làm gì |
|
|
413
430
|
|----------|-----------|
|
|
414
|
-
| P0.3 (Thiếu status) | Thêm row `| **Status** | draft |` vào bảng Metadata |
|
|
415
431
|
| P1 (Banned term) | Thay banned term bằng canonical; thuật ngữ kỹ thuật/UI → diễn đạt lại theo Business Language Guard |
|
|
416
432
|
| P2 (Ambiguity) | Áp dụng fix nêu trong `suggestion` hoặc note `modified` |
|
|
417
433
|
| P3 (Conflict) | Áp dụng cách giải quyết nêu trong note modified |
|
|
418
|
-
| P4 (Structure) | Thêm section/metadata field còn thiếu |
|
|
434
|
+
| P4 (Structure) | Thêm section/metadata field còn thiếu (row Status vắng → thêm mặc định `draft`) |
|
|
419
435
|
| P5 (Custom) | Áp dụng như nêu trong suggestion/note |
|
|
420
436
|
|
|
421
|
-
→ Sau khi áp dụng, bump version PRD (minor)
|
|
437
|
+
→ Sau khi áp dụng, bump version PRD (minor), **reset `| **Status** | draft |` trong Metadata** (PRD vừa đổi sau khi duyệt → phải duyệt lại — đồng bộ với /refine-prd), thêm entry Changelog, và ghi `applied_to_version: "{new_version}"` ở root level của findings (xem "Chọn full vs delta").
|
|
422
438
|
|
|
423
439
|
**Với finding BDD:**
|
|
424
440
|
| check_id | Làm gì |
|
|
@@ -432,20 +448,22 @@ Mở file findings trong Review Board → rồi chạy: /review-context --resume
|
|
|
432
448
|
|
|
433
449
|
→ Sau khi áp dụng, tăng `@trace.bdd_version` trong header file lên 0.1.
|
|
434
450
|
→ Đồng thời cập nhật `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv`: đặt cột `bdd_version` thành giá trị `@trace.bdd_version` mới cho mọi row, và đặt `last_updated` thành ngày hôm nay.
|
|
451
|
+
→ Ghi `applied_to_version: "{@trace.bdd_version mới}"` ở root level của findings (xem "Chọn full vs delta").
|
|
435
452
|
|
|
436
453
|
### Phase 3 — Report
|
|
437
454
|
|
|
438
455
|
```
|
|
439
456
|
/review-context --resume Đã áp dụng — {target file}
|
|
440
457
|
Applied : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
441
|
-
Skipped : {N} rejected/deferred
|
|
458
|
+
Skipped : {N} rejected/deferred/needs_discussion
|
|
442
459
|
|
|
443
460
|
Changes:
|
|
444
461
|
- {tóm tắt change 1}
|
|
445
462
|
- {tóm tắt change 2}
|
|
446
463
|
|
|
447
|
-
{If PRD}: Version bumped: {old} → {new}
|
|
464
|
+
{If PRD}: Version bumped: {old} → {new} | Status: reset về draft (cần duyệt lại)
|
|
448
465
|
{If BDD}: bdd_version: {old} → {new}
|
|
449
466
|
|
|
450
467
|
Chạy lại /review-context {file} để xác nhận 0 finding critical còn lại.
|
|
468
|
+
Khi sạch critical + PO duyệt → đặt | **Status** | approved | trong Metadata rồi /generate-bdd.
|
|
451
469
|
```
|
|
@@ -682,7 +682,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
682
682
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
683
683
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
684
684
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
685
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
685
|
+
| /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) |
|
|
686
686
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
687
687
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
688
688
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -140,15 +140,15 @@ Rồi:
|
|
|
140
140
|
- Artifact theo từng feature (`specs/{domain}/{prd-slug}/{ {TICKET-ID}-{prd-slug}.md, bdd/, tech-docs/, design-spec/}`) được tạo on demand bởi các lệnh generate — ĐỪNG tạo trước
|
|
141
141
|
- Skip: `.trace/` (theo service, sống cạnh code trong mỗi service submodule)
|
|
142
142
|
- Sinh `CLAUDE.md` tối thiểu chỉ với §1 (project overview) và §7 (git conventions)
|
|
143
|
-
- Hỏi người dùng: **"Liệt kê các business domain của bạn (vd auth, payment, loyalty):"** — lưu thành domain list cho `project-context.yaml` và nhắc PO các tên này phải được dùng nhất quán
|
|
143
|
+
- Hỏi người dùng: **"Liệt kê các business domain của bạn (vd auth, payment, loyalty):"** — lưu thành domain list cho `project-context.yaml` và nhắc PO các tên này phải được dùng nhất quán ở row `| **Domain** |` của bảng Metadata trong mọi PRD
|
|
144
144
|
- Thông báo:
|
|
145
145
|
- Lệnh cho PO repo: `/define-product`, `/generate-prd`, `/review-context`, `/generate-design-spec`
|
|
146
|
-
- **Quan trọng cho handoff team dev:** Mọi PRD phải có
|
|
147
|
-
-
|
|
146
|
+
- **Quan trọng cho handoff team dev:** Mọi PRD phải có row `| **Domain** | {domain} |` trong **bảng Metadata**. Team dev dùng nó để route BDD/code sinh ra tới đúng service submodule. Tên domain không nhất quán sẽ phá routing.
|
|
147
|
+
- Bảng Metadata PRD (do `/generate-prd` điền sẵn theo template):
|
|
148
148
|
```
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
| **Domain** | {domain} | ← phải khớp một key trong services config của team dev
|
|
150
|
+
| **Ticket** | {TICKET-ID} |
|
|
151
|
+
| **Status** | draft | approved |
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
## Step 1 — Tạo cấu trúc thư mục
|
|
@@ -446,7 +446,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
446
446
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
447
447
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
448
448
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
449
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
449
|
+
| /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) |
|
|
450
450
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
451
451
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
452
452
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -510,7 +510,7 @@ Next:
|
|
|
510
510
|
Next:
|
|
511
511
|
1. Review .agent/project-context.yaml:
|
|
512
512
|
- Cập nhật services[].path khớp tên thư mục submodule thực tế
|
|
513
|
-
- Cập nhật domain key của services khớp
|
|
513
|
+
- Cập nhật domain key của services khớp row `Domain` (bảng Metadata) trong các file PRD
|
|
514
514
|
- Xác nhận path spec_source đúng
|
|
515
515
|
|
|
516
516
|
2. Chạy /sync — một lệnh lo mọi thứ còn lại:
|
|
@@ -529,7 +529,7 @@ Next:
|
|
|
529
529
|
```
|
|
530
530
|
Next:
|
|
531
531
|
1. Điền .agent/project-context.yaml:
|
|
532
|
-
- domains: [liệt kê mọi business domain — chúng thành
|
|
532
|
+
- domains: [liệt kê mọi business domain — chúng thành row `Domain` (bảng Metadata) trong PRD]
|
|
533
533
|
- project.name, project.description
|
|
534
534
|
2. Điền specs/domain-knowledge/business-dictionary.md ← canonical terms
|
|
535
535
|
3. Điền specs/domain-knowledge/core-entities.md ← entity glossary
|
|
@@ -539,7 +539,7 @@ Next:
|
|
|
539
539
|
6. /define-product để bắt đầu feature đầu tiên
|
|
540
540
|
|
|
541
541
|
⚠️ Nhắc handoff team dev:
|
|
542
|
-
- Mỗi PRD phải có
|
|
542
|
+
- Mỗi PRD phải có row `Domain` (bảng Metadata) khớp một trong domains list của bạn
|
|
543
543
|
- Khi team dev setup umbrella repo của họ, họ map các tên domain này
|
|
544
544
|
tới path service submodule trong section services của project-context.yaml
|
|
545
545
|
- Chia sẻ tên domain với team dev trước khi họ cấu hình umbrella
|
|
@@ -52,15 +52,15 @@ Rồi:
|
|
|
52
52
|
- Artifact theo từng feature (`specs/{domain}/{prd-slug}/{ {TICKET-ID}-{prd-slug}.md, bdd/, tech-docs/, design-spec/}`) được tạo on demand bởi các lệnh generate — ĐỪNG tạo trước
|
|
53
53
|
- Skip: `.trace/` (theo service, sống cạnh code trong mỗi service submodule)
|
|
54
54
|
- Sinh `CLAUDE.md` tối thiểu chỉ với §1 (project overview) và §7 (git conventions)
|
|
55
|
-
- Hỏi người dùng: **"Liệt kê các business domain của bạn (vd auth, payment, loyalty):"** — lưu thành domain list cho `project-context.yaml` và nhắc PO các tên này phải được dùng nhất quán
|
|
55
|
+
- Hỏi người dùng: **"Liệt kê các business domain của bạn (vd auth, payment, loyalty):"** — lưu thành domain list cho `project-context.yaml` và nhắc PO các tên này phải được dùng nhất quán ở row `| **Domain** |` của bảng Metadata trong mọi PRD
|
|
56
56
|
- Thông báo:
|
|
57
57
|
- Lệnh cho PO repo: `/define-product`, `/generate-prd`, `/review-context`, `/generate-design-spec`
|
|
58
|
-
- **Quan trọng cho handoff team dev:** Mọi PRD phải có
|
|
59
|
-
-
|
|
58
|
+
- **Quan trọng cho handoff team dev:** Mọi PRD phải có row `| **Domain** | {domain} |` trong **bảng Metadata**. Team dev dùng nó để route BDD/code sinh ra tới đúng service submodule. Tên domain không nhất quán sẽ phá routing.
|
|
59
|
+
- Bảng Metadata PRD (do `/generate-prd` điền sẵn theo template):
|
|
60
60
|
```
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
| **Domain** | {domain} | ← phải khớp một key trong services config của team dev
|
|
62
|
+
| **Ticket** | {TICKET-ID} |
|
|
63
|
+
| **Status** | draft | approved |
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
## Step 1 — Tạo cấu trúc thư mục
|
|
@@ -322,7 +322,7 @@ Next:
|
|
|
322
322
|
Next:
|
|
323
323
|
1. Review .agent/project-context.yaml:
|
|
324
324
|
- Cập nhật services[].path khớp tên thư mục submodule thực tế
|
|
325
|
-
- Cập nhật domain key của services khớp
|
|
325
|
+
- Cập nhật domain key của services khớp row `Domain` (bảng Metadata) trong các file PRD
|
|
326
326
|
- Xác nhận path spec_source đúng
|
|
327
327
|
|
|
328
328
|
2. Chạy /sync — một lệnh lo mọi thứ còn lại:
|
|
@@ -341,7 +341,7 @@ Next:
|
|
|
341
341
|
```
|
|
342
342
|
Next:
|
|
343
343
|
1. Điền .agent/project-context.yaml:
|
|
344
|
-
- domains: [liệt kê mọi business domain — chúng thành
|
|
344
|
+
- domains: [liệt kê mọi business domain — chúng thành row `Domain` (bảng Metadata) trong PRD]
|
|
345
345
|
- project.name, project.description
|
|
346
346
|
2. Điền specs/domain-knowledge/business-dictionary.md ← canonical terms
|
|
347
347
|
3. Điền specs/domain-knowledge/core-entities.md ← entity glossary
|
|
@@ -351,7 +351,7 @@ Next:
|
|
|
351
351
|
6. /define-product để bắt đầu feature đầu tiên
|
|
352
352
|
|
|
353
353
|
⚠️ Nhắc handoff team dev:
|
|
354
|
-
- Mỗi PRD phải có
|
|
354
|
+
- Mỗi PRD phải có row `Domain` (bảng Metadata) khớp một trong domains list của bạn
|
|
355
355
|
- Khi team dev setup umbrella repo của họ, họ map các tên domain này
|
|
356
356
|
tới path service submodule trong section services của project-context.yaml
|
|
357
357
|
- Chia sẻ tên domain với team dev trước khi họ cấu hình umbrella
|
package/commands/sync.md
CHANGED
|
@@ -364,7 +364,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
364
364
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
365
365
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
366
366
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
367
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
367
|
+
| /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) |
|
|
368
368
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
369
369
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
370
370
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -187,7 +187,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
187
187
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
188
188
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
189
189
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
190
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
190
|
+
| /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) |
|
|
191
191
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
192
192
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
193
193
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -757,7 +757,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
757
757
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
758
758
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
759
759
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
760
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
760
|
+
| /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) |
|
|
761
761
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
762
762
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
763
763
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
package/core/FRAMEWORK_VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.14.
|
|
1
|
+
0.14.7
|
package/core/commands/debug.md
CHANGED
|
@@ -672,7 +672,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
672
672
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
673
673
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
674
674
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
675
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
675
|
+
| /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) |
|
|
676
676
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
677
677
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
678
678
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -670,7 +670,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
670
670
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
671
671
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
672
672
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
673
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
673
|
+
| /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) |
|
|
674
674
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
675
675
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
676
676
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -960,7 +960,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
960
960
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
961
961
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
962
962
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
963
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
963
|
+
| /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) |
|
|
964
964
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
965
965
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
966
966
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -684,7 +684,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
684
684
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
685
685
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
686
686
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
687
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
687
|
+
| /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) |
|
|
688
688
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
689
689
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
690
690
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
@@ -658,7 +658,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
658
658
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
659
659
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
660
660
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
661
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
661
|
+
| /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) |
|
|
662
662
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
663
663
|
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
664
664
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|