@edupia-tutor/spec-driven-docs 0.14.0 → 0.14.1
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/commands/debug.md +435 -435
- package/commands/debug.tmpl +111 -111
- package/commands/define-product.md +330 -327
- package/commands/define-product.tmpl +50 -47
- package/commands/dev-gen-test.md +364 -364
- package/commands/dev-gen-test.tmpl +63 -63
- package/commands/dev-run-test.md +375 -375
- package/commands/dev-run-test.tmpl +74 -74
- package/commands/dev-smoke-test.md +340 -340
- package/commands/dev-smoke-test.tmpl +60 -60
- package/commands/fix-bug.md +402 -402
- package/commands/fix-bug.tmpl +78 -78
- package/commands/generate-bdd.md +512 -512
- package/commands/generate-bdd.tmpl +211 -211
- package/commands/generate-code.md +480 -482
- package/commands/generate-code.tmpl +179 -181
- package/commands/generate-design-spec.md +495 -495
- package/commands/generate-design-spec.tmpl +219 -219
- package/commands/generate-prd.md +445 -396
- package/commands/generate-prd.tmpl +45 -198
- package/commands/generate-spec-manifest.md +337 -337
- package/commands/generate-spec-manifest.tmpl +57 -57
- package/commands/generate-tech-docs.md +364 -364
- package/commands/generate-tech-docs.tmpl +84 -84
- package/commands/learn.md +346 -346
- package/commands/learn.tmpl +22 -22
- package/commands/map-testids.md +321 -321
- package/commands/map-testids.tmpl +41 -41
- package/commands/propose-scenario.md +334 -334
- package/commands/propose-scenario.tmpl +54 -54
- package/commands/qc-analyze.md +322 -323
- package/commands/qc-analyze.tmpl +42 -43
- package/commands/qc-design-test.md +303 -303
- package/commands/qc-design-test.tmpl +23 -23
- package/commands/qc-plan.md +296 -296
- package/commands/qc-plan.tmpl +16 -16
- package/commands/qc-report.md +301 -301
- package/commands/qc-report.tmpl +21 -21
- package/commands/qc-review.md +297 -297
- package/commands/qc-review.tmpl +17 -17
- package/commands/qc-run-test.md +336 -336
- package/commands/qc-run-test.tmpl +35 -35
- package/commands/refine-prd.md +426 -428
- package/commands/refine-prd.tmpl +61 -61
- package/commands/report-bug.md +350 -350
- package/commands/report-bug.tmpl +70 -70
- package/commands/review-code.md +363 -363
- package/commands/review-code.tmpl +39 -39
- package/commands/review-context.md +577 -579
- package/commands/review-context.tmpl +212 -212
- package/commands/review-tech-docs.md +426 -426
- package/commands/review-tech-docs.tmpl +146 -146
- package/commands/setup-ai-first.md +237 -237
- package/commands/setup-ai-first.tmpl +131 -131
- package/commands/sync.md +145 -145
- package/commands/sync.tmpl +93 -93
- package/commands/update-framework.md +88 -88
- package/commands/update-framework.tmpl +36 -36
- package/commands/validate-traces.md +379 -379
- package/commands/validate-traces.tmpl +99 -99
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +435 -435
- package/core/commands/define-product.md +330 -327
- package/core/commands/dev-gen-test.md +364 -364
- package/core/commands/dev-run-test.md +375 -375
- package/core/commands/dev-smoke-test.md +340 -340
- package/core/commands/fix-bug.md +402 -402
- package/core/commands/generate-bdd.md +512 -512
- package/core/commands/generate-code.md +480 -482
- package/core/commands/generate-design-spec.md +495 -495
- package/core/commands/generate-prd.md +445 -396
- package/core/commands/generate-spec-manifest.md +337 -337
- package/core/commands/generate-tech-docs.md +364 -364
- package/core/commands/learn.md +346 -346
- package/core/commands/map-testids.md +321 -321
- package/core/commands/propose-scenario.md +334 -334
- package/core/commands/qc-analyze.md +322 -323
- package/core/commands/qc-design-test.md +303 -303
- package/core/commands/qc-plan.md +296 -296
- package/core/commands/qc-report.md +301 -301
- package/core/commands/qc-review.md +297 -297
- package/core/commands/qc-run-test.md +336 -336
- package/core/commands/refine-prd.md +426 -428
- package/core/commands/report-bug.md +350 -350
- package/core/commands/review-code.md +363 -363
- package/core/commands/review-context.md +577 -579
- package/core/commands/review-tech-docs.md +426 -426
- package/core/commands/setup-ai-first.md +237 -237
- package/core/commands/sync.md +145 -145
- package/core/commands/update-framework.md +88 -88
- package/core/commands/validate-traces.md +379 -379
- package/core/skills/code/SKILL.md +388 -388
- package/core/skills/debug/SKILL.md +390 -390
- package/core/skills/design-spec/SKILL.md +316 -316
- package/core/skills/discovery/SKILL.md +7 -547
- package/core/skills/prd/SKILL.md +298 -394
- package/core/skills/setup-ai-first/SKILL.md +79 -79
- package/core/skills/spec/SKILL.md +176 -176
- package/core/skills/test/SKILL.md +602 -602
- package/core/steps/capture-lesson.md +44 -44
- package/core/steps/context-loader.md +174 -174
- package/core/steps/gate.md +54 -54
- package/core/steps/report-footer.md +52 -52
- package/core/steps/review-fanout.md +85 -87
- package/core/steps/spawn-agent.md +45 -45
- package/core/steps/trace-mirror.md +21 -21
- package/core/templates/architecture.template.md +37 -37
- package/core/templates/design-spec.template.md +77 -77
- package/core/templates/platform-guide.template.md +47 -47
- package/core/templates/prd.template.md +106 -231
- package/core/templates/product-definition.template.md +101 -88
- package/docs/04-operations/publishing.md +20 -3
- package/package.json +1 -1
- package/skills/code/SKILL.md +388 -388
- package/skills/code/SKILL.tmpl +56 -56
- package/skills/debug/SKILL.md +390 -390
- package/skills/debug/SKILL.tmpl +60 -60
- package/skills/design-spec/SKILL.md +316 -316
- package/skills/design-spec/SKILL.tmpl +36 -36
- package/skills/discovery/SKILL.md +7 -547
- package/skills/discovery/SKILL.tmpl +7 -140
- package/skills/prd/SKILL.md +298 -394
- package/skills/prd/SKILL.tmpl +40 -151
- package/skills/setup-ai-first/SKILL.md +79 -79
- package/skills/setup-ai-first/SKILL.tmpl +27 -27
- package/skills/spec/SKILL.md +176 -176
- package/skills/spec/SKILL.tmpl +18 -18
- package/skills/test/SKILL.md +602 -602
- package/skills/test/SKILL.tmpl +44 -44
- package/steps/capture-lesson.md +44 -44
- package/steps/context-loader.md +174 -174
- package/steps/gate.md +54 -54
- package/steps/report-footer.md +52 -52
- package/steps/review-fanout.md +85 -87
- package/steps/spawn-agent.md +45 -45
- package/steps/trace-mirror.md +21 -21
- package/templates/architecture.template.md +37 -37
- package/templates/design-spec.template.md +77 -77
- package/templates/platform-guide.template.md +47 -47
- package/templates/prd.template.md +106 -231
- package/templates/product-definition.template.md +101 -88
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# /validate-traces — Traceability Coverage Matrix
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Check read-only độ phủ giữa spec, code, và test — gồm cả PRD version drift.
|
|
4
4
|
|
|
5
5
|
## Gate
|
|
6
6
|
{{include:steps/gate.md}}
|
|
7
7
|
|
|
8
|
-
*
|
|
8
|
+
*Lưu ý: Với lệnh này, target ở Bước 1 là một tên domain hoặc UC-ID cụ thể từ `$ARGUMENTS`. Không có một file đơn để phân giải — lệnh quét nhiều thư mục.*
|
|
9
9
|
|
|
10
10
|
## Context
|
|
11
11
|
{{include:steps/context-loader.md}}
|
|
@@ -16,86 +16,86 @@ Read-only check of coverage between specs, code, and tests — including PRD ver
|
|
|
16
16
|
|
|
17
17
|
### Step 0 — Umbrella Mode Detection
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Kiểm tra mảng `services` có tồn tại trong `project-context.yaml` không.
|
|
20
20
|
|
|
21
|
-
**
|
|
22
|
-
-
|
|
23
|
-
- **
|
|
24
|
-
- **Else (
|
|
25
|
-
- Step 1
|
|
26
|
-
- **
|
|
27
|
-
-
|
|
28
|
-
*(
|
|
29
|
-
- Else (umbrella
|
|
30
|
-
- **
|
|
21
|
+
**Nếu `services` tồn tại (umbrella mode):**
|
|
22
|
+
- Phân giải trace dir:
|
|
23
|
+
- **Nếu `setup.spec_source` được set (consolidated trace):** `all_trace_dirs = [ {spec_source}/.trace ]` — một vị trí authoritative **duy nhất** trong spec repo. Scenario mang service sở hữu qua field `@trace.service`, nên không cần tách theo service. Đây là trường hợp phổ biến.
|
|
24
|
+
- **Else (không có spec_source — legacy per-service trace):** một dir mỗi service — `services[N].trace_dir` nếu set, else `{services[N].path}/.trace`; `all_trace_dirs = [ dir1, dir2, … ]`, gắn tag tên service khi đọc.
|
|
25
|
+
- Step 1 đọc TSV từ `all_trace_dirs`.
|
|
26
|
+
- **Phân giải Living Docs home (vị trí report sinh ra):**
|
|
27
|
+
- Nếu `setup.spec_source` được set → `living_docs_dir = {spec_source}/.living-docs`
|
|
28
|
+
*(specs module dùng chung — mount trong mọi service/umbrella workspace, nên panel phân giải nó bất kể dev đứng ở submodule nào)*
|
|
29
|
+
- Else (umbrella không có spec repo riêng) → `living_docs_dir = .living-docs` ở umbrella root
|
|
30
|
+
- **Phân giải panel mirror:** `panel_mirror = ./.trace` ở **gốc workspace hiện tại** (nơi lệnh chạy). Panel VS Code đọc `.trace/trace-report.json` từ workspace đang mở — ghi report ở đây là cái làm view không rỗng khi dev mở một service submodule trực tiếp.
|
|
31
31
|
|
|
32
|
-
**
|
|
32
|
+
**Nếu không có key `services` (single-service mode):**
|
|
33
33
|
- Set `all_trace_dirs = [ {paths.trace_dir} ]`
|
|
34
|
-
-
|
|
34
|
+
- Không cần umbrella sync
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
|
-
### Step 1 —
|
|
38
|
+
### Step 1 — Nạp dữ liệu TSV
|
|
39
39
|
|
|
40
|
-
**Umbrella mode:**
|
|
40
|
+
**Umbrella mode:** đọc tất cả file `{trace_dir}/**/*.tsv` từ mọi dir trong `all_trace_dirs`. Với mỗi TSV, gắn tag row với tên service gốc.
|
|
41
41
|
|
|
42
|
-
**Single-service mode:**
|
|
42
|
+
**Single-service mode:** đọc tất cả file `{paths.trace_dir}/{domain}/**/*.tsv` khớp domain target (hoặc `{paths.trace_dir}/**/*.tsv` cho mọi domain nếu không có domain filter).
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Mỗi file cho trace state đã lưu của UC đó.
|
|
45
45
|
|
|
46
|
-
**
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
- **
|
|
46
|
+
**Nếu không tìm thấy file `.tsv` nào** trong bất kỳ trace dir nào:
|
|
47
|
+
- Quét tất cả file `{paths.specs_dir}/**/*.feature` trong domain target để dựng list in-memory mọi scenario.
|
|
48
|
+
- Coi mọi scenario là `UNTRACKED` (chưa sinh code).
|
|
49
|
+
- In: "⚠️ No trace files found. All {N} scenarios across {M} UCs are UNTRACKED."
|
|
50
|
+
- Đề xuất: "Run `/generate-bdd {prd-file}` to initialize trace state, or `/generate-code {feature-file}` to generate code."
|
|
51
|
+
- **Bỏ qua hoàn toàn Step 2–6.** Đi thẳng tới Step 7 dùng state in-memory này — ĐỪNG abort.
|
|
52
52
|
|
|
53
|
-
### Step 2 — Reconcile
|
|
53
|
+
### Step 2 — Reconcile với file `.feature` hiện tại
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
Với mỗi row `.tsv`, đọc file `.feature` tương ứng và lấy `@trace.sc_version` **hiện tại** cho SC đó.
|
|
56
|
+
Nếu version SC trong `.feature` khác `spec_ver` của `.tsv` → cập nhật `spec_ver` trong memory (sẽ ghi lại).
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Cũng phát hiện SC có trong `.feature` nhưng thiếu trong `.tsv` → thêm row mới với `status: UNTRACKED`.
|
|
59
59
|
|
|
60
|
-
### Step 3 —
|
|
60
|
+
### Step 3 — Tính `status` theo từng scenario
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
Áp dụng quy tắc theo thứ tự ưu tiên:
|
|
63
63
|
|
|
64
|
-
| Rule | Status |
|
|
64
|
+
| Rule | Status | Điều kiện |
|
|
65
65
|
|------|--------|-----------|
|
|
66
|
-
| 1 | `UNTRACKED` | `implemented_by == —` (
|
|
66
|
+
| 1 | `UNTRACKED` | `implemented_by == —` (chưa sinh code) |
|
|
67
67
|
| 2 | `GAP` | `implemented_by != —` AND (`test_count == —` OR `test_count == 0`) |
|
|
68
|
-
| 3 | `DRIFT` | `spec_ver != gen_ver` (scenario
|
|
69
|
-
| 4 | `OK` |
|
|
68
|
+
| 3 | `DRIFT` | `spec_ver != gen_ver` (scenario cập nhật từ lần codegen trước) |
|
|
69
|
+
| 4 | `OK` | tất cả: `spec_ver == gen_ver`, `implemented_by != —`, `test_count > 0` |
|
|
70
70
|
|
|
71
71
|
### Step 4 — PRD version drift check
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
-
|
|
75
|
-
- `prd_version`
|
|
76
|
-
- `@trace.prd_version`
|
|
73
|
+
Với mỗi UC, so:
|
|
74
|
+
- PRD `| **Version** |` hiện tại từ `{paths.specs_dir}/{domain}/{prd-slug}/prd.md`
|
|
75
|
+
- `prd_version` lưu trong `.tsv` (version tại thời điểm sinh BDD)
|
|
76
|
+
- `@trace.prd_version` trong các file code implement UC đó
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
Nếu layer nào sau version PRD hiện tại → gắn cờ `PRD_DRIFT` và trích các changelog entry kể từ version đó.
|
|
79
79
|
|
|
80
80
|
### Step 5 — Tech-doc revision drift check
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
Với mỗi UC có tech-doc, so revision đã lưu vs doc hiện tại — cho **cả hai** loại tech-doc:
|
|
83
83
|
|
|
84
|
-
- **BE contract:** `@trace.revision`
|
|
85
|
-
Code
|
|
86
|
-
- **FE tech-design:** `@trace.revision`
|
|
87
|
-
FE
|
|
84
|
+
- **BE contract:** `@trace.revision` trong `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md` vs `tech_doc_revision` trong `.tsv`.
|
|
85
|
+
Code sinh từ revision cũ hơn → gắn cờ `TECHDOC_DRIFT`.
|
|
86
|
+
- **FE tech-design:** `@trace.revision` trong `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design-{platform}.md` vs `fe_tech_doc_revision` trong `.tsv` (theo từng row platform).
|
|
87
|
+
Code FE sinh từ revision cũ hơn → gắn cờ `FE_TECHDOC_DRIFT`.
|
|
88
88
|
|
|
89
|
-
Skip
|
|
89
|
+
Skip loại nào không có doc / không có revision đã lưu (`—`).
|
|
90
90
|
|
|
91
|
-
### Step 6 —
|
|
91
|
+
### Step 6 — Ghi status lại vào TSV
|
|
92
92
|
|
|
93
|
-
*
|
|
93
|
+
*Bỏ qua step này nếu không có file TSV nào (đã xử lý bởi path no-TSV của Step 1).*
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
Với mỗi file `.tsv` đã xử lý: ghi `spec_ver`, `status`, `last_updated` đã cập nhật lại disk.
|
|
96
|
+
**Đừng** sửa `dev_selftest`/`dev_selftest_at` (do `/dev-run-test` sở hữu) hay `qc_status`/`qc_run_at`/`qc_owner`/`qc_blocked_by` (do `/qc-run-test` + `/report-bug` sở hữu); lệnh này chỉ đọc chúng cho report.
|
|
97
97
|
|
|
98
|
-
### Step 7 —
|
|
98
|
+
### Step 7 — Tính aggregate cho dashboard
|
|
99
99
|
|
|
100
100
|
```
|
|
101
101
|
total_prds = count distinct PRD files in {paths.specs_dir}/{domain}/*/prd.md
|
|
@@ -122,13 +122,13 @@ qc_not_run = rows where qc_status in (not_run, —)
|
|
|
122
122
|
# shown alongside — never merged with — dev_selftest.
|
|
123
123
|
waiting_dev = rows where qc_owner == dev # PM view: QC-found, waiting on dev to fix
|
|
124
124
|
waiting_po = rows where qc_owner == po # PM view: blocked, waiting on PO to confirm/clarify
|
|
125
|
-
# qc_owner + qc_blocked_by
|
|
125
|
+
# qc_owner + qc_blocked_by trả lời "case nào đang chờ ai" — surface as a "Waiting on" column.
|
|
126
126
|
tech_docs_count = count .md files in {paths.tech_docs_dir}/{domain}/*/tech-docs/
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
### Step 8 —
|
|
129
|
+
### Step 8 — Ghi JSON report
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
Ghi `{paths.trace_dir}/trace-report.json` (ghi đè nếu tồn tại). File này là source of truth duy nhất cho web dashboard — nó chứa snapshot đầy đủ tại thời điểm `/validate-traces` chạy lần cuối.
|
|
132
132
|
|
|
133
133
|
Schema:
|
|
134
134
|
|
|
@@ -258,45 +258,45 @@ Schema:
|
|
|
258
258
|
```
|
|
259
259
|
|
|
260
260
|
**Rules:**
|
|
261
|
-
- `implemented_by`:
|
|
262
|
-
- `test_count`:
|
|
263
|
-
- `test_classes`:
|
|
264
|
-
- `tech_doc_revision` / `fe_tech_doc_revision`:
|
|
265
|
-
- `code_coverage_pct` / `test_coverage_pct`:
|
|
266
|
-
-
|
|
267
|
-
- **TSV `"—"` mapping**:
|
|
268
|
-
- **Backward-compat:**
|
|
269
|
-
|
|
270
|
-
### Step 8b — Living Docs Sync *(umbrella mode
|
|
271
|
-
|
|
272
|
-
*
|
|
273
|
-
|
|
274
|
-
**
|
|
275
|
-
`{spec_source}/.trace/` (committed
|
|
276
|
-
|
|
277
|
-
(re)
|
|
278
|
-
|
|
279
|
-
1. **
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
2. **Mirror
|
|
285
|
-
|
|
286
|
-
`{living_docs_dir}/trace-report.json` (+
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
3. **
|
|
261
|
+
- `implemented_by`: dùng `null` (không phải `"—"`) trong JSON khi không có giá trị
|
|
262
|
+
- `test_count`: dùng integer `0` (không phải `"—"`) khi không có test
|
|
263
|
+
- `test_classes`: dùng `[]` (không phải `"—"`) khi không có test class
|
|
264
|
+
- `tech_doc_revision` / `fe_tech_doc_revision`: dùng integer; `0` nếu chưa sinh
|
|
265
|
+
- `code_coverage_pct` / `test_coverage_pct`: làm tròn về integer gần nhất (0–100)
|
|
266
|
+
- Luôn ghi vào `{paths.trace_dir}/trace-report.json` bất kể domain filter — nếu có domain filter, chỉ gồm các PRD đó trong `prds[]` nhưng ghi domain vào field `domain`
|
|
267
|
+
- **TSV `"—"` mapping**: khi đọc file TSV, map giá trị dash sang kiểu JSON: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`; `fe_tech_doc_revision: "—"` → `0`; `dev_selftest: "—"` → `"not_run"`; `dev_selftest_at: "—"` → `null`; `qc_status: "—"` → `"not_run"`; `qc_run_at: "—"` → `null`; `qc_owner: "—"` → `null`; `qc_blocked_by: "—"` → `null`
|
|
268
|
+
- **Backward-compat:** TSV cũ có thể thiếu cột mới hơn trong header — coi cột vắng nào là giá trị rỗng của nó (đừng báo lỗi): `qc_owner`/`qc_blocked_by` (pre-19-col) → `null`; `fe_tech_doc_revision` (pre-22-col) → `0`. Lần `/generate-bdd` gen lại tiếp theo nâng header lên layout 22 cột hiện tại.
|
|
269
|
+
|
|
270
|
+
### Step 8b — Living Docs Sync *(chỉ umbrella mode)*
|
|
271
|
+
|
|
272
|
+
*Bỏ qua step này ở single-service mode.*
|
|
273
|
+
|
|
274
|
+
**Với `spec_source` được set,** các trace TSV authoritative đã sống ở **một** chỗ —
|
|
275
|
+
`{spec_source}/.trace/` (committed trong spec repo). **Không có merge theo service**:
|
|
276
|
+
mỗi scenario row mang service sở hữu qua `@trace.service`. Step này chỉ
|
|
277
|
+
(re)generate report và làm mới panel local.
|
|
278
|
+
|
|
279
|
+
1. **Ghi report** vào `{living_docs_dir}/trace-report.json` (`mkdir -p` trước) — dựng
|
|
280
|
+
trực tiếp từ `{spec_source}/.trace/*.tsv`, với field `"service"` mỗi scenario row và
|
|
281
|
+
các summary aggregate. *(Umbrella legacy không-`spec_source` vẫn merge mọi `trace-report.json`
|
|
282
|
+
theo service thành một document, namespace theo service.)*
|
|
283
|
+
|
|
284
|
+
2. **Mirror tới panel location** `{panel_mirror}` (`./.trace` ở gốc workspace hiện tại)
|
|
285
|
+
để dev mở *repo này* thấy data ngay: copy
|
|
286
|
+
`{living_docs_dir}/trace-report.json` (+ các file `{UC-ID}.tsv`) → `{panel_mirror}/`.
|
|
287
|
+
Nếu `panel_mirror` đã phân giải về `{spec_source}/.trace`, skip.
|
|
288
|
+
|
|
289
|
+
3. **In sync summary:**
|
|
290
290
|
```
|
|
291
291
|
Living Docs → {living_docs_dir}/trace-report.json ({total} scenarios across {S} services)
|
|
292
292
|
Trace (authoritative) → {spec_source}/.trace/ (committed in spec repo)
|
|
293
293
|
Panel mirror → {panel_mirror}/trace-report.json (current workspace)
|
|
294
294
|
```
|
|
295
295
|
|
|
296
|
-
> **
|
|
297
|
-
> spec repo —
|
|
298
|
-
> (`./.trace`
|
|
299
|
-
>
|
|
296
|
+
> **Lưu ý:** trace state committed, authoritative là `{spec_source}/.trace/*.tsv` (trong
|
|
297
|
+
> spec repo — một chỗ cho PM). Report (`.living-docs/`) và panel mirror
|
|
298
|
+
> (`./.trace` ở workspace không phải spec repo) là **sinh ra** — gitignore chúng;
|
|
299
|
+
> chúng được regenerate bởi `/validate-traces` hoặc `/sync`.
|
|
300
300
|
|
|
301
301
|
## Output
|
|
302
302
|
|
|
@@ -321,28 +321,28 @@ each scenario row carries its owning service via `@trace.service`. This step jus
|
|
|
321
321
|
| {UC}-UC2 | SC1 | {title...} | v1.0 | v1.0 | ✅ {Controller.fn} | — | GAP |
|
|
322
322
|
|
|
323
323
|
Drift Detail:
|
|
324
|
-
{UC}-UC1-SC2 — spec v1.1
|
|
325
|
-
→
|
|
324
|
+
{UC}-UC1-SC2 — spec v1.1 nhưng code sinh từ v1.0
|
|
325
|
+
→ Chạy lại: /generate-code {UC-ID}
|
|
326
326
|
|
|
327
327
|
PRD Version Drift:
|
|
328
|
-
{UC}-UC2 — code
|
|
329
|
-
|
|
328
|
+
{UC}-UC2 — code ở PRD v1.0, PRD giờ ở v1.2
|
|
329
|
+
Thay đổi kể từ v1.0:
|
|
330
330
|
v1.1: {changelog entry}
|
|
331
331
|
v1.2: {changelog entry}
|
|
332
332
|
→ /generate-bdd {prd-file} then /generate-code {UC-ID}
|
|
333
333
|
|
|
334
334
|
Tech-Doc Revision Drift:
|
|
335
|
-
{UC}-UC3 — code
|
|
336
|
-
→ Review tech-doc
|
|
335
|
+
{UC}-UC3 — code sinh từ tech-doc revision 2, giờ ở revision 4
|
|
336
|
+
→ Review thay đổi tech-doc rồi /generate-code {UC-ID}
|
|
337
337
|
|
|
338
338
|
Recommendations:
|
|
339
|
-
- /generate-code {UC-ID}
|
|
340
|
-
- /dev-gen-test {UC-ID}
|
|
341
|
-
- /generate-bdd {prd-file}
|
|
339
|
+
- /generate-code {UC-ID} cho scenario DRIFT và UNTRACKED
|
|
340
|
+
- /dev-gen-test {UC-ID} cho GAP (thiếu test)
|
|
341
|
+
- /generate-bdd {prd-file} cho PRD version drift
|
|
342
342
|
|
|
343
|
-
[
|
|
343
|
+
[Chỉ umbrella mode]
|
|
344
344
|
Living Docs canonical → {living_docs_dir}/ (specs module — shared, gitignored)
|
|
345
345
|
Panel mirror → {panel_mirror}/trace-report.json (current workspace)
|
|
346
|
-
Tip:
|
|
347
|
-
|
|
346
|
+
Tip: chạy /validate-traces (hoặc /sync) sau mỗi phiên codegen để làm mới panel.
|
|
347
|
+
Cả hai là mirror sinh ra — đừng commit (.living-docs/ + .trace/ trong .gitignore).
|
|
348
348
|
```
|
package/core/FRAMEWORK_VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.14.
|
|
1
|
+
0.14.1
|