@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,317 @@
|
|
|
1
|
+
# /review-tech-docs — Review Technical Design Document
|
|
2
|
+
|
|
3
|
+
**READ-ONLY analysis mode — writes a findings file, does NOT modify the target.**
|
|
4
|
+
**Use `--resume` to apply accepted findings.**
|
|
5
|
+
|
|
6
|
+
## Gate
|
|
7
|
+
{{include:steps/gate.md}}
|
|
8
|
+
|
|
9
|
+
*Note: For this command, the target in Step 1 is a tech-design `.md` file in `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/`.
|
|
10
|
+
If `$ARGUMENTS` contains `--resume` → skip to Resume Mode below.*
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
{{include:steps/context-loader.md}}
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Load Review Materials
|
|
18
|
+
|
|
19
|
+
After loading base context, read the following in order:
|
|
20
|
+
|
|
21
|
+
1. **Target tech-doc** — read fully. Extract from header:
|
|
22
|
+
- `@trace.id` → UC-ID
|
|
23
|
+
- `@trace.domain` → domain
|
|
24
|
+
- `@trace.prd` → source PRD ticket ID
|
|
25
|
+
- `@trace.status` → current status (draft / in-review / approved)
|
|
26
|
+
|
|
27
|
+
2. **Source feature file** — load `{paths.specs_dir}/{domain}/{prd-slug}/bdd/{UC-ID}*.feature` if exists.
|
|
28
|
+
|
|
29
|
+
3. **Other tech-docs in same domain** — list and load all `.md` files in
|
|
30
|
+
`{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/` excluding the target. Used for conflict checking (T4).
|
|
31
|
+
|
|
32
|
+
4. **Architecture reference** — re-confirm CLAUDE.md §2: layer order, architectural rules.
|
|
33
|
+
|
|
34
|
+
5. **Core entities** — already loaded in context (Step 6 of context-loader).
|
|
35
|
+
|
|
36
|
+
Derive findings filename:
|
|
37
|
+
`{paths.refinement_dir}/{uc-id}-tech-review-findings.yaml`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Review Dimensions
|
|
42
|
+
|
|
43
|
+
### T1 — Architecture Alignment *(always CRITICAL if violated)*
|
|
44
|
+
|
|
45
|
+
Cross-reference the proposed design against CLAUDE.md §2 rules:
|
|
46
|
+
|
|
47
|
+
| Violation type | Severity |
|
|
48
|
+
|----------------|----------|
|
|
49
|
+
| Controller calls Repository directly (layer skip) | Critical |
|
|
50
|
+
| Business logic in Controller or DTO | Critical |
|
|
51
|
+
| Forbidden pattern from §3 | Critical |
|
|
52
|
+
| Dependency going upstream (Service → Controller DTO) | Critical |
|
|
53
|
+
| Transaction annotation on wrong layer | Major |
|
|
54
|
+
| Missing separation (no Facade when arch requires it) | Major |
|
|
55
|
+
|
|
56
|
+
For each finding:
|
|
57
|
+
```
|
|
58
|
+
Component: {class or method name}
|
|
59
|
+
Violates: "{rule text}" (CLAUDE.md §2)
|
|
60
|
+
Fix: {which layer/component should own this instead}
|
|
61
|
+
```
|
|
62
|
+
→ **Not auto-fixable.** Human must decide structural fix. Note required in Review Board.
|
|
63
|
+
|
|
64
|
+
### T2 — Entity Consistency
|
|
65
|
+
|
|
66
|
+
Using the loaded core-entities catalog:
|
|
67
|
+
|
|
68
|
+
| Issue | Severity | Auto-fixable? |
|
|
69
|
+
|-------|----------|---------------|
|
|
70
|
+
| Entity mentioned not in core-entities.md | Major | No — human confirms if DTO or domain entity |
|
|
71
|
+
| Field name differs from core-entities.md | Major | Yes — rename to canonical |
|
|
72
|
+
| Relationship described differently | Major | No — human decides |
|
|
73
|
+
| New entity introduced but not in core-entities.md | Minor | No — add to core-entities first |
|
|
74
|
+
|
|
75
|
+
### T3 — BDD Traceability
|
|
76
|
+
|
|
77
|
+
Cross-reference against the source `.feature` file:
|
|
78
|
+
|
|
79
|
+
| Issue | Severity | Auto-fixable? |
|
|
80
|
+
|-------|----------|---------------|
|
|
81
|
+
| Tech-doc proposes behavior not in any BDD scenario | Major | No — create scenario first |
|
|
82
|
+
| Tech-doc contradicts a BDD scenario | Critical | No — resolve conflict first |
|
|
83
|
+
| UC scenario has no corresponding design decision | Minor | Yes — add missing design note |
|
|
84
|
+
|
|
85
|
+
### T4 — Domain Conflict Check
|
|
86
|
+
|
|
87
|
+
Compare against other tech-docs in `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/`:
|
|
88
|
+
|
|
89
|
+
| Issue | Severity | Auto-fixable? |
|
|
90
|
+
|-------|----------|---------------|
|
|
91
|
+
| Same endpoint defined with different request/response | Critical | No — human resolves |
|
|
92
|
+
| Same service method with different behavior | Critical | No — human resolves |
|
|
93
|
+
| Entity status transitions differ between docs | Critical | No — human resolves |
|
|
94
|
+
| Overlapping responsibility (both docs claim ownership of same logic) | Major | No — human resolves |
|
|
95
|
+
|
|
96
|
+
### T5 — Internal Consistency
|
|
97
|
+
|
|
98
|
+
Within the tech-doc itself:
|
|
99
|
+
|
|
100
|
+
| Check | Severity | Auto-fixable? |
|
|
101
|
+
|-------|----------|---------------|
|
|
102
|
+
| Sequence diagram shows different flow than written description | Major | No |
|
|
103
|
+
| API spec return type differs from code sketch | Major | Yes — align one to the other |
|
|
104
|
+
| Section references a component/concept never defined later | Minor | Yes — add definition |
|
|
105
|
+
| Assumption stated but no design addresses it | Minor | Yes — add note or remove assumption |
|
|
106
|
+
|
|
107
|
+
### T6 — Structural Completeness
|
|
108
|
+
|
|
109
|
+
Check all standard sections are present and non-empty:
|
|
110
|
+
|
|
111
|
+
| Section | Missing severity |
|
|
112
|
+
|---------|-----------------|
|
|
113
|
+
| Header (`@trace.id`, `@trace.prd`, `@trace.domain`, `@trace.status`) | Major |
|
|
114
|
+
| Overview / Context | Major |
|
|
115
|
+
| Architecture Decision with rationale | Major |
|
|
116
|
+
| Component Diagram or Layer Description | Major |
|
|
117
|
+
| Sequence Diagram or Flow Steps | Major |
|
|
118
|
+
| API Contract (if HTTP-facing) | Major |
|
|
119
|
+
| Data Model Changes (if entity changes) | Major |
|
|
120
|
+
| Error Handling Strategy | Major |
|
|
121
|
+
| Open Questions / Assumptions | Minor |
|
|
122
|
+
|
|
123
|
+
→ All T6 missing-section findings are **auto-fixable**: AI adds skeleton section with prompts.
|
|
124
|
+
|
|
125
|
+
### T7 — Cross-Team API Contract Review
|
|
126
|
+
|
|
127
|
+
*Only applies when ALL of the following are true:*
|
|
128
|
+
*1. Source BDD has `@trace.platform: system`.*
|
|
129
|
+
*2. Tech-doc header does NOT have `@trace.api_source: existing`.*
|
|
130
|
+
|
|
131
|
+
*If `@trace.api_source: existing` → **skip T7 entirely**. Contract đã được PO xác định trong PRD — không có API design mới để đồng thuận.*
|
|
132
|
+
|
|
133
|
+
This dimension ensures FE, App, and BE teams all agree on the API contract before implementation starts.
|
|
134
|
+
|
|
135
|
+
**Step 1 — Check sign-off status in tech-doc header:**
|
|
136
|
+
|
|
137
|
+
Read the `@trace.sign_off` block in the tech doc header. If absent → add it as a finding (auto-fixable: add skeleton).
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
# @trace.sign_off:
|
|
141
|
+
# be_team: pending # author — set to "done" when BE satisfied with design
|
|
142
|
+
# fe_team: pending # FE/Web — must confirm contract matches web BDD expectations
|
|
143
|
+
# app_team: pending # App — must confirm contract matches app BDD expectations (if applicable)
|
|
144
|
+
# sa: pending # SA/Tech Lead — final approval
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Step 2 — Contract vs BDD cross-check:**
|
|
148
|
+
|
|
149
|
+
Load the web and app BDDs for this TICKET-ID (from `{paths.specs_dir}/{domain}/{prd-slug}/bdd/web/` and `{paths.specs_dir}/{domain}/{prd-slug}/bdd/app/` in the spec submodule or spec repo).
|
|
150
|
+
|
|
151
|
+
For each platform BDD, verify the tech doc's API contract satisfies the BDD's `Then` clauses:
|
|
152
|
+
|
|
153
|
+
| Check | Severity |
|
|
154
|
+
|---|---|
|
|
155
|
+
| Response fields in API contract don't cover what web BDD `Then` expects | Critical |
|
|
156
|
+
| Response fields in API contract don't cover what app BDD `Then` expects | Critical |
|
|
157
|
+
| Error response shape doesn't match what platform BDDs expect | Major |
|
|
158
|
+
| System BDD `@system.resolution` annotation contradicts the API contract design | Critical |
|
|
159
|
+
|
|
160
|
+
**Step 3 — Pending sign-off report:**
|
|
161
|
+
|
|
162
|
+
After the review, list which sign-offs are still `pending`:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
⏳ Pending sign-offs before tech docs can be approved:
|
|
166
|
+
fe_team — FE/Web team must confirm API contract matches web BDD expectations
|
|
167
|
+
app_team — App team must confirm API contract matches app BDD expectations
|
|
168
|
+
sa — SA/Tech Lead final approval
|
|
169
|
+
|
|
170
|
+
Once sign-offs are collected → update @trace.sign_off in tech doc header, then re-run /review-tech-docs.
|
|
171
|
+
Tech docs cannot be set to "approved" while any required sign-off is pending.
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Approval gate:**
|
|
175
|
+
- If `be_team: done` AND `fe_team: done` AND `app_team: done` (or N/A) AND `sa: done` → tech docs may be set to `approved`
|
|
176
|
+
- Otherwise → `@trace.status` stays `in-review` — `generate-code` is blocked
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Write Findings File
|
|
181
|
+
|
|
182
|
+
After running all checks, write findings to `{paths.refinement_dir}/{uc-id}-tech-review-findings.yaml`:
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
source_file: "{absolute path to tech-doc}"
|
|
186
|
+
uc_id: "{UC-ID}"
|
|
187
|
+
domain: "{domain}"
|
|
188
|
+
generated_at: "{ISO datetime}"
|
|
189
|
+
review_type: "tech-design"
|
|
190
|
+
status: "pending_review"
|
|
191
|
+
is_system_bdd: {true | false} # true if source BDD has @trace.platform: system
|
|
192
|
+
|
|
193
|
+
sign_off: # only present when is_system_bdd: true
|
|
194
|
+
be_team: pending # read from @trace.sign_off in tech-doc header
|
|
195
|
+
fe_team: pending
|
|
196
|
+
app_team: pending # "n/a" if project has no app platform
|
|
197
|
+
sa: pending
|
|
198
|
+
sign_off_gate: blocked # blocked | ready — "ready" only when all required are "done"
|
|
199
|
+
|
|
200
|
+
findings:
|
|
201
|
+
- id: "F001"
|
|
202
|
+
check_id: "T1" # T1–T7
|
|
203
|
+
severity: "critical" # critical | major | minor
|
|
204
|
+
section: "{section heading or component name where issue was found}"
|
|
205
|
+
uc_id: "{UC-ID}" # same as top-level uc_id (the UC this tech-doc designs)
|
|
206
|
+
quote: "{verbatim snippet copied EXACTLY from the tech-doc at the issue location, ≤120 chars}"
|
|
207
|
+
finding: "{clear description of the violation or gap}"
|
|
208
|
+
suggestion: "{specific fix — AI applies this in --resume if accepted}"
|
|
209
|
+
auto_fixable: false # true = AI can apply; false = human must write decision in note
|
|
210
|
+
status: "pending" # pending | accepted | modified | rejected | deferred
|
|
211
|
+
|
|
212
|
+
summary:
|
|
213
|
+
total_findings: {N}
|
|
214
|
+
by_severity: { critical: {N}, major: {N}, minor: {N} }
|
|
215
|
+
auto_fixable: {N}
|
|
216
|
+
requires_human_decision: {N}
|
|
217
|
+
recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
|
|
218
|
+
sign_off_gate: "{blocked — pending: fe_team, app_team, sa | ready}"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
> **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
|
|
222
|
+
> For every finding, copy a short **verbatim** `quote` straight from the tech-doc at the exact spot
|
|
223
|
+
> the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
|
|
224
|
+
> These let a reviewer click a finding in the Review Board and jump to the precise source location.
|
|
225
|
+
|
|
226
|
+
## Report
|
|
227
|
+
|
|
228
|
+
{{include:steps/report-footer.md}}
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
/review-tech-docs Complete — {target file}
|
|
232
|
+
UC: {UC-ID} | Domain: {domain}
|
|
233
|
+
Findings: {total} | 🔴 Critical: {N} | 🟡 Major: {N} | 🟢 Minor: {N}
|
|
234
|
+
Auto-fixable: {N} | Needs human decision: {N}
|
|
235
|
+
|
|
236
|
+
Sign-off gate (system BDD only):
|
|
237
|
+
be_team : {done | pending}
|
|
238
|
+
fe_team : {done | pending} ← {name / "needs sign-off" }
|
|
239
|
+
app_team : {done | pending | n/a}
|
|
240
|
+
sa : {done | pending}
|
|
241
|
+
Gate : {🔒 BLOCKED — pending: fe_team, sa | ✅ READY}
|
|
242
|
+
|
|
243
|
+
Findings file: {paths.refinement_dir}/{uc-id}-tech-review-findings.yaml
|
|
244
|
+
Next: Open in Review Board → Accept/Modify/Reject each finding
|
|
245
|
+
Then run: /review-tech-docs --resume {tech-design-file}
|
|
246
|
+
After all sign-offs collected → update @trace.sign_off in tech doc, re-run review
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Resume Mode — Apply Accepted Findings
|
|
252
|
+
|
|
253
|
+
*Triggered when `$ARGUMENTS` contains `--resume`.*
|
|
254
|
+
*Example: `/review-tech-docs --resume {paths.tech_docs_dir}/payment/{prd-slug}/tech-docs/PAY-UC1-tech-design.md`*
|
|
255
|
+
|
|
256
|
+
### Phase 1 — Read accepted findings
|
|
257
|
+
|
|
258
|
+
1. Derive findings file from target: `{paths.refinement_dir}/{uc-id}-tech-review-findings.yaml`
|
|
259
|
+
2. Read the file. Collect findings where `status: "accepted"` or `status: "modified"`.
|
|
260
|
+
3. If none → report "No accepted findings. File unchanged." and stop.
|
|
261
|
+
|
|
262
|
+
### Phase 2 — Apply fixes
|
|
263
|
+
|
|
264
|
+
Apply in order: critical → major → minor.
|
|
265
|
+
|
|
266
|
+
| check_id | What to do |
|
|
267
|
+
|----------|-----------|
|
|
268
|
+
| T1 (Architecture) | Apply the structural fix from finding note — move logic to correct layer, update component description |
|
|
269
|
+
| T2 (Field name) | Rename field to canonical name from core-entities.md throughout the document |
|
|
270
|
+
| T3 (Missing design note) | Add design decision note for the uncovered scenario |
|
|
271
|
+
| T5 (Internal inconsistency) | Align the conflicting sections to the decision stated in the note |
|
|
272
|
+
| T6 (Missing section) | Add skeleton section with placeholder prompts for the tech lead to fill |
|
|
273
|
+
|
|
274
|
+
**T1, T2, T4 findings with `auto_fixable: false`:** require a human-written resolution in the
|
|
275
|
+
Review Board "Modify" note. Apply exactly what the note says. Do not invent the fix.
|
|
276
|
+
|
|
277
|
+
### Phase 3 — Update header + TSV + Report
|
|
278
|
+
|
|
279
|
+
Edit the tech-doc file directly:
|
|
280
|
+
1. Find `@trace.revision:` in the header — increment its integer value by 1.
|
|
281
|
+
2. Find `@trace.status:` in the header:
|
|
282
|
+
- If sign_off_gate = `ready` (all sign-offs done) → set to `approved`
|
|
283
|
+
- Otherwise → set to `in-review` (blocks `/generate-code`)
|
|
284
|
+
3. If `@trace.sign_off` block is absent and this is a system BDD tech doc → add it with all values `pending`.
|
|
285
|
+
|
|
286
|
+
Write both changes to the file.
|
|
287
|
+
|
|
288
|
+
Then update `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv` — pick the column by which tech-doc was reviewed (read the filename):
|
|
289
|
+
- **BE contract** (`{UC-ID}-tech-design.md`) → set `tech_doc_revision` to the new `@trace.revision` integer for all rows of this UC.
|
|
290
|
+
- **FE tech-design** (`{UC-ID}-tech-design-{platform}.md`) → set `fe_tech_doc_revision` instead, for the rows of this UC on that platform (leave `tech_doc_revision` untouched).
|
|
291
|
+
- Set `last_updated` to today's date (`YYYY-MM-DD`) for all rows of this UC.
|
|
292
|
+
|
|
293
|
+
Print the report after all file writes are complete.
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
/review-tech-docs --resume Applied — {target file}
|
|
297
|
+
UC: {UC-ID}
|
|
298
|
+
|
|
299
|
+
Applied : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
300
|
+
Skipped : {N} rejected/deferred
|
|
301
|
+
|
|
302
|
+
Changes:
|
|
303
|
+
- {change 1}
|
|
304
|
+
- {change 2}
|
|
305
|
+
|
|
306
|
+
Revision : {old} → {new}
|
|
307
|
+
Status : {approved | in-review}
|
|
308
|
+
|
|
309
|
+
Sign-off : {✅ All done — status set to approved
|
|
310
|
+
| 🔒 Pending: fe_team, sa — status set to in-review
|
|
311
|
+
Update @trace.sign_off in tech doc when each team confirms, then re-run /review-tech-docs}
|
|
312
|
+
|
|
313
|
+
Re-run /review-tech-docs {file} to confirm 0 remaining critical findings.
|
|
314
|
+
Next: {/generate-code {feature-file} ← only if status = approved
|
|
315
|
+
| Collect pending sign-offs → update @trace.sign_off → re-run /review-tech-docs}
|
|
316
|
+
→ if the tech-doc lives in the shared spec repo: commit + push it to the spec submodule so FE/App `/sync` the updated contract
|
|
317
|
+
```
|