@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.
Files changed (116) hide show
  1. package/bin/self-check.js +124 -6
  2. package/bin/trace-schema.json +1199 -692
  3. package/commands/debug.md +3 -2
  4. package/commands/define-product.md +3 -2
  5. package/commands/dev-gen-test.md +37 -9
  6. package/commands/dev-run-test.md +37 -9
  7. package/commands/dev-smoke-test.md +3 -2
  8. package/commands/extend-prd.md +907 -0
  9. package/commands/extend-prd.tmpl +270 -0
  10. package/commands/fix-bug.md +37 -9
  11. package/commands/generate-architecture.md +3 -2
  12. package/commands/generate-bdd.md +56 -13
  13. package/commands/generate-bdd.tmpl +18 -3
  14. package/commands/generate-code.md +73 -16
  15. package/commands/generate-code.tmpl +36 -7
  16. package/commands/generate-design-spec.md +3 -2
  17. package/commands/generate-prd.md +28 -2
  18. package/commands/generate-prd.tmpl +25 -0
  19. package/commands/generate-spec-manifest.md +3 -2
  20. package/commands/generate-tech-docs.md +3 -2
  21. package/commands/learn.md +3 -2
  22. package/commands/map-testids.md +3 -2
  23. package/commands/propose-scenario.md +55 -3
  24. package/commands/propose-scenario.tmpl +52 -1
  25. package/commands/qc-analyze.md +3 -2
  26. package/commands/qc-design-test.md +4 -2
  27. package/commands/qc-design-test.tmpl +1 -0
  28. package/commands/qc-plan.md +3 -2
  29. package/commands/qc-report.md +3 -2
  30. package/commands/qc-review.md +3 -2
  31. package/commands/qc-run-test.md +50 -10
  32. package/commands/qc-run-test.tmpl +13 -1
  33. package/commands/refine-prd.md +3 -2
  34. package/commands/report-bug.md +3 -2
  35. package/commands/review-code.md +7 -5
  36. package/commands/review-code.tmpl +4 -3
  37. package/commands/review-context.md +6 -4
  38. package/commands/review-context.tmpl +3 -2
  39. package/commands/review-tech-docs.md +3 -2
  40. package/commands/setup-ai-first.md +3 -2
  41. package/commands/sync.md +40 -16
  42. package/commands/sync.tmpl +37 -14
  43. package/commands/update-framework.md +3 -2
  44. package/commands/validate-traces.md +318 -33
  45. package/commands/validate-traces.tmpl +315 -31
  46. package/core/FRAMEWORK_VERSION +1 -1
  47. package/core/commands/debug.md +3 -2
  48. package/core/commands/define-product.md +3 -2
  49. package/core/commands/dev-gen-test.md +37 -9
  50. package/core/commands/dev-run-test.md +37 -9
  51. package/core/commands/dev-smoke-test.md +3 -2
  52. package/core/commands/extend-prd.md +907 -0
  53. package/core/commands/fix-bug.md +37 -9
  54. package/core/commands/generate-architecture.md +3 -2
  55. package/core/commands/generate-bdd.md +56 -13
  56. package/core/commands/generate-code.md +73 -16
  57. package/core/commands/generate-design-spec.md +3 -2
  58. package/core/commands/generate-prd.md +28 -2
  59. package/core/commands/generate-spec-manifest.md +3 -2
  60. package/core/commands/generate-tech-docs.md +3 -2
  61. package/core/commands/learn.md +3 -2
  62. package/core/commands/map-testids.md +3 -2
  63. package/core/commands/propose-scenario.md +55 -3
  64. package/core/commands/qc-analyze.md +3 -2
  65. package/core/commands/qc-design-test.md +4 -2
  66. package/core/commands/qc-plan.md +3 -2
  67. package/core/commands/qc-report.md +3 -2
  68. package/core/commands/qc-review.md +3 -2
  69. package/core/commands/qc-run-test.md +50 -10
  70. package/core/commands/refine-prd.md +3 -2
  71. package/core/commands/report-bug.md +3 -2
  72. package/core/commands/review-code.md +7 -5
  73. package/core/commands/review-context.md +6 -4
  74. package/core/commands/review-tech-docs.md +3 -2
  75. package/core/commands/setup-ai-first.md +3 -2
  76. package/core/commands/sync.md +40 -16
  77. package/core/commands/update-framework.md +3 -2
  78. package/core/commands/validate-traces.md +318 -33
  79. package/core/rules/workflow.md +18 -0
  80. package/core/steps/report-footer.md +3 -2
  81. package/core/steps/trace-mirror.md +34 -7
  82. package/core/templates/feature.template +1 -1
  83. package/docs/01-getting-started/installation.md +18 -1
  84. package/docs/01-getting-started/what-is-sdd.md +4 -2
  85. package/docs/02-concepts/architecture.md +27 -3
  86. package/docs/02-concepts/pipeline-steps/02-specification.md +39 -3
  87. package/docs/02-concepts/pipeline-steps/04-bdd.md +24 -2
  88. package/docs/02-concepts/pipeline-steps/05-tech-docs.md +18 -1
  89. package/docs/02-concepts/pipeline-steps/06-code.md +35 -4
  90. package/docs/02-concepts/pipeline-steps/09-validate-traces.md +137 -12
  91. package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +59 -3
  92. package/docs/02-concepts/roles-and-hitl.md +1 -1
  93. package/docs/02-concepts/traceability.md +126 -117
  94. package/docs/03-guides/developer.md +20 -4
  95. package/docs/03-guides/product-owner.md +72 -68
  96. package/docs/03-guides/tester-qa.md +81 -70
  97. package/docs/04-reference/commands.md +134 -105
  98. package/docs/04-reference/configuration.md +146 -94
  99. package/docs/04-reference/trace-schema.md +26 -9
  100. package/docs/explain/02-generate-prd.md +80 -78
  101. package/docs/explain/02b-extend-prd.md +125 -0
  102. package/docs/explain/03-refine-prd.md +86 -86
  103. package/docs/explain/04-review-context.md +18 -1
  104. package/docs/explain/06-generate-bdd.md +23 -0
  105. package/docs/explain/08-review-tech-docs.md +20 -5
  106. package/docs/explain/10-review-code.md +36 -2
  107. package/docs/explain/19-qc-run-test.md +87 -67
  108. package/docs/explain/21-validate-traces.md +74 -68
  109. package/docs/explain/23-fix-bug.md +19 -3
  110. package/docs/explain/26-propose-scenario.md +70 -63
  111. package/docs/explain/README.md +135 -134
  112. package/package.json +50 -50
  113. package/rules/workflow.md +18 -0
  114. package/steps/report-footer.md +3 -2
  115. package/steps/trace-mirror.md +34 -7
  116. package/templates/feature.template +1 -1
