@edupia-tutor/spec-driven-docs 0.14.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 +230 -0
- package/bin/index.js +598 -0
- package/commands/debug.md +830 -0
- package/commands/debug.tmpl +257 -0
- package/commands/define-product.md +652 -0
- package/commands/define-product.tmpl +158 -0
- package/commands/dev-gen-test.md +1010 -0
- package/commands/dev-gen-test.tmpl +490 -0
- package/commands/dev-run-test.md +744 -0
- package/commands/dev-run-test.tmpl +224 -0
- package/commands/dev-smoke-test.md +711 -0
- package/commands/dev-smoke-test.tmpl +217 -0
- package/commands/fix-bug.md +744 -0
- package/commands/fix-bug.tmpl +171 -0
- package/commands/generate-bdd.md +1054 -0
- package/commands/generate-bdd.tmpl +534 -0
- package/commands/generate-code.md +869 -0
- package/commands/generate-code.tmpl +349 -0
- package/commands/generate-design-spec.md +958 -0
- package/commands/generate-design-spec.tmpl +464 -0
- package/commands/generate-prd.md +748 -0
- package/commands/generate-prd.tmpl +254 -0
- package/commands/generate-spec-manifest.md +658 -0
- package/commands/generate-spec-manifest.tmpl +164 -0
- package/commands/generate-tech-docs.md +849 -0
- package/commands/generate-tech-docs.tmpl +355 -0
- package/commands/learn.md +636 -0
- package/commands/learn.tmpl +63 -0
- package/commands/map-testids.md +575 -0
- package/commands/map-testids.tmpl +81 -0
- package/commands/propose-scenario.md +623 -0
- package/commands/propose-scenario.tmpl +129 -0
- package/commands/qc-analyze.md +580 -0
- package/commands/qc-analyze.tmpl +86 -0
- package/commands/qc-design-test.md +562 -0
- package/commands/qc-design-test.tmpl +68 -0
- package/commands/qc-plan.md +543 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +554 -0
- package/commands/qc-report.tmpl +60 -0
- package/commands/qc-review.md +547 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +604 -0
- package/commands/qc-run-test.tmpl +84 -0
- package/commands/refine-prd.md +772 -0
- package/commands/refine-prd.tmpl +140 -0
- package/commands/report-bug.md +639 -0
- package/commands/report-bug.tmpl +145 -0
- package/commands/review-code.md +677 -0
- package/commands/review-code.tmpl +104 -0
- package/commands/review-context.md +1047 -0
- package/commands/review-context.tmpl +415 -0
- package/commands/review-tech-docs.md +811 -0
- package/commands/review-tech-docs.tmpl +317 -0
- package/commands/setup-ai-first.md +545 -0
- package/commands/setup-ai-first.tmpl +358 -0
- package/commands/sync.md +451 -0
- package/commands/sync.tmpl +351 -0
- package/commands/update-framework.md +251 -0
- package/commands/update-framework.tmpl +151 -0
- package/commands/validate-traces.md +842 -0
- package/commands/validate-traces.tmpl +348 -0
- package/core/FRAMEWORK_VERSION +1 -0
- package/core/commands/debug.md +830 -0
- package/core/commands/define-product.md +652 -0
- package/core/commands/dev-gen-test.md +1010 -0
- package/core/commands/dev-run-test.md +744 -0
- package/core/commands/dev-smoke-test.md +711 -0
- package/core/commands/fix-bug.md +744 -0
- package/core/commands/generate-bdd.md +1054 -0
- package/core/commands/generate-code.md +869 -0
- package/core/commands/generate-design-spec.md +958 -0
- package/core/commands/generate-prd.md +748 -0
- package/core/commands/generate-spec-manifest.md +658 -0
- package/core/commands/generate-tech-docs.md +849 -0
- package/core/commands/learn.md +636 -0
- package/core/commands/map-testids.md +575 -0
- package/core/commands/propose-scenario.md +623 -0
- package/core/commands/qc-analyze.md +580 -0
- package/core/commands/qc-design-test.md +562 -0
- package/core/commands/qc-plan.md +543 -0
- package/core/commands/qc-report.md +554 -0
- package/core/commands/qc-review.md +547 -0
- package/core/commands/qc-run-test.md +604 -0
- package/core/commands/refine-prd.md +772 -0
- package/core/commands/report-bug.md +639 -0
- package/core/commands/review-code.md +677 -0
- package/core/commands/review-context.md +1047 -0
- package/core/commands/review-tech-docs.md +811 -0
- package/core/commands/setup-ai-first.md +545 -0
- package/core/commands/sync.md +451 -0
- package/core/commands/update-framework.md +251 -0
- package/core/commands/validate-traces.md +842 -0
- package/core/hooks/data-guard.js +141 -0
- package/core/hooks/settings.json +18 -0
- package/core/modules/android-compose/module.yaml +13 -0
- package/core/modules/android-compose/stack-profile.yaml +57 -0
- package/core/modules/angular/architecture-snippets/component-patterns.md +187 -0
- package/core/modules/angular/module.yaml +6 -0
- package/core/modules/angular/stack-profile.yaml +38 -0
- package/core/modules/context-engineering/architecture-snippets/context-design.md +119 -0
- package/core/modules/context-engineering/module.yaml +9 -0
- package/core/modules/context-engineering/stack-profile.yaml +61 -0
- package/core/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
- package/core/modules/dotnet/module.yaml +6 -0
- package/core/modules/dotnet/stack-profile.yaml +50 -0
- package/core/modules/flutter/module.yaml +14 -0
- package/core/modules/flutter/stack-profile.yaml +59 -0
- package/core/modules/golang/architecture-snippets/domain-layout.md +283 -0
- package/core/modules/golang/module.yaml +6 -0
- package/core/modules/golang/stack-profile.yaml +40 -0
- package/core/modules/ios-swiftui/module.yaml +13 -0
- package/core/modules/ios-swiftui/stack-profile.yaml +55 -0
- package/core/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
- package/core/modules/java-spring/module.yaml +15 -0
- package/core/modules/java-spring/stack-profile.yaml +28 -0
- package/core/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
- package/core/modules/nextjs/module.yaml +14 -0
- package/core/modules/nextjs/stack-profile.yaml +74 -0
- package/core/modules/nuxt/module.yaml +14 -0
- package/core/modules/nuxt/stack-profile.yaml +58 -0
- package/core/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
- package/core/modules/php-laravel/module.yaml +15 -0
- package/core/modules/php-laravel/stack-profile.yaml +56 -0
- package/core/modules/qc-playwright/stack-profile.yaml +66 -0
- package/core/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
- package/core/modules/react/module.yaml +14 -0
- package/core/modules/react/stack-profile.yaml +63 -0
- package/core/modules/react-native/module.yaml +14 -0
- package/core/modules/react-native/stack-profile.yaml +56 -0
- package/core/modules/vue/module.yaml +14 -0
- package/core/modules/vue/stack-profile.yaml +65 -0
- package/core/rules/data-protection.md +80 -0
- package/core/rules/workflow.md +44 -0
- package/core/skills/code/SKILL.md +770 -0
- package/core/skills/debug/SKILL.md +869 -0
- package/core/skills/design-spec/SKILL.md +589 -0
- package/core/skills/discovery/SKILL.md +554 -0
- package/core/skills/prd/SKILL.md +562 -0
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/core/skills/qc/qa-analyst/business-rules.md +59 -0
- package/core/skills/qc/qa-analyst/data-flow.md +64 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/core/skills/qc/qa-designer/functional/api.md +45 -0
- package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/core/skills/qc/qa-designer/integration/api.md +42 -0
- package/core/skills/qc/qa-designer/integration/db.md +39 -0
- package/core/skills/qc/qa-designer/integration/gui.md +40 -0
- package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/core/skills/qc/qa-designer/non-functional.md +40 -0
- package/core/skills/qc/qa-planner/test-plan.md +120 -0
- package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/core/skills/qc/qa-runner/e2e.md +49 -0
- package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/core/skills/qc/qa-runner/functional/api.md +35 -0
- package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/core/skills/qc/qa-runner/integration.md +47 -0
- package/core/skills/qc/qa-runner/non-functional.md +49 -0
- package/core/skills/qc/qa-runner/report/report.md +37 -0
- package/core/skills/setup-ai-first/SKILL.md +216 -0
- package/core/skills/spec/SKILL.md +461 -0
- package/core/skills/test/SKILL.md +1297 -0
- package/core/steps/capture-lesson.md +79 -0
- package/core/steps/context-loader.md +307 -0
- package/core/steps/gate.md +87 -0
- package/core/steps/report-footer.md +100 -0
- package/core/steps/review-fanout.md +138 -0
- package/core/steps/spawn-agent.md +124 -0
- package/core/steps/trace-mirror.md +26 -0
- package/core/templates/architecture.template.md +113 -0
- package/core/templates/design-spec.template.md +217 -0
- package/core/templates/feature.template +259 -0
- package/core/templates/platform-guide.template.md +145 -0
- package/core/templates/prd.template.md +327 -0
- package/core/templates/product-definition.template.md +168 -0
- package/core/templates/project-context.yaml +161 -0
- package/docs/01-getting-started/README.md +19 -0
- package/docs/01-getting-started/core-concepts.md +102 -0
- package/docs/01-getting-started/installation.md +156 -0
- package/docs/01-getting-started/quickstart.md +85 -0
- package/docs/02-guides/README.md +26 -0
- package/docs/02-guides/developer/README.md +46 -0
- package/docs/02-guides/developer/bdd-and-trace.md +125 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +15 -0
- package/docs/02-guides/developer/scenarios.md +460 -0
- package/docs/02-guides/developer/workflow.md +121 -0
- package/docs/02-guides/product-owner/README.md +79 -0
- package/docs/02-guides/product-owner/commands.md +30 -0
- package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
- package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
- package/docs/02-guides/product-owner/scenarios.md +436 -0
- package/docs/02-guides/tester/README.md +75 -0
- package/docs/02-guides/tester/bug-reporting.md +117 -0
- package/docs/02-guides/tester/qc-automation.md +165 -0
- package/docs/02-guides/tester/reading-specs.md +79 -0
- package/docs/02-guides/tester/scenarios.md +186 -0
- package/docs/02-guides/tester/spec-manifest.md +130 -0
- package/docs/02-guides/tester/test-checklist.md +31 -0
- package/docs/02-guides/tester/workflow.md +77 -0
- package/docs/03-concepts/README.md +19 -0
- package/docs/03-concepts/architecture.md +248 -0
- package/docs/03-concepts/pipeline.md +274 -0
- package/docs/03-concepts/traceability.md +149 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +362 -0
- package/docs/04-operations/publishing.md +137 -0
- package/docs/04-operations/sync-and-update.md +522 -0
- package/docs/05-reference/README.md +32 -0
- package/docs/05-reference/command-cheatsheet.md +147 -0
- package/docs/05-reference/commands.md +232 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +153 -0
- package/docs/README.md +49 -0
- package/hooks/data-guard.js +141 -0
- package/hooks/settings.json +18 -0
- package/modules/android-compose/module.yaml +13 -0
- package/modules/android-compose/stack-profile.yaml +57 -0
- package/modules/angular/architecture-snippets/component-patterns.md +187 -0
- package/modules/angular/module.yaml +6 -0
- package/modules/angular/stack-profile.yaml +38 -0
- package/modules/context-engineering/architecture-snippets/context-design.md +119 -0
- package/modules/context-engineering/module.yaml +9 -0
- package/modules/context-engineering/stack-profile.yaml +61 -0
- package/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
- package/modules/dotnet/module.yaml +6 -0
- package/modules/dotnet/stack-profile.yaml +50 -0
- package/modules/flutter/module.yaml +14 -0
- package/modules/flutter/stack-profile.yaml +59 -0
- package/modules/golang/architecture-snippets/domain-layout.md +283 -0
- package/modules/golang/module.yaml +6 -0
- package/modules/golang/stack-profile.yaml +40 -0
- package/modules/ios-swiftui/module.yaml +13 -0
- package/modules/ios-swiftui/stack-profile.yaml +55 -0
- package/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
- package/modules/java-spring/module.yaml +15 -0
- package/modules/java-spring/stack-profile.yaml +28 -0
- package/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
- package/modules/nextjs/module.yaml +14 -0
- package/modules/nextjs/stack-profile.yaml +74 -0
- package/modules/nuxt/module.yaml +14 -0
- package/modules/nuxt/stack-profile.yaml +58 -0
- package/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
- package/modules/php-laravel/module.yaml +15 -0
- package/modules/php-laravel/stack-profile.yaml +56 -0
- package/modules/qc-playwright/stack-profile.yaml +66 -0
- package/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
- package/modules/react/module.yaml +14 -0
- package/modules/react/stack-profile.yaml +63 -0
- package/modules/react-native/module.yaml +14 -0
- package/modules/react-native/stack-profile.yaml +56 -0
- package/modules/vue/module.yaml +14 -0
- package/modules/vue/stack-profile.yaml +65 -0
- package/package.json +49 -0
- package/rules/data-protection.md +80 -0
- package/rules/workflow.md +44 -0
- package/scripts/init.sh +49 -0
- package/scripts/migrate-specs.js +256 -0
- package/scripts/upgrade.sh +94 -0
- package/skills/code/SKILL.md +770 -0
- package/skills/code/SKILL.tmpl +176 -0
- package/skills/debug/SKILL.md +869 -0
- package/skills/debug/SKILL.tmpl +262 -0
- package/skills/design-spec/SKILL.md +589 -0
- package/skills/design-spec/SKILL.tmpl +95 -0
- package/skills/discovery/SKILL.md +554 -0
- package/skills/discovery/SKILL.tmpl +147 -0
- package/skills/prd/SKILL.md +562 -0
- package/skills/prd/SKILL.tmpl +188 -0
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/skills/qc/qa-analyst/business-rules.md +59 -0
- package/skills/qc/qa-analyst/data-flow.md +64 -0
- package/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/skills/qc/qa-designer/functional/api.md +45 -0
- package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/skills/qc/qa-designer/integration/api.md +42 -0
- package/skills/qc/qa-designer/integration/db.md +39 -0
- package/skills/qc/qa-designer/integration/gui.md +40 -0
- package/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/skills/qc/qa-designer/non-functional.md +40 -0
- package/skills/qc/qa-planner/test-plan.md +120 -0
- package/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/skills/qc/qa-runner/e2e.md +49 -0
- package/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/skills/qc/qa-runner/functional/api.md +35 -0
- package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/skills/qc/qa-runner/integration.md +47 -0
- package/skills/qc/qa-runner/non-functional.md +49 -0
- package/skills/qc/qa-runner/report/report.md +37 -0
- package/skills/setup-ai-first/SKILL.md +216 -0
- package/skills/setup-ai-first/SKILL.tmpl +116 -0
- package/skills/spec/SKILL.md +461 -0
- package/skills/spec/SKILL.tmpl +174 -0
- package/skills/test/SKILL.md +1297 -0
- package/skills/test/SKILL.tmpl +296 -0
- package/steps/capture-lesson.md +79 -0
- package/steps/context-loader.md +307 -0
- package/steps/gate.md +87 -0
- package/steps/report-footer.md +100 -0
- package/steps/review-fanout.md +138 -0
- package/steps/spawn-agent.md +124 -0
- package/steps/trace-mirror.md +26 -0
- package/templates/architecture.template.md +113 -0
- package/templates/design-spec.template.md +217 -0
- package/templates/feature.template +259 -0
- package/templates/platform-guide.template.md +145 -0
- package/templates/prd.template.md +327 -0
- package/templates/product-definition.template.md +168 -0
- package/templates/project-context.yaml +161 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# /generate-prd — Generate Product Requirements Document
|
|
2
|
+
|
|
3
|
+
## Gate
|
|
4
|
+
{{include:steps/gate.md}}
|
|
5
|
+
|
|
6
|
+
*Note: For this command, the target file in Step 1 is a product-definition file in `{paths.product_definitions_dir}/`. Resolve it from `$ARGUMENTS` or list the directory and ask.*
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
{{include:steps/context-loader.md}}
|
|
10
|
+
|
|
11
|
+
*Additional context for this command: Read the full product-definition file. Extract: **TICKET-ID**, **domain**, **feature name**, Phases 1-7 data.*
|
|
12
|
+
|
|
13
|
+
CHECKPOINT before generating: "Generate PRD for **{TICKET-ID} — {feature}** (domain: {domain}). Continue? (Y/N)"
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Terminology Rules *(apply if business-dictionary.md exists)*
|
|
18
|
+
|
|
19
|
+
- **Replace banned terms**: substitute every banned term with its canonical equivalent (see dictionary § Banned Terms).
|
|
20
|
+
- **Use canonical terms**: only use terms defined in dictionary.
|
|
21
|
+
- **NEW TERM DETECTION**: If a term from PO input appears ≥2 times and is NOT in dictionary → **STOP** and ask PO:
|
|
22
|
+
- What does that term mean in the system context?
|
|
23
|
+
- What should the English canonical term be?
|
|
24
|
+
- Should it be added to business-dictionary.md?
|
|
25
|
+
After PO confirms → update `business-dictionary.md` (if agreed) → continue generation.
|
|
26
|
+
- If no banned terms found and all terms are canonical → proceed without interruption.
|
|
27
|
+
|
|
28
|
+
## Cross-Reference Rule
|
|
29
|
+
|
|
30
|
+
Any mention of another TICKET-ID anywhere in the PRD (pre-condition, BR, note, appendix) → **MUST** be an inline link:
|
|
31
|
+
```
|
|
32
|
+
[TICKET-ID](./TICKET-ID-slug.md)
|
|
33
|
+
```
|
|
34
|
+
Never leave TICKET-ID as plain text if a corresponding PRD file exists in `{paths.specs_dir}/{domain}/{prd-slug}/`.
|
|
35
|
+
|
|
36
|
+
## UC and BR Numbering Convention
|
|
37
|
+
|
|
38
|
+
- **UC ID**: `{TICKET-ID}-UC{N}` — N starts at 1, increments per use case.
|
|
39
|
+
- **BR ID**: `{TICKET-ID}-UC{N}-BR{M}` — **M increments across the whole PRD** (does NOT reset per UC).
|
|
40
|
+
- Example: UC1 → BR1, BR2; UC2 → BR3, BR4 (NOT BR1, BR2 again).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Platform Strategy — PRD is platform-agnostic (Option C)
|
|
45
|
+
|
|
46
|
+
PRD mô tả **WHAT** (yêu cầu nghiệp vụ) — không phụ thuộc vào platform nào implement.
|
|
47
|
+
Viết AC theo business outcome, không theo UI/API details:
|
|
48
|
+
|
|
49
|
+
| ✅ Viết trong PRD (platform-agnostic) | ❌ Không viết trong PRD |
|
|
50
|
+
|---|---|
|
|
51
|
+
| "Đăng nhập thành công → truy cập được tính năng" | "Click button → show toast" ← Design Spec |
|
|
52
|
+
| "Sai password 5 lần → khoá tài khoản 30 phút" | "API trả về JWT token" ← Tech Docs |
|
|
53
|
+
| "Session hết hạn → yêu cầu xác thực lại" | "Hiển thị spinner khi loading" ← Design Spec |
|
|
54
|
+
|
|
55
|
+
**Một PRD phục vụ tất cả platform:**
|
|
56
|
+
- **FE/App team** → đọc PRD + Design Spec → `/generate-bdd` (UI-level scenarios)
|
|
57
|
+
- **BE team** → đọc PRD trực tiếp → `/generate-bdd` (API-level scenarios)
|
|
58
|
+
- Design Spec là tài liệu riêng cho FE/App — **không trộn vào PRD**
|
|
59
|
+
|
|
60
|
+
Khi viết AC, nếu PO đề cập chi tiết UI (màu sắc, layout, animation) → nhắc nhở:
|
|
61
|
+
*"Chi tiết UI này thuộc về Design Spec, không thuộc PRD. Ghi nhận lại để tạo Design Spec sau."*
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Generate
|
|
66
|
+
|
|
67
|
+
Write `{paths.specs_dir}/{domain}/{prd-slug}/prd.md` using the structure below.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
# {TICKET-ID} {Feature Name}
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Metadata
|
|
77
|
+
|
|
78
|
+
| Field | Value |
|
|
79
|
+
|---------------|----------------------------------|
|
|
80
|
+
| **PRD ID** | {TICKET-ID} |
|
|
81
|
+
| **Version** | 1.0 |
|
|
82
|
+
| **Status** | draft |
|
|
83
|
+
| **Author** | {PO name or "AI-assisted"} |
|
|
84
|
+
| **Domain** | {domain} |
|
|
85
|
+
| **Created** | {YYYY-MM-DD} |
|
|
86
|
+
| **Updated** | {YYYY-MM-DD} |
|
|
87
|
+
| **API Source** | *(bỏ trống nếu greenfield — thêm `existing` nếu API đã tồn tại trên hệ thống)* |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
# Feature
|
|
92
|
+
|
|
93
|
+
{Describe the capability or function this feature provides — 2-3 concise sentences.}
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
# 1. Overview
|
|
98
|
+
|
|
99
|
+
## a. User Story
|
|
100
|
+
|
|
101
|
+
- **As a** {User role}
|
|
102
|
+
- **I want to** {User goal}
|
|
103
|
+
- **So that** {Business value}
|
|
104
|
+
|
|
105
|
+
## b. Scope
|
|
106
|
+
|
|
107
|
+
**In Scope**
|
|
108
|
+
|
|
109
|
+
- {Function 1}
|
|
110
|
+
- {Function 2}
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
# 2. Acceptance Criteria
|
|
115
|
+
|
|
116
|
+
- **AC1:** {Acceptance criterion — testable, observable, no UI details}
|
|
117
|
+
- **AC2:** {Acceptance criterion}
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
# 3. Use Case
|
|
122
|
+
|
|
123
|
+
#### {TICKET-ID}-UC1: {Use Case Name}
|
|
124
|
+
|
|
125
|
+
- **Actor:** {User performing the action}
|
|
126
|
+
- **Description:** {Business scenario description — 1 sentence}
|
|
127
|
+
- **Pre-condition:** {Condition that must be true BEFORE use case begins}
|
|
128
|
+
- **Post-condition:** {State / result AFTER use case completes}
|
|
129
|
+
|
|
130
|
+
**Business Rule**
|
|
131
|
+
|
|
132
|
+
| ID | Business Rule |
|
|
133
|
+
|----|---------------|
|
|
134
|
+
| {TICKET-ID}-UC1-BR1 | {Rule — WHAT the system must do} |
|
|
135
|
+
| {TICKET-ID}-UC1-BR2 | {Rule} |
|
|
136
|
+
|
|
137
|
+
**Business Logic**
|
|
138
|
+
|
|
139
|
+
**{TICKET-ID}-UC1-BR1:**
|
|
140
|
+
- Logic 1
|
|
141
|
+
- Logic 2
|
|
142
|
+
- Logic 3
|
|
143
|
+
|
|
144
|
+
**{TICKET-ID}-UC1-BR2:**
|
|
145
|
+
- Logic
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
# 4. UI/UX Guidelines
|
|
150
|
+
|
|
151
|
+
## a. User Flow
|
|
152
|
+
|
|
153
|
+
{Brief description of sequence and decision branches}
|
|
154
|
+
|
|
155
|
+
```mermaid
|
|
156
|
+
flowchart TD
|
|
157
|
+
A[Step 1: ...] --> B[Step 2: ...]
|
|
158
|
+
B --> C{Condition?}
|
|
159
|
+
C -->|Yes| D[Result A]
|
|
160
|
+
C -->|No| E[Result B]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## b. Wireframe
|
|
164
|
+
|
|
165
|
+
**Screen 1: {Screen Name}**
|
|
166
|
+
|
|
167
|
+
**Screen:** {Screen name}
|
|
168
|
+
|
|
169
|
+
**Components:**
|
|
170
|
+
- {Component 1}
|
|
171
|
+
- {Component 2}
|
|
172
|
+
- {Component 3}
|
|
173
|
+
|
|
174
|
+
**Actions:**
|
|
175
|
+
- {Action 1} → {Result}
|
|
176
|
+
- {Action 2} → {Result}
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
# Appendix
|
|
181
|
+
|
|
182
|
+
## Original PO Input
|
|
183
|
+
|
|
184
|
+
> {Paste verbatim content from product-definition file — Context + Problem + Goal}
|
|
185
|
+
|
|
186
|
+
## References
|
|
187
|
+
|
|
188
|
+
- {[TICKET-ID](./TICKET-ID-slug.md) — relationship description}
|
|
189
|
+
|
|
190
|
+
## Existing API Contract *(chỉ điền khi API Source = existing)*
|
|
191
|
+
|
|
192
|
+
> API đã tồn tại trên hệ thống. PO ghi lại contract để BDD generation dùng trực tiếp —
|
|
193
|
+
> không cần tổng hợp từ FE/App BDD, không cần T7 sign-off gate.
|
|
194
|
+
|
|
195
|
+
| Method | Path | Auth | Request | Response |
|
|
196
|
+
|--------|------|------|---------|----------|
|
|
197
|
+
| {GET/POST/PUT/DELETE} | {/api/v1/path} | {Bearer / none} | `{ field: type }` | `{ field: type }` |
|
|
198
|
+
|
|
199
|
+
**Error responses:**
|
|
200
|
+
|
|
201
|
+
| HTTP Status | Error Code | Khi nào xảy ra |
|
|
202
|
+
|-------------|------------|----------------|
|
|
203
|
+
| {4xx/5xx} | {ERR_CODE} | {condition} |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## AI Assumptions
|
|
208
|
+
|
|
209
|
+
> Assumptions AI made when information was incomplete. Needs PO review and confirmation.
|
|
210
|
+
|
|
211
|
+
- {Assumption 1 — [AI DRAFT]}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Quality Checklist *(verify before writing)*
|
|
217
|
+
|
|
218
|
+
- [ ] Every AC is testable (clear pass/fail), no UI details (colors, fonts, button positions)
|
|
219
|
+
- [ ] Each UC has Actor / Description / Pre-condition / Post-condition
|
|
220
|
+
- [ ] Business Rule (WHAT) is separate from Business Logic (HOW)
|
|
221
|
+
- [ ] BR ID increments across whole PRD — does not reset per UC
|
|
222
|
+
- [ ] Every TICKET-ID cross-reference is an inline link `[TICKET-ID](./file.md)`
|
|
223
|
+
- [ ] No banned terms (if dictionary exists)
|
|
224
|
+
- [ ] User Flow includes error path / exception path
|
|
225
|
+
- [ ] Wireframe covers all screens related to Use Cases
|
|
226
|
+
- [ ] **Định dạng (readability)**: User Story / AC / các field của UC (Actor, Description, Pre/Post-condition) viết dạng bullet `- **Label:** …` — mỗi ý MỘT dòng, KHÔNG viết các dòng liền nhau (sẽ bị dồn thành 1 đoạn khi render); có một dòng trống trước và sau mỗi bảng
|
|
227
|
+
|
|
228
|
+
## Changelog Section (append at end of PRD)
|
|
229
|
+
|
|
230
|
+
Every PRD must end with this section. Start at v1.0:
|
|
231
|
+
|
|
232
|
+
```markdown
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Changelog
|
|
236
|
+
|
|
237
|
+
| Version | Date | Changes |
|
|
238
|
+
|---------|------|---------|
|
|
239
|
+
| 1.0 | {YYYY-MM-DD} | Initial version |
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Output
|
|
243
|
+
|
|
244
|
+
{{include:steps/report-footer.md}}
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
/generate-prd Complete — {TICKET-ID}
|
|
248
|
+
---
|
|
249
|
+
Status : ✅ Complete
|
|
250
|
+
Output Artifacts:
|
|
251
|
+
created {paths.specs_dir}/{domain}/{prd-slug}/prd.md (PRD v1.0)
|
|
252
|
+
Next : /refine-prd {paths.specs_dir}/{domain}/{prd-slug}/prd.md
|
|
253
|
+
→ then /review-context {prd-file} ← verify PRD quality before generating BDD
|
|
254
|
+
```
|