@educa-corp/sdd-framework 0.1.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 +609 -0
- package/commands/debug.md +835 -0
- package/commands/debug.tmpl +257 -0
- package/commands/define-product.md +746 -0
- package/commands/define-product.tmpl +191 -0
- package/commands/dev-gen-test.md +1015 -0
- package/commands/dev-gen-test.tmpl +490 -0
- package/commands/dev-run-test.md +749 -0
- package/commands/dev-run-test.tmpl +224 -0
- package/commands/dev-smoke-test.md +716 -0
- package/commands/dev-smoke-test.tmpl +217 -0
- package/commands/fix-bug.md +749 -0
- package/commands/fix-bug.tmpl +171 -0
- package/commands/generate-bdd.md +1144 -0
- package/commands/generate-bdd.tmpl +499 -0
- package/commands/generate-code.md +1038 -0
- package/commands/generate-code.tmpl +513 -0
- package/commands/generate-design-spec.md +1079 -0
- package/commands/generate-design-spec.tmpl +524 -0
- package/commands/generate-prd.md +945 -0
- package/commands/generate-prd.tmpl +166 -0
- package/commands/generate-spec-manifest.md +663 -0
- package/commands/generate-spec-manifest.tmpl +164 -0
- package/commands/generate-tech-docs.md +1249 -0
- package/commands/generate-tech-docs.tmpl +252 -0
- package/commands/learn.md +641 -0
- package/commands/learn.tmpl +63 -0
- package/commands/map-testids.md +580 -0
- package/commands/map-testids.tmpl +81 -0
- package/commands/propose-scenario.md +632 -0
- package/commands/propose-scenario.tmpl +133 -0
- package/commands/qc-analyze.md +611 -0
- package/commands/qc-analyze.tmpl +112 -0
- package/commands/qc-design-test.md +567 -0
- package/commands/qc-design-test.tmpl +68 -0
- package/commands/qc-plan.md +548 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +559 -0
- package/commands/qc-report.tmpl +60 -0
- package/commands/qc-review.md +552 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +609 -0
- package/commands/qc-run-test.tmpl +84 -0
- package/commands/refine-prd.md +992 -0
- package/commands/refine-prd.tmpl +278 -0
- package/commands/report-bug.md +647 -0
- package/commands/report-bug.tmpl +148 -0
- package/commands/review-code.md +682 -0
- package/commands/review-code.tmpl +104 -0
- package/commands/review-context.md +1202 -0
- package/commands/review-context.tmpl +488 -0
- package/commands/review-tech-docs.md +871 -0
- package/commands/review-tech-docs.tmpl +372 -0
- package/commands/setup-ai-first.md +546 -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 +928 -0
- package/commands/validate-traces.tmpl +429 -0
- package/core/FRAMEWORK_VERSION +1 -0
- package/core/commands/debug.md +835 -0
- package/core/commands/define-product.md +746 -0
- package/core/commands/dev-gen-test.md +1015 -0
- package/core/commands/dev-run-test.md +749 -0
- package/core/commands/dev-smoke-test.md +716 -0
- package/core/commands/fix-bug.md +749 -0
- package/core/commands/generate-bdd.md +1144 -0
- package/core/commands/generate-code.md +1038 -0
- package/core/commands/generate-design-spec.md +1079 -0
- package/core/commands/generate-prd.md +945 -0
- package/core/commands/generate-spec-manifest.md +663 -0
- package/core/commands/generate-tech-docs.md +1249 -0
- package/core/commands/learn.md +641 -0
- package/core/commands/map-testids.md +580 -0
- package/core/commands/propose-scenario.md +632 -0
- package/core/commands/qc-analyze.md +611 -0
- package/core/commands/qc-design-test.md +567 -0
- package/core/commands/qc-plan.md +548 -0
- package/core/commands/qc-report.md +559 -0
- package/core/commands/qc-review.md +552 -0
- package/core/commands/qc-run-test.md +609 -0
- package/core/commands/refine-prd.md +992 -0
- package/core/commands/report-bug.md +647 -0
- package/core/commands/review-code.md +682 -0
- package/core/commands/review-context.md +1202 -0
- package/core/commands/review-tech-docs.md +871 -0
- package/core/commands/setup-ai-first.md +546 -0
- package/core/commands/sync.md +451 -0
- package/core/commands/update-framework.md +251 -0
- package/core/commands/validate-traces.md +928 -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 +19 -0
- package/core/skills/debug/SKILL.md +19 -0
- package/core/skills/design-spec/SKILL.md +11 -0
- package/core/skills/discovery/SKILL.md +14 -0
- package/core/skills/prd/SKILL.md +19 -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 +11 -0
- package/core/skills/spec/SKILL.md +19 -0
- package/core/skills/test/SKILL.md +18 -0
- package/core/steps/business-language.md +56 -0
- package/core/steps/capture-lesson.md +79 -0
- package/core/steps/context-loader.md +311 -0
- package/core/steps/gate.md +88 -0
- package/core/steps/report-footer.md +100 -0
- package/core/steps/review-fanout.md +159 -0
- package/core/steps/spawn-agent.md +129 -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 +120 -0
- package/core/templates/platform-guide.template.md +145 -0
- package/core/templates/prd.template.md +224 -0
- package/core/templates/product-definition.template.md +188 -0
- package/core/templates/project-context.yaml +161 -0
- package/core/templates/tech-design.template.md +498 -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 +86 -0
- package/docs/02-guides/README.md +26 -0
- package/docs/02-guides/bdd-input-checklist.md +68 -0
- package/docs/02-guides/developer/README.md +49 -0
- package/docs/02-guides/developer/bdd-and-trace.md +126 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +16 -0
- package/docs/02-guides/developer/scenarios.md +460 -0
- package/docs/02-guides/developer/workflow.md +121 -0
- package/docs/02-guides/prd-input-checklist.md +94 -0
- package/docs/02-guides/product-owner/README.md +81 -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 +438 -0
- package/docs/02-guides/tech-docs-input-checklist.md +109 -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 +20 -0
- package/docs/03-concepts/architecture.md +248 -0
- package/docs/03-concepts/mechanisms-explained.md +124 -0
- package/docs/03-concepts/pipeline.md +278 -0
- package/docs/03-concepts/traceability.md +152 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +364 -0
- package/docs/04-operations/publishing.md +154 -0
- package/docs/04-operations/sync-and-update.md +522 -0
- package/docs/05-reference/README.md +34 -0
- package/docs/05-reference/command-cheatsheet.md +147 -0
- package/docs/05-reference/commands.md +234 -0
- package/docs/05-reference/model-selection.md +74 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +154 -0
- package/docs/06-commands/README.md +75 -0
- package/docs/06-commands/explain-debug.md +32 -0
- package/docs/06-commands/explain-define-product.md +43 -0
- package/docs/06-commands/explain-dev-gen-test.md +28 -0
- package/docs/06-commands/explain-dev-run-test.md +24 -0
- package/docs/06-commands/explain-dev-smoke-test.md +25 -0
- package/docs/06-commands/explain-fix-bug.md +28 -0
- package/docs/06-commands/explain-generate-bdd.md +45 -0
- package/docs/06-commands/explain-generate-code.md +53 -0
- package/docs/06-commands/explain-generate-design-spec.md +54 -0
- package/docs/06-commands/explain-generate-prd.md +45 -0
- package/docs/06-commands/explain-generate-spec-manifest.md +20 -0
- package/docs/06-commands/explain-generate-tech-docs.md +56 -0
- package/docs/06-commands/explain-learn.md +21 -0
- package/docs/06-commands/explain-map-testids.md +28 -0
- package/docs/06-commands/explain-propose-scenario.md +24 -0
- package/docs/06-commands/explain-qc-analyze.md +22 -0
- package/docs/06-commands/explain-qc-design-test.md +20 -0
- package/docs/06-commands/explain-qc-plan.md +21 -0
- package/docs/06-commands/explain-qc-report.md +23 -0
- package/docs/06-commands/explain-qc-review.md +24 -0
- package/docs/06-commands/explain-qc-run-test.md +27 -0
- package/docs/06-commands/explain-refine-prd.md +51 -0
- package/docs/06-commands/explain-report-bug.md +24 -0
- package/docs/06-commands/explain-review-code.md +45 -0
- package/docs/06-commands/explain-review-context.md +68 -0
- package/docs/06-commands/explain-review-tech-docs.md +45 -0
- package/docs/06-commands/explain-setup-ai-first.md +25 -0
- package/docs/06-commands/explain-sync.md +24 -0
- package/docs/06-commands/explain-update-framework.md +22 -0
- package/docs/06-commands/explain-validate-traces.md +25 -0
- package/docs/README.md +53 -0
- package/docs/t-sample.md +826 -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/readme.txt +1 -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 +258 -0
- package/scripts/rename-prd-files.js +174 -0
- package/scripts/upgrade.sh +94 -0
- package/skills/code/SKILL.md +19 -0
- package/skills/code/SKILL.tmpl +19 -0
- package/skills/debug/SKILL.md +19 -0
- package/skills/debug/SKILL.tmpl +19 -0
- package/skills/design-spec/SKILL.md +11 -0
- package/skills/design-spec/SKILL.tmpl +11 -0
- package/skills/discovery/SKILL.md +14 -0
- package/skills/discovery/SKILL.tmpl +14 -0
- package/skills/prd/SKILL.md +19 -0
- package/skills/prd/SKILL.tmpl +19 -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 +11 -0
- package/skills/setup-ai-first/SKILL.tmpl +11 -0
- package/skills/spec/SKILL.md +19 -0
- package/skills/spec/SKILL.tmpl +19 -0
- package/skills/test/SKILL.md +18 -0
- package/skills/test/SKILL.tmpl +18 -0
- package/steps/business-language.md +56 -0
- package/steps/capture-lesson.md +79 -0
- package/steps/context-loader.md +311 -0
- package/steps/gate.md +88 -0
- package/steps/report-footer.md +100 -0
- package/steps/review-fanout.md +159 -0
- package/steps/spawn-agent.md +129 -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 +120 -0
- package/templates/platform-guide.template.md +145 -0
- package/templates/prd.template.md +224 -0
- package/templates/product-definition.template.md +188 -0
- package/templates/project-context.yaml +161 -0
- package/templates/tech-design.template.md +498 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: "React"
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: "React 18 SPA with hooks, React Query, and Zustand"
|
|
4
|
+
language: "TypeScript"
|
|
5
|
+
framework: "React"
|
|
6
|
+
stack_type: "frontend"
|
|
7
|
+
default_layer_order:
|
|
8
|
+
- Types / interfaces
|
|
9
|
+
- API client (React Query hooks)
|
|
10
|
+
- State store (Zustand)
|
|
11
|
+
- Custom hooks (business logic)
|
|
12
|
+
- UI components (presentational)
|
|
13
|
+
- Page / feature components (container)
|
|
14
|
+
test_framework: "Vitest + React Testing Library"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
build:
|
|
2
|
+
compile: "npm run build"
|
|
3
|
+
test: "npm test"
|
|
4
|
+
run: "npm run dev"
|
|
5
|
+
lint: "npm run lint"
|
|
6
|
+
|
|
7
|
+
architecture:
|
|
8
|
+
style: "Feature-based (components → hooks → queries → store)"
|
|
9
|
+
key_rules:
|
|
10
|
+
- "Business logic lives in custom hooks, not in components"
|
|
11
|
+
- "Server state managed by React Query (useQuery / useMutation)"
|
|
12
|
+
- "Client-only UI state managed by Zustand or useState"
|
|
13
|
+
- "Components must be pure functions — no direct API calls inside JSX"
|
|
14
|
+
- "Shared UI primitives in components/ui/, feature logic in features/{name}/"
|
|
15
|
+
- "Never fetch data directly in a component — use a custom hook"
|
|
16
|
+
folder_structure: |
|
|
17
|
+
src/
|
|
18
|
+
├── api/ ← axios instance, interceptors
|
|
19
|
+
├── components/
|
|
20
|
+
│ └── ui/ ← reusable primitives (Button, Modal, Table...)
|
|
21
|
+
├── features/
|
|
22
|
+
│ └── {domain}/
|
|
23
|
+
│ ├── components/ ← feature-specific UI
|
|
24
|
+
│ ├── hooks/ ← useOrderList, useCreateOrder...
|
|
25
|
+
│ ├── queries/ ← React Query definitions
|
|
26
|
+
│ ├── store/ ← Zustand slice (if needed)
|
|
27
|
+
│ └── types.ts
|
|
28
|
+
├── pages/ ← route-level page components
|
|
29
|
+
└── lib/ ← utilities, formatters, constants
|
|
30
|
+
|
|
31
|
+
coding_standards:
|
|
32
|
+
naming:
|
|
33
|
+
components: "PascalCase (e.g., OrderList, CreateOrderModal)"
|
|
34
|
+
hooks: "camelCase with 'use' prefix (e.g., useOrderList, useCreateOrder)"
|
|
35
|
+
query_keys: "SCREAMING_SNAKE_CASE array (e.g., ['ORDER_LIST', customerId])"
|
|
36
|
+
stores: "camelCase + Store suffix (e.g., useCartStore)"
|
|
37
|
+
files:
|
|
38
|
+
component: "{Feature}.tsx"
|
|
39
|
+
hook: "use{Feature}.ts"
|
|
40
|
+
query: "{feature}.queries.ts"
|
|
41
|
+
store: "{feature}.store.ts"
|
|
42
|
+
types: "{feature}.types.ts"
|
|
43
|
+
patterns:
|
|
44
|
+
data_fetching: "React Query (TanStack Query v5)"
|
|
45
|
+
global_state: "Zustand slices"
|
|
46
|
+
forms: "React Hook Form + Zod validation"
|
|
47
|
+
api_client: "Axios with interceptors for auth + error handling"
|
|
48
|
+
error_boundary: "React ErrorBoundary wraps each feature route"
|
|
49
|
+
|
|
50
|
+
testing:
|
|
51
|
+
unit: "Vitest + React Testing Library"
|
|
52
|
+
e2e: "Playwright or Cypress"
|
|
53
|
+
patterns:
|
|
54
|
+
- "Test behavior, not implementation — query by role/label, not className"
|
|
55
|
+
- "Mock React Query with a QueryClient wrapper in test setup"
|
|
56
|
+
- "Use MSW (Mock Service Worker) to mock API calls in tests"
|
|
57
|
+
- "renderWithProviders() helper wraps component with QueryClient + Router"
|
|
58
|
+
|
|
59
|
+
trace_tags:
|
|
60
|
+
implements: "// @trace.implements={UC-ID}-SC{N}"
|
|
61
|
+
source: "// @trace.source=specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature"
|
|
62
|
+
verifies: "// @trace.verifies={UC-ID}"
|
|
63
|
+
test_type: "// @trace.test_type=unit|integration"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: "React Native"
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: "Cross-platform mobile (iOS + Android) with React Native / Expo"
|
|
4
|
+
language: "TypeScript"
|
|
5
|
+
framework: "React Native"
|
|
6
|
+
stack_type: "mobile"
|
|
7
|
+
default_layer_order:
|
|
8
|
+
- Types / interfaces
|
|
9
|
+
- API client (React Query hooks)
|
|
10
|
+
- State store (Zustand)
|
|
11
|
+
- Custom hooks (business logic)
|
|
12
|
+
- UI components (presentational)
|
|
13
|
+
- Screen / feature components (container)
|
|
14
|
+
test_framework: "Jest + React Native Testing Library"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
build:
|
|
2
|
+
compile: "npx expo export / npx react-native build-android"
|
|
3
|
+
test: "jest"
|
|
4
|
+
run: "npx expo start / npx react-native run-ios"
|
|
5
|
+
lint: "eslint . && tsc --noEmit"
|
|
6
|
+
|
|
7
|
+
architecture:
|
|
8
|
+
style: "Feature-based (screens → hooks → queries → store)"
|
|
9
|
+
key_rules:
|
|
10
|
+
- "Business logic lives in custom hooks, not in screen components"
|
|
11
|
+
- "Server state managed by React Query (TanStack Query)"
|
|
12
|
+
- "Navigation state managed by React Navigation"
|
|
13
|
+
- "Native modules wrapped in a service layer — never called directly in components"
|
|
14
|
+
- "Shared UI primitives in src/components/ui/, feature screens in src/features/{name}/"
|
|
15
|
+
folder_structure: |
|
|
16
|
+
src/
|
|
17
|
+
├── api/ ← axios instance, interceptors
|
|
18
|
+
├── components/
|
|
19
|
+
│ └── ui/ ← reusable primitives (AppButton, AppInput...)
|
|
20
|
+
├── features/
|
|
21
|
+
│ └── {domain}/
|
|
22
|
+
│ ├── components/
|
|
23
|
+
│ ├── hooks/
|
|
24
|
+
│ ├── queries/
|
|
25
|
+
│ └── screens/
|
|
26
|
+
├── navigation/ ← React Navigation stacks/tabs
|
|
27
|
+
├── store/ ← Zustand slices
|
|
28
|
+
└── lib/ ← utils, formatters, constants
|
|
29
|
+
|
|
30
|
+
coding_standards:
|
|
31
|
+
naming:
|
|
32
|
+
components: "PascalCase (e.g., OrderListScreen, CreateOrderForm)"
|
|
33
|
+
hooks: "camelCase with 'use' prefix (e.g., useOrderList)"
|
|
34
|
+
screens: "PascalCase + Screen suffix (e.g., OrderDetailScreen)"
|
|
35
|
+
files:
|
|
36
|
+
screen: "{Feature}Screen.tsx"
|
|
37
|
+
component: "{Feature}.tsx"
|
|
38
|
+
hook: "use{Feature}.ts"
|
|
39
|
+
patterns:
|
|
40
|
+
state_management: "Zustand + React Query"
|
|
41
|
+
navigation: "React Navigation v6 (Stack + Tab + Drawer)"
|
|
42
|
+
networking: "Axios"
|
|
43
|
+
forms: "React Hook Form + Zod"
|
|
44
|
+
storage: "MMKV or AsyncStorage"
|
|
45
|
+
|
|
46
|
+
testing:
|
|
47
|
+
unit: "Jest + React Native Testing Library"
|
|
48
|
+
e2e: "Detox or Maestro"
|
|
49
|
+
patterns:
|
|
50
|
+
- "Test by accessibility label or testID — never by style/className"
|
|
51
|
+
- "Mock native modules in jest setup"
|
|
52
|
+
- "Use renderWithProviders() with NavigationContainer + QueryClient"
|
|
53
|
+
|
|
54
|
+
trace_tags:
|
|
55
|
+
implements: "// @trace.implements={UC-ID}-SC{N}"
|
|
56
|
+
source: "// @trace.source=specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: "Vue"
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: "Vue 3 SPA with Composition API, Pinia, and Vue Query"
|
|
4
|
+
language: "TypeScript"
|
|
5
|
+
framework: "Vue 3"
|
|
6
|
+
stack_type: "frontend"
|
|
7
|
+
default_layer_order:
|
|
8
|
+
- Types / interfaces
|
|
9
|
+
- API client (Vue Query / composables)
|
|
10
|
+
- State store (Pinia)
|
|
11
|
+
- Composables (business logic)
|
|
12
|
+
- UI components (presentational)
|
|
13
|
+
- Page / feature components (container)
|
|
14
|
+
test_framework: "Vitest + Vue Test Utils"
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
build:
|
|
2
|
+
compile: "npm run build"
|
|
3
|
+
test: "npm run test"
|
|
4
|
+
run: "npm run dev"
|
|
5
|
+
lint: "npm run lint"
|
|
6
|
+
|
|
7
|
+
architecture:
|
|
8
|
+
style: "Feature-based (components → composables → queries → store)"
|
|
9
|
+
key_rules:
|
|
10
|
+
- "Business logic lives in composables, not in component setup()"
|
|
11
|
+
- "Server state managed by Vue Query (@tanstack/vue-query)"
|
|
12
|
+
- "Client-only UI state managed by Pinia stores"
|
|
13
|
+
- "Components must be pure — no direct API calls inside <template> or setup()"
|
|
14
|
+
- "Shared UI primitives in components/ui/, feature logic in features/{name}/"
|
|
15
|
+
- "Never fetch data directly in a component — use a composable"
|
|
16
|
+
- "Props defined with defineProps<{}>(), emits with defineEmits<{}>()"
|
|
17
|
+
folder_structure: |
|
|
18
|
+
src/
|
|
19
|
+
├── api/ ← axios instance, interceptors
|
|
20
|
+
├── components/
|
|
21
|
+
│ └── ui/ ← reusable primitives (BaseButton, BaseInput...)
|
|
22
|
+
├── features/
|
|
23
|
+
│ └── {domain}/
|
|
24
|
+
│ ├── components/ ← feature-specific UI
|
|
25
|
+
│ ├── composables/ ← useOrderList, useCreateOrder...
|
|
26
|
+
│ ├── queries/ ← Vue Query definitions
|
|
27
|
+
│ ├── store/ ← Pinia slice (if needed)
|
|
28
|
+
│ └── types.ts
|
|
29
|
+
├── pages/ ← route-level page components (Vue Router)
|
|
30
|
+
├── router/ ← route definitions
|
|
31
|
+
└── lib/ ← utilities, formatters, constants
|
|
32
|
+
|
|
33
|
+
coding_standards:
|
|
34
|
+
naming:
|
|
35
|
+
components: "PascalCase (e.g., OrderList, CreateOrderModal)"
|
|
36
|
+
composables: "camelCase with 'use' prefix (e.g., useOrderList, useCreateOrder)"
|
|
37
|
+
stores: "camelCase + Store suffix (e.g., useCartStore) — defined with defineStore()"
|
|
38
|
+
query_keys: "SCREAMING_SNAKE_CASE string/array (e.g., ['ORDER_LIST', customerId])"
|
|
39
|
+
files:
|
|
40
|
+
component: "{Feature}.vue"
|
|
41
|
+
composable: "use{Feature}.ts"
|
|
42
|
+
query: "{feature}.queries.ts"
|
|
43
|
+
store: "{feature}.store.ts"
|
|
44
|
+
types: "{feature}.types.ts"
|
|
45
|
+
patterns:
|
|
46
|
+
data_fetching: "Vue Query (TanStack Query v5 for Vue)"
|
|
47
|
+
global_state: "Pinia stores"
|
|
48
|
+
forms: "VeeValidate + Zod"
|
|
49
|
+
api_client: "Axios with interceptors for auth + error handling"
|
|
50
|
+
reactivity: "ref() for primitives, reactive() for objects, computed() for derived state"
|
|
51
|
+
|
|
52
|
+
testing:
|
|
53
|
+
unit: "Vitest + Vue Test Utils"
|
|
54
|
+
e2e: "Playwright or Cypress"
|
|
55
|
+
patterns:
|
|
56
|
+
- "Test behavior, not implementation — query by role/label via @testing-library/vue"
|
|
57
|
+
- "Mock Vue Query with VueQueryPlugin wrapper in test setup"
|
|
58
|
+
- "Use MSW (Mock Service Worker) to mock API calls in tests"
|
|
59
|
+
- "mountWithProviders() helper wraps component with Pinia + VueQuery + Router"
|
|
60
|
+
|
|
61
|
+
trace_tags:
|
|
62
|
+
implements: "// @trace.implements={UC-ID}-SC{N}"
|
|
63
|
+
source: "// @trace.source=specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature"
|
|
64
|
+
verifies: "// @trace.verifies={UC-ID}"
|
|
65
|
+
test_type: "// @trace.test_type=unit|integration"
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Data Protection Rules
|
|
2
|
+
|
|
3
|
+
> These rules are loaded by `steps/context-loader.md` at the start of every command.
|
|
4
|
+
> AI agents MUST follow these rules without exception.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## NEVER Read — Sensitive Files
|
|
9
|
+
|
|
10
|
+
The following file patterns contain credentials, secrets, or private keys.
|
|
11
|
+
**Do NOT read, display, log, or reference their contents under any circumstance.**
|
|
12
|
+
|
|
13
|
+
### Environment & Secrets
|
|
14
|
+
- `.env`
|
|
15
|
+
- `.env.*` (e.g., `.env.local`, `.env.production`, `.env.staging`)
|
|
16
|
+
- `*.secret`
|
|
17
|
+
- `secrets/` (entire directory)
|
|
18
|
+
- `.secrets/` (entire directory)
|
|
19
|
+
- `*credentials*`
|
|
20
|
+
|
|
21
|
+
### Cryptographic Keys & Certificates
|
|
22
|
+
- `*.key`
|
|
23
|
+
- `*.pem`
|
|
24
|
+
- `*.p12`
|
|
25
|
+
- `*.pfx`
|
|
26
|
+
- `*.jks`
|
|
27
|
+
- `*.keystore`
|
|
28
|
+
- `*.crt` / `*.cert`
|
|
29
|
+
|
|
30
|
+
### Framework-Specific Config Files (may contain DB passwords, API keys)
|
|
31
|
+
- `application-prod.yml` / `application-prod.properties`
|
|
32
|
+
- `application-production.yml`
|
|
33
|
+
- `appsettings.Production.json`
|
|
34
|
+
- `appsettings.Staging.json`
|
|
35
|
+
- `database.yml` (Rails)
|
|
36
|
+
- `config/master.key` (Rails)
|
|
37
|
+
- `storage/oauth-private.key`
|
|
38
|
+
|
|
39
|
+
### Files Matching Dangerous Keywords
|
|
40
|
+
Any file whose name contains (case-insensitive):
|
|
41
|
+
- `password`
|
|
42
|
+
- `passwd`
|
|
43
|
+
- `secret`
|
|
44
|
+
- `private_key`
|
|
45
|
+
- `api_key`
|
|
46
|
+
- `access_token`
|
|
47
|
+
- `auth_token`
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## NEVER Write or Modify
|
|
52
|
+
|
|
53
|
+
- Any file listed above
|
|
54
|
+
- `*.lock` files that are not package lock files (e.g., `*.lock` outside of `package-lock.json`, `yarn.lock`, `composer.lock`)
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## NEVER Execute via Bash
|
|
59
|
+
|
|
60
|
+
- Commands that print secrets: `printenv`, `env | grep -i secret`, `cat .env`
|
|
61
|
+
- Commands that expose credentials: `docker inspect`, `kubectl get secret -o yaml`
|
|
62
|
+
- Git commands that may expose history of secrets: `git show`, `git log -p` on config files
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Safe Alternatives
|
|
67
|
+
|
|
68
|
+
If context about environment configuration is needed:
|
|
69
|
+
|
|
70
|
+
1. Ask the user to describe the configuration **without sharing actual values**.
|
|
71
|
+
2. Reference the **structure** of config (keys, not values): "I see you use `DATABASE_URL` — I'll generate code that reads from that variable."
|
|
72
|
+
3. Use placeholder values in generated code: `process.env.DATABASE_URL` or `${DATABASE_URL}`.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## If a Sensitive File is Accidentally Accessed
|
|
77
|
+
|
|
78
|
+
1. Do NOT display or repeat any content from the file.
|
|
79
|
+
2. Immediately stop and notify the user: "I've detected a sensitive file. I will not read or use its contents."
|
|
80
|
+
3. Ask the user what they actually need (usually it's the structure, not the values).
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Workflow Rules
|
|
2
|
+
|
|
3
|
+
> General AI behavior rules for all spec-driven-docs commands.
|
|
4
|
+
> Loaded by `steps/context-loader.md` at the start of every command.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Checkpoints
|
|
9
|
+
|
|
10
|
+
- **Always** show a CHECKPOINT before making significant changes.
|
|
11
|
+
- A CHECKPOINT must include: what will be done, which files will be created/modified, estimated scope.
|
|
12
|
+
- Wait for explicit "Y" or user confirmation before proceeding.
|
|
13
|
+
- Exception: read-only analysis commands (`/review-code`, `/validate-traces`, `/debug`) may skip CHECKPOINT.
|
|
14
|
+
|
|
15
|
+
## Scope Control
|
|
16
|
+
|
|
17
|
+
- Work only within the scope explicitly confirmed at CHECKPOINT.
|
|
18
|
+
- Do NOT create files outside the directories specified in `project-context.yaml → paths`.
|
|
19
|
+
- If new scope is discovered mid-command, STOP and ask: "I found additional scope [{description}]. Should I include it? (Y/N)"
|
|
20
|
+
|
|
21
|
+
## Code Generation
|
|
22
|
+
|
|
23
|
+
- Never generate code for files not backed by a `.feature` spec (unless `/fix-bug` or `/debug`).
|
|
24
|
+
- Always add `@trace.implements` tags on controller-level methods.
|
|
25
|
+
- Never overwrite existing business logic without explicit confirmation.
|
|
26
|
+
- Build must pass before committing: run `{conventions.build_command}` and fix errors (max 3 retries).
|
|
27
|
+
|
|
28
|
+
## File Operations
|
|
29
|
+
|
|
30
|
+
- Prefer **editing** existing files over replacing them entirely.
|
|
31
|
+
- When creating new files, check if a similar file already exists first.
|
|
32
|
+
- Never delete files unless explicitly instructed.
|
|
33
|
+
|
|
34
|
+
## Communication
|
|
35
|
+
|
|
36
|
+
- Report in the language the user writes in (Vietnamese if user uses Vietnamese, English otherwise).
|
|
37
|
+
- Keep reports structured: status, artifacts created, next recommended command.
|
|
38
|
+
- If unsure about business intent, ask — do not guess and generate wrong spec.
|
|
39
|
+
|
|
40
|
+
## Error Handling
|
|
41
|
+
|
|
42
|
+
- If a tool call fails (file not found, build error, etc.), report the specific error clearly.
|
|
43
|
+
- Do NOT silently skip errors or pretend success.
|
|
44
|
+
- Suggest a concrete fix, not just "please check the error".
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sinh implementation code từ BDD spec đã duyệt kèm tag traceability, hoặc review code read-only đối chiếu spec compliance và quy tắc kiến trúc. Trigger when: "/generate-code", "/review-code", "sinh code", "generate code", "viết code", "implement feature", "review code", "kiểm tra code", "code review", "check implementation".
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Code Skills — Generate & Review
|
|
6
|
+
|
|
7
|
+
Skill này xử lý `/generate-code` và `/review-code`. Để **không lệch schema/gate**, skill KHÔNG nhân bản — mỗi lệnh thực thi **y hệt** command tương ứng.
|
|
8
|
+
|
|
9
|
+
## /generate-code — Sinh Implementation Code
|
|
10
|
+
|
|
11
|
+
→ **Đọc và tuân theo `commands/generate-code.md`** với cùng `$ARGUMENTS`.
|
|
12
|
+
|
|
13
|
+
Command lo: guard mềm BDD `@trace.status` approved + Design Spec (approved/độ-tươi/sanity) cho FE/App · `--phase=ui`/`--phase=integration` · branch + build verify · trace TSV (22 cột) `@trace.implements`.
|
|
14
|
+
|
|
15
|
+
## /review-code — Code Review chỉ-đọc (READ-ONLY)
|
|
16
|
+
|
|
17
|
+
→ **Đọc và tuân theo `commands/review-code.md`** với cùng `$ARGUMENTS`.
|
|
18
|
+
|
|
19
|
+
Command lo: Pre-Review Scan · 4 lăng kính (Traceability · Layer Architecture · Coding Standards · Spec Compliance) · đề xuất ghi Lesson cho lỗi AI lặp.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Fix bug với full workflow (branch, test, commit), phân tích debug nhanh các lỗi hoặc hành vi bất ngờ, hoặc kiểm chứng độ phủ traceability giữa spec và code. Trigger when: "/fix-bug", "/debug", "/validate-traces", "fix bug", "sửa bug", "debug lỗi", "phân tích lỗi", "tại sao lỗi này", "validate traces", "kiểm tra traceability", "coverage matrix", "trace drift".
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Debug & Quality Skills — Fix Bug, Debug, Validate Traces
|
|
6
|
+
|
|
7
|
+
Skill này xử lý `/fix-bug`, `/debug`, `/validate-traces`. Để **không lệch schema/flow**, skill KHÔNG nhân bản — mỗi lệnh thực thi **y hệt** command.
|
|
8
|
+
|
|
9
|
+
## /fix-bug — Full Bug Fix Workflow
|
|
10
|
+
→ **Đọc và tuân theo `commands/fix-bug.md`** với cùng `$ARGUMENTS`.
|
|
11
|
+
(Command lo: bug-type table theo platform · đọc `{BUG-ID}` report · regression test · build + push 2 tầng (umbrella) · BUG State `Open→Fixed`→`Closed` · đề xuất Lesson.)
|
|
12
|
+
|
|
13
|
+
## /debug — Phân tích nhanh
|
|
14
|
+
→ **Đọc và tuân theo `commands/debug.md`** với cùng `$ARGUMENTS`.
|
|
15
|
+
(Command lo: 4 path (stack trace / reproduce / test fail / câu hỏi code) · bảng lỗi theo từng platform/module · stack-trace đọc dưới-lên.)
|
|
16
|
+
|
|
17
|
+
## /validate-traces — Traceability Coverage
|
|
18
|
+
→ **Đọc và tuân theo `commands/validate-traces.md`** với cùng `$ARGUMENTS`.
|
|
19
|
+
(Command lo: đọc trace TSV 22 cột authoritative · tính OK/DRIFT/GAP/UNTRACKED + PRD/TECHDOC drift · sync `uc_status` ← `@trace.status` · aggregate dashboard.)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sinh tài liệu Design Specification cho platform FE hoặc App từ một Business PRD. Trigger when: "/generate-design-spec", "tạo design spec", "generate design spec", "viết design spec", "tạo tài liệu thiết kế UI", "generate UI spec", "cần design spec cho", "tôi muốn spec UI", "tài liệu cho FE", "tài liệu cho app".
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /generate-design-spec — Generate Design Specification (FE / App)
|
|
6
|
+
|
|
7
|
+
Skill này xử lý `/generate-design-spec`. Để **không lệch gate/schema**, skill KHÔNG nhân bản — thực thi **y hệt** command.
|
|
8
|
+
|
|
9
|
+
→ **Đọc và tuân theo `commands/generate-design-spec.md`** với cùng `$ARGUMENTS`.
|
|
10
|
+
|
|
11
|
+
Command lo: guard PRD approved (mềm) · ghi `Built from PRD` + Version Check drift · Figma per-screen node-level link (`?node-id=`) fetch qua MCP, màn thiếu link → ❌ Missing → Status giữ `draft` · Screen Inventory/Specs/States · Interaction Patterns + Platform Considerations theo platform · AC-UI (Verified by) · **Self-Review Gate** trước khi ghi · chỉ FE/App (BE bị từ chối).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Dẫn dắt product discovery cho một feature mới qua Q&A có cấu trúc. Trigger when: "/define-product", "khám phá tính năng", "define new feature", "start new feature", "product discovery", "tôi muốn build tính năng mới", "let's define a feature", "begin feature discovery".
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /define-product — Feature Discovery (Q&A theo phase)
|
|
6
|
+
|
|
7
|
+
Lệnh này thực thi **y hệt** `commands/define-product.md` — không nhân bản logic ở đây để tránh lệch cấu trúc / phase / path output.
|
|
8
|
+
|
|
9
|
+
`commands/define-product.md` dẫn PO qua các phase Q&A có checkpoint:
|
|
10
|
+
Knowledge Sync → Feature Definition (Context/Problem/Goal/Actor/In&Out Scope/User Story/Phụ thuộc liên service) → User Flow (kèm Edge Cases) → Clarification Log → Business Rules → Business Logic → Acceptance Criteria → Validation Report.
|
|
11
|
+
|
|
12
|
+
Output ghi `{paths.product_definitions_dir}/{TICKET-ID}-{slug}.md` theo `templates/product-definition.template.md` — input cho `/generate-prd`.
|
|
13
|
+
|
|
14
|
+
→ **Đọc và tuân theo `commands/define-product.md`** với cùng `$ARGUMENTS`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sinh PRD từ một product definition, hoặc phân tích một PRD có sẵn qua 4 lăng kính review (QA, DEV, SA, PO) để tìm gap và rủi ro. Trigger when: "/generate-prd", "/refine-prd", "tạo PRD", "generate PRD", "phân tích PRD", "review PRD", "refine PRD", "PRD có vấn đề gì không", "check PRD quality".
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# PRD Skills — Generate & Refine
|
|
6
|
+
|
|
7
|
+
Skill này xử lý `/generate-prd` và `/refine-prd`. Để **không lệch logic/schema**, skill KHÔNG nhân bản — mỗi lệnh thực thi **y hệt** command tương ứng.
|
|
8
|
+
|
|
9
|
+
## /generate-prd — Sinh Product Requirements Document
|
|
10
|
+
|
|
11
|
+
→ **Đọc và tuân theo `commands/generate-prd.md`** với cùng `$ARGUMENTS`.
|
|
12
|
+
|
|
13
|
+
Command lo: guard discovery completed · phân giải API Source (existing/greenfield/partner) · Terminology Map · map §1c "Phụ thuộc liên service" + §4b Wireframe · slug kế thừa · template canonical (`templates/prd.template.md`) · Change Log rolling-window.
|
|
14
|
+
|
|
15
|
+
## /refine-prd — Phân tích PRD qua 4 lăng kính review
|
|
16
|
+
|
|
17
|
+
→ **Đọc và tuân theo `commands/refine-prd.md`** với cùng `$ARGUMENTS`.
|
|
18
|
+
|
|
19
|
+
Command lo: 4 lăng kính fan-out đa sub-agent + completeness-critic (findings đầy đủ 1 lần chạy) · schema findings đầy đủ (`uc_id`, `quote`, `auto_fixable`) cho Review Board · Resume Mode (apply → bump version → reset draft → changelog).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.1
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gap Analysis – <FEATURE>
|
|
8
|
+
|
|
9
|
+
> File ghi lại các **khoảng trống của tài liệu** mà `qa-analyst` phát hiện sau khi
|
|
10
|
+
> phân tích. Là đầu vào để hỏi dev/BA và cho `qa-planner`. Mỗi gap có ID `GAP-xx`
|
|
11
|
+
> để business rule (BR-xx), acceptance criteria (AC-xx) và test case trace ngược về.
|
|
12
|
+
|
|
13
|
+
| Trường | Giá trị |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Feature | `<FEATURE>` |
|
|
16
|
+
| Project / Service | `<project or service name / domain>` |
|
|
17
|
+
| Tài liệu nguồn | `<đường dẫn / link PRD / user story>` |
|
|
18
|
+
| Người phân tích | qa-analyst |
|
|
19
|
+
| Ngày phân tích | `<YYYY-MM-DD>` |
|
|
20
|
+
| Tổng số gap | `<N>` (Blocker: x · High: y · Medium: z · Low: w) |
|
|
21
|
+
| Trạng thái chung | 🔴 Blocked / 🟡 Cần làm rõ / 🟢 Đủ rõ để thiết kế TC |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Bảng Gap
|
|
26
|
+
|
|
27
|
+
| ID | Loại | Mô tả gap | Vị trí (mục/nguồn) | Ảnh hưởng (chức năng / BR / AC) | Mức độ | Người trả lời | Trạng thái | Câu trả lời |
|
|
28
|
+
|---|---|---|---|---|---|---|---|---|
|
|
29
|
+
| GAP-01 | MISSING | … | spec §x | chức năng A / BR-02 | 🔴 Blocker | Dev/BA | Open | — |
|
|
30
|
+
| GAP-02 | AMBIGUOUS | … | mockup màn hình Y | AC-03 | 🟠 High | BA | Open | — |
|
|
31
|
+
| GAP-03 | CONTRADICTORY | … | §2 vs §5 | BR-04 | 🟠 High | BA | Open | — |
|
|
32
|
+
| GAP-04 | ASSUMPTION | … (giả định AI tự đưa, cần xác nhận) | — | chức năng B | 🟡 Medium | Dev | Open | — |
|
|
33
|
+
|
|
34
|
+
### Loại gap
|
|
35
|
+
- **MISSING** – thông tin/chức năng/field/rule chưa được mô tả.
|
|
36
|
+
- **AMBIGUOUS** – mô tả mơ hồ, có ≥ 2 cách hiểu.
|
|
37
|
+
- **CONTRADICTORY** – các phần tài liệu mâu thuẫn nhau.
|
|
38
|
+
- **ASSUMPTION** – giả định do qa-analyst tự suy ra, cần dev/BA xác nhận.
|
|
39
|
+
- **OPEN QUESTION** – câu hỏi mở cần trả lời trước khi thiết kế/triển khai.
|
|
40
|
+
|
|
41
|
+
### Mức độ
|
|
42
|
+
🔴 Blocker (chặn thiết kế TC) · 🟠 High · 🟡 Medium · 🟢 Low
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Quy ước cập nhật
|
|
47
|
+
- `qa-analyst` tạo & điền gap khi phân tích; **không tự bịa câu trả lời** cho gap Blocker.
|
|
48
|
+
- Khi có phản hồi dev/BA: điền cột *Câu trả lời*, đổi *Trạng thái* → `Answered`.
|
|
49
|
+
- Còn gap 🔴 Blocker `Open` ⇒ **chưa** chuyển sang `qa-designer`; đẩy sang `qa-planner`
|
|
50
|
+
(skill `questions-for-dev`) để chốt câu hỏi.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## ⚠️ Checklist bắt buộc trước khi lưu file
|
|
55
|
+
|
|
56
|
+
Trước khi lưu `DOC_GAPS.md`, kiểm tra **từng hàng** trong bảng gap:
|
|
57
|
+
|
|
58
|
+
- [ ] **9 cột đủ** – đúng thứ tự: `ID | Loại | Mô tả gap | Vị trí (mục/nguồn) | Ảnh hưởng (chức năng / BR / AC) | Mức độ | Người trả lời | Trạng thái | Câu trả lời`
|
|
59
|
+
- [ ] **Cột Vị trí không rỗng** – phải có tham chiếu cụ thể đến mục trong tài liệu nguồn (vd `§3 UC4 BR25`, `Appendix B loại 7`, `§4.b Screen 3`). Đây là cột hay bị bỏ thiếu nhất → gây lệch toàn bộ cột sau.
|
|
60
|
+
- [ ] **Cột Ảnh hưởng = BR/AC references** – KHÔNG phải mức độ severity. Ví dụ đúng: `BR25, BR26 / AC-F01-33`. Nếu thấy "Blocker" / "High" ở đây → đang bị lệch cột.
|
|
61
|
+
- [ ] **Cột Mức độ có emoji** – bắt buộc dùng: `🔴 Blocker` / `🟠 High` / `🟡 Medium` / `🟢 Low`. Không được ghi text thuần.
|
|
62
|
+
- [ ] **Cột Người trả lời = vai trò** (PO / BA / Dev / Design / Content / DPO / QC Lead). Nếu thấy "Open" ở đây → đang bị lệch cột.
|
|
63
|
+
- [ ] **Cột Trạng thái = Open / Answered**. Nếu thấy "—" ở đây → đang bị lệch cột.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Acceptance Criteria — Sinh tiêu chí chấp nhận
|
|
8
|
+
|
|
9
|
+
Chuyển yêu cầu đã phân tích thành acceptance criteria (Given/When/Then) làm cơ sở thiết kế TC.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "viết acceptance criteria cho [X]" / "định nghĩa tiêu chí pass"
|
|
13
|
+
- Sau spec-breakdown + business-rules, là bước cuối của qa-analyst
|
|
14
|
+
- Cần điều kiện chấp nhận rõ ràng để qa-designer trace TC ngược về
|
|
15
|
+
|
|
16
|
+
## Khi KHÔNG trigger
|
|
17
|
+
- Cần bóc tách spec → dùng spec-breakdown
|
|
18
|
+
- Cần thiết kế test case chi tiết (steps cụ thể) → dùng qa-designer
|
|
19
|
+
- Cần phân tích rủi ro → dùng qa-planner
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Phase 1 — Tổng hợp
|
|
24
|
+
|
|
25
|
+
Gom đầu vào từ spec-breakdown, business-rules, data-flow:
|
|
26
|
+
- Mỗi chức năng/luồng → một nhóm acceptance criteria.
|
|
27
|
+
- Mỗi business rule (BR-xx) → ít nhất một AC kiểm chứng.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Phase 2 — Viết AC
|
|
32
|
+
|
|
33
|
+
Dùng format Given/When/Then, mỗi AC kiểm chứng MỘT điều:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
AC-01 (chức năng / BR-xx):
|
|
37
|
+
Given <tiền điều kiện>
|
|
38
|
+
When <hành động + dữ liệu cụ thể>
|
|
39
|
+
Then <kết quả mong đợi CỤ THỂ>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Bắt buộc phủ:
|
|
43
|
+
- Happy path (điều kiện hợp lệ).
|
|
44
|
+
- Negative (vi phạm validation / authorization).
|
|
45
|
+
- Boundary (giá trị biên của giới hạn trong business-rules).
|
|
46
|
+
- Alternate flow (luồng phụ trong data-flow).
|
|
47
|
+
|
|
48
|
+
Mỗi AC gắn mã trace: chức năng + BR-xx để TC sau này map 1-1.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Output
|
|
53
|
+
|
|
54
|
+
Ghi vào **mục Acceptance Criteria** của `{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md`
|
|
55
|
+
(KHÔNG tạo file riêng — qc-analyze chỉ trả 2 file: `REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`):
|
|
56
|
+
|
|
57
|
+
- Danh sách AC dạng Given/When/Then, có mã trace về chức năng, business rule (BR-xx)
|
|
58
|
+
và scenario chính thức `{UC-ID}-SC{N}` của `.feature`.
|
|
59
|
+
- Bảng ma trận: BR / chức năng × AC để xác nhận không bỏ sót.
|
|
60
|
+
- Đây là đầu vào trực tiếp cho `qa-designer` (mỗi AC → ≥1 test case) và `qa-reviewer` (đối chiếu coverage).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Business Rules — Trích xuất luật nghiệp vụ
|
|
8
|
+
|
|
9
|
+
Trích xuất và liệt kê toàn bộ business rule, điều kiện và ràng buộc từ yêu cầu.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "liệt kê business rule cho [X]" / "feature này có luật nghiệp vụ gì"
|
|
13
|
+
- Sau spec-breakdown, khi cần làm rõ logic điều kiện trước khi thiết kế TC
|
|
14
|
+
- Feature có nhiều điều kiện AND/OR, phân quyền, tính toán, giới hạn
|
|
15
|
+
|
|
16
|
+
## Khi KHÔNG trigger
|
|
17
|
+
- Cần bóc tách tổng thể spec → dùng spec-breakdown
|
|
18
|
+
- Cần luồng dữ liệu → dùng data-flow
|
|
19
|
+
- Cần phân tích rủi ro / lập test plan → thuộc qa-planner (skill test-plan)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Phase 1 — Quét
|
|
24
|
+
|
|
25
|
+
1. Đọc spec đã bóc tách (output của spec-breakdown) hoặc tài liệu gốc.
|
|
26
|
+
2. Quét tìm: điều kiện ("nếu… thì…"), ràng buộc field, giới hạn (min/max, rate limit),
|
|
27
|
+
quy tắc phân quyền, công thức tính, quy tắc trạng thái, default value.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Phase 2 — Cấu trúc hoá
|
|
32
|
+
|
|
33
|
+
Mỗi rule ghi dưới dạng bảng:
|
|
34
|
+
|
|
35
|
+
| ID | Rule | Điều kiện | Kết quả | Nguồn | Ghi chú/Ưu tiên |
|
|
36
|
+
|---|---|---|---|---|---|
|
|
37
|
+
| BR-01 | … | … | … | spec §x | … |
|
|
38
|
+
|
|
39
|
+
Phân loại rule:
|
|
40
|
+
- VALIDATION: ràng buộc input (định dạng, bắt buộc, độ dài, range).
|
|
41
|
+
- AUTHORIZATION: ai được làm gì.
|
|
42
|
+
- CALCULATION: công thức, làm tròn, đơn vị.
|
|
43
|
+
- STATE: điều kiện chuyển trạng thái hợp lệ vs cấm.
|
|
44
|
+
- LIMIT: rate limit, quota, concurrent.
|
|
45
|
+
|
|
46
|
+
Với rule có nhiều điều kiện kết hợp → gợi ý dựng **Decision Table** (đầu vào cho qa-designer).
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Output
|
|
51
|
+
|
|
52
|
+
Ghi vào **mục Business Rules** của `{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md`
|
|
53
|
+
(KHÔNG tạo file riêng — qc-analyze chỉ trả 2 file: `REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`):
|
|
54
|
+
|
|
55
|
+
- Bảng business rule có ID (BR-xx) để TC trace ngược về.
|
|
56
|
+
- Gợi ý các rule cần Decision Table / BVA khi sang qa-designer.
|
|
57
|
+
|
|
58
|
+
Rule MÂU THUẪN / KHÔNG RÕ → ghi vào `{paths.qc_dir}/{UC-ID}/DOC_GAPS.md`
|
|
59
|
+
(loại CONTRADICTORY / AMBIGUOUS, cột "Ảnh hưởng" trỏ BR-xx).
|