@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,224 @@
|
|
|
1
|
+
# /dev-run-test — Run Dev Self-Check Tests & Report Results
|
|
2
|
+
|
|
3
|
+
> **Scope — dev self-check (smoke), not the official test suite.** Runs the tests produced
|
|
4
|
+
> by `/dev-gen-test` so the developer can confirm their own code works before review. This
|
|
5
|
+
> is a developer self-check, **not** the QC/dev-team's authoritative test run (separate flow).
|
|
6
|
+
> The pass/fail is published to Living Docs as a **dev self-test** signal — it tells QC the
|
|
7
|
+
> dev ran their checks; it is NOT a statement of official test coverage.
|
|
8
|
+
|
|
9
|
+
## Gate
|
|
10
|
+
{{include:steps/gate.md}}
|
|
11
|
+
|
|
12
|
+
*Note: For this command, the target in Step 1 is a UC-ID or service name. Context loading provides `conventions.test_command` and `tech_stack.module`.*
|
|
13
|
+
|
|
14
|
+
## Context
|
|
15
|
+
{{include:steps/context-loader.md}}
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Service Detection
|
|
20
|
+
|
|
21
|
+
Read `active_module` from context (resolved in context-loader Step 1).
|
|
22
|
+
Use it to select the correct run command and error analysis table below.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Submodule Working Directory
|
|
27
|
+
|
|
28
|
+
*Skip this section if `service_root` is not set (single-service mode).*
|
|
29
|
+
|
|
30
|
+
When running in **umbrella/submodule mode** (`service_root` was resolved in context-loader Step 1.6):
|
|
31
|
+
|
|
32
|
+
- All commands in the **Run** section below must execute from within `{service_root}/`
|
|
33
|
+
- `conventions.test_command` was loaded from `{service_root}/.agent/project-context.yaml` — already service-specific
|
|
34
|
+
- Prefix every shell command with `cd {service_root} &&`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cd {service_root}
|
|
38
|
+
|
|
39
|
+
# Then run any of the commands in the Run section below, e.g.:
|
|
40
|
+
{conventions.test_command}
|
|
41
|
+
mvn test -Dtest={ClassName} # java-spring
|
|
42
|
+
go test ./... -run Test{FunctionName} # golang
|
|
43
|
+
npx vitest run src/... # web-frontend
|
|
44
|
+
flutter test test/{domain}/... # flutter
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> **Why cd?** Claude Code session is opened at umbrella root. Each service submodule has its own build tool, test runner, and dependency tree — tests must run from inside the service directory.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Run
|
|
52
|
+
|
|
53
|
+
### If `platform_type = backend`
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Run all tests for this UC
|
|
57
|
+
{conventions.test_command}
|
|
58
|
+
|
|
59
|
+
# Scoped to specific class (faster feedback)
|
|
60
|
+
# java-spring:
|
|
61
|
+
mvn test -Dtest={ClassName}
|
|
62
|
+
# golang:
|
|
63
|
+
go test ./... -run Test{FunctionName}
|
|
64
|
+
# dotnet:
|
|
65
|
+
dotnet test --filter "FullyQualifiedName~{ClassName}"
|
|
66
|
+
# php-laravel:
|
|
67
|
+
php artisan test --filter {ClassName}
|
|
68
|
+
# context-engineering (pytest):
|
|
69
|
+
pytest tests/{domain}/{test_file}.py -v
|
|
70
|
+
pytest tests/{domain}/{test_file}.py::{TestClass}::{test_method} -v
|
|
71
|
+
pytest tests/ --cov={source_dir} --cov-report=term-missing
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### If `platform_type = web-frontend`
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Run all tests
|
|
78
|
+
{conventions.test_command}
|
|
79
|
+
|
|
80
|
+
# Scoped (Vitest / Jest):
|
|
81
|
+
npx vitest run src/features/{domain}/{Component}.test.tsx
|
|
82
|
+
npx jest src/features/{domain}/{Component}.test.tsx
|
|
83
|
+
|
|
84
|
+
# E2E (Playwright):
|
|
85
|
+
npx playwright test {UC-ID}
|
|
86
|
+
# E2E (Cypress):
|
|
87
|
+
npx cypress run --spec "cypress/e2e/{UC-ID}*"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### If `platform_type = mobile`
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Flutter:
|
|
94
|
+
flutter test test/{domain}/{UC-ID}_test.dart
|
|
95
|
+
flutter test integration_test/{UC-ID}_test.dart # integration
|
|
96
|
+
|
|
97
|
+
# React Native:
|
|
98
|
+
npx jest {UC-ID}
|
|
99
|
+
|
|
100
|
+
# iOS (Xcode command line):
|
|
101
|
+
xcodebuild test -scheme {Scheme} -destination 'platform=iOS Simulator,name=iPhone 15'
|
|
102
|
+
|
|
103
|
+
# Android:
|
|
104
|
+
./gradlew test # unit tests
|
|
105
|
+
./gradlew connectedAndroidTest # instrumented (device/emulator required)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
> **Note for Android instrumented tests:** a running emulator or connected device is required before running `connectedAndroidTest`. Start one via Android Studio or: `emulator -avd {AVD_NAME} &`
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Analyze Failures
|
|
113
|
+
|
|
114
|
+
### Backend failure patterns
|
|
115
|
+
|
|
116
|
+
#### java-spring / golang / dotnet / php-laravel
|
|
117
|
+
|
|
118
|
+
| Error Pattern | Common Cause | Suggested Fix |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `NullPointerException` | Missing mock setup | Check `given(...)`/`coEvery`/`mockk` for null dependency |
|
|
121
|
+
| `Bean not found` | Missing mock declaration | Add `@MockBean` / inject mock |
|
|
122
|
+
| `Expected 200, got 401` | Missing auth setup | Add auth token/user to test context |
|
|
123
|
+
| `Expected 200, got 400` | Request body fails validation | Check required fields in DTO |
|
|
124
|
+
| `Expected 200, got 403` | Wrong role | Add correct role to test user |
|
|
125
|
+
| `LazyInitializationException` | Lazy collection outside transaction | Add `@Transactional` or eager fetch |
|
|
126
|
+
| `Mapper not found` | Code not compiled | Run build step before tests |
|
|
127
|
+
| `DataIntegrityViolationException` | Duplicate key in DB setup | Use `@Transactional` + rollback, or clean DB between tests |
|
|
128
|
+
| Assertion mismatch | Wrong mock return value | Re-read `given(...).willReturn(...)` setup |
|
|
129
|
+
|
|
130
|
+
#### context-engineering (AI/LLM pipelines)
|
|
131
|
+
|
|
132
|
+
| Error Pattern | Common Cause | Suggested Fix |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| `AssertionError` on LLM mock output | Mock return value not matching schema | Re-check `mock_llm.return_value` / `mock_llm.complete.return_value` setup |
|
|
135
|
+
| `ValidationError` on response | LLM output structure doesn't match expected schema | Tighten schema check or add retry logic in test |
|
|
136
|
+
| `ConnectionError` / `APIError` | Real LLM API being called in test | Ensure `patch('...')` mock is applied — never call real LLM in unit tests |
|
|
137
|
+
| `TimeoutError` | Test calling live LLM endpoint | Add mock; check test fixtures |
|
|
138
|
+
| Flaky / non-deterministic results | Real LLM response used in assertion | Replace with deterministic mock return value |
|
|
139
|
+
|
|
140
|
+
### Web frontend failure patterns
|
|
141
|
+
|
|
142
|
+
| Error Pattern | Common Cause | Suggested Fix |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| `Unable to find role "..."` | Element not rendered yet | Wrap in `await waitFor(() => ...)` |
|
|
145
|
+
| `TestingLibraryElementError: Found multiple elements` | Selector too broad | Use `getByRole(..., { name: '...' })` to narrow |
|
|
146
|
+
| `Network request not intercepted` | Missing MSW handler / `cy.intercept` | Add handler for the endpoint |
|
|
147
|
+
| `act(...)` warning | State update after test ended | Await async events / `await userEvent.click(...)` |
|
|
148
|
+
| `Cannot read properties of undefined` | Component rendered before data loaded | Add loading state or mock resolved data |
|
|
149
|
+
| Playwright timeout | Page not navigated / element hidden | Check route, add `waitForSelector` |
|
|
150
|
+
| `expect(page.locator(...)).toBeVisible` fails | Wrong selector | Use Playwright Inspector to find correct locator |
|
|
151
|
+
|
|
152
|
+
### Mobile failure patterns
|
|
153
|
+
|
|
154
|
+
#### Flutter
|
|
155
|
+
| Error Pattern | Common Cause | Suggested Fix |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `pumpAndSettle timed out` | Async operation not completing | Use `pump(Duration(...))` for specific delay |
|
|
158
|
+
| `No widget found` | Widget not rendered / wrong finder | Check `find.byType`, `find.text`, `find.byKey` |
|
|
159
|
+
| `setState called after dispose` | Widget disposed before async completes | Cancel async in `dispose()` |
|
|
160
|
+
| BLoC state mismatch | Wrong event emitted | Verify `mockBloc` received correct event |
|
|
161
|
+
|
|
162
|
+
#### React Native
|
|
163
|
+
| Error Pattern | Common Cause | Suggested Fix |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| `Unable to find element` | Missing `testID` or wrong query | Add `accessibilityLabel` or `testID` to component |
|
|
166
|
+
| `act(...)` warning | Async state updates | Wrap in `act(async () => { ... })` |
|
|
167
|
+
| Navigation mock missing | `useNavigation` not mocked | Add jest mock for `@react-navigation/native` |
|
|
168
|
+
|
|
169
|
+
#### iOS / Android
|
|
170
|
+
| Error Pattern | Common Cause | Suggested Fix |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| `XCTAssertEqual failed` | Wrong expected value | Check ViewModel output for given mock |
|
|
173
|
+
| `Compose node not found` | Wrong `contentDescription` / `testTag` | Add `Modifier.testTag(...)` to composable |
|
|
174
|
+
| `Hilt injection failed` | Missing test module | Add `@UninstallModules` + `@BindValue` in test class |
|
|
175
|
+
| Emulator not available | `connectedAndroidTest` without device | Start emulator first, wait for it to boot |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Write Trace State
|
|
180
|
+
|
|
181
|
+
After the run, persist results to the **authoritative TSV** in the service so they reach
|
|
182
|
+
the Living Docs report at the spec module (via `/sync` + `/validate-traces`). The test
|
|
183
|
+
files themselves stay in the service — only the run *status* is reported.
|
|
184
|
+
|
|
185
|
+
Update `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv` (if `domain`/`prd_slug` weren't resolved from a spec target, locate the TSV by globbing `{paths.trace_dir}/**/{UC-ID}.tsv` — it was created earlier by `/generate-bdd`) — for each scenario row (matched by `sc_id` via its
|
|
186
|
+
test's `@trace.verifies={UC-ID}-SC{N}` tag). *(Umbrella + `spec_source`: `trace_dir` is `{spec_source}/.trace` — tests run from `service_root` but the `dev_selftest` update writes into the **spec repo**; commit/push the spec submodule for it.)*
|
|
187
|
+
|
|
188
|
+
| Column | Value |
|
|
189
|
+
|--------|-------|
|
|
190
|
+
| `dev_selftest` | `pass` if all tests for this SC passed · `fail` if any failed · `not_run` if its tests were skipped/absent |
|
|
191
|
+
| `dev_selftest_at` | today `YYYY-MM-DD` |
|
|
192
|
+
|
|
193
|
+
Leave all other columns unchanged — in particular **never** touch `qc_status`/`qc_run_at`
|
|
194
|
+
(the official QC automation result, owned by `/qc-run-test`). `dev_selftest` (dev smoke)
|
|
195
|
+
and `qc_status` (official QC) are separate
|
|
196
|
+
signals. `dev_selftest`/`dev_selftest_at` are also orthogonal to `status`
|
|
197
|
+
(OK/GAP/DRIFT/UNTRACKED): `status` tracks *coverage*, `dev_selftest` tracks the dev's latest *run result*.
|
|
198
|
+
|
|
199
|
+
## Refresh Panel Mirror
|
|
200
|
+
{{include:steps/trace-mirror.md}}
|
|
201
|
+
|
|
202
|
+
## Output
|
|
203
|
+
|
|
204
|
+
{{include:steps/report-footer.md}}
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
/dev-run-test Report — {UC-ID} ({active_module})
|
|
208
|
+
✅ Passed: {N} | ❌ Failed: {M} | ⏭️ Skipped: {K} | Duration: {X}s
|
|
209
|
+
|
|
210
|
+
## Failed Tests
|
|
211
|
+
| Test | Error | Root Cause |
|
|
212
|
+
|------|-------|------------|
|
|
213
|
+
|
|
214
|
+
## Recommendations
|
|
215
|
+
{specific fix per failure}
|
|
216
|
+
|
|
217
|
+
Trace: {paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv updated (dev_selftest, dev_selftest_at)
|
|
218
|
+
|
|
219
|
+
Next:
|
|
220
|
+
All tests pass → /review-code {UC-ID}
|
|
221
|
+
Tests fail → /fix-bug {TICKET_ID} (real bug) or fix test (wrong expectation)
|
|
222
|
+
|
|
223
|
+
📊 Living Docs: run /validate-traces (or /sync) to push this trace to the spec-module dashboard.
|
|
224
|
+
```
|