@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.
Files changed (97) hide show
  1. package/bin/index.js +1 -1
  2. package/commands/debug.md +1 -1
  3. package/commands/define-product.md +1 -1
  4. package/commands/dev-gen-test.md +1 -1
  5. package/commands/dev-run-test.md +1 -1
  6. package/commands/dev-smoke-test.md +1 -1
  7. package/commands/fix-bug.md +1 -1
  8. package/commands/generate-bdd.md +15 -1
  9. package/commands/generate-bdd.tmpl +14 -0
  10. package/commands/generate-code.md +1 -1
  11. package/commands/generate-design-spec.md +15 -1
  12. package/commands/generate-design-spec.tmpl +14 -0
  13. package/commands/generate-prd.md +2 -1
  14. package/commands/generate-prd.tmpl +1 -0
  15. package/commands/generate-spec-manifest.md +1 -1
  16. package/commands/generate-tech-docs.md +1 -1
  17. package/commands/learn.md +1 -1
  18. package/commands/map-testids.md +1 -1
  19. package/commands/propose-scenario.md +1 -1
  20. package/commands/qc-analyze.md +1 -1
  21. package/commands/qc-design-test.md +1 -1
  22. package/commands/qc-plan.md +1 -1
  23. package/commands/qc-report.md +1 -1
  24. package/commands/qc-review.md +1 -1
  25. package/commands/qc-run-test.md +1 -1
  26. package/commands/refine-prd.md +18 -9
  27. package/commands/refine-prd.tmpl +17 -8
  28. package/commands/report-bug.md +1 -1
  29. package/commands/review-code.md +1 -1
  30. package/commands/review-context.md +39 -21
  31. package/commands/review-context.tmpl +38 -20
  32. package/commands/review-tech-docs.md +1 -1
  33. package/commands/setup-ai-first.md +10 -10
  34. package/commands/setup-ai-first.tmpl +9 -9
  35. package/commands/sync.md +1 -1
  36. package/commands/update-framework.md +1 -1
  37. package/commands/validate-traces.md +1 -1
  38. package/core/FRAMEWORK_VERSION +1 -1
  39. package/core/commands/debug.md +1 -1
  40. package/core/commands/define-product.md +1 -1
  41. package/core/commands/dev-gen-test.md +1 -1
  42. package/core/commands/dev-run-test.md +1 -1
  43. package/core/commands/dev-smoke-test.md +1 -1
  44. package/core/commands/fix-bug.md +1 -1
  45. package/core/commands/generate-bdd.md +15 -1
  46. package/core/commands/generate-code.md +1 -1
  47. package/core/commands/generate-design-spec.md +15 -1
  48. package/core/commands/generate-prd.md +2 -1
  49. package/core/commands/generate-spec-manifest.md +1 -1
  50. package/core/commands/generate-tech-docs.md +1 -1
  51. package/core/commands/learn.md +1 -1
  52. package/core/commands/map-testids.md +1 -1
  53. package/core/commands/propose-scenario.md +1 -1
  54. package/core/commands/qc-analyze.md +1 -1
  55. package/core/commands/qc-design-test.md +1 -1
  56. package/core/commands/qc-plan.md +1 -1
  57. package/core/commands/qc-report.md +1 -1
  58. package/core/commands/qc-review.md +1 -1
  59. package/core/commands/qc-run-test.md +1 -1
  60. package/core/commands/refine-prd.md +18 -9
  61. package/core/commands/report-bug.md +1 -1
  62. package/core/commands/review-code.md +1 -1
  63. package/core/commands/review-context.md +39 -21
  64. package/core/commands/review-tech-docs.md +1 -1
  65. package/core/commands/setup-ai-first.md +10 -10
  66. package/core/commands/sync.md +1 -1
  67. package/core/commands/update-framework.md +1 -1
  68. package/core/commands/validate-traces.md +1 -1
  69. package/core/skills/code/SKILL.md +2 -2
  70. package/core/skills/debug/SKILL.md +3 -3
  71. package/core/skills/design-spec/SKILL.md +1 -1
  72. package/core/skills/prd/SKILL.md +1 -1
  73. package/core/skills/setup-ai-first/SKILL.md +1 -1
  74. package/core/skills/spec/SKILL.md +2 -2
  75. package/core/skills/test/SKILL.md +3 -3
  76. package/core/steps/report-footer.md +1 -1
  77. package/core/templates/project-context.yaml +2 -2
  78. package/docs/01-getting-started/core-concepts.md +1 -1
  79. package/docs/02-guides/developer/bdd-and-trace.md +3 -3
  80. package/docs/02-guides/developer/scenarios.md +2 -2
  81. package/docs/02-guides/developer/workflow.md +1 -1
  82. package/docs/02-guides/product-owner/README.md +2 -2
  83. package/docs/02-guides/product-owner/handoff-checklist.md +5 -5
  84. package/docs/02-guides/product-owner/scenarios.md +19 -17
  85. package/docs/03-concepts/traceability.md +3 -3
  86. package/docs/04-operations/sync-and-update.md +3 -3
  87. package/docs/05-reference/command-cheatsheet.md +1 -1
  88. package/package.json +1 -1
  89. package/skills/code/SKILL.md +2 -2
  90. package/skills/debug/SKILL.md +3 -3
  91. package/skills/design-spec/SKILL.md +1 -1
  92. package/skills/prd/SKILL.md +1 -1
  93. package/skills/setup-ai-first/SKILL.md +1 -1
  94. package/skills/spec/SKILL.md +2 -2
  95. package/skills/test/SKILL.md +3 -3
  96. package/steps/report-footer.md +1 -1
  97. package/templates/project-context.yaml +2 -2