@@ -446,7 +446,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
446
446
  | Phase | Commands |
447
447
  |-------|----------|
448
448
  | Discovery | `/define-product` |
449
- | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
449
+ | PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
450
450
  | Design Spec | `/generate-design-spec` |
451
451
  | BDD | `/generate-bdd` · `/review-context` (BDD) |
452
452
  | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
@@ -471,6 +471,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
471
471
  | /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
472
472
  | /define-product | `/generate-prd {product-definition-file}` |
473
473
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
474
+ | /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}` |
474
475
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
475
476
  | /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) |
476
477
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
@@ -496,7 +497,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
496
497
  | /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 |
497
498
  | /debug | `/fix-bug {ticket-id}` nếu cần sửa |
498
499
  | /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
499
- | /propose-scenario | Báo PO/Dev review proposal trong `feedback/bdd-proposals/` |
500
+ | /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` |
500
501
  | /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
501
502
  | /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
502
503
  | /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
package/commands/sync.md CHANGED
@@ -261,16 +261,37 @@ Với mỗi entry trong danh sách đó:
261
261
 
262
262
  ## Step 4 — Check `.gitignore`
263
263
 
264
- Kiểm tra các Living Docs mirror được sinh ra gitignore không:
265
- - `.trace/` trong `.gitignore` của repo hiện tại (hoặc `.git/info/exclude`)
266
- - `.living-docs/` trong `.gitignore` của **specs module** (khi `setup.spec_source` được set)
264
+ *Bước này kiểm **hai chiều ngược nhau**, nhầm chiều mất dữ liệu — đọc bảng trước:*
267
265
 
