@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,147 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Reference](README.md) › Command Cheat-Sheet
|
|
2
|
+
|
|
3
|
+
# Command Cheat-Sheet — luồng & chọn lệnh
|
|
4
|
+
|
|
5
|
+
> Bối rối không biết **chạy lệnh nào, theo thứ tự nào, ai chạy**? Trang này là bản đồ 1 trang. Chi tiết Input/Output từng lệnh: [Command Reference](commands.md).
|
|
6
|
+
|
|
7
|
+
- [Luồng end-to-end (ai chạy gì)](#luồng-end-to-end-ai-chạy-gì)
|
|
8
|
+
- [Tôi muốn REVIEW thứ này → dùng lệnh nào?](#tôi-muốn-review-thứ-này--dùng-lệnh-nào)
|
|
9
|
+
- [Vòng review chuẩn: 3 bước (review → Board → resume)](#vòng-review-chuẩn-3-bước-review--board--resume)
|
|
10
|
+
- [Giải mã flag: mặc định vs --fix vs --resume](#giải-mã-flag-mặc-định-vs---fix-vs---resume)
|
|
11
|
+
- [QC pipeline — 6 bước tuần tự](#qc-pipeline--6-bước-tuần-tự)
|
|
12
|
+
- [dev-* vs qc-* — đừng nhầm](#dev--vs-qc---đừng-nhầm)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Luồng end-to-end (ai chạy gì)
|
|
17
|
+
|
|
18
|
+
Mỗi mũi tên = "xong cái trước mới sang cái sau". Nhãn dưới mỗi lệnh là **vai trò** chạy nó.
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart LR
|
|
22
|
+
A["/define-product<br/><b>PO</b>"] --> B["/generate-prd<br/><b>PO</b>"]
|
|
23
|
+
B --> C["/refine-prd<br/><b>PO</b> + Board"]
|
|
24
|
+
C --> D["/review-context (PRD)<br/><b>PO</b> · cổng chất lượng"]
|
|
25
|
+
D --> E["/generate-design-spec<br/><b>PO</b> (chỉ FE/App)"]
|
|
26
|
+
E --> F["/generate-bdd<br/><b>PO</b> · web→app→system"]
|
|
27
|
+
F --> G["/review-context (BDD)<br/><b>SA/Dev</b>"]
|
|
28
|
+
G --> H["/generate-tech-docs<br/><b>Dev</b> · BE trước, FE sau"]
|
|
29
|
+
H --> I["/review-tech-docs<br/><b>Dev</b> + Board"]
|
|
30
|
+
I --> J["/generate-code<br/><b>Dev</b>"]
|
|
31
|
+
J --> K["/review-code<br/><b>Dev</b> · 4 lens"]
|
|
32
|
+
K --> L["/dev-gen-test → /dev-run-test<br/><b>Dev</b> · self-check"]
|
|
33
|
+
L --> M["/qc-* (6 bước)<br/><b>QC/Tester</b>"]
|
|
34
|
+
M --> N["/validate-traces<br/><b>Tech Lead</b>"]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
> **BE bỏ qua Design Spec** (bước E) — đọc PRD trực tiếp rồi `/generate-bdd`. **Full-stack/không tách mock** → `/generate-code` một lần (bỏ qua FE 2-phase). Cross-cutting (`/sync`, `/fix-bug`, `/debug`, `/learn`, `/report-bug`, `/propose-scenario`) chạy bất cứ lúc nào, không nằm trong chuỗi này.
|
|
38
|
+
|
|
39
|
+
<details>
|
|
40
|
+
<summary>Bản text (ASCII fallback)</summary>
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
PO ───────────────────────────────────────────────────────────────────────────
|
|
44
|
+
/define-product → /generate-prd → /refine-prd → /review-context(PRD)
|
|
45
|
+
→ /generate-design-spec (FE/App)
|
|
46
|
+
→ /generate-bdd (web→app→system)
|
|
47
|
+
SA/Dev ────────────────────────────────────────────────────────────────────────
|
|
48
|
+
/review-context(BDD) → /generate-tech-docs → /review-tech-docs
|
|
49
|
+
→ /generate-code → /review-code → /dev-gen-test → /dev-run-test
|
|
50
|
+
QC/Tester ──────────────────────────────────────────────────────────────────────
|
|
51
|
+
/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
|
|
52
|
+
Tech Lead ──────────────────────────────────────────────────────────────────────
|
|
53
|
+
/validate-traces
|
|
54
|
+
```
|
|
55
|
+
</details>
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Tôi muốn REVIEW thứ này → dùng lệnh nào?
|
|
60
|
+
|
|
61
|
+
Có **4 lệnh review** cho **4 loại artifact khác nhau**. Đây là điểm hay nhầm nhất:
|
|
62
|
+
|
|
63
|
+
| Tôi muốn review… | Cách dùng (ví dụ) | Nó kiểm cái gì | Ai chạy |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| **PRD — nội dung & độ đầy đủ** | `/refine-prd specs/auth/login/prd.md` | 4 lens QA·DEV·SA·PO: AC có test được? edge case? scope rõ? | PO |
|
|
66
|
+
| **PRD — chất lượng trước khi approve** | `/review-context specs/auth/login/prd.md` | P-checks: banned term, mơ hồ, mâu thuẫn PRD khác, thiếu section, routing `@trace.domain` | PO |
|
|
67
|
+
| **BDD `.feature`** | `/review-context specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | B-checks: mỗi AC/BR → có ≥1 scenario? Gherkin R1–R10, compliance C1–C5 | SA/Dev |
|
|
68
|
+
| **Tech design** | `/review-tech-docs specs/auth/login/tech-docs/FEAT-01-UC1-tech-design.md` | T-checks: đúng layer/architecture, entity, trace BDD, cross-team API sign-off | Dev/SA |
|
|
69
|
+
| **Code** | `/review-code FEAT-01-UC1` | 4 lens: Security · Performance · Architecture · Test coverage | Dev |
|
|
70
|
+
|
|
71
|
+
> **Vì sao PRD có 2 lệnh review?** `/refine-prd` làm **trước** (cải thiện nội dung, fan-out 4 lens). `/review-context` làm **sau** như **cổng chất lượng cuối** trước khi approve + sang BDD. Thứ tự: `generate-prd → refine-prd → review-context → approve`.
|
|
72
|
+
>
|
|
73
|
+
> **Vì sao `/review-context` dùng cho cả PRD lẫn BDD?** Nó tự nhận loại theo file: `.md` trong `prd/` → PRD mode (P-checks); `.feature` → BDD mode (B-checks). Cùng một "cổng chất lượng", hai bộ tiêu chí.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Vòng review chuẩn: 3 bước (review → Board → resume)
|
|
78
|
+
|
|
79
|
+
Mọi lệnh review (`/refine-prd`, `/review-context`, `/review-tech-docs`) đều chạy **cùng một vòng 3 bước**. Lệnh review **không sửa file** — nó chỉ ghi ra findings; bạn duyệt ở Review Board; rồi `--resume` mới áp dụng.
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
① /refine-prd {file} ② Mở Review Board (extension) ③ /… --resume {file}
|
|
83
|
+
─────────────────────────── ────────────────────────────── ──────────────────────────
|
|
84
|
+
PHÂN TÍCH (read-only) → DUYỆT từng finding: → ÁP DỤNG cái đã accept
|
|
85
|
+
ghi .agent/review/ ✓Accept ✎Modify ⏸Defer ✗Reject + bump version + changelog
|
|
86
|
+
{slug}-findings.yaml 💬 Giải thích (nếu khó hiểu)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- **① không đụng vào file gốc.** An toàn chạy bất cứ lúc nào.
|
|
90
|
+
- **② Review Board** = panel của extension *Spec Driven Docs Tools*. Right-click file `*-findings.yaml` → Open Review Board, hoặc bấm thông báo khi findings vừa tạo. Finding khó hiểu → bấm **💬 Giải thích** (no-tech + đề xuất phương án, chờ confirm).
|
|
91
|
+
- **③ `--resume`** đọc các finding `accepted`/`modified` và áp vào file gốc, rồi bump version. Nút **⚡ Apply** trên Board tự chạy đúng lệnh `--resume` này cho bạn.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Giải mã flag: mặc định vs --fix vs --resume
|
|
96
|
+
|
|
97
|
+
Cùng một lệnh `/review-context` (và họ review nói chung) có **3 chế độ**. Đây là khác biệt:
|
|
98
|
+
|
|
99
|
+
| Chế độ | Lệnh | Làm gì | Khi nào |
|
|
100
|
+
|---|---|---|---|
|
|
101
|
+
| **Phân tích** (mặc định, không flag) | `/review-context {file}` | Chỉ phân tích → ghi findings. **Không sửa file.** | Bước ① mọi vòng review |
|
|
102
|
+
| **`--fix`** | `/review-context --fix {file}` | Phân tích **rồi tự áp ngay** các finding `auto_fixable` (banned term, metadata, coverage matrix…). Bỏ qua Board. | Dev muốn dọn nhanh lỗi máy-sửa-được, không cần người quyết |
|
|
103
|
+
| **`--resume`** | `/review-context --resume {file}` | **Không phân tích lại.** Đọc findings file, áp các finding **người đã accept** ở Board. | Bước ③ sau khi duyệt ở Board |
|
|
104
|
+
|
|
105
|
+
> **Nhớ nhanh:** `--fix` = "máy tự sửa cái an toàn **ngay**" · `--resume` = "áp cái **tôi đã duyệt**". Không flag = "chỉ xem, đừng động vào file".
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## QC pipeline — 6 bước tuần tự
|
|
110
|
+
|
|
111
|
+
QC là **chuỗi 6 lệnh chạy theo thứ tự** sau khi BDD đã approved. Output bước trước là input bước sau:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
|
|
115
|
+
scope test test-case duyệt chạy + report
|
|
116
|
+
+ gaps plan chi tiết TC/script qc_status HTML
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
| # | Lệnh | Ra cái gì |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| 1 | `/qc-analyze` | `REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md` |
|
|
122
|
+
| 2 | `/qc-plan` | `TEST_PLAN.md` (scope, layer, ưu tiên) |
|
|
123
|
+
| 3 | `/qc-design-test` | `test-cases/*.Test.md` |
|
|
124
|
+
| 4 | `/qc-review` | Verdict APPROVED / NEEDS_FIX (inline) |
|
|
125
|
+
| 5 | `/qc-run-test` | Script Python + ghi `qc_status` vào trace TSV |
|
|
126
|
+
| 6 | `/qc-report` | `report.html` (Playwright trace + pytest-html) |
|
|
127
|
+
|
|
128
|
+
> Chi tiết: [chương QC Automation](../02-guides/tester/qc-automation.md). Stack `qc-playwright`, độc lập với module code của dev.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## dev-* vs qc-* — đừng nhầm
|
|
133
|
+
|
|
134
|
+
Hai luồng test **tách biệt**, ghi **hai cột khác nhau** trong trace TSV:
|
|
135
|
+
|
|
136
|
+
| | `/dev-*` (dev self-check) | `/qc-*` (QC chính thức) |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| Ai chạy | **Dev** — tự kiểm code mình | **QC/Tester** |
|
|
139
|
+
| Lệnh | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` | `/qc-analyze` … `/qc-report` (6 bước) |
|
|
140
|
+
| Ghi signal | `dev_selftest` (pass/fail/not_run) | `qc_status` (pass/fail/skip/not_run) |
|
|
141
|
+
| Là coverage chính thức? | **KHÔNG** — chỉ tín hiệu "dev đã smoke" | **CÓ** — coverage authoritative |
|
|
142
|
+
|
|
143
|
+
> Cả hai hiển thị **cạnh nhau** trong Living Docs. `dev_selftest: pass` **không** thay thế QC. Xem [Traceability](../03-concepts/traceability.md#hai-tín-hiệu-test-dev_selftest-vs-qc_status).
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
*Xem thêm:* [Command Reference (chi tiết)](commands.md) · [Concepts › Pipeline](../03-concepts/pipeline.md) · [Developer › Workflow](../02-guides/developer/workflow.md)
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Reference](README.md) › Command Reference
|
|
2
|
+
|
|
3
|
+
# Command Reference
|
|
4
|
+
|
|
5
|
+
> Mọi slash command của framework, gom theo phase. Mỗi command kèm **Cách dùng (ví dụ cụ thể)**, **Output**, và **When to use**. Phần cuối mô tả **Command Internals** — kiến trúc step file dùng chung bởi mọi command.
|
|
6
|
+
>
|
|
7
|
+
> Ví dụ dùng chung một feature xuyên suốt: domain `auth`, ticket `FEAT-01`, use case `FEAT-01-UC1` (đăng nhập). Thay bằng file/UC-ID của bạn.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Mục lục
|
|
12
|
+
|
|
13
|
+
- [Setup & Maintenance](#setup--maintenance)
|
|
14
|
+
- [Phase 1 — Discovery](#phase-1--discovery)
|
|
15
|
+
- [Phase 2 — PRD](#phase-2--prd)
|
|
16
|
+
- [Phase 2b — Design Spec (FE/App)](#phase-2b--design-spec-feapp)
|
|
17
|
+
- [Phase 3 — BDD Spec](#phase-3--bdd-spec)
|
|
18
|
+
- [Phase 4 — Tech Design](#phase-4--tech-design)
|
|
19
|
+
- [Phase 5 — Code](#phase-5--code)
|
|
20
|
+
- [Phase 6 — Dev Self-Check](#phase-6--dev-self-check)
|
|
21
|
+
- [Phase 6b — QC Automation (official QC suite)](#phase-6b--qc-automation-official-qc-suite)
|
|
22
|
+
- [Phase 7 — Traceability Audit](#phase-7--traceability-audit)
|
|
23
|
+
- [Phase 8 — Tester / QC Feedback](#phase-8--tester--qc-feedback)
|
|
24
|
+
- [Debugging & Cross-cutting](#debugging--cross-cutting)
|
|
25
|
+
- [Command Internals — Step Architecture](#command-internals--step-architecture)
|
|
26
|
+
|
|
27
|
+
> **Lưu ý số phase:** README dùng cả "Phase 5b / Phase 6b" (sơ đồ workflow) và "Phase 6b" (bảng tổng quan) cho QC Automation. Ở đây dùng nhãn **Phase 6b** cho QC suite để khớp bảng "Phase overview". Dù số khác nhau, ý nghĩa không đổi: QC suite là pipeline `/qc-*` riêng biệt với dev self-check `/dev-*`.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Setup & Maintenance
|
|
32
|
+
|
|
33
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
34
|
+
|---------|-------------------|--------|-------------|
|
|
35
|
+
| `/setup-ai-first` | `/setup-ai-first` | Project structure + config files | First-time project setup |
|
|
36
|
+
| `/sync` | `/sync` | Git pull + submodule update + Living Docs sync | **Daily driver** — đồng bộ *nội dung* project (code/specs trong submodule) |
|
|
37
|
+
| `/update-framework` | `/update-framework` | Refreshed `.agent/` command files from npm | **Occasionally** — nâng cấp *bản thân framework* khi có version mới |
|
|
38
|
+
| `/sync-figma-components {module}` | `/sync-figma-components react` | Updated `figma-components/{module}.md` | After Figma design system changes |
|
|
39
|
+
| `/sync-figma-tokens {url?}` | `/sync-figma-tokens` *(hoặc kèm URL Figma)* | Updated `figma-tokens.md` | After design token changes |
|
|
40
|
+
|
|
41
|
+
> **`/sync` vs `/update-framework` là hai thứ khác nhau:**
|
|
42
|
+
> - `/sync` cập nhật **nội dung project** — pull code/specs mới từ git remote + refresh Living Docs. Nguồn = git remotes của bạn. Chạy thường xuyên.
|
|
43
|
+
> - `/update-framework` cập nhật **framework tooling** — refresh `.agent/commands/`, `steps/`, `modules/` lên version mới nhất. Nguồn = npm registry. Chạy hiếm. Không bao giờ đụng `project-context.yaml`, `CLAUDE.md`, domain-knowledge, hay `.trace/`.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Phase 1 — Discovery
|
|
48
|
+
|
|
49
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
50
|
+
|---------|-------------------|--------|-------------|
|
|
51
|
+
| `/define-product` | `/define-product` | `specs/product-definition/{TICKET-ID}-{slug}.md` | Starting any new feature. AI dẫn PO qua 7 phase Q&A có cấu trúc — không cần spec viết sẵn. |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Phase 2 — PRD
|
|
56
|
+
|
|
57
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
58
|
+
|---------|-------------------|--------|-------------|
|
|
59
|
+
| `/generate-prd` | `/generate-prd specs/product-definition/FEAT-01-login.md` | `specs/{domain}/{prd-slug}/prd.md` | After define-product. Thêm `API Source: existing` + section "Existing API Contract" cho feature brownfield. |
|
|
60
|
+
| `/refine-prd` | `/refine-prd specs/auth/login/prd.md` | `.agent/review/{prd-slug}-findings.yaml` | After generate-prd — fan-out 4 review lens + completeness-critic loop, mở Review Board. |
|
|
61
|
+
| `/refine-prd --resume` | `/refine-prd --resume specs/auth/login/prd.md` | Applied findings + bumped version | Sau khi review trong Review Board (nút ⚡ Apply tự chạy lệnh này). |
|
|
62
|
+
| `/review-context` (PRD) | `/review-context specs/auth/login/prd.md` | `.agent/review/{prd-slug}-review-context-findings.yaml` | Quality gate bắt buộc trước Phase 3. Checks: banned terms (P1), ambiguity (P2), conflicts (P3), completeness (P4). |
|
|
63
|
+
| `/review-context --fix` | `/review-context --fix specs/auth/login/prd.md` | Applies all auto-fixable findings immediately | Dev quick-fix, không cần Review Board. |
|
|
64
|
+
| `/review-context --resume` | `/review-context --resume specs/auth/login/prd.md` | Applies accepted findings + bump version | PO/SA review — human quyết từng finding. |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Phase 2b — Design Spec (FE/App)
|
|
69
|
+
|
|
70
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
71
|
+
|---------|-------------------|--------|-------------|
|
|
72
|
+
| `/generate-design-spec` | `/generate-design-spec specs/auth/login/prd.md` | `specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}.md` | FE/App: sau khi PRD approved, trước BDD. PO phải cấp **node-level Figma frame link** (URL có `?node-id=`) cho mỗi screen; AI fetch từng frame qua Figma MCP. Screen thiếu link → ❌ Missing, spec ở draft và chặn sign-off + `/generate-bdd`. |
|
|
73
|
+
|
|
74
|
+
> BE teams bỏ qua Phase 2b — đọc PRD trực tiếp rồi `/generate-bdd`.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Phase 3 — BDD Spec
|
|
79
|
+
|
|
80
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
81
|
+
|---------|-------------------|--------|-------------|
|
|
82
|
+
| `/generate-bdd` | `/generate-bdd specs/auth/login/prd.md` | `specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature` (multi-service: `{prd-slug}/bdd/{service}/{UC-ID}.feature`) | After PRD approved (+ Design Spec sign-off cho FE/App). Đọc Service/Module từ PRD metadata, áp platform vocabulary, hiện SC outline chờ confirm. **Thứ tự outside-in: web → app → system**; `system` **tổng hợp từ web+app BDD** (web&app lệch contract → CHECKPOINT chọn union/platform-hint/separate-endpoints, ghi `@system.resolution:`; chỉ-BE → từ PRD). PRD lớn (>3 UC hoặc >300 dòng) → orchestration mode (1 sub-agent / UC). |
|
|
83
|
+
| `/review-context` (BDD) | `/review-context specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `.agent/review/{uc-id}-review-bdd-findings.yaml` | Quality gate bắt buộc trước Phase 4. Checks: PRD coverage (mỗi AC + BR → ≥1 SC), Gherkin R1–R10, compliance C1–C5. |
|
|
84
|
+
| `/review-context --fix` | `/review-context --fix specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | Auto-fix terminology, metadata, coverage matrix | Dev quick-fix. |
|
|
85
|
+
| `/review-context --resume` | `/review-context --resume specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | Applies accepted findings + bump bdd_version | SA review. |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Phase 4 — Tech Design
|
|
90
|
+
|
|
91
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
92
|
+
|---------|-------------------|--------|-------------|
|
|
93
|
+
| `/generate-tech-docs` | `/generate-tech-docs specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | **BE** (`system`): `specs/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md` (API contract) · **FE/App** (`web`/`app`): `{UC-ID}-tech-design-{platform}.md` (client design) | After BDD approved. **Platform-aware** (`@trace.platform`): BE = API contract; FE/App = client design (components/state/API-integration/routing + **§2b Test Selectors**: test-id ổn định cho element có action → QC locate khỏi scan) — **GATED**: HALT nếu thiếu System BDD hoặc BE contract approved. Brownfield (`@trace.api_source: existing`) → reverse-document (BE). |
|
|
94
|
+
| `/map-testids {UC-ID}` | `/map-testids FEAT-01-UC1` | Cập nhật FE tech-design §2b Test Selectors + patch forwarding/usage-site + ghi `figma-components/{module}.md` | FE/App, cho component **reuse** / code **có sẵn** (brownfield): reverse-document id đang có, gán id còn thiếu, đảm bảo component dùng chung forward được test-id. Bổ trợ cho `/generate-tech-docs` (chỉ gán id cho code mới). |
|
|
95
|
+
| `/review-tech-docs` | `/review-tech-docs specs/auth/login/tech-docs/FEAT-01-UC1-tech-design.md` | `.agent/review/{uc-id}-tech-review-findings.yaml` | After generate-tech-docs — mở Review Board. |
|
|
96
|
+
| `/review-tech-docs --resume` | `/review-tech-docs --resume specs/auth/login/tech-docs/FEAT-01-UC1-tech-design.md` | Applies accepted findings + bump revision | Sau khi review trong Review Board. |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Phase 5 — Code
|
|
101
|
+
|
|
102
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
103
|
+
|---------|-------------------|--------|-------------|
|
|
104
|
+
| `/generate-code` | `/generate-code specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `src/...` (tags `@trace.implements`) | After tech-design approved. Default = full impl/BE. |
|
|
105
|
+
| `/generate-code --phase=ui` | `/generate-code --phase=ui specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | UI + mock API adapter | FE: BE chưa sẵn sàng — sinh UI + mock adapter. Mock **shape**: BE contract nếu có (chuẩn) → else System BDD + warn; fixture values luôn từ System BDD. Tester test FE ngay được. |
|
|
106
|
+
| `/generate-code --phase=integration` | `/generate-code --phase=integration specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | Wires real API | FE: sau khi T7 sign-off gate approved — thay mock adapter bằng real API calls. |
|
|
107
|
+
| `/review-code` | `/review-code FEAT-01-UC1` | Review report: Critical / Major / Minor | After generate-code. Check: mỗi scenario có endpoint, trace tags, layer rules, error handling khớp CLAUDE.md §5. Fix CRITICAL + MAJOR trước khi merge. |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Phase 6 — Dev Self-Check
|
|
112
|
+
|
|
113
|
+
> Đây là **developer self-check / smoke** — dev tự kiểm tra code mình vừa sinh ra. **Không phải** official QC suite (đó là Phase 6b `/qc-*`). Signal = `dev_selftest`, tách biệt với `qc_status`.
|
|
114
|
+
|
|
115
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
116
|
+
|---------|-------------------|--------|-------------|
|
|
117
|
+
| `/dev-gen-test` | `/dev-gen-test specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `src/test/...` (tags `@trace.verifies`) | After generate-code. Tự chọn test framework đúng platform. |
|
|
118
|
+
| `/dev-run-test` | `/dev-run-test FEAT-01-UC1` | Self-check report — ghi `dev_selftest` (pass/fail/not_run) + `dev_selftest_at` vào trace TSV | After dev-gen-test. |
|
|
119
|
+
| `/dev-smoke-test` | `/dev-smoke-test FEAT-01-UC1` | Live endpoint check | Optional — sau deploy. |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Phase 6b — QC Automation (official QC suite)
|
|
124
|
+
|
|
125
|
+
> Pipeline `/qc-*` **là** official QC suite. Chạy **theo thứ tự** sau khi BDD approved (`/review-context` (BDD) APPROVED). Tách biệt hoàn toàn với dev self-check: QC sở hữu `qc_status`, dev sở hữu `dev_selftest`. `/qc-run-test` & `/qc-report` dùng module `qc-playwright`, độc lập với dev implementation module. Xem [../02-guides/tester/qc-automation.md](../02-guides/tester/qc-automation.md).
|
|
126
|
+
|
|
127
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
128
|
+
|---------|-------------------|--------|-------------|
|
|
129
|
+
| `/qc-analyze` | `/qc-analyze FEAT-01-UC1` | **2 file** trong `{qc_dir}/{UC-ID}/` (mặc định `docs/`): `REQUIREMENT_ANALYSIS.md` (gộp requirement + BR + data-flow + AC) + `DOC_GAPS.md` | After BDD approved — đầu pipeline QC. |
|
|
130
|
+
| `/qc-plan` | `/qc-plan FEAT-01-UC1` | `{qc_dir}/{UC-ID}/TEST_PLAN.md` (scope, layers, priorities, questions-for-dev) | After `/qc-analyze`. |
|
|
131
|
+
| `/qc-design-test` | `/qc-design-test FEAT-01-UC1` | `{qc_dir}/{UC-ID}/test-cases/*.Test.md` mapped to `{UC-ID}-SC{N}` | After `/qc-plan`. |
|
|
132
|
+
| `/qc-review` | `/qc-review FEAT-01-UC1` | Verdict APPROVED / NEEDS_FIX + findings (**inline — không sinh file**) | After `/qc-design-test` (test-case) hoặc `/qc-run-test` (script). |
|
|
133
|
+
| `/qc-run-test` | `/qc-run-test FEAT-01-UC1` | Script Python (`pages/`, `tests/`) + ghi `qc_status` (pass/fail/skip/not_run) + `qc_run_at` vào trace TSV, keyed by `@trace.verifies={UC-ID}-SC{N}` | After `/qc-review`. |
|
|
134
|
+
| `/qc-report` | `/qc-report FEAT-01-UC1` | QC report `reports/<feature>/report.html` (Playwright Trace + pytest-html) | After `/qc-run-test`. |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Phase 7 — Traceability Audit
|
|
139
|
+
|
|
140
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
141
|
+
|---------|-------------------|--------|-------------|
|
|
142
|
+
| `/validate-traces {domain}` | `/validate-traces auth` *(hoặc `/validate-traces FEAT-01-UC1`)* | Coverage matrix + drift report + `trace-report.json` | Anytime — verify traceability. Đọc mọi `.trace/{domain}/{prd-slug}/{UC-ID}.tsv` rồi tính status OK / DRIFT / GAP / UNTRACKED. |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Phase 8 — Tester / QC Feedback
|
|
147
|
+
|
|
148
|
+
> Cả hai đều **read-only trên canonical specs/code**. Chúng chỉ ghi vào `feedback/` của shared spec repo và **commit + push** → PO/Dev thấy qua `/sync`. Tester/QC không bao giờ sửa `.feature` trực tiếp. QC cũng dùng hai lệnh này: `/qc-run-test` FAIL = product-gap và `/qc-analyze` DOC_GAPS blocker đều route sang `/report-bug` hoặc `/propose-scenario` (xem [../02-guides/tester/qc-automation.md](../02-guides/tester/qc-automation.md)).
|
|
149
|
+
|
|
150
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
151
|
+
|---------|-------------------|--------|-------------|
|
|
152
|
+
| `/report-bug {UC-ID} {desc}` | `/report-bug FEAT-01-UC1 "nhập sai mật khẩu vẫn đăng nhập được"` | `{spec_repo}/feedback/bug-reports/{BUG-ID}.md` + spec context + layer classification | Tester hoặc QC tìm thấy bug (gồm QC product-gap). Phân loại layer (Code/BDD/PRD/Design/Env) để route. |
|
|
153
|
+
| `/propose-scenario {UC-ID} {desc}` | `/propose-scenario FEAT-01-UC1 "khoá tài khoản sau 5 lần sai mật khẩu"` | `{spec_repo}/feedback/bdd-proposals/{UC-ID}-*.md` draft Gherkin | Tester hoặc QC tìm thấy edge case BDD chưa cover. Map vào PRD AC sẵn có, hoặc emit PRD change request nếu hành vi thực sự mới. |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Debugging & Cross-cutting
|
|
158
|
+
|
|
159
|
+
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
160
|
+
|---------|-------------------|--------|-------------|
|
|
161
|
+
| `/fix-bug {BUG-ID\|ticket\|desc}` | `/fix-bug BUG-012` *(hoặc ticket / mô tả lỗi)* | Code fix trên branch + regression test; nếu nhận `{BUG-ID}` → set report State `🟢 Open` → `🟡 Fixed` (QC re-verify pass mới → `🟢 Closed`) | Khi tìm thấy bug/ticket, hoặc route một filed bug report. |
|
|
162
|
+
| `/debug` | `/debug "NullPointerException ở LoginService"` | Debug session | Deep debugging. |
|
|
163
|
+
| `/learn {text}` | `/learn "AI hay dùng var, phải dùng const"` | Appends guardrail vào project lessons file | Khi AI lặp lại lỗi bạn muốn chặn. |
|
|
164
|
+
| `/generate-spec-manifest` | `/generate-spec-manifest` | `spec-manifest.yaml` | Sinh manifest làm entry point cho external/tester agents. |
|
|
165
|
+
|
|
166
|
+
> **Project Lessons:** lessons lưu ở `paths.lessons_file` (default `specs/domain-knowledge/lessons-learned.md`; per-service `.agent/project-lessons.md` trong umbrella mode). Context-loader **Step 6.7** load mọi lesson đầu **mỗi** command như hard constraint. Đây là *project memory*, không phải fine-tuning model.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Command Internals — Step Architecture
|
|
171
|
+
|
|
172
|
+
Mọi command trong `.agent/commands/` được compose từ **step file** dùng chung trong `.agent/steps/`. Các step này là nền móng — mọi command gọi chúng tuần tự trước khi chạy logic riêng.
|
|
173
|
+
|
|
174
|
+
### Step files at a glance
|
|
175
|
+
|
|
176
|
+
| File | Role | Called by |
|
|
177
|
+
|------|------|-----------|
|
|
178
|
+
| `gate.md` | Universal entry — model check, file resolution, context load, user checkpoint | Every command |
|
|
179
|
+
| `context-loader.md` | Multi-step context loading (stack → service routing → service conventions → arch → safety → domain → UI → recap) | `gate.md` Step 2 |
|
|
180
|
+
| `spawn-agent.md` | Sub-agent orchestration cho PRD lớn | `generate-bdd`, `generate-code`, `dev-gen-test` |
|
|
181
|
+
| `capture-lesson.md` | Append/refine guardrail vào project lessons file | `learn`, `review-code`, `fix-bug`, `debug` |
|
|
182
|
+
| `report-footer.md` | Standard output format (status badge, artifact list, next command) | Every command |
|
|
183
|
+
|
|
184
|
+
### gate.md — Universal Entry Procedure
|
|
185
|
+
|
|
186
|
+
| Step | What it does |
|
|
187
|
+
|------|-------------|
|
|
188
|
+
| **Step 0** | Sub-agent mode check — nếu `$ARGUMENTS` là JSON payload có `_agent_mode: true`, skip Steps 1–3 và dùng slim context trực tiếp |
|
|
189
|
+
| **Step 0-B** | Model check — prompt chuyển sang `claude-opus`; `S` để skip |
|
|
190
|
+
| **Step 1** | Resolve target file từ `$ARGUMENTS`; nếu thiếu, list candidates và hỏi user |
|
|
191
|
+
| **Step 2** | Execute `context-loader.md` — load mọi project context vào working memory |
|
|
192
|
+
| **Step 3** | CHECKPOINT — hiện summary (target file, stack, module, domains), chờ `Y` |
|
|
193
|
+
|
|
194
|
+
### context-loader.md — Context Loading Sequence
|
|
195
|
+
|
|
196
|
+
Load context theo thứ tự ưu tiên nghiêm ngặt (anti-lost-in-middle: facts critical load trước, RECAP restate cuối):
|
|
197
|
+
|
|
198
|
+
| Step | Priority | What loads |
|
|
199
|
+
|------|----------|-----------|
|
|
200
|
+
| 1 | PROJECT-CONFIG | `project-context.yaml` → stack, conventions, domains, services, paths |
|
|
201
|
+
| 1.5 | SERVICE ROUTING | *(umbrella only)* detect active domain, route `trace_dir` (+ code) → service submodule, store `service_root`. Khi `spec_source` set: `specs_dir` (BDD) / `tech_docs_dir` / PRD / design-spec / domain-knowledge / feedback → **spec repo** (cross-team), KHÔNG per-service |
|
|
202
|
+
| 1.6 | SERVICE CONVENTIONS | *(umbrella only)* load `{service_root}/.agent/project-context.yaml` → override `test_command`, `build_command`, `paths.trace_dir` |
|
|
203
|
+
| 2 | PROJECT-CONFIG | `.agent/modules/{module}/stack-profile.yaml` → framework-specific layer patterns |
|
|
204
|
+
| 3 | **CRITICAL** | `CLAUDE.md` → architecture layers, coding standards, naming |
|
|
205
|
+
| 4 | SAFETY | `.agent/rules/data-protection.md` → sensitive file patterns |
|
|
206
|
+
| 5 | DOMAIN | `business-dictionary.md` → canonical + banned terms |
|
|
207
|
+
| 6 | DOMAIN | `core-entities.md` → entity catalog |
|
|
208
|
+
| 6.7 | **GUARDRAILS** | `lessons_file` → accumulated lessons (via `/learn`) as hard constraints |
|
|
209
|
+
| 6-B | UI COMPONENTS | `figma-components/{module}.md` → Figma → code component + import path |
|
|
210
|
+
| 6-C | UI TOKENS | `figma-tokens.md` → design tokens |
|
|
211
|
+
| 7 | **RECAP** | `[CTX LOADED]` block printed để khóa critical facts vào working memory |
|
|
212
|
+
|
|
213
|
+
Status values của RECAP: `FULL` · `PARTIAL — missing: {list}` · `MINIMAL` (chỉ project-context.yaml).
|
|
214
|
+
|
|
215
|
+
### spawn-agent.md — Sub-Agent Orchestration
|
|
216
|
+
|
|
217
|
+
Khi PRD vượt ngưỡng complexity, `generate-bdd` / `generate-code` / `dev-gen-test` tự chuyển từ single-session sang orchestration mode.
|
|
218
|
+
|
|
219
|
+
| Signal | Threshold | Action |
|
|
220
|
+
|--------|-----------|--------|
|
|
221
|
+
| UC count in PRD | > 3 UCs | Spawn 1 sub-agent per UC |
|
|
222
|
+
| PRD length | > 300 lines | Spawn agents regardless of UC count |
|
|
223
|
+
|
|
224
|
+
Orchestrator: Step A build slim context JSON → Step B scan PRD → UC list → Step C announce plan → Step D spawn 1 sub-agent/UC (parallel, mỗi agent chỉ đọc UC section của mình) → Step E collect + merge results.
|
|
225
|
+
|
|
226
|
+
### report-footer.md — Standard Output Format
|
|
227
|
+
|
|
228
|
+
Mọi command kết thúc bằng footer: `Status` badge (`✅ Complete` · `⚠️ Warnings` · `❌ Failed`), danh sách **Output Artifacts** (created/updated), và field **Next** gợi ý command kế tiếp.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
*Xem thêm:* [Trace TSV Schema](trace-schema.md) · [Stack Modules](modules.md) · [02 · Guides](../02-guides/) (theo vai trò).
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Reference](README.md) › Stack Modules
|
|
2
|
+
|
|
3
|
+
# Stack Modules
|
|
4
|
+
|
|
5
|
+
> Mỗi module dưới `modules/` ship một `stack-profile.yaml` chứa layer pattern, naming rule, và test pattern riêng cho framework đó. Framework detect platform type từ `tech_stack.module` (hoặc `active_module` trong multi-service) và adapt mọi artifact sinh ra.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Mục lục
|
|
10
|
+
|
|
11
|
+
- [Danh sách module](#danh-sách-module)
|
|
12
|
+
- [Platform type grouping](#platform-type-grouping)
|
|
13
|
+
- [qc-playwright — QC automation stack](#qc-playwright--qc-automation-stack)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Danh sách module
|
|
18
|
+
|
|
19
|
+
15 module (xác minh bằng listing thư mục `modules/`):
|
|
20
|
+
|
|
21
|
+
| Module | Language / Framework | Platform type |
|
|
22
|
+
|--------|----------------------|---------------|
|
|
23
|
+
| `java-spring` | Java + Spring Boot | backend |
|
|
24
|
+
| `golang` | Go + Gin/Echo | backend |
|
|
25
|
+
| `dotnet` | C# + .NET / ASP.NET Core | backend |
|
|
26
|
+
| `php-laravel` | PHP + Laravel | backend |
|
|
27
|
+
| `context-engineering` | Generic AI/LLM projects | backend |
|
|
28
|
+
| `react` | TypeScript + React | web-frontend |
|
|
29
|
+
| `nextjs` | TypeScript + Next.js | web-frontend |
|
|
30
|
+
| `vue` | TypeScript + Vue 3 | web-frontend |
|
|
31
|
+
| `nuxt` | TypeScript + Nuxt 3 + @nuxt/ui | web-frontend |
|
|
32
|
+
| `angular` | TypeScript + Angular | web-frontend |
|
|
33
|
+
| `flutter` | Dart + Flutter | mobile |
|
|
34
|
+
| `react-native` | TypeScript + React Native / Expo | mobile |
|
|
35
|
+
| `ios-swiftui` | Swift + SwiftUI | mobile |
|
|
36
|
+
| `android-compose` | Kotlin + Jetpack Compose | mobile |
|
|
37
|
+
| `qc-playwright` | Python + pytest-playwright + Page Object | QC / E2E (xem dưới) |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Platform type grouping
|
|
42
|
+
|
|
43
|
+
`platform_type` được suy ra từ module và quyết định cách adapt BDD vocabulary, tech-design sections, và test templates.
|
|
44
|
+
|
|
45
|
+
| `platform_type` | Modules |
|
|
46
|
+
|-----------------|---------|
|
|
47
|
+
| `backend` | `java-spring`, `golang`, `dotnet`, `php-laravel`, `context-engineering` |
|
|
48
|
+
| `web-frontend` | `react`, `nextjs`, `vue`, `nuxt`, `angular` |
|
|
49
|
+
| `mobile` | `flutter`, `react-native`, `ios-swiftui`, `android-compose` |
|
|
50
|
+
|
|
51
|
+
Ví dụ adapt theo platform type:
|
|
52
|
+
|
|
53
|
+
- **BDD vocabulary** — backend dùng "submits a request" / "receives response"; web dùng "clicks" / "types into" / "navigates to"; mobile dùng "taps" / "enters" / "opens".
|
|
54
|
+
- **Tech-design sections** — backend: §4 API Endpoints / §5 Service Flow / §6 Data Model…; web-frontend: §4 Screen/Component Breakdown / §5 State Management…; mobile: §4 Screen/Widget Breakdown / §5 State & Data Flow….
|
|
55
|
+
- **Test templates** — Java → JUnit 5 + Mockito + `@WebMvcTest`; web → Vitest/Jest + Testing Library + Playwright/Cypress; Flutter → `testWidgets`; iOS → `XCTestCase`; Android → Compose rule + `@HiltAndroidTest`.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## qc-playwright — QC automation stack
|
|
60
|
+
|
|
61
|
+
`qc-playwright` là **stack QC automation độc lập** với dev implementation module. Nó power native QC pipeline (`/qc-run-test`, `/qc-report`) và được chọn qua `tech_stack.qc_module` hoặc per `/qc-*` run — không phụ thuộc vào stack dev (java-spring, react, flutter…). Per-layer guides nằm ở `skills/qc/<stage>/`. Xem [../02-guides/tester/qc-automation.md](../02-guides/tester/qc-automation.md).
|
|
62
|
+
|
|
63
|
+
**Stack** (từ `modules/qc-playwright/stack-profile.yaml`): Python 3 + pytest-playwright + Page Object Model. Report = Playwright Trace + pytest-html (**không** dùng Allure, không hand-written dashboard, không `record_video`).
|
|
64
|
+
|
|
65
|
+
**Build commands:**
|
|
66
|
+
|
|
67
|
+
| Mục đích | Command |
|
|
68
|
+
|----------|---------|
|
|
69
|
+
| Test | `python3 -m pytest` |
|
|
70
|
+
| E2E | `python3 -m pytest -m e2e` |
|
|
71
|
+
| Report | `python3 -m pytest --html=reports/<feature>/report.html --self-contained-html` |
|
|
72
|
+
| Show trace | `python3 -m playwright show-trace <test-results/<nodeid>/trace.zip>` |
|
|
73
|
+
|
|
74
|
+
**Key architecture rules:**
|
|
75
|
+
- **Markdown-first** — không sinh Python cho tới khi có `.Test.md` đã review cho feature.
|
|
76
|
+
- Không hard-code URL/credential/timeout — đọc từ `Env.*` và `CONFIG[...]`.
|
|
77
|
+
- Không `time.sleep()` — dùng Playwright auto-wait / `expect()`.
|
|
78
|
+
- Mỗi test độc lập qua pytest-playwright fixtures (`page` / `logged_in_page` / …).
|
|
79
|
+
- Page Object extends slim `BasePage`; tách 3 layer: locators `_x()`, actions `verb_noun()`, assertions `assert_x()` dùng `expect()`.
|
|
80
|
+
- Locator priority: `data-testid` → role → label/text → CSS → tránh XPath.
|
|
81
|
+
- Group test theo `(role, account)` để login/logout không interleave giữa các role.
|
|
82
|
+
- Cover 100% TC trong `.Test.md` — mỗi TC kết thúc Pass/Fail/Skip, không để Draft.
|
|
83
|
+
|
|
84
|
+
**Naming:** test case id `TC_<FEATURE>_<NNN>` · test class `TestFeatureHappyCase` · test function `test_TC<NNN>_<snake_case>` · page object `<feature>_page.py` (`<Feature>Page` extends `BasePage`).
|
|
85
|
+
|
|
86
|
+
**Folder structure:**
|
|
87
|
+
```
|
|
88
|
+
{paths.qc_dir}/{UC-ID}/test-cases/ ← test-case Markdown (.Test.md) — source of truth (mặc định docs/, lộ ra ngoài)
|
|
89
|
+
pages/ ← Page Object Model (base_page.py + <feature>_page.py)
|
|
90
|
+
tests/ ← pytest scripts, 1-1 với test-cases/ (conftest.py + test_<feature>.py)
|
|
91
|
+
utils/ ← config_loader, logger, steps, test_ordering, report helpers
|
|
92
|
+
test_data/ ← JSON datasets
|
|
93
|
+
config/config.yaml ← browser, timeout, video/screenshot/trace toggles
|
|
94
|
+
reports/ test-results/ ← generated (gitignored): html report, trace.zip, screenshots
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Test layers:** functional (gui-screen / gui-feature / api) · integration (api/db/gui/kafka) · e2e (journey) · non-functional · exploratory.
|
|
98
|
+
|
|
99
|
+
**Trace tags** (map QC test về scenario, drive `qc_status`):
|
|
100
|
+
```python
|
|
101
|
+
# @trace.verifies={UC-ID}-SC{N}
|
|
102
|
+
# @trace.source=<official .feature path>
|
|
103
|
+
# @trace.test_type=functional|integration|e2e|non-functional
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> `/qc-run-test` ghi `pass|fail|skip|not_run` + `qc_run_at` vào `{trace_dir}/{UC-ID}.tsv` (song song với `dev_selftest`), surfaced trong Living Docs là kết quả QC automation **chính thức**. Mỗi FAIL được phân loại script-bug (fix selector/logic) vs product-gap (giữ FAIL + evidence, không bao giờ fake-pass).
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
*Xem thêm:* [Trace TSV Schema](trace-schema.md) (`qc_status` vs `dev_selftest`) · [Command Reference](commands.md) (pipeline `/qc-*`) · [02 · Guides · QC Automation](../02-guides/tester/qc-automation.md).
|