@@ -693,7 +693,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
693
693
  | /define-product | `/generate-prd {product-definition-file}` |
694
694
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
695
695
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
696
- | /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
696
+ | /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) |
697
697
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
698
698
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
699
699
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -405,6 +405,20 @@ Tiếp tục sang bước kế tiếp của lệnh đang gọi.
405
405
 
406
406
  ---
407
407
 
408
+ ## Guard — PRD đã duyệt chưa
409
+
410
+ Đọc `| **Status** |` từ bảng Metadata của PRD nguồn:
411
+ - `Status: approved` → tiếp tục bình thường.
412
+ - `Status: draft` (hoặc khác `approved`) → **CHECKPOINT cảnh báo mềm** (không chặn cứng — cho phép prototype):
413
+ ```
414
+ ⚠️ PRD đang ở Status: {status} (chưa duyệt). BDD sinh từ PRD chưa chốt có thể phải làm lại.
415
+ Khuyến nghị: PO review xong đặt `| **Status** | approved |` rồi mới sinh BDD.
416
+ Vẫn sinh BDD bây giờ? (Y/N)
417
+ ```
418
+ Chỉ tiếp tục khi người dùng chọn Y.
419
+
420
+ ---
421
+
408
422
  ## Phát hiện Repo Mode
409
423
 
410
424
  Sau khi nạp context, xác định chế độ hoạt động:
@@ -989,7 +1003,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
989
1003
  | /define-product | `/generate-prd {product-definition-file}` |
990
1004
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
991
1005
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
992
- | /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
1006
+ | /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) |
993
1007
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
994
1008
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
995
1009
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -802,7 +802,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
802
802
  | /define-product | `/generate-prd {product-definition-file}` |
803
803
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
804
804
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
805
- | /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
805
+ | /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) |
806
806
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
807
807
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
808
808
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -412,6 +412,20 @@ Tiếp tục sang bước kế tiếp của lệnh đang gọi.
412
412
 
413
413
  ---
414
414
 