268
- Nếu thiếu cái nào:
266
+ | Đường dẫn | Vai trò | Kỳ vọng |
267
+ |---|---|---|
268
+ | `{paths.trace_dir}` (`.trace/` hoặc `{spec_source}/.trace/`) | **AUTHORITATIVE** — TSV + `trace-history.jsonl`, không regenerate được | **PHẢI commit** — gitignore nó là **lỗi nghiêm trọng** |
269
+ | `.trace-mirror/` | bản sao tiện cho panel VS Code | phải gitignore |
270
+ | `.living-docs/` | report sinh ra | phải gitignore |
271
+
272
+ **4a. Cảnh báo mềm — mirror chưa gitignore.**
273
+ Kiểm `.trace-mirror/` trong `.gitignore` của repo hiện tại (hoặc `.git/info/exclude`), và `.living-docs/` trong `.gitignore` của **specs module** (khi `setup.spec_source` được set). Thiếu cái nào:
274
+ ```
275
+ ⚠️ Mirror chưa gitignore — chúng được sinh ra, đừng bao giờ commit:
276
+ echo ".trace-mirror/" >> .gitignore
277
+ echo ".living-docs/" >> {spec_source}/.gitignore # specs module (nếu có spec_source)
278
+ ```
279
+
280
+ **4b. 🔴 Báo động — sổ gốc ĐANG bị bỏ qua.**
281
+ Phân giải `{paths.trace_dir}`; nếu nó nằm trong một git repo, chạy `git -C {repo} check-ignore -q {trace_dir}`. **Trúng** (exit 0) → in ngay, mức chặn:
269
282
  ```
270
- ⚠️ Living Docs mirrors not gitignored they are generated, never commit them:
271
- echo ".trace/" >> .gitignore
272
- echo ".living-docs/" >> {spec_source}/.gitignore # specs module (if spec_source set)
283
+ 🔴 NGUY HIỂM sổ gốc trace ĐANG bị git bỏ qua: {paths.trace_dir}
284
+ Toàn bộ trạng thái theo dõi (spec_ver · gen_ver · implemented_by · test_count ·
285
+ dev_selftest · qc_status) trace-history.jsonl KHÔNG được lưu vào git.
286
+ Người khác clone repo về sẽ không thấy gì, và lịch sử thì KHÔNG dựng lại được.
287
+
288
+ Sửa:
289
+ 1. Gỡ dòng khớp `.trace` khỏi .gitignore của {repo}
290
+ 2. git -C {repo} add -f {trace_dir} && git -C {repo} commit -m "restore trace state"
291
+ Nguyên nhân thường gặp: bản trước v0.4.3 gọi panel mirror là `.trace` (trùng tên sổ gốc),
292
+ nên gợi ý "gitignore .trace/" của chính lệnh này có thể đã nhắm trúng sổ gốc.
273
293
  ```
294
+ > **Vì sao cần báo động này:** trước v0.4.3, mirror và sổ gốc **cùng tên `.trace`**. Khi dev mở thẳng spec repo làm workspace thì hai path bằng nhau — và Step 4 (bản cũ) gợi ý gitignore theo **tên**, không theo vai trò. Làm theo là mất sổ gốc, **im lặng**: máy vẫn chạy, dashboard vẫn có số; chỉ người thứ hai clone về mới phát hiện. Bản v0.4.3 đổi tên mirror thành `.trace-mirror` để cái bẫy biến mất, nhưng **dự án đã dính từ trước thì vẫn dính** — 4b là để tìm ra chúng.
274
295
 
275
296
  ---
276
297
 
@@ -280,12 +301,12 @@ Nếu thiếu cái nào:
280
301
 
281
302
  **Phân giải Living Docs home (cùng quy tắc như `/validate-traces`):**
282
303
  - `living_docs_dir` = `{spec_source}/.living-docs` nếu `setup.spec_source` được set, else `.living-docs` ở umbrella root. *(Specs module được mount trong mọi service workspace, nên panel phân giải nó kể cả khi dev mở một service submodule đơn.)*
283
- - `panel_mirror` = `./.trace` ở gốc workspace hiện tại.
304
+ - `panel_mirror` = `./.trace-mirror` ở gốc workspace hiện tại. *(Cố ý KHÁC tên `.trace` — xem Step 4.)*
284
305
 
285
306
  1. Với mỗi service trong danh sách **đã làm phẳng** ở Step 3 (gồm cả các submodule nằm dưới `by_prd_slug` — bỏ sót chúng là mất trace của các repo chia theo feature): nếu `{service.path}/.trace/` có file `.tsv` → copy chúng vào `{living_docs_dir}/{service-name}/` (tạo dir nếu cần).
