@educa-corp/sdd-framework 0.5.0 → 0.7.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/build.js +113 -19
- package/bin/gate-trace.js +487 -0
- package/bin/index.js +445 -146
- package/bin/lint-trace.js +643 -0
- package/bin/self-check.js +804 -2
- package/bin/trace-schema.json +621 -10
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/README.md +20 -0
- package/core/commands/amend-prd.md +518 -0
- package/core/commands/debug.md +123 -511
- package/core/commands/define-product.md +86 -510
- package/core/commands/dev-gen-test.md +86 -510
- package/core/commands/dev-run-test.md +133 -519
- package/core/commands/dev-smoke-test.md +86 -510
- package/core/commands/extend-prd.md +128 -522
- package/core/commands/fix-bug.md +118 -509
- package/core/commands/generate-architecture.md +94 -515
- package/core/commands/generate-bdd.md +128 -513
- package/core/commands/generate-code.md +119 -510
- package/core/commands/generate-design-spec.md +86 -510
- package/core/commands/generate-prd.md +89 -510
- package/core/commands/generate-spec-manifest.md +86 -510
- package/core/commands/generate-tech-docs.md +120 -512
- package/core/commands/learn.md +172 -496
- package/core/commands/map-testids.md +86 -510
- package/core/commands/propose-scenario.md +86 -510
- package/core/commands/qc-analyze.md +86 -510
- package/core/commands/qc-design-test.md +86 -510
- package/core/commands/qc-plan.md +86 -510
- package/core/commands/qc-report.md +86 -510
- package/core/commands/qc-review.md +86 -510
- package/core/commands/qc-run-test.md +115 -513
- package/core/commands/refine-prd.md +112 -522
- package/core/commands/report-bug.md +86 -510
- package/core/commands/review-code.md +123 -511
- package/core/commands/review-context.md +136 -522
- package/core/commands/review-tech-docs.md +90 -511
- package/core/commands/setup-ai-first.md +166 -138
- package/core/commands/sync.md +155 -107
- package/core/commands/update-framework.md +16 -103
- package/core/commands/validate-traces.md +426 -511
- package/core/hooks/data-guard.js +174 -83
- package/core/hooks/settings.json +2 -1
- package/core/rules/workflow.md +64 -4
- package/core/steps/capture-lesson.md +34 -1
- package/core/steps/context-loader.md +50 -8
- package/core/steps/gate.md +92 -35
- package/core/steps/report-footer.md +23 -0
- package/core/templates/README.md +24 -1
- package/core/templates/ci/trace-gate.yml +146 -0
- package/core/templates/feature.template +1 -1
- package/core/templates/hooks/pre-push +61 -0
- package/docs/02-concepts/architecture.md +61 -6
- package/docs/02-concepts/traceability.md +57 -0
- package/docs/03-guides/architect.md +63 -0
- package/docs/04-reference/commands.md +148 -134
- package/docs/04-reference/model-selection.md +32 -19
- package/docs/04-reference/trace-schema.md +39 -0
- package/docs/explain/02b-extend-prd.md +1 -1
- package/docs/explain/02c-amend-prd.md +152 -0
- package/docs/explain/21-validate-traces.md +2 -1
- package/docs/explain/27-learn.md +5 -3
- package/docs/explain/28-sync.md +25 -0
- package/docs/explain/README.md +136 -135
- package/package.json +5 -9
- package/commands/debug.md +0 -917
- package/commands/debug.tmpl +0 -257
- package/commands/define-product.md +0 -862
- package/commands/define-product.tmpl +0 -225
- package/commands/dev-gen-test.md +0 -1124
- package/commands/dev-gen-test.tmpl +0 -490
- package/commands/dev-run-test.md +0 -859
- package/commands/dev-run-test.tmpl +0 -225
- package/commands/dev-smoke-test.md +0 -798
- package/commands/dev-smoke-test.tmpl +0 -217
- package/commands/extend-prd.md +0 -907
- package/commands/extend-prd.tmpl +0 -270
- package/commands/fix-bug.md +0 -910
- package/commands/fix-bug.tmpl +0 -197
- package/commands/generate-architecture.md +0 -775
- package/commands/generate-architecture.tmpl +0 -194
- package/commands/generate-bdd.md +0 -1347
- package/commands/generate-bdd.tmpl +0 -590
- package/commands/generate-code.md +0 -1283
- package/commands/generate-code.tmpl +0 -649
- package/commands/generate-design-spec.md +0 -1161
- package/commands/generate-design-spec.tmpl +0 -524
- package/commands/generate-prd.md +0 -1143
- package/commands/generate-prd.tmpl +0 -223
- package/commands/generate-spec-manifest.md +0 -745
- package/commands/generate-spec-manifest.tmpl +0 -164
- package/commands/generate-tech-docs.md +0 -1344
- package/commands/generate-tech-docs.tmpl +0 -273
- package/commands/learn.md +0 -723
- package/commands/learn.tmpl +0 -63
- package/commands/map-testids.md +0 -662
- package/commands/map-testids.tmpl +0 -81
- package/commands/propose-scenario.md +0 -783
- package/commands/propose-scenario.tmpl +0 -202
- package/commands/qc-analyze.md +0 -693
- package/commands/qc-analyze.tmpl +0 -112
- package/commands/qc-design-test.md +0 -650
- package/commands/qc-design-test.tmpl +0 -69
- package/commands/qc-plan.md +0 -630
- package/commands/qc-plan.tmpl +0 -49
- package/commands/qc-report.md +0 -641
- package/commands/qc-report.tmpl +0 -60
- package/commands/qc-review.md +0 -634
- package/commands/qc-review.tmpl +0 -53
- package/commands/qc-run-test.md +0 -750
- package/commands/qc-run-test.tmpl +0 -116
- package/commands/refine-prd.md +0 -1074
- package/commands/refine-prd.tmpl +0 -278
- package/commands/report-bug.md +0 -729
- package/commands/report-bug.tmpl +0 -148
- package/commands/review-code.md +0 -803
- package/commands/review-code.tmpl +0 -143
- package/commands/review-context.md +0 -1323
- package/commands/review-context.tmpl +0 -527
- package/commands/review-tech-docs.md +0 -982
- package/commands/review-tech-docs.tmpl +0 -401
- package/commands/setup-ai-first.md +0 -574
- package/commands/setup-ai-first.tmpl +0 -378
- package/commands/sync.md +0 -486
- package/commands/sync.tmpl +0 -384
- package/commands/update-framework.md +0 -290
- package/commands/update-framework.tmpl +0 -188
- package/commands/validate-traces.md +0 -1435
- package/commands/validate-traces.tmpl +0 -854
- package/hooks/data-guard.js +0 -141
- package/hooks/settings.json +0 -18
- package/modules/android-compose/module.yaml +0 -13
- package/modules/android-compose/stack-profile.yaml +0 -57
- package/modules/angular/architecture-snippets/component-patterns.md +0 -187
- package/modules/angular/module.yaml +0 -6
- package/modules/angular/stack-profile.yaml +0 -38
- package/modules/context-engineering/architecture-snippets/context-design.md +0 -119
- package/modules/context-engineering/module.yaml +0 -9
- package/modules/context-engineering/stack-profile.yaml +0 -61
- package/modules/dotnet/architecture-snippets/clean-arch.md +0 -160
- package/modules/dotnet/module.yaml +0 -6
- package/modules/dotnet/stack-profile.yaml +0 -50
- package/modules/flutter/module.yaml +0 -14
- package/modules/flutter/stack-profile.yaml +0 -59
- package/modules/golang/architecture-snippets/domain-layout.md +0 -283
- package/modules/golang/module.yaml +0 -6
- package/modules/golang/stack-profile.yaml +0 -40
- package/modules/ios-swiftui/module.yaml +0 -13
- package/modules/ios-swiftui/stack-profile.yaml +0 -55
- package/modules/java-spring/architecture-snippets/layered-arch.md +0 -201
- package/modules/java-spring/module.yaml +0 -15
- package/modules/java-spring/stack-profile.yaml +0 -28
- package/modules/nextjs/architecture-snippets/app-router-patterns.md +0 -269
- package/modules/nextjs/module.yaml +0 -14
- package/modules/nextjs/stack-profile.yaml +0 -74
- package/modules/nuxt/module.yaml +0 -14
- package/modules/nuxt/stack-profile.yaml +0 -58
- package/modules/phaser-game/architecture-snippets/phaser-scene-patterns.md +0 -646
- package/modules/phaser-game/module.yaml +0 -15
- package/modules/phaser-game/stack-profile.yaml +0 -90
- package/modules/php-laravel/architecture-snippets/service-repository.md +0 -302
- package/modules/php-laravel/module.yaml +0 -15
- package/modules/php-laravel/stack-profile.yaml +0 -56
- package/modules/qc-playwright/stack-profile.yaml +0 -66
- package/modules/react/architecture-snippets/hooks-query-patterns.md +0 -254
- package/modules/react/module.yaml +0 -14
- package/modules/react/stack-profile.yaml +0 -63
- package/modules/react-native/module.yaml +0 -14
- package/modules/react-native/stack-profile.yaml +0 -56
- package/modules/vue/module.yaml +0 -14
- package/modules/vue/stack-profile.yaml +0 -65
- package/rules/data-protection.md +0 -80
- package/rules/workflow.md +0 -73
- package/scripts/init.sh +0 -49
- package/scripts/upgrade.sh +0 -94
- package/skills/code/SKILL.md +0 -19
- package/skills/code/SKILL.tmpl +0 -19
- package/skills/debug/SKILL.md +0 -19
- package/skills/debug/SKILL.tmpl +0 -19
- package/skills/design-spec/SKILL.md +0 -11
- package/skills/design-spec/SKILL.tmpl +0 -11
- package/skills/discovery/SKILL.md +0 -14
- package/skills/discovery/SKILL.tmpl +0 -14
- package/skills/prd/SKILL.md +0 -19
- package/skills/prd/SKILL.tmpl +0 -19
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
- package/skills/qc/qa-analyst/acceptance-criteria.md +0 -60
- package/skills/qc/qa-analyst/business-rules.md +0 -59
- package/skills/qc/qa-analyst/data-flow.md +0 -64
- package/skills/qc/qa-analyst/spec-breakdown.md +0 -61
- package/skills/qc/qa-designer/e2e/journey.md +0 -41
- package/skills/qc/qa-designer/exploratory/charter.md +0 -68
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +0 -43
- package/skills/qc/qa-designer/functional/api.md +0 -45
- package/skills/qc/qa-designer/functional/gui-feature.md +0 -46
- package/skills/qc/qa-designer/functional/gui-screen.md +0 -52
- package/skills/qc/qa-designer/integration/api.md +0 -42
- package/skills/qc/qa-designer/integration/db.md +0 -39
- package/skills/qc/qa-designer/integration/gui.md +0 -40
- package/skills/qc/qa-designer/integration/kafka.md +0 -40
- package/skills/qc/qa-designer/non-functional.md +0 -40
- package/skills/qc/qa-planner/test-plan.md +0 -120
- package/skills/qc/qa-reviewer/script/e2e.md +0 -87
- package/skills/qc/qa-reviewer/script/exploratory.md +0 -45
- package/skills/qc/qa-reviewer/script/functional.md +0 -101
- package/skills/qc/qa-reviewer/script/integration.md +0 -91
- package/skills/qc/qa-reviewer/script/non-functional.md +0 -126
- package/skills/qc/qa-reviewer/test-case/e2e.md +0 -73
- package/skills/qc/qa-reviewer/test-case/exploratory.md +0 -43
- package/skills/qc/qa-reviewer/test-case/functional.md +0 -76
- package/skills/qc/qa-reviewer/test-case/integration.md +0 -69
- package/skills/qc/qa-reviewer/test-case/non-functional.md +0 -73
- package/skills/qc/qa-runner/e2e.md +0 -49
- package/skills/qc/qa-runner/exploratory/session.md +0 -36
- package/skills/qc/qa-runner/functional/api.md +0 -35
- package/skills/qc/qa-runner/functional/gui-feature.md +0 -51
- package/skills/qc/qa-runner/functional/gui-screen.md +0 -55
- package/skills/qc/qa-runner/integration.md +0 -47
- package/skills/qc/qa-runner/non-functional.md +0 -49
- package/skills/qc/qa-runner/report/report.md +0 -37
- package/skills/setup-ai-first/SKILL.md +0 -19
- package/skills/setup-ai-first/SKILL.tmpl +0 -19
- package/skills/spec/SKILL.md +0 -19
- package/skills/spec/SKILL.tmpl +0 -19
- package/skills/test/SKILL.md +0 -18
- package/skills/test/SKILL.tmpl +0 -18
- package/steps/business-language.md +0 -56
- package/steps/capture-lesson.md +0 -79
- package/steps/context-loader.md +0 -385
- package/steps/gate.md +0 -94
- package/steps/report-footer.md +0 -102
- package/steps/review-fanout.md +0 -159
- package/steps/spawn-agent.md +0 -129
- package/steps/trace-mirror.md +0 -53
- package/templates/README.md +0 -47
- package/templates/architecture.template.md +0 -394
- package/templates/design-spec.template.md +0 -217
- package/templates/feature.template +0 -123
- package/templates/platform-guide.template.md +0 -145
- package/templates/prd.template.md +0 -283
- package/templates/product-definition.template.md +0 -188
- package/templates/project-context.yaml +0 -212
- package/templates/tech-design.template.md +0 -490
package/core/commands/sync.md
CHANGED
|
@@ -180,6 +180,90 @@ Nếu người đọc là PO/Dev, thêm một dòng nudge:
|
|
|
180
180
|
|
|
181
181
|
---
|
|
182
182
|
|
|
183
|
+
## Step 1e — Spec delta: **tài liệu nào vừa đổi** *(hai mốc, hai câu hỏi khác nhau)*
|
|
184
|
+
|
|
185
|
+
*Câu hỏi số MỘT của dev sau mỗi lần sync là "tài liệu của phần tôi đang làm có đổi không?". Step này trả lời nó. Range `{old_sha}..{new_sha}` đã thu ở Step 1c — không phát sinh fetch.*
|
|
186
|
+
|
|
187
|
+
> **Vì sao step này tồn tại (GAPS-v4 G56).** Bản cũ diff **đúng ba** đường dẫn ở Step 1d —
|
|
188
|
+
> `feedback/bug-reports/`, `feedback/bdd-proposals/`, `feedback/prd-change-requests/` — và
|
|
189
|
+
> `specs/` **không có trong danh sách**. Tức `/sync` hỏi *"có góp ý gì mới không"* (đúng và hữu ích)
|
|
190
|
+
> rồi bỏ qua **chính tài liệu mà mọi lệnh downstream đọc**: PRD · BDD · tech-doc · design-spec.
|
|
191
|
+
>
|
|
192
|
+
> Nó **đang cầm sẵn câu trả lời**: Step 1c vừa thu cả hai đầu SHA, và Step 1d đã chạy một `git diff`.
|
|
193
|
+
> Thêm `specs/` là thêm **một tham số đường dẫn**.
|
|
194
|
+
>
|
|
195
|
+
> Thay vào đó, dòng `Next` in cứng `/validate-traces (full coverage check)` — **y hệt nhau** dù 0 file
|
|
196
|
+
> đổi hay 12 file đổi. Một lời nhắc không bao giờ thay đổi thì **không mang thông tin**, nên bị lướt.
|
|
197
|
+
> Đây đúng lập luận `gate.md` Bước 3b dùng để cắt CHECKPOINT xuống hai dòng khi mọi thứ sạch —
|
|
198
|
+
> *"cổng luôn in ra một bảng giống hệt nhau … nên `Y` thành phản xạ và cổng hỏng âm thầm"*. Nguyên
|
|
199
|
+
> tắc đó đã áp cho `gate`; đây là chỗ nó còn thiếu.
|
|
200
|
+
>
|
|
201
|
+
> Và tệ hơn: lệnh duy nhất được gợi ý là lệnh **đắt nhất** (quét cả repo). Nên con đường duy nhất
|
|
202
|
+
> được chỉ là con đường người ta sẽ không đi. Step này làm nó **có scope**.
|
|
203
|
+
>
|
|
204
|
+
> **Đây KHÔNG phải một detector bị hỏng** — mọi detector đều hoạt động đúng. Đây là một **công tắc
|
|
205
|
+
> bị thiếu**: không ai biết là cần bật.
|
|
206
|
+
|
|
207
|
+
Bỏ qua **im lặng** nếu `{paths.specs_dir}` không tồn tại trong REPO (chọn REPO + range theo đúng quy tắc Step 1d).
|
|
208
|
+
|
|
209
|
+
### 1e-A — Đổi gì kể từ lần **PULL** trước
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
git -C {REPO} diff --name-status {old_sha}..{new_sha} -- specs/
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Nhóm kết quả theo **feature-package** (`specs/{domain}/{prd-slug}/`), và với mỗi file đổi, đọc **nhãn version ở hai đầu** — thứ dev cần không phải tên file mà là *nhãn đã nhảy chưa*:
|
|
216
|
+
|
|
217
|
+
| Loại file | Nhãn đọc ở đâu | Bản cũ đọc bằng |
|
|
218
|
+
|---|---|---|
|
|
219
|
+
| PRD (`.md` ở gốc package) | Metadata `\| **Version** \|` + row `# Change Log` đầu bảng | `git -C {REPO} show {old_sha}:{path}` |
|
|
220
|
+
| `.feature` | `# @trace.bdd_version` | như trên |
|
|
221
|
+
| `tech-docs/*-tech-design.md` | `@trace.revision` | như trên |
|
|
222
|
+
| `design-spec/*.md` | `\| **Version** \|` | như trên |
|
|
223
|
+
|
|
224
|
+
**Cap có công bố:** > **20** file đổi → **bỏ** phần đọc nhãn (mỗi file là một `git show`), chỉ liệt kê package + số file, và **in rõ là đã cap**:
|
|
225
|
+
`ⓘ {n} file đổi (> 20) — bỏ phần so nhãn version để không làm chậm sync. Chạy /validate-traces để có bản đầy đủ.`
|
|
226
|
+
*(Luật framework: cap thì phải nói ra. Một giới hạn im lặng đọc như "đã phủ hết" trong khi không phải.)*
|
|
227
|
+
|
|
228
|
+
### 1e-B — Đổi gì kể từ lần **AUDIT** gần nhất ⭐
|
|
229
|
+
|
|
230
|
+
*Đây là phần 1e-A **không** trả lời được, và là câu hỏi đúng hơn.*
|
|
231
|
+
|
|
232
|
+
Diff `{old_sha}..{new_sha}` **reset mỗi lần pull**. Pull thứ Hai, thứ Ba, thứ Tư mà không audit lần nào → đến thứ Năm cái thấy được chỉ là delta của **một ngày**, không phải nợ đã tích.
|
|
233
|
+
|
|
234
|
+
Đọc mốc **`spec_baseline`** trong `{living_docs_dir}/trace-report.json` — khối do `/validate-traces` Step 6b ghi (contract: `bin/trace-schema.json` → `spec_edit_detection`). Mỗi entry: `prd_path` · `sha_at_audit` · `version_at_audit`.
|
|
235
|
+
|
|
236
|
+
*Phân giải `living_docs_dir` bằng đúng quy tắc một dòng của Step 5: `{spec_source}/.living-docs` nếu `setup.spec_source` được set, else `.living-docs` ở gốc.*
|
|
237
|
+
|
|
238
|
+
Với mỗi PRD có entry: so `Version` **hiện tại** với `version_at_audit`.
|
|
239
|
+
|
|
240
|
+
| Điều kiện | In gì |
|
|
241
|
+
|---|---|
|
|
242
|
+
| Khác nhau | PRD này đã đổi kể từ lần audit — vào danh sách ⚠️ |
|
|
243
|
+
| Bằng nhau | Bỏ qua *(và `/validate-traces` Step 3.9 sẽ lo ca "nội dung đổi mà nhãn không đổi" — không phải việc của step này)* |
|
|
244
|
+
| Không có `trace-report.json`, hoặc khối `spec_baseline` vắng | In `ⓘ Chưa có mốc audit — chạy /validate-traces một lần để Step 1e-B có hiệu lực từ lần sau.` rồi bỏ qua |
|
|
245
|
+
|
|
246
|
+
**KHÔNG ghi gì cả.** Step này chỉ **đọc** mốc; chủ sở hữu của `spec_baseline` là `/validate-traces` Step 6b. `/sync` ghi mốc sẽ làm mốc audit trượt theo mỗi lần pull — tức phá đúng thứ nó đang dùng.
|
|
247
|
+
|
|
248
|
+
### Xuất
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
📄 Spec đã đổi (pulled this sync):
|
|
252
|
+
payment/create-invoice PRD v1.2 → v1.4
|
|
253
|
+
changelog: UC2: sửa BR5; UC7 mới
|
|
254
|
+
bdd/web/PAY01-UC2.feature (bdd_version 1.3 → 1.4)
|
|
255
|
+
user/create-account tech-docs/USR01-tech-design.md (revision 3 → 4)
|
|
256
|
+
(hoặc: 📄 Spec: không đổi trong lần pull này)
|
|
257
|
+
|
|
258
|
+
⚠️ 3 PRD đã đổi kể từ lần /validate-traces gần nhất (KHÔNG chỉ lần pull này):
|
|
259
|
+
payment/create-invoice audit tại v1.2 · giờ v1.4
|
|
260
|
+
user/create-account audit tại v2.0 · giờ v2.1
|
|
261
|
+
order/bulk-export audit tại v1.0 · giờ v1.3
|
|
262
|
+
→ /validate-traces {các PRD trên}
|
|
263
|
+
(hoặc: ✅ Mọi PRD đã được audit ở version hiện tại)
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
183
267
|
## Step 2 — Post-sync State Check
|
|
184
268
|
|
|
185
269
|
Chạy `git status --short` và kiểm tra entry submodule bị modified (dòng bắt đầu bằng ` M` mà path khớp một submodule).
|
|
@@ -259,9 +343,13 @@ Với mỗi entry trong danh sách đó:
|
|
|
259
343
|
|
|
260
344
|
---
|
|
261
345
|
|
|
262
|
-
## Step 4 — Check
|
|
346
|
+
## Step 4 — Check luật git cho sổ trace
|
|
263
347
|
|
|
264
|
-
*
|
|
348
|
+
*Step 4a/4b kiểm **có được commit hay không** (hai chiều ngược nhau — nhầm chiều là mất dữ liệu).
|
|
349
|
+
Step 4c kiểm **merge thế nào khi hai người cùng ghi**. Cả hai đều là đường mất sổ, và 4c không
|
|
350
|
+
cần ai làm sai gì cả — chỉ cần hai người làm việc cùng lúc.*
|
|
351
|
+
|
|
352
|
+
*Đọc bảng trước:*
|
|
265
353
|
|
|
266
354
|
| Đường dẫn | Vai trò | Kỳ vọng |
|
|
267
355
|
|---|---|---|
|
|
@@ -293,6 +381,45 @@ Phân giải `{paths.trace_dir}`; nếu nó nằm trong một git repo, chạy `
|
|
|
293
381
|
```
|
|
294
382
|
> **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.
|
|
295
383
|
|
|
384
|
+
**4c. Luật merge cho sổ trace.**
|
|
385
|
+
|
|
386
|
+
Sổ trace **phải commit** (4b) và **được nhiều người ghi trên nhiều nhánh song song**. Git cần biết
|
|
387
|
+
merge nó thế nào — mặc định thì không biết, và mặc định là đường mất row.
|
|
388
|
+
|
|
389
|
+
Kiểm `{paths.trace_dir}/.gitattributes` có tồn tại và có đủ hai dòng dưới. **Thiếu → tạo/bổ sung
|
|
390
|
+
ngay** (đây là hành động ghi duy nhất của Step 4; nó chỉ thêm file luật, không đụng dữ liệu):
|
|
391
|
+
|
|
392
|
+
```gitattributes
|
|
393
|
+
# Sổ trace — dữ liệu KHÔNG regenerate được. Hai luật, hai lý do khác nhau:
|
|
394
|
+
#
|
|
395
|
+
# merge=union — giữ row của CẢ HAI nhánh thay vì bắt người chọn một bên. Trùng sc_id sau
|
|
396
|
+
# union là ca ĐÚNG VÀ ĐƯỢC MONG ĐỢI: `--lint-trace` T4 bắt nó, rồi /validate-traces
|
|
397
|
+
# reconcile về một row. Mất row thì KHÔNG có gì bắt được. Đánh đổi có chủ ý — đừng "dọn".
|
|
398
|
+
# (union là driver built-in của git: không ai cần chạy git config gì thêm.)
|
|
399
|
+
#
|
|
400
|
+
# text eol=lf — BẮT BUỘC đi kèm union, không phải cho đẹp. Thiếu nó: một máy ghi CRLF →
|
|
401
|
+
# git thấy MỌI dòng đã đổi → union giữ cả hai bản → NHÂN ĐÔI CẢ FILE, gồm cả dòng header.
|
|
402
|
+
# Team mixed Windows/macOS gặp ca này mà không ai làm gì sai.
|
|
403
|
+
*.tsv text eol=lf merge=union
|
|
404
|
+
*.jsonl text eol=lf merge=union
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
> **Vì sao đặt `.gitattributes` BÊN TRONG `{paths.trace_dir}` thay vì gốc repo:** `trace_dir` là
|
|
408
|
+
> đường dẫn **cấu hình được** (`.trace/`, `../.trace`, `{spec_source}/.trace/`), nên một luật ở gốc
|
|
409
|
+
> repo phải nhắc lại đúng đường dẫn đó và sẽ lệch ngay khi ai đổi config. Đặt trong thư mục thì
|
|
410
|
+
> pattern là `*.tsv` thuần — không phụ thuộc `trace_dir` tên gì, nằm ở đâu, và **đi theo sổ** khi
|
|
411
|
+
> spec repo được mount vào một umbrella khác. Git đọc `.gitattributes` ở mọi cấp thư mục.
|
|
412
|
+
|
|
413
|
+
> **KHÔNG thêm `*.json`.** `trace-report.json` có thể nằm cùng thư mục và union trên JSON tạo ra
|
|
414
|
+
> **JSON không hợp lệ** — panel VS Code parse lỗi. Nó là file **sinh lại được**: conflict ở đó thì
|
|
415
|
+
> chạy lại `/validate-traces`, đừng merge tay.
|
|
416
|
+
|
|
417
|
+
In vào report:
|
|
418
|
+
```
|
|
419
|
+
✅ {paths.trace_dir}/.gitattributes (merge=union + eol=lf)
|
|
420
|
+
(hoặc: ✅ vừa tạo — sổ trace giờ merge được khi hai người cùng ghi)
|
|
421
|
+
```
|
|
422
|
+
|
|
296
423
|
---
|
|
297
424
|
|
|
298
425
|
## Step 5 — Refresh Living Docs *(chỉ umbrella mode)*
|
|
@@ -333,109 +460,8 @@ Nếu `spec-manifest.yaml` tồn tại HOẶC `setup.spec_source` được cấu
|
|
|
333
460
|
|
|
334
461
|
## Output
|
|
335
462
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
Mọi report của lệnh phải kết thúc bằng section footer chuẩn này.
|
|
339
|
-
|
|
340
|
-
## Status Badge
|
|
341
|
-
|
|
342
|
-
Chọn một theo kết quả:
|
|
343
|
-
- `✅ Complete` — mọi bước thành công, không có vấn đề
|
|
344
|
-
- `❌ Failed` — lệnh không hoàn thành được do lỗi chặn
|
|
345
|
-
- `⚠️ Warnings` — hoàn thành nhưng có vấn đề không chặn, nên review lại
|
|
346
|
-
|
|
347
|
-
## Output Artifacts
|
|
348
|
-
|
|
349
|
-
Liệt kê mọi file được tạo hoặc sửa bởi lệnh này:
|
|
350
|
-
```
|
|
351
|
-
Output Artifacts:
|
|
352
|
-
{created|updated} {file-path} ({mô tả ngắn})
|
|
353
|
-
{created|updated} {file-path} ({mô tả ngắn})
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
Nếu không ghi file nào (vd: lệnh review hoặc phân tích) → ghi `Output Artifacts: none (read-only)`.
|
|
357
|
-
|
|
358
|
-
## Pipeline Position
|
|
359
|
-
|
|
360
|
-
In một sơ đồ pipeline một dòng, đánh dấu phase của lệnh HIỆN TẠI bằng `◀ bạn ở đây`,
|
|
361
|
-
để người dùng luôn thấy lệnh này nằm ở đâu trong luồng end-to-end:
|
|
362
|
-
|
|
363
|
-
```
|
|
364
|
-
Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **phase của nó** trong sơ đồ trên:
|
|
368
|
-
|
|
369
|
-
| Phase | Commands |
|
|
370
|
-
|-------|----------|
|
|
371
|
-
| Discovery | `/define-product` |
|
|
372
|
-
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
373
|
-
| Design Spec | `/generate-design-spec` |
|
|
374
|
-
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
375
|
-
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
376
|
-
| Code | `/generate-code` · `/review-code` |
|
|
377
|
-
| Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
|
|
378
|
-
| QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
|
|
379
|
-
| Trace Audit | `/validate-traces` |
|
|
380
|
-
|
|
381
|
-
Với **lệnh review**, thêm vòng review 3 bước và đánh dấu bước hiện tại, vd:
|
|
382
|
-
`Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
|
|
383
|
-
|
|
384
|
-
**Lệnh xuyên suốt** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
|
|
385
|
-
`/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) nằm ngoài pipeline tuyến tính —
|
|
386
|
-
**bỏ hẳn dòng Pipeline** cho các lệnh này (đừng cố nhét chúng vào sơ đồ).
|
|
387
|
-
|
|
388
|
-
## Gợi ý lệnh tiếp theo
|
|
389
|
-
|
|
390
|
-
Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
391
|
-
|
|
392
|
-
| Lệnh hiện tại | Gợi ý lệnh tiếp theo |
|
|
393
|
-
|-------------------------|-----------------------------------------------|
|
|
394
|
-
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
395
|
-
| /define-product | `/generate-prd {product-definition-file}` |
|
|
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}` |
|
|
398
|
-
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
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) |
|
|
400
|
-
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
401
|
-
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
402
|
-
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
403
|
-
| /qc-analyze | `/qc-plan {UC-ID}` (xử lý các gap blocker 🔴 trước) |
|
|
404
|
-
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
405
|
-
| /qc-design-test | `/qc-review {UC-ID}` (review test-case) |
|
|
406
|
-
| /qc-review (test-case) | `/qc-run-test {UC-ID}` nếu APPROVED; sửa TC nếu NEEDS_FIX |
|
|
407
|
-
| /qc-run-test | `/qc-report {UC-ID}` rồi `/qc-review {UC-ID}` (review script) |
|
|
408
|
-
| /qc-review (script) | `/qc-report {UC-ID}` rồi tạo PR nếu APPROVED |
|
|
409
|
-
| /qc-report | `/validate-traces {UC-ID}` để làm mới Living Docs (qc_status) |
|
|
410
|
-
| /map-testids | `/qc-design-test {UC-ID}` (QC dựng Page Object từ contract §4.5.6 vừa ghi) |
|
|
411
|
-
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
412
|
-
| /review-tech-docs | `/generate-code {feature-file}` nếu APPROVED; sửa doc nếu NEEDS_FIX |
|
|
413
|
-
| /generate-code | Lần gen đầu → `/review-code {UC-ID}`; gen lại → `/dev-gen-test {UC-ID}` |
|
|
414
|
-
| /dev-gen-test | `/dev-run-test {UC-ID}` |
|
|
415
|
-
| /dev-run-test (passing) | `/review-code {UC-ID}` |
|
|
416
|
-
| /dev-run-test (failing) | `/fix-bug {ticket-id}` hoặc `/debug {error}` |
|
|
417
|
-
| /review-code | `/dev-smoke-test {UC-ID}` hoặc tạo PR |
|
|
418
|
-
| /dev-smoke-test | Tạo PR và link tới ticket |
|
|
419
|
-
| /validate-traces | **Cờ 🔴 trước (chặn PR):** SEAM_UNWIRED → nối binding sang class thật, xoá/thay stub · STUB_UNRESOLVED → `/generate-code {owner_uc}` (lấp logic tại chỗ + xoá hàm song song) · ORPHANED/TRACE_ORPHAN → quyết định thủ công (xoá code+test, đưa scenario trở lại `.feature`, hoặc sửa `sc_id` của tag). **Rồi:** DRIFT/UNTRACKED → `/generate-code {UC-ID}` · BDD_DRIFT → `/generate-code {feature-file}` · tech-doc lỗi thời vs BDD → `/generate-tech-docs` → `/review-tech-docs` · PRD drift → `/generate-bdd {prd-file}` · GAP → `/dev-gen-test {UC-ID}`. **Chỉ tạo PR khi mọi cờ 🔴 = 0** |
|
|
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 |
|
|
421
|
-
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
422
|
-
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
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` |
|
|
424
|
-
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
425
|
-
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
426
|
-
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
427
|
-
|
|
428
|
-
Định dạng footer như sau:
|
|
429
|
-
```
|
|
430
|
-
---
|
|
431
|
-
Status : {badge}
|
|
432
|
-
{khối Output Artifacts}
|
|
433
|
-
Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
434
|
-
(lệnh review) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
|
|
435
|
-
Next : {lệnh gợi ý kèm ví dụ tham số}
|
|
436
|
-
```
|
|
437
|
-
*(Bỏ dòng `Pipeline` cho các lệnh xuyên suốt liệt kê ở trên.)*
|
|
438
|
-
|
|
463
|
+
**Đọc `.agent/steps/report-footer.md`** và áp đúng khuôn footer trong đó (Status Badge ·
|
|
464
|
+
Output Artifacts · Next) cho report cuối, kèm khối bên dưới.
|
|
439
465
|
|
|
440
466
|
```
|
|
441
467
|
/sync — {Setup | Update}
|
|
@@ -454,6 +480,22 @@ Umbrella state
|
|
|
454
480
|
⚠️ Pointer changed: git add {spec_source} && git commit -m "chore: sync specs"
|
|
455
481
|
(or: ✅ Clean — no commit needed)
|
|
456
482
|
|
|
483
|
+
Spec đã đổi (pulled this sync) ← Step 1e-A
|
|
484
|
+
📄 payment/create-invoice PRD v1.2 → v1.4
|
|
485
|
+
changelog: UC2: sửa BR5; UC7 mới
|
|
486
|
+
bdd/web/PAY01-UC2.feature (bdd_version 1.3 → 1.4)
|
|
487
|
+
user/create-account tech-docs/USR01-tech-design.md (revision 3 → 4)
|
|
488
|
+
(hoặc: 📄 Spec: không đổi trong lần pull này)
|
|
489
|
+
(hoặc: ⓘ 34 file đổi (> 20) — đã bỏ phần so nhãn version cho nhanh)
|
|
490
|
+
|
|
491
|
+
Nợ audit đã tích (KHÔNG chỉ lần pull này) ← Step 1e-B
|
|
492
|
+
⚠️ 3 PRD đã đổi kể từ lần /validate-traces gần nhất:
|
|
493
|
+
payment/create-invoice audit tại v1.2 · giờ v1.4
|
|
494
|
+
user/create-account audit tại v2.0 · giờ v2.1
|
|
495
|
+
order/bulk-export audit tại v1.0 · giờ v1.3
|
|
496
|
+
(hoặc: ✅ Mọi PRD đã được audit ở version hiện tại)
|
|
497
|
+
(hoặc: ⓘ Chưa có mốc audit — chạy /validate-traces một lần để có hiệu lực từ lần sau)
|
|
498
|
+
|
|
457
499
|
Tester feedback (pulled this sync)
|
|
458
500
|
📥 1 bug report: BUG-20260608-01 FT-001 [Code]
|
|
459
501
|
1 proposal: FT-001-trailing-spaces → AC2 (pending review)
|
|
@@ -466,11 +508,13 @@ Service Configs
|
|
|
466
508
|
⚠️ payment-service — .agent/project-context.yaml missing
|
|
467
509
|
→ create it so /dev-run-test works correctly
|
|
468
510
|
|
|
469
|
-
|
|
511
|
+
Luật git cho sổ trace
|
|
470
512
|
✅ .trace-mirror/ + .living-docs/ gitignored (mirror — sinh lại được)
|
|
471
513
|
✅ {paths.trace_dir}/ KHÔNG bị gitignore (sổ gốc — phải commit)
|
|
514
|
+
✅ {paths.trace_dir}/.gitattributes (merge=union + eol=lf — hai người ghi song song)
|
|
472
515
|
(hoặc: ⚠️ Thêm .trace-mirror/ vào .gitignore)
|
|
473
516
|
(hoặc: 🔴 NGUY HIỂM — sổ gốc {paths.trace_dir} đang bị gitignore, xem Step 4b)
|
|
517
|
+
(hoặc: ✅ vừa tạo .gitattributes — trước đó merge song song sẽ conflict và mất row)
|
|
474
518
|
|
|
475
519
|
Living Docs
|
|
476
520
|
✅ {panel_mirror}/ synced — {N} TSVs across {S} services
|
|
@@ -482,5 +526,9 @@ Spec Manifest
|
|
|
482
526
|
---
|
|
483
527
|
Status : ✅ Complete | ⚠️ Warnings
|
|
484
528
|
Output Artifacts: updated .trace-mirror/ (panel mirror), spec-manifest.yaml
|
|
485
|
-
|
|
529
|
+
(Step 1e chỉ ĐỌC — nó không bao giờ ghi spec_baseline; chủ sở hữu là /validate-traces Step 6b)
|
|
530
|
+
Next : {phụ thuộc kết quả Step 1e — KHÔNG in một hằng số}
|
|
531
|
+
• có PRD trong danh sách 1e-B → /validate-traces {các PRD đó}
|
|
532
|
+
• 1e-B sạch, 1e-A có đổi → /generate-code {UC-ID} cho phần vừa đổi
|
|
533
|
+
• cả hai sạch → ✅ Spec khớp audit — không cần audit lại
|
|
486
534
|
```
|
|
@@ -119,6 +119,20 @@ Tóm tắt cho người dùng:
|
|
|
119
119
|
- **Updated commands** — file có nội dung thay đổi
|
|
120
120
|
- **Removed commands** — file bị xoá trong version mới
|
|
121
121
|
|
|
122
|
+
> **Từ v0.5.1, "Removed" là trạng thái CÓ THẬT.** Trước đó `installCore` chỉ copy, không có
|
|
123
|
+
> nhánh xoá nào — nên lệnh bị bỏ ở version mới nằm lại trong `.agent/commands/` và
|
|
124
|
+
> `.claude/commands/` **vĩnh viễn**: vẫn hiện trong menu `/`, vẫn chạy được, vẫn mang logic
|
|
125
|
+
> của version cũ, kể cả khi framework đã bỏ nó *vì nó sai*. Step này từng hứa báo cáo một
|
|
126
|
+
> trạng thái mà installer không thể tạo ra (GAPS-v3 G44).
|
|
127
|
+
> Giờ installer tự in ra ngay sau bước cài — đọc các dòng đó, chúng chính xác hơn `git diff`:
|
|
128
|
+
> ```
|
|
129
|
+
> 🗑️ {n} file framework đã bị BỎ ở version này — đã gỡ khỏi .agent/
|
|
130
|
+
> 🗑️ {n} shortcut của lệnh đã bị bỏ — đã gỡ khỏi .claude/commands/
|
|
131
|
+
> ⚠️ {n} file framework đã bị bỏ NHƯNG bạn đã sửa — GIỮ LẠI
|
|
132
|
+
> ```
|
|
133
|
+
> **Chỉ file còn nguyên bản mới bị gỡ.** File bạn đã sửa luôn được giữ + backup — thà để lại
|
|
134
|
+
> một file lạc còn hơn xoá thứ ai đó đã bỏ công viết.
|
|
135
|
+
|
|
122
136
|
Nếu có command mới xuất hiện (vd một slash command mới), nêu rõ để user biết nó giờ đã có.
|
|
123
137
|
|
|
124
138
|
**Kiểm file bị ghi đè.** `--init` copy `core/` → `.agent/` **vô điều kiện** — mọi thứ project đã sửa trong `.agent/` (trừ `project-context.yaml`) bị ghi đè. Từ v0.4.2 lệnh cài tự cứu chúng. Kiểm:
|
|
@@ -162,109 +176,8 @@ Sau migrate, nhắc chạy `/validate-traces` để reconcile sổ trace với b
|
|
|
162
176
|
|
|
163
177
|
## Output
|
|
164
178
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
Mọi report của lệnh phải kết thúc bằng section footer chuẩn này.
|
|
168
|
-
|
|
169
|
-
## Status Badge
|
|
170
|
-
|
|
171
|
-
Chọn một theo kết quả:
|
|
172
|
-
- `✅ Complete` — mọi bước thành công, không có vấn đề
|
|
173
|
-
- `❌ Failed` — lệnh không hoàn thành được do lỗi chặn
|
|
174
|
-
- `⚠️ Warnings` — hoàn thành nhưng có vấn đề không chặn, nên review lại
|
|
175
|
-
|
|
176
|
-
## Output Artifacts
|
|
177
|
-
|
|
178
|
-
Liệt kê mọi file được tạo hoặc sửa bởi lệnh này:
|
|
179
|
-
```
|
|
180
|
-
Output Artifacts:
|
|
181
|
-
{created|updated} {file-path} ({mô tả ngắn})
|
|
182
|
-
{created|updated} {file-path} ({mô tả ngắn})
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Nếu không ghi file nào (vd: lệnh review hoặc phân tích) → ghi `Output Artifacts: none (read-only)`.
|
|
186
|
-
|
|
187
|
-
## Pipeline Position
|
|
188
|
-
|
|
189
|
-
In một sơ đồ pipeline một dòng, đánh dấu phase của lệnh HIỆN TẠI bằng `◀ bạn ở đây`,
|
|
190
|
-
để người dùng luôn thấy lệnh này nằm ở đâu trong luồng end-to-end:
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **phase của nó** trong sơ đồ trên:
|
|
197
|
-
|
|
198
|
-
| Phase | Commands |
|
|
199
|
-
|-------|----------|
|
|
200
|
-
| Discovery | `/define-product` |
|
|
201
|
-
| PRD | `/generate-prd` · `/extend-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
202
|
-
| Design Spec | `/generate-design-spec` |
|
|
203
|
-
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
204
|
-
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
205
|
-
| Code | `/generate-code` · `/review-code` |
|
|
206
|
-
| Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
|
|
207
|
-
| QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
|
|
208
|
-
| Trace Audit | `/validate-traces` |
|
|
209
|
-
|
|
210
|
-
Với **lệnh review**, thêm vòng review 3 bước và đánh dấu bước hiện tại, vd:
|
|
211
|
-
`Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
|
|
212
|
-
|
|
213
|
-
**Lệnh xuyên suốt** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
|
|
214
|
-
`/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) nằm ngoài pipeline tuyến tính —
|
|
215
|
-
**bỏ hẳn dòng Pipeline** cho các lệnh này (đừng cố nhét chúng vào sơ đồ).
|
|
216
|
-
|
|
217
|
-
## Gợi ý lệnh tiếp theo
|
|
218
|
-
|
|
219
|
-
Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
220
|
-
|
|
221
|
-
| Lệnh hiện tại | Gợi ý lệnh tiếp theo |
|
|
222
|
-
|-------------------------|-----------------------------------------------|
|
|
223
|
-
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
224
|
-
| /define-product | `/generate-prd {product-definition-file}` |
|
|
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}` |
|
|
227
|
-
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
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) |
|
|
229
|
-
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
230
|
-
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
231
|
-
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
232
|
-
| /qc-analyze | `/qc-plan {UC-ID}` (xử lý các gap blocker 🔴 trước) |
|
|
233
|
-
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
234
|
-
| /qc-design-test | `/qc-review {UC-ID}` (review test-case) |
|
|
235
|
-
| /qc-review (test-case) | `/qc-run-test {UC-ID}` nếu APPROVED; sửa TC nếu NEEDS_FIX |
|
|
236
|
-
| /qc-run-test | `/qc-report {UC-ID}` rồi `/qc-review {UC-ID}` (review script) |
|
|
237
|
-
| /qc-review (script) | `/qc-report {UC-ID}` rồi tạo PR nếu APPROVED |
|
|
238
|
-
| /qc-report | `/validate-traces {UC-ID}` để làm mới Living Docs (qc_status) |
|
|
239
|
-
| /map-testids | `/qc-design-test {UC-ID}` (QC dựng Page Object từ contract §4.5.6 vừa ghi) |
|
|
240
|
-
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
241
|
-
| /review-tech-docs | `/generate-code {feature-file}` nếu APPROVED; sửa doc nếu NEEDS_FIX |
|
|
242
|
-
| /generate-code | Lần gen đầu → `/review-code {UC-ID}`; gen lại → `/dev-gen-test {UC-ID}` |
|
|
243
|
-
| /dev-gen-test | `/dev-run-test {UC-ID}` |
|
|
244
|
-
| /dev-run-test (passing) | `/review-code {UC-ID}` |
|
|
245
|
-
| /dev-run-test (failing) | `/fix-bug {ticket-id}` hoặc `/debug {error}` |
|
|
246
|
-
| /review-code | `/dev-smoke-test {UC-ID}` hoặc tạo PR |
|
|
247
|
-
| /dev-smoke-test | Tạo PR và link tới ticket |
|
|
248
|
-
| /validate-traces | **Cờ 🔴 trước (chặn PR):** SEAM_UNWIRED → nối binding sang class thật, xoá/thay stub · STUB_UNRESOLVED → `/generate-code {owner_uc}` (lấp logic tại chỗ + xoá hàm song song) · ORPHANED/TRACE_ORPHAN → quyết định thủ công (xoá code+test, đưa scenario trở lại `.feature`, hoặc sửa `sc_id` của tag). **Rồi:** DRIFT/UNTRACKED → `/generate-code {UC-ID}` · BDD_DRIFT → `/generate-code {feature-file}` · tech-doc lỗi thời vs BDD → `/generate-tech-docs` → `/review-tech-docs` · PRD drift → `/generate-bdd {prd-file}` · GAP → `/dev-gen-test {UC-ID}`. **Chỉ tạo PR khi mọi cờ 🔴 = 0** |
|
|
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 |
|
|
250
|
-
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
251
|
-
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
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` |
|
|
253
|
-
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
254
|
-
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
255
|
-
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
256
|
-
|
|
257
|
-
Định dạng footer như sau:
|
|
258
|
-
```
|
|
259
|
-
---
|
|
260
|
-
Status : {badge}
|
|
261
|
-
{khối Output Artifacts}
|
|
262
|
-
Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
263
|
-
(lệnh review) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
|
|
264
|
-
Next : {lệnh gợi ý kèm ví dụ tham số}
|
|
265
|
-
```
|
|
266
|
-
*(Bỏ dòng `Pipeline` cho các lệnh xuyên suốt liệt kê ở trên.)*
|
|
267
|
-
|
|
179
|
+
**Đọc `.agent/steps/report-footer.md`** và áp đúng khuôn footer trong đó (Status Badge ·
|
|
180
|
+
Output Artifacts · Next) cho report cuối, kèm khối bên dưới.
|
|
268
181
|
|
|
269
182
|
```
|
|
270
183
|
/update-framework — v{current} → v{latest}
|