415
+ ## Guard — PRD đã duyệt chưa
416
+
417
+ Đọc `| **Status** |` từ bảng Metadata của Business PRD nguồn:
418
+ - `Status: approved` → tiếp tục bình thường.
419
+ - `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):
420
+ ```
421
+ ⚠️ 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.
422
+ Khuyến nghị: PO duyệt PRD (đặt `| **Status** | approved |`) rồi mới sinh Design Spec.
423
+ Vẫn sinh Design Spec bây giờ? (Y/N)
424
+ ```
425
+ Chỉ tiếp tục khi người dùng chọn Y.
426
+
427
+ ---
428
+
415
429
  ## Platform Check
416
430
 
417
431
  Dùng `active_module` và `platform_type` suy ra từ context loading:
@@ -895,7 +909,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
895
909
  | /define-product | `/generate-prd {product-definition-file}` |
896
910
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
897
911
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
898
- | /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
912
+ | /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) |
899
913
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
900
914
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
901
915
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -851,7 +851,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
851
851
  | /define-product | `/generate-prd {product-definition-file}` |
852
852
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
853
853
  | /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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
854
+ | /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
855
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
856
856
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
857
857
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -901,4 +901,5 @@ Output Artifacts:
901
901
  Pipeline : Discovery → [PRD ◀ bạn ở đây] → Design Spec → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
902
902
  Next : /refine-prd {paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
903
903
  → rồi /review-context {prd-file} ← kiểm tra chất lượng PRD trước khi sinh BDD
904
+ → khi sạch critical, PO đặt | **Status** | approved | (PRD mới sinh đang draft) → /generate-bdd
904
905
  ```
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -798,7 +798,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
798
798
  | /define-product | `/generate-prd {product-definition-file}` |
799
799
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
800
800
  | /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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
801
+ | /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
802
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
803
803
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
804
804
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -556,7 +556,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
556
556
  | /define-product | `/generate-prd {product-definition-file}` |
557
557
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
558
558
  | /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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
559
+ | /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
560
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
561
561
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
562
562
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -530,7 +530,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
530
530
  | /define-product | `/generate-prd {product-definition-file}` |
531
531
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
532
532
  | /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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
533
+ | /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
534
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
535
535
  | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
536
536
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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** (đã có `--resume` bump version) **DELTA**: `CHANGED_SCOPE` = { `uc_id`/`section` của các finding `status: applied` trong findings cũ } { UC trong PRD hiện tại nhưng chưa từng xuất hiện findings }. Truyền `CHANGED_SCOPE` này vào Quy trình Review.
634
+ - **Khác** → kiểm tra `applied_to_version` trong findings cũ (version 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
- # Lifecycle finding-level:
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, cần con người quyết định trước khi --resume
694
- # applied đã được Resume Mode apply vào PRD
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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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
@@ -905,6 +913,7 @@ Cập nhật `status: "applied"` ở **root level** của file findings (không
905
913
  ```
906
914
  | {new_version} | {today} | {tóm tắt súc tích mọi thay đổi đã áp dụng} |
907
915
  ```
916
+ 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
917
 
909
918
  ### Phase 4 — Report
910
919
 
@@ -918,7 +927,7 @@ Changes :
918
927
 
919
928
  💡 Vừa áp {N} phương án (gồm bản PO tự sửa) → chạy lại /refine-prd {prd-file}
920
929
  (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:
930
+ ⚠️ Status đã reset về draft (sửa rồi phải duyệt lại). BDD có thể đã lỗi thời. Chạy:
922
931
  /review-context {prd-file} ← kiểm tra chất lượng PRD trước
923
- → /generate-bdd {prd-file}
932
+ PO đặt | **Status** | approved | khi hài lòng → /generate-bdd {prd-file}
924
933
  ```
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |
@@ -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** → **DELTA**: `CHANGED_SCOPE` = { `uc_id`/`section` của finding đã xử (status `accepted`/`modified`/`applied_automatically`) trong findings } { UC trong target hiện tại nhưng chưa từng xuất hiện ở findings cũ }.
644
+ - **Khác** → kiểm tra `applied_to_version` trong findings (version 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/Status ở **bảng Metadata** (`| **Domain** | … |`, `| **Status** | … |`) — **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 và `generate-bdd` (đọc `| **Status** |`).
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.3 Check row `Status` trong Metadata**
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`) 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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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: "applied_automatically"` trong file findings.
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) thêm entry Changelog.
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
  ```
@@ -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}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
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 |