286
307
  2. Ghi merged `{living_docs_dir}/trace-report.json`:
287
308
  - Tổng hợp TSV `.trace/` của mỗi service, thêm field `"service"` **và `"platform"`** (suy từ tên file `{UC-ID}-{platform}.tsv`) cho mỗi row, tính lại summary totals. **Không dedupe theo `sc_id` giữa các platform** — `web·SC1` và `system·SC1` là 2 row khác nhau; nhờ field `platform` dashboard hiển thị tách bạch coverage từng platform.
288
- 3. **Mirror tới panel location:** copy `{living_docs_dir}/trace-report.json` (+ TSV namespaced) → `{panel_mirror}/` để panel trong repo đang mở không rỗng. Skip nếu `panel_mirror` đã bằng `living_docs_dir`.
309
+ 3. **Mirror tới panel location:** copy `{living_docs_dir}/trace-report.json` (+ TSV namespaced) → `{panel_mirror}/` để panel trong repo đang mở không rỗng. Skip nếu `panel_mirror` đã bằng `living_docs_dir`, hoặc nếu `{paths.trace_dir}` đã nằm trong workspace hiện tại (panel đọc thẳng ở đó). **KHÔNG** copy `trace-history.jsonl` — nó là dữ liệu tích luỹ, không phải thứ sinh lại được.
289
310
 
290
311
  In kết quả sync:
291
312
  ```
@@ -348,7 +369,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
348
369
  | Phase | Commands |
349
370
  |-------|----------|
350
371
  | Discovery | `/define-product` |
351
- | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
372
+ | PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
352
373
  | Design Spec | `/generate-design-spec` |
353
374
  | BDD | `/generate-bdd` · `/review-context` (BDD) |
354
375
  | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
@@ -373,6 +394,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
373
394
  | /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
374
395
  | /define-product | `/generate-prd {product-definition-file}` |
375
396
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
397
+ | /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}` |
376
398
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
377
399
  | /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) |
378
400
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
@@ -398,7 +420,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
398
420
  | /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 |
399
421
  | /debug | `/fix-bug {ticket-id}` nếu cần sửa |
400
422
  | /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
401
- | /propose-scenario | Báo PO/Dev review proposal trong `feedback/bdd-proposals/` |
423
+ | /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` |
402
424
  | /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
403
425
  | /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
404
426
  | /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
@@ -445,18 +467,20 @@ Service Configs
445
467
  → create it so /dev-run-test works correctly
446
468
 
447
469
  .gitignore
448
- ✅ .trace/ is gitignored
449
- (or: ⚠️ Add .trace/ to .gitignore)
470
+ ✅ .trace-mirror/ + .living-docs/ gitignored (mirror — sinh lại được)
471
+ {paths.trace_dir}/ KHÔNG bị gitignore (sổ gốc — phải commit)
472
+ (hoặc: ⚠️ Thêm .trace-mirror/ vào .gitignore)
473
+ (hoặc: 🔴 NGUY HIỂM — sổ gốc {paths.trace_dir} đang bị gitignore, xem Step 4b)
450
474
 
451
475
  Living Docs
452
- .trace/ synced — {N} TSVs across {S} services
453
- (run /validate-traces for full coverage report)
476
+ {panel_mirror}/ synced — {N} TSVs across {S} services
477
+ (chạy /validate-traces để report coverage đầy đủ)
454
478
 
455
479
  Spec Manifest
456
480
  ✅ spec-manifest.yaml — {N} features indexed
457
481
 
458
482
  ---
459
483
  Status : ✅ Complete | ⚠️ Warnings
460
- Output Artifacts: updated .trace/ (umbrella mirror), spec-manifest.yaml
484
+ Output Artifacts: updated .trace-mirror/ (panel mirror), spec-manifest.yaml
461
485
  Next : /validate-traces (full coverage check) | /generate-code {UC-ID} (start coding)
462
486
  ```
@@ -261,16 +261,37 @@ Với mỗi entry trong danh sách đó:
261
261
 
262
262
  ## Step 4 — Check `.gitignore`
263
263
 
264
- Kiểm tra các Living Docs mirror được sinh ra gitignore không:
265
- - `.trace/` trong `.gitignore` của repo hiện tại (hoặc `.git/info/exclude`)
266
- - `.living-docs/` trong `.gitignore` của **specs module** (khi `setup.spec_source` được set)
264
+ *Bước này kiểm **hai chiều ngược nhau**, nhầm chiều mất dữ liệu — đọc bảng trước:*
267
265
 
