@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
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
# /propose-scenario — Đề xuất một BDD Scenario mới (cho Tester & QC)
|
|
2
|
-
|
|
3
|
-
Dành cho **tester và QC** phát hiện edge case chưa được BDD hiện tại phủ (vd một gap missing-coverage
|
|
4
|
-
`DOC_GAPS` từ `/qc-analyze`). Draft một Gherkin scenario vào **khu proposal** để
|
|
5
|
-
PO/Dev review và promote.
|
|
6
|
-
|
|
7
|
-
**KHÔNG sửa file `.feature` canonical.** BDD do PO/Dev sở hữu — lệnh này chỉ ghi
|
|
8
|
-
một proposal. Promote vào BDD thật là hành động của PO/Dev.
|
|
9
|
-
|
|
10
|
-
Usage: `/propose-scenario {UC-ID} {mô tả edge case}`
|
|
11
|
-
Ví dụ: `/propose-scenario FT-001 login với email có space ở cuối vẫn nên thành công`
|
|
12
|
-
|
|
13
|
-
## Gate
|
|
14
|
-
{{include:steps/gate.md}}
|
|
15
|
-
|
|
16
|
-
*Lưu ý: Với lệnh này, target ở Bước 1 là một UC-ID từ `$ARGUMENTS`. Phân giải file `.feature` của nó (để lấy vocabulary + scenario có sẵn) và PRD của nó.*
|
|
17
|
-
|
|
18
|
-
## Context
|
|
19
|
-
{{include:steps/context-loader.md}}
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Step 1 — Phân giải UC + Platform
|
|
24
|
-
|
|
25
|
-
Định vị (qua `spec-manifest.yaml` nếu có, else `paths`):
|
|
26
|
-
- `prd_path` + danh sách acceptance criteria của UC
|
|
27
|
-
- `bdd_path` + `active_platform` (web / app / system) — để khớp vocabulary scenario và tag `@trace`
|
|
28
|
-
- các tiêu đề scenario có sẵn của UC này (để tránh đề xuất trùng)
|
|
29
|
-
|
|
30
|
-
## Step 2 — Quyết định Coverage (CRITICAL)
|
|
31
|
-
|
|
32
|
-
Một BDD scenario phải trace tới một PRD acceptance criterion. Xác định case nào áp dụng:
|
|
33
|
-
|
|
34
|
-
**Case A — behavior NẰM TRONG một AC có sẵn** (AC ngụ ý nó, BDD chỉ thiếu scenario):
|
|
35
|
-
→ Đây là coverage gap. Tiếp tục draft scenario (Step 3), map tới AC đó.
|
|
36
|
-
|
|
37
|
-
**Case B — behavior KHÔNG nằm trong AC nào** (requirement thực sự mới):
|
|
38
|
-
→ **Đừng** draft BDD proposal (scenario sẽ không có gì để trace). Thay vào đó **ghi một
|
|
39
|
-
file PRD change request** để PO thực sự thấy nó trên `/sync` (đừng chỉ in ra):
|
|
40
|
-
|
|
41
|
-
Ghi vào `{paths.prd_change_requests_dir}/{UC-ID}-{slug}.md` (phân giải về
|
|
42
|
-
`{spec_source}/feedback/prd-change-requests/` ở umbrella mode; tạo dir nếu cần):
|
|
43
|
-
```
|
|
44
|
-
# PRD Change Request — {UC-ID}: {short title}
|
|
45
|
-
|
|
46
|
-
> ⚠️ Requirement mới phát hiện trong test — KHÔNG được PRD AC nào phủ (không phải coverage gap).
|
|
47
|
-
| Field | Value |
|
|
48
|
-
|---|---|
|
|
49
|
-
| UC / Ticket | {UC-ID} |
|
|
50
|
-
| PRD | {prd_path} (v{prd_version}) |
|
|
51
|
-
| Source | {BUG-ID nếu có | quan sát của tester/QC} |
|
|
52
|
-
| Requested by | tester/QC |
|
|
53
|
-
| Status | Open |
|
|
54
|
-
|
|
55
|
-
**Requested behavior:** {description}
|
|
56
|
-
**Suggested AC (draft cho PO):** "{draft AC text}"
|
|
57
|
-
**Route to PO:**
|
|
58
|
-
1. Đặt `Status: accepted` trong file này nếu nhận yêu cầu.
|
|
59
|
-
2. Chạy **`/extend-prd {prd_path}`** — nó tự nhặt request `accepted`, hỏi PO chốt AC/BR đúng
|
|
60
|
-
tầng, đánh số **nối tiếp** (không đụng ID cũ), bump version + ghi changelog nêu rõ scope,
|
|
61
|
-
rồi đóng dấu `incorporated` + chuyển file này sang `archived/`.
|
|
62
|
-
3. `/refine-prd` → `/review-context` → PO đặt `approved` → `/generate-bdd` **chỉ cho UC MỚI**.
|
|
63
|
-
|
|
64
|
-
⚠️ **KHÔNG dùng `/refine-prd` để thêm AC mới.** Nó chỉ áp findings từ review và có luật cấm
|
|
65
|
-
đụng section nào không được finding tham chiếu. **KHÔNG dùng `/generate-prd`** — nó từ chối
|
|
66
|
-
chạy trên PRD đã có (ghi đè sẽ mất changelog + đánh số lại BR).
|
|
67
|
-
```
|
|
68
|
-
Rồi sang Step 5 (handoff áp dụng cho file này luôn). Skip Step 3–4 (không có BDD scenario cho Case B).
|
|
69
|
-
|
|
70
|
-
Nếu không chắc case nào → hiện danh sách AC và hỏi tester nó map tới AC nào, hoặc confirm nó là mới.
|
|
71
|
-
|
|
72
|
-
## Step 3 — Draft Scenario (chỉ Case A)
|
|
73
|
-
|
|
74
|
-
Viết Gherkin nhất quán với convention của `/generate-bdd` cho `active_platform`:
|
|
75
|
-
- Dùng vocabulary platform (web: clicks/sees; app: taps/sees; system: business event)
|
|
76
|
-
- Một scenario tập trung; Given/When/Then cụ thể; không chi tiết implementation
|
|
77
|
-
- **Dùng ĐÚNG bộ tag canonical của `.feature`** (giống `templates/feature.template`) — vì scenario này sẽ được `/generate-bdd` chèn thẳng vào BDD canonical:
|
|
78
|
-
|
|
79
|
-
```gherkin
|
|
80
|
-
# Side-effects: {liệt kê side-effect quan sát được, hoặc "—"}
|
|
81
|
-
# @trace.scenario: {UC-ID}-SC? ← "?" = số do /generate-bdd gán lúc chèn (tester không biết số kế tiếp)
|
|
82
|
-
# @trace.sc_version: 1.0
|
|
83
|
-
# @trace.business_rules: {BR-ID nếu xác định được, else —}
|
|
84
|
-
# Covers: AC{N} ← comment thường, KHÔNG phải @trace (AC không phải trace key)
|
|
85
|
-
# Nguồn: proposal {file} · {BUG-ID nếu có}
|
|
86
|
-
@proposed @from-test @edge
|
|
87
|
-
Scenario: {business outcome}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
> **KHÔNG dùng `@trace.uc=` / `@trace.ac=`.** Hai key đó không tồn tại trong contract `.feature` ở bất kỳ đâu khác — scenario mang chúng mà thiếu `@trace.scenario`/`@trace.sc_version` sẽ **không sinh được row trace** khi vào `.feature`: không có `sc_id`, không có `spec_ver`, nên vô hình với toàn bộ coverage/drift. Số UC đã nằm sẵn trong `sc_id`.
|
|
91
|
-
|
|
92
|
-
## Step 4 — Ghi Proposal
|
|
93
|
-
|
|
94
|
-
Ghi vào `{paths.bdd_proposals_dir}/{UC-ID}-{slug}.md` (phân giải về `{spec_source}/feedback/bdd-proposals/` ở umbrella mode; tạo dir nếu cần).
|
|
95
|
-
KHÔNG đụng `.feature` canonical. Doc proposal chứa draft + metadata review
|
|
96
|
-
(xem Output), **gồm dòng `Status: proposed`**. Nếu nguồn là một bug, tham chiếu `BUG-ID` của nó.
|
|
97
|
-
|
|
98
|
-
> **Vòng đời proposal** (máy đọc được để `/generate-bdd` intake đúng):
|
|
99
|
-
> `proposed` → PO/Dev duyệt đặt `accepted` (hoặc `rejected`) → `/generate-bdd` chèn cái `accepted` vào `.feature` rồi đặt `incorporated` + lưu trữ. **Chỉ `accepted` mới được đưa vào BDD.**
|
|
100
|
-
|
|
101
|
-
## Step 5 — Handoff (để PO/Dev thực sự thấy)
|
|
102
|
-
|
|
103
|
-
Một proposal chỉ tới PO/Dev nếu được **commit và push lên spec repo dùng chung**.
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
cd {spec_source} # umbrella: spec submodule; single-service: bỏ
|
|
107
|
-
git add feedback/bdd-proposals/{UC-ID}-{slug}.md
|
|
108
|
-
git commit -m "qa(proposal): {UC-ID} — {title}"
|
|
109
|
-
git push # → PO/Dev thấy nó ở lần /sync tiếp theo
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
- Không có quyền push spec repo → mở PR / MR thay vì. In fallback này.
|
|
113
|
-
- Với **PRD change request** (Case B), commit file request thay vì:
|
|
114
|
-
```bash
|
|
115
|
-
cd {spec_source}
|
|
116
|
-
git add feedback/prd-change-requests/{UC-ID}-{slug}.md
|
|
117
|
-
git commit -m "qa(prd-change): {UC-ID} — {title}"
|
|
118
|
-
git push
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
> PO/Dev được thông báo qua routine bình thường: `/sync` liệt kê các proposal vừa pull về.
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Output
|
|
126
|
-
|
|
127
|
-
{{include:steps/report-footer.md}}
|
|
128
|
-
|
|
129
|
-
> **Hai khối report — chọn theo case đã chốt ở Step 2. In ĐÚNG MỘT khối.**
|
|
130
|
-
> Case A và Case B tạo ra hai loại artifact khác nhau, ở hai thư mục khác nhau, và đi hai
|
|
131
|
-
> đường xử lý khác nhau. In khối Case A cho một request Case B là báo cáo sai việc vừa làm:
|
|
132
|
-
> nó chỉ sai thư mục, in một scenario không tồn tại, và bảo người dùng chờ `/generate-bdd`
|
|
133
|
-
> nhặt — trong khi lệnh đó **không bao giờ** đọc `prd-change-requests/`.
|
|
134
|
-
|
|
135
|
-
### Khối Case A — scenario proposal *(behavior nằm trong một AC có sẵn)*
|
|
136
|
-
|
|
137
|
-
```
|
|
138
|
-
📝 Scenario proposal → {paths.bdd_proposals_dir}/{UC-ID}-{slug}.md
|
|
139
|
-
|
|
140
|
-
UC : {UC-ID} ({active_platform})
|
|
141
|
-
Maps to AC : {AC-N} — "{AC text}"
|
|
142
|
-
Source : {BUG-ID nếu có | quan sát tester}
|
|
143
|
-
|
|
144
|
-
Scenario đề xuất (DRAFT — chờ PO/Dev review):
|
|
145
|
-
# Side-effects: {…}
|
|
146
|
-
# @trace.scenario: {UC-ID}-SC?
|
|
147
|
-
# @trace.sc_version: 1.0
|
|
148
|
-
# @trace.business_rules: {BR-ID | —}
|
|
149
|
-
# Covers: AC{N}
|
|
150
|
-
@proposed @from-test @edge
|
|
151
|
-
Scenario: {title}
|
|
152
|
-
Given {…}
|
|
153
|
-
When {…}
|
|
154
|
-
Then {…}
|
|
155
|
-
|
|
156
|
-
Để PO/Dev promote:
|
|
157
|
-
[ ] AC mapping đúng? (hoặc cập nhật PRD nếu requirement thực sự mới)
|
|
158
|
-
[ ] Đặt `Status: accepted` trong file proposal (để /generate-bdd đưa vào)
|
|
159
|
-
[ ] Chạy lại /generate-bdd {UC-ID} — nó tự chèn proposal `accepted` vào .feature rồi lưu trữ
|
|
160
|
-
[ ] Rồi: /generate-code {UC-ID} + /dev-gen-test {UC-ID}
|
|
161
|
-
|
|
162
|
-
Handoff : {✅ committed + pushed to spec repo | ⚠️ chạy git command ở trên / mở PR}
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
Status : ✅ Complete (read-only trên BDD canonical — chỉ proposal)
|
|
166
|
-
Output Artifacts: created {paths.bdd_proposals_dir}/{UC-ID}-{slug}.md (pushed to shared spec repo)
|
|
167
|
-
Next : PO/Dev thấy nó ở lần /sync tiếp theo → review & promote
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Khối Case B — PRD change request *(requirement mới, không AC nào phủ)*
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
📋 PRD change request → {paths.prd_change_requests_dir}/{UC-ID}-{slug}.md
|
|
174
|
-
|
|
175
|
-
UC : {UC-ID} ({active_platform})
|
|
176
|
-
Loại : requirement MỚI — không AC nào phủ (KHÔNG phải coverage gap)
|
|
177
|
-
PRD : {prd_path} (v{prd_version})
|
|
178
|
-
Source : {BUG-ID nếu có | quan sát tester/QC}
|
|
179
|
-
Behavior : {description}
|
|
180
|
-
Draft AC : "{draft AC text}" ← đề xuất cho PO cân nhắc, PO chốt lại
|
|
181
|
-
|
|
182
|
-
⚠️ Lệnh này KHÔNG sinh BDD scenario nào — scenario chưa có AC để trace tới.
|
|
183
|
-
Nó chỉ xuất hiện SAU KHI PO đưa requirement vào PRD rồi chạy lại /generate-bdd.
|
|
184
|
-
Và vì chưa có AC, KHÔNG cờ trace nào bắt được thiếu sót này: theo mọi thước đo
|
|
185
|
-
coverage hiện tại thì hành vi bạn vừa phát hiện không tồn tại.
|
|
186
|
-
|
|
187
|
-
Để PO xử lý:
|
|
188
|
-
[ ] Đọc request, quyết định nhận hay không
|
|
189
|
-
[ ] Nhận → đặt Status: accepted trong file request
|
|
190
|
-
[ ] /extend-prd {prd-file} ← nhặt request, chốt AC/BR với PO, đánh số nối tiếp,
|
|
191
|
-
bump version + changelog, tự đóng dấu incorporated
|
|
192
|
-
[ ] /refine-prd → /review-context {prd-file} ← soi + kiểm phần vừa thêm
|
|
193
|
-
[ ] PO đặt Status: approved → /generate-bdd {prd-file} (CHỈ UC mới) → /generate-code
|
|
194
|
-
|
|
195
|
-
Handoff : {✅ committed + pushed to spec repo | ⚠️ chạy git command ở trên / mở PR}
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
Status : ✅ Complete (không đụng BDD — đây là yêu cầu đổi tài liệu, không phải scenario)
|
|
199
|
-
Output Artifacts: created {paths.prd_change_requests_dir}/{UC-ID}-{slug}.md (pushed to shared spec repo)
|
|
200
|
-
Next : PO thấy nó ở lần /sync tiếp theo. Nếu chưa xử, /validate-traces sẽ nhắc lại
|
|
201
|
-
(kèm số ngày chờ) mỗi lần chạy, chừng nào Status còn Open.
|
|
202
|
-
```
|