@educa-corp/sdd-framework 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/self-check.js +124 -6
- package/bin/trace-schema.json +1199 -692
- package/commands/debug.md +3 -2
- package/commands/define-product.md +3 -2
- package/commands/dev-gen-test.md +37 -9
- package/commands/dev-run-test.md +37 -9
- package/commands/dev-smoke-test.md +3 -2
- package/commands/extend-prd.md +907 -0
- package/commands/extend-prd.tmpl +270 -0
- package/commands/fix-bug.md +37 -9
- package/commands/generate-architecture.md +3 -2
- package/commands/generate-bdd.md +56 -13
- package/commands/generate-bdd.tmpl +18 -3
- package/commands/generate-code.md +73 -16
- package/commands/generate-code.tmpl +36 -7
- package/commands/generate-design-spec.md +3 -2
- package/commands/generate-prd.md +28 -2
- package/commands/generate-prd.tmpl +25 -0
- package/commands/generate-spec-manifest.md +3 -2
- package/commands/generate-tech-docs.md +3 -2
- package/commands/learn.md +3 -2
- package/commands/map-testids.md +3 -2
- package/commands/propose-scenario.md +55 -3
- package/commands/propose-scenario.tmpl +52 -1
- package/commands/qc-analyze.md +3 -2
- package/commands/qc-design-test.md +4 -2
- package/commands/qc-design-test.tmpl +1 -0
- package/commands/qc-plan.md +3 -2
- package/commands/qc-report.md +3 -2
- package/commands/qc-review.md +3 -2
- package/commands/qc-run-test.md +50 -10
- package/commands/qc-run-test.tmpl +13 -1
- package/commands/refine-prd.md +3 -2
- package/commands/report-bug.md +3 -2
- package/commands/review-code.md +7 -5
- package/commands/review-code.tmpl +4 -3
- package/commands/review-context.md +6 -4
- package/commands/review-context.tmpl +3 -2
- package/commands/review-tech-docs.md +3 -2
- package/commands/setup-ai-first.md +3 -2
- package/commands/sync.md +40 -16
- package/commands/sync.tmpl +37 -14
- package/commands/update-framework.md +3 -2
- package/commands/validate-traces.md +318 -33
- package/commands/validate-traces.tmpl +315 -31
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +3 -2
- package/core/commands/define-product.md +3 -2
- package/core/commands/dev-gen-test.md +37 -9
- package/core/commands/dev-run-test.md +37 -9
- package/core/commands/dev-smoke-test.md +3 -2
- package/core/commands/extend-prd.md +907 -0
- package/core/commands/fix-bug.md +37 -9
- package/core/commands/generate-architecture.md +3 -2
- package/core/commands/generate-bdd.md +56 -13
- package/core/commands/generate-code.md +73 -16
- package/core/commands/generate-design-spec.md +3 -2
- package/core/commands/generate-prd.md +28 -2
- package/core/commands/generate-spec-manifest.md +3 -2
- package/core/commands/generate-tech-docs.md +3 -2
- package/core/commands/learn.md +3 -2
- package/core/commands/map-testids.md +3 -2
- package/core/commands/propose-scenario.md +55 -3
- package/core/commands/qc-analyze.md +3 -2
- package/core/commands/qc-design-test.md +4 -2
- package/core/commands/qc-plan.md +3 -2
- package/core/commands/qc-report.md +3 -2
- package/core/commands/qc-review.md +3 -2
- package/core/commands/qc-run-test.md +50 -10
- package/core/commands/refine-prd.md +3 -2
- package/core/commands/report-bug.md +3 -2
- package/core/commands/review-code.md +7 -5
- package/core/commands/review-context.md +6 -4
- package/core/commands/review-tech-docs.md +3 -2
- package/core/commands/setup-ai-first.md +3 -2
- package/core/commands/sync.md +40 -16
- package/core/commands/update-framework.md +3 -2
- package/core/commands/validate-traces.md +318 -33
- package/core/rules/workflow.md +18 -0
- package/core/steps/report-footer.md +3 -2
- package/core/steps/trace-mirror.md +34 -7
- package/core/templates/feature.template +1 -1
- package/docs/01-getting-started/installation.md +18 -1
- package/docs/01-getting-started/what-is-sdd.md +4 -2
- package/docs/02-concepts/architecture.md +27 -3
- package/docs/02-concepts/pipeline-steps/02-specification.md +39 -3
- package/docs/02-concepts/pipeline-steps/04-bdd.md +24 -2
- package/docs/02-concepts/pipeline-steps/05-tech-docs.md +18 -1
- package/docs/02-concepts/pipeline-steps/06-code.md +35 -4
- package/docs/02-concepts/pipeline-steps/09-validate-traces.md +137 -12
- package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +59 -3
- package/docs/02-concepts/roles-and-hitl.md +1 -1
- package/docs/02-concepts/traceability.md +126 -117
- package/docs/03-guides/developer.md +20 -4
- package/docs/03-guides/product-owner.md +72 -68
- package/docs/03-guides/tester-qa.md +81 -70
- package/docs/04-reference/commands.md +134 -105
- package/docs/04-reference/configuration.md +146 -94
- package/docs/04-reference/trace-schema.md +26 -9
- package/docs/explain/02-generate-prd.md +80 -78
- package/docs/explain/02b-extend-prd.md +125 -0
- package/docs/explain/03-refine-prd.md +86 -86
- package/docs/explain/04-review-context.md +18 -1
- package/docs/explain/06-generate-bdd.md +23 -0
- package/docs/explain/08-review-tech-docs.md +20 -5
- package/docs/explain/10-review-code.md +36 -2
- package/docs/explain/19-qc-run-test.md +87 -67
- package/docs/explain/21-validate-traces.md +74 -68
- package/docs/explain/23-fix-bug.md +19 -3
- package/docs/explain/26-propose-scenario.md +70 -63
- package/docs/explain/README.md +135 -134
- package/package.json +50 -50
- package/rules/workflow.md +18 -0
- package/steps/report-footer.md +3 -2
- package/steps/trace-mirror.md +34 -7
- package/templates/feature.template +1 -1
package/core/commands/fix-bug.md
CHANGED
|
@@ -610,10 +610,34 @@ Giữ nguyên mọi cột khác. Đặc biệt:
|
|
|
610
610
|
- **KHÔNG** đụng `spec_ver`/`gen_ver` — fix bug **không** đổi spec, nên không được tạo tín hiệu DRIFT giả.
|
|
611
611
|
|
|
612
612
|
Rồi làm mới panel mirror:
|
|
613
|
-
# Làm mới panel mirror của Living Docs *(local
|
|
613
|
+
# Làm mới panel mirror của Living Docs *(local)*
|
|
614
614
|
|
|
615
|
-
|
|
616
|
-
|
|
615
|
+
> **Hai vị trí, HAI TÊN KHÁC NHAU — đọc trước khi sửa gì ở đây.**
|
|
616
|
+
>
|
|
617
|
+
> | Đường dẫn | Vai trò | Git |
|
|
618
|
+
> |---|---|---|
|
|
619
|
+
> | `{paths.trace_dir}` (`.trace/` hoặc `{spec_source}/.trace/`) | **AUTHORITATIVE** — TSV + `trace-history.jsonl`. Không regenerate được. | **PHẢI commit** |
|
|
620
|
+
> | `./.trace-mirror/` ở gốc workspace hiện tại | **MIRROR** — bản sao tiện cho panel VS Code. Sinh lại được bất cứ lúc nào. | **Luôn gitignore** |
|
|
621
|
+
>
|
|
622
|
+
> Trước v0.4.3 cả hai đều tên `.trace`, nên một luật gitignore theo tên có thể **xoá sạch sổ gốc**
|
|
623
|
+
> khi dev mở thẳng spec repo làm workspace (lúc đó hai path bằng nhau). Hai tên khác nhau làm
|
|
624
|
+
> luật git đọc được bằng mắt và **không còn ca nhập nhằng nào**: `.trace-mirror/` không bao giờ
|
|
625
|
+
> commit, `.trace/` không bao giờ gitignore.
|
|
626
|
+
|
|
627
|
+
## Khi nào CÓ mirror
|
|
628
|
+
|
|
629
|
+
Mirror chỉ tồn tại khi **`{paths.trace_dir}` nằm NGOÀI workspace hiện tại** — panel đọc từ workspace đang mở nên cần một bản sao ở đây.
|
|
630
|
+
|
|
631
|
+
| Tình huống | `{paths.trace_dir}` | Có mirror? |
|
|
632
|
+
|---|---|---|
|
|
633
|
+
| Single-service | `./.trace` — **trong** workspace | ❌ Không. Panel đọc thẳng `.trace/trace-report.json`. Bỏ qua cả file này. |
|
|
634
|
+
| Dev mở thẳng **spec repo** | `./.trace` — **trong** workspace | ❌ Không. Như trên. |
|
|
635
|
+
| Umbrella + `spec_source`, dev đứng ở umbrella hoặc service submodule | `{spec_source}/.trace` — **ngoài** workspace | ✅ Có |
|
|
636
|
+
| Umbrella legacy (không `spec_source`) | `.trace` theo từng service | ✅ Có |
|
|
637
|
+
|
|
638
|
+
Quy tắc một dòng: **phân giải `panel_mirror = ./.trace-mirror` ở gốc workspace hiện tại; nếu `{paths.trace_dir}` đã nằm trong workspace này thì bỏ qua toàn bộ bước mirror.**
|
|
639
|
+
|
|
640
|
+
---
|
|
617
641
|
|
|
618
642
|
Sau khi cập nhật TSV authoritative tại `{paths.trace_dir}`:
|
|
619
643
|
|
|
@@ -621,11 +645,14 @@ Sau khi cập nhật TSV authoritative tại `{paths.trace_dir}`:
|
|
|
621
645
|
`{paths.trace_dir}` phân giải về `{spec_source}/.trace` — vị trí authoritative duy nhất.
|
|
622
646
|
Lệnh này chạy từ `service_root`, nên thao tác ghi là **liên-repo vào spec submodule**;
|
|
623
647
|
commit/push spec submodule cho lần cập nhật trace (giống như `feedback/`).
|
|
624
|
-
|
|
625
|
-
|
|
648
|
+
|
|
649
|
+
1. Phân giải `panel_mirror = ./.trace-mirror` tại **gốc workspace hiện tại**.
|
|
650
|
+
2. Nếu `{paths.trace_dir}` **không** nằm trong workspace hiện tại, copy mỗi
|
|
626
651
|
`{UC-ID}-{platform}.tsv` vừa cập nhật → `{panel_mirror}/{UC-ID}-{platform}.tsv` (tạo thư mục; ghi đè).
|
|
627
|
-
Không namespace theo service — chỉ có một bộ trace; service sở hữu được mang
|
|
628
|
-
|
|
652
|
+
Không namespace theo service — chỉ có một bộ trace; service sở hữu được mang ở
|
|
653
|
+
**cột `service` (cột 23)** của chính từng row, do `/generate-bdd` ghi từ `@trace.service`.
|
|
654
|
+
3. **KHÔNG copy `trace-history.jsonl`.** Nó là dữ liệu tích luỹ, không phải thứ sinh lại được —
|
|
655
|
+
nhân bản nó ra một thư mục gitignore là tạo hai lịch sử lệch nhau rồi mất bản thật.
|
|
629
656
|
|
|
630
657
|
**Legacy (không có `spec_source` — trace theo service):**
|
|
631
658
|
Copy mỗi `{UC-ID}-{platform}.tsv` vừa cập nhật → `{panel_mirror}/{service-name}/{UC-ID}-{platform}.tsv`
|
|
@@ -801,7 +828,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
801
828
|
| Phase | Commands |
|
|
802
829
|
|-------|----------|
|
|
803
830
|
| Discovery | `/define-product` |
|
|
804
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
831
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
805
832
|
| Design Spec | `/generate-design-spec` |
|
|
806
833
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
807
834
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -826,6 +853,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
826
853
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
827
854
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
828
855
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
856
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
829
857
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
830
858
|
| /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) |
|
|
831
859
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -851,7 +879,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
851
879
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
852
880
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
853
881
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
854
|
-
| /propose-scenario |
|
|
882
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
855
883
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
856
884
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
857
885
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -706,7 +706,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
706
706
|
| Phase | Commands |
|
|
707
707
|
|-------|----------|
|
|
708
708
|
| Discovery | `/define-product` |
|
|
709
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
709
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
710
710
|
| Design Spec | `/generate-design-spec` |
|
|
711
711
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
712
712
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -731,6 +731,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
731
731
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
732
732
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
733
733
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
734
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
734
735
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
735
736
|
| /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) |
|
|
736
737
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -756,7 +757,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
756
757
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
757
758
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
758
759
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
759
|
-
| /propose-scenario |
|
|
760
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
760
761
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
761
762
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
762
763
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -925,7 +925,7 @@ Với mỗi UC, ghi vào path trên và set `# @trace.platform: {active_platform
|
|
|
925
925
|
# @trace.revision: 1 ← field tĩnh; version theo dõi bằng @trace.bdd_version
|
|
926
926
|
# @trace.domain: <domain>
|
|
927
927
|
# @trace.platform: {active_platform — web | app | system} ← BẮT BUỘC mọi mode; phải khớp segment bdd/{platform}/ của path
|
|
928
|
-
# @trace.service: {active_service —
|
|
928
|
+
# @trace.service: {active_service — BẮT BUỘC mọi mode. "—" ở single-service/spec repo mode; "multi" nếu chưa chốt; "unresolved" nếu routing sai. Nguồn của cột TSV `service` — trace gộp không tách theo service nên đây là chỗ DUY NHẤT mang thông tin sở hữu}
|
|
929
929
|
# @trace.module: {active_module trong umbrella mode; "unknown" trong spec repo mode}
|
|
930
930
|
# @trace.status: draft
|
|
931
931
|
# @trace.author: AI-generated
|
|
@@ -1085,14 +1085,19 @@ Sau khi sinh tất cả file `.feature`, tạo hoặc cập nhật **sổ trace
|
|
|
1085
1085
|
|
|
1086
1086
|
**Cột TSV (tab-separated, một header row + một data row cho mỗi scenario):**
|
|
1087
1087
|
```
|
|
1088
|
-
sc_id\tsc_title\tspec_ver\tgen_ver\timplemented_by\ttest_count\ttest_classes\tdev_selftest\tdev_selftest_at\tqc_status\tqc_run_at\tqc_owner\tqc_blocked_by\tprd_version\tbdd_version\ttech_doc_revision\tfe_tech_doc_revision\tprd_status\tuc_status\tfe_phase\tstatus\tlast_updated
|
|
1088
|
+
sc_id\tsc_title\tspec_ver\tgen_ver\timplemented_by\ttest_count\ttest_classes\tdev_selftest\tdev_selftest_at\tqc_status\tqc_run_at\tqc_owner\tqc_blocked_by\tprd_version\tbdd_version\ttech_doc_revision\tfe_tech_doc_revision\tprd_status\tuc_status\tfe_phase\tstatus\tlast_updated\tservice\tdesign_spec_version
|
|
1089
1089
|
```
|
|
1090
1090
|
|
|
1091
1091
|
**Rules:**
|
|
1092
1092
|
- Nếu file chưa tồn tại → tạo với header row + tất cả scenario row.
|
|
1093
1093
|
- Nếu file tồn tại (gen lại) → với mỗi SC trong `.feature` mới:
|
|
1094
|
-
- SC đã có trong `.tsv` VÀ `spec_ver` không đổi → chỉ cập nhật: `sc_title`, `prd_version`, `bdd_version`, `prd_status`, `uc_status`, `last_updated`. Giữ nguyên các cột khác.
|
|
1095
|
-
- SC đã có trong `.tsv` VÀ `spec_ver` đổi (scenario bị sửa) → cập nhật: `sc_title`, `spec_ver`, `prd_version`, `bdd_version`, `prd_status`, `uc_status`, `last_updated` VÀ set `status = DRIFT` ngay (để TSV phản ánh drift mà không cần đợi `/validate-traces`). Giữ nguyên `gen_ver`, `implemented_by`, `test_count`, `test_classes`, `tech_doc_revision`, `fe_tech_doc_revision`.
|
|
1094
|
+
- SC đã có trong `.tsv` VÀ `spec_ver` không đổi → chỉ cập nhật: `sc_title`, `prd_version`, `bdd_version`, `prd_status`, `uc_status`, `service`, `design_spec_version`, `last_updated`. Giữ nguyên các cột khác. *(`service` + `design_spec_version` là sự thật cấp-file, làm mới theo `.feature`/design-spec hiện tại — chúng KHÔNG phải tín hiệu nghiệm thu nên làm mới chúng không che giấu gì.)*
|
|
1095
|
+
- SC đã có trong `.tsv` VÀ `spec_ver` đổi (scenario bị sửa) → cập nhật: `sc_title`, `spec_ver`, `prd_version`, `bdd_version`, `prd_status`, `uc_status`, `service`, `design_spec_version`, `last_updated` VÀ set `status = DRIFT` ngay (để TSV phản ánh drift mà không cần đợi `/validate-traces`). Giữ nguyên `gen_ver`, `implemented_by`, `test_count`, `test_classes`, `tech_doc_revision`, `fe_tech_doc_revision`.
|
|
1096
|
+
**VÀ hạ hiệu lực tín hiệu kiểm thử của đúng SC đó** — spec vừa đổi nên test/QC cũ đang nghiệm thu một hành vi **không còn tồn tại**:
|
|
1097
|
+
`dev_selftest → not_run` · `dev_selftest_at → —` · `qc_status → not_run` · `qc_run_at → —`.
|
|
1098
|
+
> **Vì sao bắt buộc** *(luật "Làm mất hiệu lực ≠ ghi đè", `rules/workflow.md`)*: không hạ thì chuỗi sau báo xanh sai — spec đổi → `DRIFT` → `/generate-code` sửa method → `gen_ver = spec_ver` → `/validate-traces` Rule 4 cho `OK` (vì `test_count` vẫn > 0) → dashboard hiện `OK · ✅ 10 tests · qc pass` trong khi hành vi mới **chưa được test lần nào**. Đây là lớp lỗi nguy hiểm hơn G1: G1 làm cờ im lặng, cái này làm cờ **nói dối**.
|
|
1099
|
+
> **KHÔNG** đụng `test_count`/`test_classes` (test vẫn nằm trên đĩa — số lượng không sai, chỉ nội dung cũ; hạ số sẽ làm tỷ lệ coverage nhảy loạn) và **KHÔNG** đụng `qc_owner`/`qc_blocked_by` (con trỏ tới bug — spec đổi không làm bug biến mất).
|
|
1100
|
+
In cảnh báo kèm: `⚠️ {test_count} test của {sc_id} viết cho spec cũ — /dev-gen-test rà lại trước khi chạy`.
|
|
1096
1101
|
- SC mới (thêm trong lần gen lại này) → append row mới với `gen_ver`, `implemented_by`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`, `qc_status`, `qc_run_at`, `qc_owner`, `qc_blocked_by`, `tech_doc_revision`, `fe_tech_doc_revision` đều set `—`.
|
|
1097
1102
|
- SC không còn trong `.feature` (bị xoá / gộp / đổi số) → **phụ thuộc SC đó đã có code chưa:**
|
|
1098
1103
|
- `implemented_by == —` (**chưa** có code) → **xoá row**. Không có gì mồ côi.
|
|
@@ -1134,12 +1139,38 @@ sc_id\tsc_title\tspec_ver\tgen_ver\timplemented_by\ttest_count\ttest_classes\tde
|
|
|
1134
1139
|
| `fe_phase` | `—` (set bởi `/generate-code --phase` khi FE implement) |
|
|
1135
1140
|
| `status` | `UNTRACKED` |
|
|
1136
1141
|
| `last_updated` | hôm nay `YYYY-MM-DD` |
|
|
1142
|
+
| `service` | `@trace.service` từ header `.feature` — đội/submodule sở hữu scenario này. `multi` nếu chưa chốt (map-theo-platform ở cấp PRD), `unresolved` nếu domain không khớp entry nào, `—` ở single-service mode. **Đừng bỏ trống** — trace gộp không tách theo service nên đây là chỗ DUY NHẤT mang thông tin sở hữu ở cấp row. |
|
|
1143
|
+
| `design_spec_version` | `\| **Version** \|` của design-spec đã nạp ở §Design Spec — Gate & Load. `—` cho `system`/backend (không có design-spec), và `—` khi người dùng chọn "Y — vẫn sinh BDD" mà không có design-spec. |
|
|
1137
1144
|
|
|
1138
1145
|
## Refresh Panel Mirror
|
|
1139
|
-
# Làm mới panel mirror của Living Docs *(local
|
|
1146
|
+
# Làm mới panel mirror của Living Docs *(local)*
|
|
1140
1147
|
|
|
1141
|
-
|
|
1142
|
-
|
|
1148
|
+
> **Hai vị trí, HAI TÊN KHÁC NHAU — đọc trước khi sửa gì ở đây.**
|
|
1149
|
+
>
|
|
1150
|
+
> | Đường dẫn | Vai trò | Git |
|
|
1151
|
+
> |---|---|---|
|
|
1152
|
+
> | `{paths.trace_dir}` (`.trace/` hoặc `{spec_source}/.trace/`) | **AUTHORITATIVE** — TSV + `trace-history.jsonl`. Không regenerate được. | **PHẢI commit** |
|
|
1153
|
+
> | `./.trace-mirror/` ở gốc workspace hiện tại | **MIRROR** — bản sao tiện cho panel VS Code. Sinh lại được bất cứ lúc nào. | **Luôn gitignore** |
|
|
1154
|
+
>
|
|
1155
|
+
> Trước v0.4.3 cả hai đều tên `.trace`, nên một luật gitignore theo tên có thể **xoá sạch sổ gốc**
|
|
1156
|
+
> khi dev mở thẳng spec repo làm workspace (lúc đó hai path bằng nhau). Hai tên khác nhau làm
|
|
1157
|
+
> luật git đọc được bằng mắt và **không còn ca nhập nhằng nào**: `.trace-mirror/` không bao giờ
|
|
1158
|
+
> commit, `.trace/` không bao giờ gitignore.
|
|
1159
|
+
|
|
1160
|
+
## Khi nào CÓ mirror
|
|
1161
|
+
|
|
1162
|
+
Mirror chỉ tồn tại khi **`{paths.trace_dir}` nằm NGOÀI workspace hiện tại** — panel đọc từ workspace đang mở nên cần một bản sao ở đây.
|
|
1163
|
+
|
|
1164
|
+
| Tình huống | `{paths.trace_dir}` | Có mirror? |
|
|
1165
|
+
|---|---|---|
|
|
1166
|
+
| Single-service | `./.trace` — **trong** workspace | ❌ Không. Panel đọc thẳng `.trace/trace-report.json`. Bỏ qua cả file này. |
|
|
1167
|
+
| Dev mở thẳng **spec repo** | `./.trace` — **trong** workspace | ❌ Không. Như trên. |
|
|
1168
|
+
| Umbrella + `spec_source`, dev đứng ở umbrella hoặc service submodule | `{spec_source}/.trace` — **ngoài** workspace | ✅ Có |
|
|
1169
|
+
| Umbrella legacy (không `spec_source`) | `.trace` theo từng service | ✅ Có |
|
|
1170
|
+
|
|
1171
|
+
Quy tắc một dòng: **phân giải `panel_mirror = ./.trace-mirror` ở gốc workspace hiện tại; nếu `{paths.trace_dir}` đã nằm trong workspace này thì bỏ qua toàn bộ bước mirror.**
|
|
1172
|
+
|
|
1173
|
+
---
|
|
1143
1174
|
|
|
1144
1175
|
Sau khi cập nhật TSV authoritative tại `{paths.trace_dir}`:
|
|
1145
1176
|
|
|
@@ -1147,11 +1178,14 @@ Sau khi cập nhật TSV authoritative tại `{paths.trace_dir}`:
|
|
|
1147
1178
|
`{paths.trace_dir}` phân giải về `{spec_source}/.trace` — vị trí authoritative duy nhất.
|
|
1148
1179
|
Lệnh này chạy từ `service_root`, nên thao tác ghi là **liên-repo vào spec submodule**;
|
|
1149
1180
|
commit/push spec submodule cho lần cập nhật trace (giống như `feedback/`).
|
|
1150
|
-
|
|
1151
|
-
|
|
1181
|
+
|
|
1182
|
+
1. Phân giải `panel_mirror = ./.trace-mirror` tại **gốc workspace hiện tại**.
|
|
1183
|
+
2. Nếu `{paths.trace_dir}` **không** nằm trong workspace hiện tại, copy mỗi
|
|
1152
1184
|
`{UC-ID}-{platform}.tsv` vừa cập nhật → `{panel_mirror}/{UC-ID}-{platform}.tsv` (tạo thư mục; ghi đè).
|
|
1153
|
-
Không namespace theo service — chỉ có một bộ trace; service sở hữu được mang
|
|
1154
|
-
|
|
1185
|
+
Không namespace theo service — chỉ có một bộ trace; service sở hữu được mang ở
|
|
1186
|
+
**cột `service` (cột 23)** của chính từng row, do `/generate-bdd` ghi từ `@trace.service`.
|
|
1187
|
+
3. **KHÔNG copy `trace-history.jsonl`.** Nó là dữ liệu tích luỹ, không phải thứ sinh lại được —
|
|
1188
|
+
nhân bản nó ra một thư mục gitignore là tạo hai lịch sử lệch nhau rồi mất bản thật.
|
|
1155
1189
|
|
|
1156
1190
|
**Legacy (không có `spec_source` — trace theo service):**
|
|
1157
1191
|
Copy mỗi `{UC-ID}-{platform}.tsv` vừa cập nhật → `{panel_mirror}/{service-name}/{UC-ID}-{platform}.tsv`
|
|
@@ -1202,7 +1236,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
1202
1236
|
| Phase | Commands |
|
|
1203
1237
|
|-------|----------|
|
|
1204
1238
|
| Discovery | `/define-product` |
|
|
1205
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1239
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1206
1240
|
| Design Spec | `/generate-design-spec` |
|
|
1207
1241
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
1208
1242
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -1227,6 +1261,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1227
1261
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
1228
1262
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
1229
1263
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
1264
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
1230
1265
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
1231
1266
|
| /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) |
|
|
1232
1267
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -1252,7 +1287,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1252
1287
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
1253
1288
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
1254
1289
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
1255
|
-
| /propose-scenario |
|
|
1290
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
1256
1291
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
1257
1292
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
1258
1293
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -1300,5 +1335,13 @@ Next (umbrella):
|
|
|
1300
1335
|
{UC-ID}-SC5 1.2 → 1.3 {sc_title}
|
|
1301
1336
|
→ {n} SC này sẽ hiện DRIFT ở /validate-traces. Sinh lại code: /generate-code {feature-file}
|
|
1302
1337
|
|
|
1338
|
+
{cùng điều kiện — chỉ in các SC bump mà TRƯỚC ĐÓ có dev_selftest/qc_status khác "—"}
|
|
1339
|
+
🔻 Tín hiệu kiểm thử bị hạ (spec vừa đổi — nghiệm thu cũ hết hiệu lực):
|
|
1340
|
+
{UC-ID}-SC2 dev_selftest pass→not_run · qc_status pass→not_run
|
|
1341
|
+
⚠️ {n} test của các SC này viết cho spec CŨ — rà lại nội dung, đừng chỉ chạy lại.
|
|
1342
|
+
→ sau khi /generate-code: /dev-gen-test (rà test) → /dev-run-test → QC /qc-run-test
|
|
1343
|
+
ℹ️ Coverage "đã kiểm đạt" sẽ TỤT trên dashboard — đó là số đúng; số cũ mới là số sai.
|
|
1344
|
+
(Tỷ lệ phủ code/test KHÔNG đổi — test_count giữ nguyên vì test vẫn nằm trên đĩa.)
|
|
1345
|
+
|
|
1303
1346
|
📊 Living Docs: chạy /validate-traces (hoặc /sync) để push trace này lên dashboard spec-module.
|
|
1304
1347
|
```
|
|
@@ -558,14 +558,21 @@ Lệnh này giới hạn nghiêm ngặt trong **một file feature** được tr
|
|
|
558
558
|
|
|
559
559
|
> **Nguồn chuẩn quyết BE/FE = `@trace.platform` của FILE FEATURE** (`system` → BE · `web`/`app` → FE). KHÔNG dùng `platform_type` (suy từ module) để quyết BE/FE — nó chỉ dùng cho **idiom stack/module** (cú pháp, layer, thư viện). Lý do: repo fullstack một-module (vd Next.js có API route) có `platform_type` cố định một giá trị, nhưng vẫn có cả feature `system` (BE) lẫn `web` (FE) — chỉ tag của chính feature mới đúng.
|
|
560
560
|
|
|
561
|
-
Parse `$ARGUMENTS` tìm flag `--phase`:
|
|
561
|
+
Parse `$ARGUMENTS` tìm flag `--phase` và `--force`:
|
|
562
562
|
|
|
563
563
|
| Flag | Ý nghĩa |
|
|
564
564
|
|---|---|
|
|
565
565
|
| `--phase=ui` | FE Phase 1 — sinh UI + layer mock API từ System BDD contract |
|
|
566
566
|
| `--phase=integration` | FE Phase 2 — thay mock adapter bằng lời gọi API thật từ tech docs |
|
|
567
|
+
| `--force` | "Gen lại tường minh" — **CHỈ** bỏ qua guard status ở §Read Trace State (không skip row đang `OK`). Xem định nghĩa hẹp bên dưới. |
|
|
567
568
|
| *(không có)* | Default — full: **BE/`system`** → full backend; **FE (`web`/`app`)** → **FE full** (sinh UI + wire API thật trong một lần, không qua bước mock) |
|
|
568
569
|
|
|
570
|
+
> **`--force` có phạm vi HẸP — đây là ranh giới cứng, không phải khuyến nghị.**
|
|
571
|
+
> Nó bỏ qua **đúng một** thứ: luật "row `OK` thì skip" ở §Read Trace State. **Mọi guard khác giữ nguyên hiệu lực:** Scope Lock (cấm implement scenario của `.feature` khác) · quy tắc EXTEND phi-phá-huỷ (đọc lại trước khi ghi · CẤM full Write trên file đã tồn tại · output phải là superset chặt) · Guard sau-ghi · Fill-before-create · Build Verify.
|
|
572
|
+
> `--force` **KHÔNG** phải "ghi đè tất cả". Không có cờ nào trong lệnh này cho phép điều đó — mất member/tag của UC khác luôn là lỗi chặn, kể cả với `--force`.
|
|
573
|
+
>
|
|
574
|
+
> Dùng khi: tech-doc bump revision có đụng thật phần điều khiển UC này, hoặc cần dựng lại code cho một scenario đang `OK`. **Đọc diff của nguồn TRƯỚC** — nếu revision bump không đụng UC này (vd chỉ thêm UC khác vào doc gộp) thì sinh lại code chỉ để đồng bộ một dòng nhãn là rủi ro không đáng.
|
|
575
|
+
|
|
569
576
|
**Xác định `fe_full`:** khi **KHÔNG** có `--phase` VÀ `@trace.platform` là `web`/`app` → đây là **FE full mode**. Sinh UI **và** wire API thật trong cùng một lần chạy, **bỏ qua** layer mock. Cụ thể: các section **sinh UI** chạy · **Mock API Layer** bị bỏ (chỉ dành `--phase=ui`) · **DS4** và **Integration Phase** VẪN chạy (xem điều kiện của từng section). BE/`system` ở default vẫn là full backend như trước.
|
|
570
577
|
|
|
571
578
|
**Nếu `--phase` được set — xác nhận platform:**
|
|
@@ -690,7 +697,7 @@ Phân giải design điều khiển adapter từ **tech-doc gộp của PRD** `{
|
|
|
690
697
|
|--------|---------|-------------------|
|
|
691
698
|
| `UNTRACKED` | `implemented_by == —` | Generate — scenario chưa có code |
|
|
692
699
|
| `DRIFT` | `spec_ver != gen_ver` | Sửa **tại chỗ đúng method** của scenario đó (Edit) — KHÔNG viết lại cả file (file chung sẽ mất method UC khác) |
|
|
693
|
-
| `OK` | đã implement + test | Skip trừ khi
|
|
700
|
+
| `OK` | đã implement + test | **Skip** — trừ khi có `--force` (xem §Phase Detection). Sinh lại thì sửa **tại chỗ đúng method** (Edit), như hàng `DRIFT`.<br/>*(Tới đây vì cờ ⓘ `PRD_STALE_REF`/`TECHDOC_STALE_REF`? **Sai lệnh.** Hai cờ đó nghĩa là version bump KHÔNG đụng UC này — dùng `/validate-traces --realign-prd-version {UC-ID}` (chỉ sửa dòng nhãn, không đụng logic). Chỉ dùng `--force` khi cờ là 🟠 `PRD_DRIFT`/`TECHDOC_DRIFT` — nội dung đổi thật.)* |
|
|
694
701
|
| `GAP` | đã implement, chưa test | Skip codegen — đã code rồi; chạy `/dev-gen-test` thay vì |
|
|
695
702
|
| `ORPHANED` | SC không còn trong `.feature` nhưng code còn | **Skip codegen** — không có scenario nào để implement. **KHÔNG xoá** code/row (cần người quyết định behavior đó còn cần hay không). Nêu ở report cuối: `⚠️ {sc_id} ORPHANED — code {implemented_by} còn tồn tại nhưng scenario đã bị xoá khỏi .feature. Xử: xoá code+test, hoặc đưa scenario trở lại. (/validate-traces giữ cờ 🔴.)` |
|
|
696
703
|
|
|
@@ -888,12 +895,14 @@ DTOs → Entity/Model → Repository → Service interface → Service impl →
|
|
|
888
895
|
@trace.prd_version={đọc @trace.prd_version từ header file .feature}
|
|
889
896
|
@trace.bdd_version={đọc @trace.bdd_version từ header file .feature}
|
|
890
897
|
@trace.tech_doc_revision={đọc @trace.revision từ header tech-doc, hoặc bỏ nếu không có tech-doc}
|
|
898
|
+
@trace.design_spec_version={CHỈ FE/App (@trace.platform = web|app): đọc | **Version** | từ Metadata design-spec đã nạp. BỎ HẲN dòng này với system/backend}
|
|
891
899
|
@trace.source={paths.specs_dir}/{domain}/{prd-slug}/bdd/{@trace.platform}/{UC-ID}-{slug}.feature
|
|
892
900
|
```
|
|
893
901
|
|
|
894
902
|
`@trace.prd_version` ghi code này được viết theo version PRD nào.
|
|
895
903
|
`@trace.bdd_version` ghi code này được sinh từ version BDD nào.
|
|
896
904
|
`@trace.tech_doc_revision` ghi code này theo revision tech-design nào.
|
|
905
|
+
`@trace.design_spec_version` *(chỉ FE/App)* ghi code này dựng theo version design-spec nào — nguồn của `DESIGNSPEC_DRIFT`. **Vì sao cần:** design-spec là input BẮT BUỘC của code FE (màn hình, component inventory, link Figma frame) và của cả BDD FE/App, nhưng trước đây nó là artifact upstream **DUY NHẤT** không có cột TSV, không có tag trong code, không có cờ drift — designer sửa design-spec sau khi code đã sinh thì không gì phát hiện được.
|
|
897
906
|
`/validate-traces` sẽ gắn cờ drift nếu bất kỳ artifact upstream nào được cập nhật lên version mới hơn.
|
|
898
907
|
|
|
899
908
|
> **Quy tắc entry-point:** `@trace.implements` phải xuất hiện ở **layer entry-point** như định nghĩa trong `CLAUDE.md §2`. Với REST API → Controller. Với module event-driven → event handler / consumer class. Với context-engineering → hàm orchestration prompt. Không bao giờ chỉ đặt ở layer trong.
|
|
@@ -1047,19 +1056,63 @@ Cập nhật `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}-{@trace.platform}.ts
|
|
|
1047
1056
|
| `fe_phase` | `ui` nếu `--phase=ui` \| `integration` nếu `--phase=integration` **hoặc** `fe_full` (đều đã wire real adapter) \| `—` cho BE |
|
|
1048
1057
|
| `last_updated` | hôm nay `YYYY-MM-DD` |
|
|
1049
1058
|
|
|
1050
|
-
Giữ nguyên mọi cột khác (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`, `qc_status`, `qc_run_at`, `qc_owner`, `qc_blocked_by`).
|
|
1059
|
+
Giữ nguyên mọi cột khác (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`, `qc_status`, `qc_run_at`, `qc_owner`, `qc_blocked_by`) — **trừ ngoại lệ có kiểm soát ngay dưới đây**: khi logic vừa đổi thật (lấp stub, hoặc sửa method vì `DRIFT`), 4 cột nghiệm thu `dev_selftest`/`dev_selftest_at`/`qc_status`/`qc_run_at` **phải bị hạ** về "chưa biết". Giữ một `pass` đã hết hiệu lực là báo cáo sai, không phải tôn trọng quyền sở hữu cột.
|
|
1051
1060
|
`status` được tính bởi `/validate-traces` — không set ở đây.
|
|
1052
1061
|
|
|
1053
|
-
**
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1062
|
+
**Hạ hiệu lực tín hiệu kiểm thử khi logic vừa đổi thật.** Áp cho **HAI** trường hợp — cùng một lý do, cùng một tập cột *(luật "Làm mất hiệu lực ≠ ghi đè", `rules/workflow.md`)*:
|
|
1063
|
+
|
|
1064
|
+
| Trường hợp | Phạm vi scenario bị ảnh hưởng |
|
|
1065
|
+
|---|---|
|
|
1066
|
+
| **A. Lấp stub** (Fill-before-create — dòng sổ `→ RESOLVED`) | **Mọi** scenario chạy qua method vừa lấp — gồm cả scenario của **consumer_uc** (UC đã để trắng, thường nằm ở file TSV khác `{consumer_uc}-{platform}.tsv`) |
|
|
1067
|
+
| **B. Sửa method vì row đang `DRIFT`** (spec đổi sau lần gen trước) | Đúng các SC vừa được sửa method trong lần chạy này |
|
|
1068
|
+
|
|
1069
|
+
Với mỗi scenario trong phạm vi:
|
|
1070
|
+
- `dev_selftest → not_run` · `dev_selftest_at → —` · `qc_status → not_run` · `qc_run_at → —`.
|
|
1071
|
+
- **CHỈ** đụng 4 cột này — ngoại lệ có kiểm soát của luật "giữ nguyên cột khác" ở trên; là thao tác an-toàn (không sửa code UC khác, chỉ hạ cờ nghiệm thu đã hết hiệu lực).
|
|
1072
|
+
- **KHÔNG** đụng `test_count`/`test_classes` (test vẫn tồn tại — số lượng không sai, chỉ nội dung cũ; hạ số sẽ làm tỷ lệ coverage nhảy loạn) và **KHÔNG** đụng `qc_owner`/`qc_blocked_by` (con trỏ tới bug — code đổi không làm bug biến mất).
|
|
1073
|
+
- Gom danh sách `{consumer_uc}` bị ảnh hưởng (trường hợp A) để in ở "Next".
|
|
1074
|
+
|
|
1075
|
+
> **Vì sao trường hợp B cũng phải hạ:** lý do giống hệt A — logic vừa đổi thật, nên test cũ đang nghiệm thu một hành vi không còn tồn tại. Trước đây chỉ A được xử lý, nên chuỗi "spec đổi → `DRIFT` → sửa code → `OK`" kết thúc với `qc_status = pass` từ lần QC chạy trên **spec cũ**, và dashboard hiện xanh hoàn toàn. `/fix-bug` đã làm đúng việc này từ trước với chính lời giải thích đó: *"code vừa đổi nên tín hiệu self-test cũ hết hiệu lực"*.
|
|
1076
|
+
|
|
1077
|
+
Bất kể trường hợp nào, in khối này ở report cuối để dev không tưởng là hệ thống hỏng:
|
|
1078
|
+
```
|
|
1079
|
+
🔻 Tín hiệu kiểm thử bị hạ ({spec vừa đổi | vừa lấp stub} — nghiệm thu cũ hết hiệu lực):
|
|
1080
|
+
{sc_id}: dev_selftest pass→not_run · qc_status pass→not_run
|
|
1081
|
+
⚠️ {n} test của các SC này viết cho bản cũ — rà lại nội dung, đừng chỉ chạy lại.
|
|
1082
|
+
→ /dev-run-test {UC-ID} rồi QC chạy /qc-run-test {UC-ID}
|
|
1083
|
+
ℹ️ Coverage "đã kiểm đạt" trên dashboard sẽ TỤT sau lần này — đó là số đúng;
|
|
1084
|
+
số cũ mới là số sai. (Tỷ lệ phủ code/test không đổi — test_count giữ nguyên.)
|
|
1085
|
+
```
|
|
1057
1086
|
|
|
1058
1087
|
## Refresh Panel Mirror
|
|
1059
|
-
# Làm mới panel mirror của Living Docs *(local
|
|
1088
|
+
# Làm mới panel mirror của Living Docs *(local)*
|
|
1060
1089
|
|
|
1061
|
-
|
|
1062
|
-
|
|
1090
|
+
> **Hai vị trí, HAI TÊN KHÁC NHAU — đọc trước khi sửa gì ở đây.**
|
|
1091
|
+
>
|
|
1092
|
+
> | Đường dẫn | Vai trò | Git |
|
|
1093
|
+
> |---|---|---|
|
|
1094
|
+
> | `{paths.trace_dir}` (`.trace/` hoặc `{spec_source}/.trace/`) | **AUTHORITATIVE** — TSV + `trace-history.jsonl`. Không regenerate được. | **PHẢI commit** |
|
|
1095
|
+
> | `./.trace-mirror/` ở gốc workspace hiện tại | **MIRROR** — bản sao tiện cho panel VS Code. Sinh lại được bất cứ lúc nào. | **Luôn gitignore** |
|
|
1096
|
+
>
|
|
1097
|
+
> Trước v0.4.3 cả hai đều tên `.trace`, nên một luật gitignore theo tên có thể **xoá sạch sổ gốc**
|
|
1098
|
+
> khi dev mở thẳng spec repo làm workspace (lúc đó hai path bằng nhau). Hai tên khác nhau làm
|
|
1099
|
+
> luật git đọc được bằng mắt và **không còn ca nhập nhằng nào**: `.trace-mirror/` không bao giờ
|
|
1100
|
+
> commit, `.trace/` không bao giờ gitignore.
|
|
1101
|
+
|
|
1102
|
+
## Khi nào CÓ mirror
|
|
1103
|
+
|
|
1104
|
+
Mirror chỉ tồn tại khi **`{paths.trace_dir}` nằm NGOÀI workspace hiện tại** — panel đọc từ workspace đang mở nên cần một bản sao ở đây.
|
|
1105
|
+
|
|
1106
|
+
| Tình huống | `{paths.trace_dir}` | Có mirror? |
|
|
1107
|
+
|---|---|---|
|
|
1108
|
+
| Single-service | `./.trace` — **trong** workspace | ❌ Không. Panel đọc thẳng `.trace/trace-report.json`. Bỏ qua cả file này. |
|
|
1109
|
+
| Dev mở thẳng **spec repo** | `./.trace` — **trong** workspace | ❌ Không. Như trên. |
|
|
1110
|
+
| Umbrella + `spec_source`, dev đứng ở umbrella hoặc service submodule | `{spec_source}/.trace` — **ngoài** workspace | ✅ Có |
|
|
1111
|
+
| Umbrella legacy (không `spec_source`) | `.trace` theo từng service | ✅ Có |
|
|
1112
|
+
|
|
1113
|
+
Quy tắc một dòng: **phân giải `panel_mirror = ./.trace-mirror` ở gốc workspace hiện tại; nếu `{paths.trace_dir}` đã nằm trong workspace này thì bỏ qua toàn bộ bước mirror.**
|
|
1114
|
+
|
|
1115
|
+
---
|
|
1063
1116
|
|
|
1064
1117
|
Sau khi cập nhật TSV authoritative tại `{paths.trace_dir}`:
|
|
1065
1118
|
|
|
@@ -1067,11 +1120,14 @@ Sau khi cập nhật TSV authoritative tại `{paths.trace_dir}`:
|
|
|
1067
1120
|
`{paths.trace_dir}` phân giải về `{spec_source}/.trace` — vị trí authoritative duy nhất.
|
|
1068
1121
|
Lệnh này chạy từ `service_root`, nên thao tác ghi là **liên-repo vào spec submodule**;
|
|
1069
1122
|
commit/push spec submodule cho lần cập nhật trace (giống như `feedback/`).
|
|
1070
|
-
|
|
1071
|
-
|
|
1123
|
+
|
|
1124
|
+
1. Phân giải `panel_mirror = ./.trace-mirror` tại **gốc workspace hiện tại**.
|
|
1125
|
+
2. Nếu `{paths.trace_dir}` **không** nằm trong workspace hiện tại, copy mỗi
|
|
1072
1126
|
`{UC-ID}-{platform}.tsv` vừa cập nhật → `{panel_mirror}/{UC-ID}-{platform}.tsv` (tạo thư mục; ghi đè).
|
|
1073
|
-
Không namespace theo service — chỉ có một bộ trace; service sở hữu được mang
|
|
1074
|
-
|
|
1127
|
+
Không namespace theo service — chỉ có một bộ trace; service sở hữu được mang ở
|
|
1128
|
+
**cột `service` (cột 23)** của chính từng row, do `/generate-bdd` ghi từ `@trace.service`.
|
|
1129
|
+
3. **KHÔNG copy `trace-history.jsonl`.** Nó là dữ liệu tích luỹ, không phải thứ sinh lại được —
|
|
1130
|
+
nhân bản nó ra một thư mục gitignore là tạo hai lịch sử lệch nhau rồi mất bản thật.
|
|
1075
1131
|
|
|
1076
1132
|
**Legacy (không có `spec_source` — trace theo service):**
|
|
1077
1133
|
Copy mỗi `{UC-ID}-{platform}.tsv` vừa cập nhật → `{panel_mirror}/{service-name}/{UC-ID}-{platform}.tsv`
|
|
@@ -1128,7 +1184,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
1128
1184
|
| Phase | Commands |
|
|
1129
1185
|
|-------|----------|
|
|
1130
1186
|
| Discovery | `/define-product` |
|
|
1131
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1187
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1132
1188
|
| Design Spec | `/generate-design-spec` |
|
|
1133
1189
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
1134
1190
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -1153,6 +1209,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1153
1209
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
1154
1210
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
1155
1211
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
1212
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
1156
1213
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
1157
1214
|
| /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) |
|
|
1158
1215
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -1178,7 +1235,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1178
1235
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
1179
1236
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
1180
1237
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
1181
|
-
| /propose-scenario |
|
|
1238
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
1182
1239
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
1183
1240
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
1184
1241
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -1069,7 +1069,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
1069
1069
|
| Phase | Commands |
|
|
1070
1070
|
|-------|----------|
|
|
1071
1071
|
| Discovery | `/define-product` |
|
|
1072
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1072
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1073
1073
|
| Design Spec | `/generate-design-spec` |
|
|
1074
1074
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
1075
1075
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -1094,6 +1094,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1094
1094
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
1095
1095
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
1096
1096
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
1097
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
1097
1098
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
1098
1099
|
| /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) |
|
|
1099
1100
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -1119,7 +1120,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1119
1120
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
1120
1121
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
1121
1122
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
1122
|
-
| /propose-scenario |
|
|
1123
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
1123
1124
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
1124
1125
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
1125
1126
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -676,6 +676,31 @@ Khi viết AC, nếu PO đề cập chi tiết visual (màu sắc, animation, la
|
|
|
676
676
|
|
|
677
677
|
---
|
|
678
678
|
|
|
679
|
+
## Guard — PRD đã tồn tại *(chạy TRƯỚC khi ghi bất cứ gì)*
|
|
680
|
+
|
|
681
|
+
Kiểm `{paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md`.
|
|
682
|
+
|
|
683
|
+
**Tồn tại → DỪNG. KHÔNG ghi, KHÔNG hỏi Y/N.** Đọc `| **Version** |`, `| **Status** |`, và số row `# Change Log` để in:
|
|
684
|
+
|
|
685
|
+
```
|
|
686
|
+
❌ PRD đã tồn tại: {path}
|
|
687
|
+
Hiện: v{version} · Status {status} · {n} row Change Log
|
|
688
|
+
|
|
689
|
+
/generate-prd chỉ sinh PRD MỚI. Ghi đè sẽ mất:
|
|
690
|
+
• toàn bộ # Change Log (và file changelog/ đã rollover)
|
|
691
|
+
• Version thật → về 1.0 · Status approved → về draft
|
|
692
|
+
• đánh số lại BR từ đầu → HỎNG mọi @trace.business_rules trong bdd/ đã sinh
|
|
693
|
+
|
|
694
|
+
Muốn THÊM yêu cầu vào PRD này → /extend-prd {path}
|
|
695
|
+
Muốn sửa theo findings review → /refine-prd {path} rồi --resume
|
|
696
|
+
Thật sự muốn làm lại từ đầu → xoá/đổi tên file cũ rồi chạy lại (tự chịu trách nhiệm)
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
> **Vì sao DỪNG HẲN chứ không hỏi Y/N:** ghi đè một PRD đã ký duyệt không phải thứ nên nằm sau một phím bấm. Ba mất mát trên đều **không thể hoàn tác** từ trong lệnh, và cái thứ ba (BR ID churn) lan ra ngoài file — nó phá liên kết ở mọi `.feature` đã sinh, mà chính lệnh này đã dựng một guard riêng để chống ở thao tác *mở cột bảng BR*. Cùng thiệt hại, cùng phải chặn.
|
|
700
|
+
> `rules/workflow.md` có luật chung *"Prefer editing existing files over replacing"*, nhưng đó là prose toàn cục — không phải guard trong lệnh, nên không chặn được ai.
|
|
701
|
+
|
|
702
|
+
---
|
|
703
|
+
|
|
679
704
|
## Generate
|
|
680
705
|
|
|
681
706
|
Ghi `{paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md` theo cấu trúc dưới đây.
|
|
@@ -1033,7 +1058,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
1033
1058
|
| Phase | Commands |
|
|
1034
1059
|
|-------|----------|
|
|
1035
1060
|
| Discovery | `/define-product` |
|
|
1036
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1061
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1037
1062
|
| Design Spec | `/generate-design-spec` |
|
|
1038
1063
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
1039
1064
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -1058,6 +1083,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1058
1083
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
1059
1084
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
1060
1085
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
1086
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
1061
1087
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
1062
1088
|
| /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) |
|
|
1063
1089
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -1083,7 +1109,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1083
1109
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
1084
1110
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
1085
1111
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
1086
|
-
| /propose-scenario |
|
|
1112
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
1087
1113
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
1088
1114
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
1089
1115
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -653,7 +653,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
653
653
|
| Phase | Commands |
|
|
654
654
|
|-------|----------|
|
|
655
655
|
| Discovery | `/define-product` |
|
|
656
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
656
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
657
657
|
| Design Spec | `/generate-design-spec` |
|
|
658
658
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
659
659
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -678,6 +678,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
678
678
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
679
679
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
680
680
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
681
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
681
682
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
682
683
|
| /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) |
|
|
683
684
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -703,7 +704,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
703
704
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
704
705
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
705
706
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
706
|
-
| /propose-scenario |
|
|
707
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
707
708
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
708
709
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
709
710
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
@@ -1262,7 +1262,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
1262
1262
|
| Phase | Commands |
|
|
1263
1263
|
|-------|----------|
|
|
1264
1264
|
| Discovery | `/define-product` |
|
|
1265
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1265
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
1266
1266
|
| Design Spec | `/generate-design-spec` |
|
|
1267
1267
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
1268
1268
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -1287,6 +1287,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1287
1287
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
1288
1288
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
1289
1289
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
1290
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
1290
1291
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
1291
1292
|
| /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) |
|
|
1292
1293
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -1312,7 +1313,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
1312
1313
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
1313
1314
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
1314
1315
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
1315
|
-
| /propose-scenario |
|
|
1316
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
1316
1317
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
1317
1318
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
1318
1319
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
package/core/commands/learn.md
CHANGED
|
@@ -637,7 +637,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
|
|
|
637
637
|
| Phase | Commands |
|
|
638
638
|
|-------|----------|
|
|
639
639
|
| Discovery | `/define-product` |
|
|
640
|
-
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
640
|
+
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
641
641
|
| Design Spec | `/generate-design-spec` |
|
|
642
642
|
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
643
643
|
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
@@ -662,6 +662,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
662
662
|
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
663
663
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
664
664
|
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
665
|
+
| /extend-prd | `/refine-prd {prd-file}` (soi phần vừa thêm) rồi `/review-context {prd-file}` → PO duyệt → `/generate-bdd` **chỉ cho UC MỚI**; UC cũ dùng `/validate-traces --realign-prd-version {UC-ID}` |
|
|
665
666
|
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
666
667
|
| /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) |
|
|
667
668
|
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
@@ -687,7 +688,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
|
687
688
|
| /fix-bug | `/dev-run-test {UC-ID}` (dev_selftest vừa reset về not_run) → tạo PR; nếu fix một `{BUG-ID}` → QC chạy `/qc-run-test {UC-ID}` để verify + đóng bug |
|
|
688
689
|
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
689
690
|
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
690
|
-
| /propose-scenario |
|
|
691
|
+
| /propose-scenario | **Case A** (thiếu scenario cho AC có sẵn) → báo PO/Dev review trong `feedback/bdd-proposals/`; `/generate-bdd` tự chèn khi `Status: accepted`. **Case B** (requirement mới) → `feedback/prd-change-requests/` — PO phải đưa vào PRD trước, KHÔNG tự vào BDD được; `/validate-traces` nhắc lại kèm số ngày chờ chừng nào `Status: Open` |
|
|
691
692
|
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
692
693
|
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
693
694
|
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|