268
- Nếu thiếu cái nào:
266
+ | Đường dẫn | Vai trò | Kỳ vọng |
267
+ |---|---|---|
268
+ | `{paths.trace_dir}` (`.trace/` hoặc `{spec_source}/.trace/`) | **AUTHORITATIVE** — TSV + `trace-history.jsonl`, không regenerate được | **PHẢI commit** — gitignore nó là **lỗi nghiêm trọng** |
269
+ | `.trace-mirror/` | bản sao tiện cho panel VS Code | phải gitignore |
270
+ | `.living-docs/` | report sinh ra | phải gitignore |
271
+
272
+ **4a. Cảnh báo mềm — mirror chưa gitignore.**
273
+ Kiểm `.trace-mirror/` trong `.gitignore` của repo hiện tại (hoặc `.git/info/exclude`), và `.living-docs/` trong `.gitignore` của **specs module** (khi `setup.spec_source` được set). Thiếu cái nào:
274
+ ```
275
+ ⚠️ Mirror chưa gitignore — chúng được sinh ra, đừng bao giờ commit:
276
+ echo ".trace-mirror/" >> .gitignore
277
+ echo ".living-docs/" >> {spec_source}/.gitignore # specs module (nếu có spec_source)
278
+ ```
279
+
280
+ **4b. 🔴 Báo động — sổ gốc ĐANG bị bỏ qua.**
281
+ Phân giải `{paths.trace_dir}`; nếu nó nằm trong một git repo, chạy `git -C {repo} check-ignore -q {trace_dir}`. **Trúng** (exit 0) → in ngay, mức chặn:
269
282
  ```
270
- ⚠️ Living Docs mirrors not gitignored they are generated, never commit them:
271
- echo ".trace/" >> .gitignore
272
- echo ".living-docs/" >> {spec_source}/.gitignore # specs module (if spec_source set)
283
+ 🔴 NGUY HIỂM sổ gốc trace ĐANG bị git bỏ qua: {paths.trace_dir}
284
+ Toàn bộ trạng thái theo dõi (spec_ver · gen_ver · implemented_by · test_count ·
285
+ dev_selftest · qc_status) trace-history.jsonl KHÔNG được lưu vào git.
286
+ Người khác clone repo về sẽ không thấy gì, và lịch sử thì KHÔNG dựng lại được.
287
+
288
+ Sửa:
289
+ 1. Gỡ dòng khớp `.trace` khỏi .gitignore của {repo}
290
+ 2. git -C {repo} add -f {trace_dir} && git -C {repo} commit -m "restore trace state"
291
+ Nguyên nhân thường gặp: bản trước v0.4.3 gọi panel mirror là `.trace` (trùng tên sổ gốc),
292
+ nên gợi ý "gitignore .trace/" của chính lệnh này có thể đã nhắm trúng sổ gốc.
273
293
  ```
294
+ > **Vì sao cần báo động này:** trước v0.4.3, mirror và sổ gốc **cùng tên `.trace`**. Khi dev mở thẳng spec repo làm workspace thì hai path bằng nhau — và Step 4 (bản cũ) gợi ý gitignore theo **tên**, không theo vai trò. Làm theo là mất sổ gốc, **im lặng**: máy vẫn chạy, dashboard vẫn có số; chỉ người thứ hai clone về mới phát hiện. Bản v0.4.3 đổi tên mirror thành `.trace-mirror` để cái bẫy biến mất, nhưng **dự án đã dính từ trước thì vẫn dính** — 4b là để tìm ra chúng.
274
295
 
275
296
  ---
276
297
 
@@ -280,12 +301,12 @@ Nếu thiếu cái nào:
280
301
 
281
302
  **Phân giải Living Docs home (cùng quy tắc như `/validate-traces`):**
282
303
  - `living_docs_dir` = `{spec_source}/.living-docs` nếu `setup.spec_source` được set, else `.living-docs` ở umbrella root. *(Specs module được mount trong mọi service workspace, nên panel phân giải nó kể cả khi dev mở một service submodule đơn.)*
283
- - `panel_mirror` = `./.trace` ở gốc workspace hiện tại.
304
+ - `panel_mirror` = `./.trace-mirror` ở gốc workspace hiện tại. *(Cố ý KHÁC tên `.trace` — xem Step 4.)*
284
305
 
285
306
  1. Với mỗi service trong danh sách **đã làm phẳng** ở Step 3 (gồm cả các submodule nằm dưới `by_prd_slug` — bỏ sót chúng là mất trace của các repo chia theo feature): nếu `{service.path}/.trace/` có file `.tsv` → copy chúng vào `{living_docs_dir}/{service-name}/` (tạo dir nếu cần).
286
307
  2. Ghi merged `{living_docs_dir}/trace-report.json`:
287
308
  - Tổng hợp TSV `.trace/` của mỗi service, thêm field `"service"` **và `"platform"`** (suy từ tên file `{UC-ID}-{platform}.tsv`) cho mỗi row, tính lại summary totals. **Không dedupe theo `sc_id` giữa các platform** — `web·SC1` và `system·SC1` là 2 row khác nhau; nhờ field `platform` dashboard hiển thị tách bạch coverage từng platform.
288
- 3. **Mirror tới panel location:** copy `{living_docs_dir}/trace-report.json` (+ TSV namespaced) → `{panel_mirror}/` để panel trong repo đang mở không rỗng. Skip nếu `panel_mirror` đã bằng `living_docs_dir`.
309
+ 3. **Mirror tới panel location:** copy `{living_docs_dir}/trace-report.json` (+ TSV namespaced) → `{panel_mirror}/` để panel trong repo đang mở không rỗng. Skip nếu `panel_mirror` đã bằng `living_docs_dir`, hoặc nếu `{paths.trace_dir}` đã nằm trong workspace hiện tại (panel đọc thẳng ở đó). **KHÔNG** copy `trace-history.jsonl` — nó là dữ liệu tích luỹ, không phải thứ sinh lại được.
289
310
 
290
311
  In kết quả sync:
291
312
  ```
@@ -344,18 +365,20 @@ Service Configs
344
365
  → create it so /dev-run-test works correctly
345
366
 
346
367
  .gitignore
347
- ✅ .trace/ is gitignored
348
- (or: ⚠️ Add .trace/ to .gitignore)
368
+ ✅ .trace-mirror/ + .living-docs/ gitignored (mirror — sinh lại được)
369
+ {paths.trace_dir}/ KHÔNG bị gitignore (sổ gốc — phải commit)
370
+ (hoặc: ⚠️ Thêm .trace-mirror/ vào .gitignore)
371
+ (hoặc: 🔴 NGUY HIỂM — sổ gốc {paths.trace_dir} đang bị gitignore, xem Step 4b)
349
372
 
350
373
  Living Docs
351
- .trace/ synced — {N} TSVs across {S} services
352
- (run /validate-traces for full coverage report)
374
+ {panel_mirror}/ synced — {N} TSVs across {S} services
375
+ (chạy /validate-traces để report coverage đầy đủ)
353
376
 
354
377
  Spec Manifest
355
378
  ✅ spec-manifest.yaml — {N} features indexed
356
379
 
357
380
  ---
358
381
  Status : ✅ Complete | ⚠️ Warnings
359
- Output Artifacts: updated .trace/ (umbrella mirror), spec-manifest.yaml
382
+ Output Artifacts: updated .trace-mirror/ (panel mirror), spec-manifest.yaml
360
383
  Next : /validate-traces (full coverage check) | /generate-code {UC-ID} (start coding)
361
384
  ```
@@ -198,7 +198,7 @@ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **pha
198
198
  | Phase | Commands |
199
199
  |-------|----------|
200
200
  | Discovery | `/define-product` |
201
- | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
201
+ | PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
202
202
  | Design Spec | `/generate-design-spec` |
203
203
  | BDD | `/generate-bdd` · `/review-context` (BDD) |
204
204
  | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
@@ -223,6 +223,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
223
223
  | /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
224
224
  | /define-product | `/generate-prd {product-definition-file}` |
225
225
  | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
226
+ | /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}` |
226
227
  | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
227
228
  | /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) |
228
229
  | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
@@ -248,7 +249,7 @@ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
248
249
  | /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 |
249
250
  | /debug | `/fix-bug {ticket-id}` nếu cần sửa |
250
251
  | /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
251
- | /propose-scenario | Báo PO/Dev review proposal trong `feedback/bdd-proposals/` |
252
+ | /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` |
252
253
  | /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
253
254
  | /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
254
255
  | /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |