@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,415 @@
|
|
|
1
|
+
# /review-context — Review PRD or BDD for Quality & Consistency
|
|
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 either a `.md` PRD file or a `.feature` BDD file.
|
|
10
|
+
If the path is a `prd.md` under `{paths.specs_dir}/{domain}/{prd-slug}/` → PRD Review Mode.
|
|
11
|
+
If the path ends with `.feature` → BDD Review Mode.
|
|
12
|
+
If `$ARGUMENTS` contains `--resume` → skip to Resume Mode below.
|
|
13
|
+
If `$ARGUMENTS` contains `--fix` → skip to Fix Mode below (apply all auto-fixable findings immediately).*
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
{{include:steps/context-loader.md}}
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Detect Review Mode
|
|
21
|
+
|
|
22
|
+
After resolving the target file:
|
|
23
|
+
- `.feature` file → **BDD Review Mode** (jump to BDD section)
|
|
24
|
+
- `prd.md` under `{paths.specs_dir}/*/*/` → **PRD Review Mode** (continue below)
|
|
25
|
+
- Unknown → ask: "Is this a PRD file or a BDD feature file? (prd/bdd)"
|
|
26
|
+
|
|
27
|
+
Also check flags:
|
|
28
|
+
- `--fix` present → after running all checks, apply `auto_fixable: true` findings immediately (skip Review Board)
|
|
29
|
+
- `--resume` present → skip analysis entirely, go to Resume Mode
|
|
30
|
+
|
|
31
|
+
Derive the output findings filename:
|
|
32
|
+
- PRD: `{paths.refinement_dir}/{prd-slug}-review-context-findings.yaml`
|
|
33
|
+
- BDD: `{paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml`
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Review Procedure
|
|
38
|
+
{{include:steps/review-fanout.md}}
|
|
39
|
+
|
|
40
|
+
**How the checks below map onto the procedure:**
|
|
41
|
+
- **DIMENSIONS** = the check groups for the detected mode — PRD: `P1, P2, P4, P5`; BDD: `B1, B2, B3, B4, B5, B6`. Fan out one sub-agent per check group, each scanning the full target file for just that group.
|
|
42
|
+
- **Orchestrator-run checks (not fanned out):** `P0` (umbrella routing) and `P3` (cross-PRD conflict) need config / other-PRD context — the orchestrator runs these itself **before** the fan-out and adds their results to `ALL_FINDINGS`.
|
|
43
|
+
- The completeness-critic loop (Phase 2) guarantees the findings file is complete in one run — re-running `/review-context` should surface **0 new** findings. Map each dimension into the `check_id` field of the schema below.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## PRD Review Mode
|
|
48
|
+
|
|
49
|
+
### P0 — Umbrella Routing Check (umbrella mode only)
|
|
50
|
+
|
|
51
|
+
*Skip this check entirely if `setup.mode` is not `"umbrella"` (i.e., `services` section absent from project-context.yaml).*
|
|
52
|
+
|
|
53
|
+
When `setup.mode = umbrella`, the PRD must have correct routing metadata so context-loader Step 1.5 can direct generated output to the right service submodule. Run these checks **before P1–P5**:
|
|
54
|
+
|
|
55
|
+
**P0.1 — `@trace.domain` presence**
|
|
56
|
+
- Read the PRD frontmatter block (lines starting with `@trace.` at top of file)
|
|
57
|
+
- If `@trace.domain` is **absent** → **critical** finding:
|
|
58
|
+
- `finding`: "`@trace.domain` is missing. Dev team's umbrella routing depends on this field to route BDD and code output to the correct service submodule."
|
|
59
|
+
- `suggestion`: "Add `@trace.domain: {domain}` to the PRD frontmatter. Use one of the domain keys defined in the umbrella's `project-context.yaml` services section."
|
|
60
|
+
- `auto_fixable: false` — PO must confirm the correct domain name
|
|
61
|
+
|
|
62
|
+
**P0.2 — `@trace.domain` matches a service key**
|
|
63
|
+
- If `@trace.domain` is present, check if its value matches any key in the `services` section of project-context.yaml
|
|
64
|
+
- If **no match found** → **critical** finding:
|
|
65
|
+
- `finding`: "`@trace.domain: {value}` does not match any key in the umbrella's `services` config. Routing will fall back to default paths and BDD may be generated to the wrong location."
|
|
66
|
+
- `suggestion`: "Either update `@trace.domain` to match an existing service key ({list known keys}), or add a new entry to `services` in project-context.yaml for domain `{value}`."
|
|
67
|
+
- `auto_fixable: false`
|
|
68
|
+
- If `services` section is not yet configured (empty/placeholder) → **major** finding:
|
|
69
|
+
- `finding`: "Umbrella `services` section is not yet configured. Cannot verify domain routing."
|
|
70
|
+
- `suggestion`: "Update `.agent/project-context.yaml` services section with domain-to-submodule mapping before generating BDD."
|
|
71
|
+
- `auto_fixable: false`
|
|
72
|
+
|
|
73
|
+
**P0.3 — `@trace.status` check**
|
|
74
|
+
- If `@trace.status` is absent → **minor**, `auto_fixable: true` (add `@trace.status: draft`)
|
|
75
|
+
- If `@trace.status: draft` → **major**, `auto_fixable: false`:
|
|
76
|
+
- `finding`: "PRD status is `draft`. Dev team should not generate BDD from an unapproved PRD."
|
|
77
|
+
- `suggestion`: "PO/SA should review and update status to `approved` before dev team proceeds."
|
|
78
|
+
|
|
79
|
+
> **P0 is a gate check:** If P0.1 or P0.2 yields a critical finding, display a warning before proceeding:
|
|
80
|
+
> ```
|
|
81
|
+
> ⚠️ ROUTING WARNING: @trace.domain issue detected.
|
|
82
|
+
> BDD/code generated from this PRD may land in the wrong service submodule.
|
|
83
|
+
> Resolve P0 findings before running /generate-bdd.
|
|
84
|
+
> ```
|
|
85
|
+
> Then continue with P1–P5 (do not abort — PO may be reviewing early-stage PRDs).
|
|
86
|
+
|
|
87
|
+
### P1 — Terminology Check (Business Dictionary)
|
|
88
|
+
|
|
89
|
+
Load `{paths.business_dictionary}`.
|
|
90
|
+
Scan the entire PRD for terminology issues:
|
|
91
|
+
|
|
92
|
+
1. **Banned terms** — every occurrence of a term in §Banned Terms:
|
|
93
|
+
→ Severity: **critical**. AI can auto-fix in `--resume`.
|
|
94
|
+
|
|
95
|
+
2. **Inconsistent usage** — same concept named differently across sections:
|
|
96
|
+
→ Severity: **major**. Flag both occurrences. Human decides canonical form in Review Board note.
|
|
97
|
+
|
|
98
|
+
3. **Unlisted business terms** — important terms absent from the dictionary:
|
|
99
|
+
→ Severity: **minor**. Suggest adding to `business-dictionary.md`.
|
|
100
|
+
|
|
101
|
+
### P2 — Ambiguity Check
|
|
102
|
+
|
|
103
|
+
Scan each AC and BR for:
|
|
104
|
+
|
|
105
|
+
| Signal | Example | Severity |
|
|
106
|
+
|--------|---------|----------|
|
|
107
|
+
| Vague quantifier | "fast", "large", "reasonable", "quickly" | Critical |
|
|
108
|
+
| Missing actor | "the system should" with no trigger specified | Major |
|
|
109
|
+
| Undefined reference | "{SomeThing}" used but never defined in this PRD | Major |
|
|
110
|
+
| Missing negative path | AC only describes happy path but BR has error conditions | Minor |
|
|
111
|
+
| Passive voice hiding actor | "Invoice is created" — who creates it? | Minor |
|
|
112
|
+
|
|
113
|
+
→ AI cannot auto-fix P2 findings. Human must write the fix in Review Board "Modify" note.
|
|
114
|
+
|
|
115
|
+
### P3 — Domain Conflict Check
|
|
116
|
+
|
|
117
|
+
List all other PRDs in `{paths.specs_dir}/{domain}/*/prd.md`.
|
|
118
|
+
For each one, check if this PRD contradicts a defined BR (same trigger, different outcome)
|
|
119
|
+
or redefines an entity field/status transition differently.
|
|
120
|
+
|
|
121
|
+
→ Severity: **critical**. Human decides which PRD is correct. Note required.
|
|
122
|
+
|
|
123
|
+
### P4 — Structural Completeness
|
|
124
|
+
|
|
125
|
+
- [ ] Metadata block: Version, Author, Date, Status
|
|
126
|
+
- [ ] At least 1 UC with `#### {TICKET-ID}-UC{N}:` heading
|
|
127
|
+
- [ ] Each UC has: Description, Actors, Preconditions, Acceptance Criteria, Business Rules
|
|
128
|
+
- [ ] `## Changelog` section exists
|
|
129
|
+
- [ ] No `{{PLACEHOLDER}}` values unfilled
|
|
130
|
+
|
|
131
|
+
→ Missing sections: **major**. AI can add skeleton in `--resume` if accepted.
|
|
132
|
+
|
|
133
|
+
### P5 — Custom Criteria (optional)
|
|
134
|
+
|
|
135
|
+
If `$ARGUMENTS` contains additional criteria after the file path, evaluate them and create
|
|
136
|
+
findings with `check_id: "P5"` and severity as appropriate.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## BDD Review Mode
|
|
141
|
+
|
|
142
|
+
### B1 — PRD Coverage Check
|
|
143
|
+
|
|
144
|
+
Load the PRD referenced by `# @trace.prd:` in the feature file header.
|
|
145
|
+
Map every AC and every BR (including sub-bullets) to scenarios:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
AC1 ({short text}) → SC1, SC2 ✅
|
|
149
|
+
AC2 ({short text}) → MISSING ❌
|
|
150
|
+
BR1 ({short text}) → SC1 ✅
|
|
151
|
+
BR2 ({short text}) → MISSING ❌
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
→ Each missing AC/BR coverage: **critical** finding.
|
|
155
|
+
If accepted in Review Board, `--resume` generates the missing scenario(s).
|
|
156
|
+
|
|
157
|
+
### B2 — Terminology & Entity Check
|
|
158
|
+
|
|
159
|
+
Using `{paths.business_dictionary}` and `{paths.core_entities}`:
|
|
160
|
+
|
|
161
|
+
1. **Banned terms in steps** → **critical**, auto-fixable in `--resume`
|
|
162
|
+
2. **Non-canonical entity names** → **major**, auto-fixable
|
|
163
|
+
3. **Non-canonical field names in data tables** → **major**, auto-fixable
|
|
164
|
+
4. **Technically-looking sample data** (UUIDs, `item_123`) → **minor**, auto-fixable
|
|
165
|
+
|
|
166
|
+
### B3 — Gherkin Rules Check (R1–R10)
|
|
167
|
+
|
|
168
|
+
| Rule | Check | Auto-fixable? |
|
|
169
|
+
|------|-------|---------------|
|
|
170
|
+
| R1 | Every scenario has Given + When + Then | No — needs scenario redesign |
|
|
171
|
+
| R2 | No chained `When … Then … When` | No — needs redesign |
|
|
172
|
+
| R3 | No UI selectors / API paths / tech terms in steps | Yes — replace with business phrasing |
|
|
173
|
+
| R4 | Scenario name is a business outcome | No — needs human rename |
|
|
174
|
+
| R5 | Declarative WHAT, not imperative HOW | No — needs rewrite |
|
|
175
|
+
| R6 | `Then` asserts observable business outcome | No — needs redesign |
|
|
176
|
+
| R7 | Concrete values, not "valid data" | Yes — substitute realistic values |
|
|
177
|
+
| R8 | Each scenario is independently runnable | No — needs redesign |
|
|
178
|
+
| R9 | Data tables have enough columns for Then | Yes — add missing columns |
|
|
179
|
+
| R10 | Cross-UC reference uses navigation phrasing + Note | Yes — add Note comment |
|
|
180
|
+
|
|
181
|
+
→ R3, R7, R9, R10 violations: auto-fixable. Others require human guidance via Review Board note.
|
|
182
|
+
|
|
183
|
+
### B4 — Compliance Checks (C.1–C.5)
|
|
184
|
+
|
|
185
|
+
- [ ] C.1 Wireframe Coverage: every screen component/action has ≥1 SC → finding per missing item
|
|
186
|
+
- [ ] C.2 PRD Traceability: covered fully by B1 — do NOT create new findings here; deduplicate against B1 findings
|
|
187
|
+
- [ ] C.3 Business Dictionary terms used → same as B2
|
|
188
|
+
- [ ] C.4 Banned Terms: 0 banned terms → **critical**, auto-fixable
|
|
189
|
+
- [ ] C.5 NHÓM Grouping: if ≥3 SCs, grouped by business theme → **major**, auto-fixable
|
|
190
|
+
|
|
191
|
+
### B5 — Metadata & Structural Check
|
|
192
|
+
|
|
193
|
+
- [ ] File header has all required `@trace.*` fields — check each explicitly: `@trace.id`, `@trace.title`, `@trace.revision`, `@trace.domain`, `@trace.service`, `@trace.module`, `@trace.status`, `@trace.author`, `@trace.created_at`, `@trace.prd`, `@trace.prd_version`, `@trace.bdd_version`, `@trace.business_rules`, `@trace.dataset` → **minor** per missing field, auto-fixable
|
|
194
|
+
- Note: `@trace.revision` is always `1` (static field — see generate-bdd.tmpl). Only check for presence; do NOT flag value as stale.
|
|
195
|
+
- [ ] Every scenario has `# @trace.scenario`, `# @trace.sc_version`, `# @trace.business_rules`, `# Side-effects:` → **minor**, auto-fixable
|
|
196
|
+
- [ ] Coverage Matrix at end of file → **major**, auto-fixable (AI regenerates)
|
|
197
|
+
- [ ] Pre-merge Checklist at end of file → **minor**, auto-fixable
|
|
198
|
+
|
|
199
|
+
### B6 — Side-effect Completeness
|
|
200
|
+
|
|
201
|
+
For each `@happy` scenario:
|
|
202
|
+
- `# Side-effects:` comment lists all observable side effects
|
|
203
|
+
- `Then` block has `And <side-effect>` for each listed side effect
|
|
204
|
+
|
|
205
|
+
→ Missing side-effect assertion: **major**, auto-fixable.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Write Findings File
|
|
210
|
+
|
|
211
|
+
After running all checks, write `{paths.refinement_dir}/{slug}-review-*-findings.yaml`:
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
source_file: "{absolute path to reviewed file}"
|
|
215
|
+
generated_at: "{ISO datetime}"
|
|
216
|
+
review_type: "{prd | bdd}"
|
|
217
|
+
status: "pending_review"
|
|
218
|
+
|
|
219
|
+
findings:
|
|
220
|
+
- id: "F001"
|
|
221
|
+
check_id: "P1" # P1-P5 for PRD; B1-B6 for BDD
|
|
222
|
+
severity: "critical" # critical | major | minor
|
|
223
|
+
section: "{section or scenario ID where issue was found}"
|
|
224
|
+
uc_id: "{UC-ID this finding belongs to — PRD: the UC heading; BDD: @trace.id; \"\" if global}"
|
|
225
|
+
quote: "{verbatim snippet copied EXACTLY from the reviewed file at the issue location, ≤120 chars}"
|
|
226
|
+
finding: "{clear description of the issue}"
|
|
227
|
+
suggestion: "{specific actionable fix — AI will apply this in --resume if accepted}"
|
|
228
|
+
auto_fixable: true # true = AI can apply; false = human must write note in Review Board
|
|
229
|
+
status: "pending" # pending | accepted | modified | rejected | deferred
|
|
230
|
+
|
|
231
|
+
summary:
|
|
232
|
+
total_findings: {N}
|
|
233
|
+
by_severity: { critical: {N}, major: {N}, minor: {N} }
|
|
234
|
+
auto_fixable: {N}
|
|
235
|
+
requires_human_decision: {N}
|
|
236
|
+
recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
> **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
|
|
240
|
+
> For every finding, copy a short **verbatim** `quote` straight from the reviewed file at the exact
|
|
241
|
+
> spot the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
|
|
242
|
+
> Set `uc_id` to the owning Use Case (`@trace.id` for BDD, the UC heading for PRD; `""` if global).
|
|
243
|
+
> These let a reviewer click a finding in the Review Board and jump to the precise source location.
|
|
244
|
+
|
|
245
|
+
## Post-Analysis Routing
|
|
246
|
+
|
|
247
|
+
After running all checks and writing the findings file:
|
|
248
|
+
|
|
249
|
+
**If `--fix` flag present** → jump to Fix Mode (apply `auto_fixable: true` findings immediately).
|
|
250
|
+
|
|
251
|
+
**If no flag** → print Report below and stop.
|
|
252
|
+
|
|
253
|
+
## Report
|
|
254
|
+
|
|
255
|
+
{{include:steps/report-footer.md}}
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
/review-context Complete — {target file}
|
|
259
|
+
Mode: {PRD | BDD}
|
|
260
|
+
Findings: {total} | 🔴 Critical: {N} | 🟡 Major: {N} | 🟢 Minor: {N}
|
|
261
|
+
Auto-fixable: {N} | Needs human decision: {N}
|
|
262
|
+
|
|
263
|
+
Findings file:
|
|
264
|
+
{If PRD}: {paths.refinement_dir}/{prd-slug}-review-context-findings.yaml
|
|
265
|
+
{If BDD}: {paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml
|
|
266
|
+
|
|
267
|
+
Next options:
|
|
268
|
+
A) Quick fix : /review-context --fix {target-file}
|
|
269
|
+
→ applies all auto-fixable findings immediately
|
|
270
|
+
B) Review Board: open findings file → accept/modify/reject
|
|
271
|
+
→ /review-context --resume {target-file}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Fix Mode — Apply Auto-Fixable Findings Immediately
|
|
277
|
+
|
|
278
|
+
*Triggered when `$ARGUMENTS` contains `--fix`.*
|
|
279
|
+
*Example: `/review-context --fix specs/payment/process-payment/bdd/PAY-001.feature`*
|
|
280
|
+
|
|
281
|
+
This mode runs the full analysis (same as default), then immediately applies every
|
|
282
|
+
`auto_fixable: true` finding without going through the Review Board.
|
|
283
|
+
|
|
284
|
+
Use for: BDD cleanup, terminology fixes, metadata gaps — anything the AI can safely
|
|
285
|
+
correct without a human judgment call. Findings requiring human decisions are written
|
|
286
|
+
to the findings file as usual and left `status: pending`.
|
|
287
|
+
|
|
288
|
+
### Phase 1 — Run analysis
|
|
289
|
+
|
|
290
|
+
Run all checks via the **Review Procedure** (fan-out + completeness loop) exactly as in the default mode.
|
|
291
|
+
Write the findings file with all `status: "pending"` as usual.
|
|
292
|
+
|
|
293
|
+
### Phase 2 — Apply auto-fixable findings
|
|
294
|
+
|
|
295
|
+
For each finding where `auto_fixable: true`, in order (critical → major → minor):
|
|
296
|
+
|
|
297
|
+
**For PRD files:**
|
|
298
|
+
|
|
299
|
+
| check_id | What to apply |
|
|
300
|
+
|----------|--------------|
|
|
301
|
+
| P0.3 (Missing status) | Add `@trace.status: draft` to frontmatter |
|
|
302
|
+
| P1 (Banned term) | Replace every banned term occurrence with canonical term |
|
|
303
|
+
| P4 (Structure) | Add missing section/metadata skeleton |
|
|
304
|
+
|
|
305
|
+
**For BDD files:**
|
|
306
|
+
|
|
307
|
+
| check_id | What to apply |
|
|
308
|
+
|----------|--------------|
|
|
309
|
+
| B2 (Terminology) | Replace banned terms, fix entity/field names, fix technical sample data |
|
|
310
|
+
| B3 R3 | Replace tech terms/UI selectors with business phrasing |
|
|
311
|
+
| B3 R7 | Substitute concrete realistic values |
|
|
312
|
+
| B3 R9 | Add missing data table columns |
|
|
313
|
+
| B3 R10 | Add cross-UC navigation Note comment |
|
|
314
|
+
| B4 C4 | Fix banned terms in tags |
|
|
315
|
+
| B4 C5 | Add NHÓM grouping if ≥3 SCs |
|
|
316
|
+
| B5 | Add missing @trace headers, regenerate Coverage Matrix / Pre-merge Checklist |
|
|
317
|
+
| B6 | Add missing `And <side-effect>` to Then blocks |
|
|
318
|
+
|
|
319
|
+
After applying each finding, mark it `status: "applied_automatically"` in the findings file.
|
|
320
|
+
|
|
321
|
+
### Phase 3 — Version bump
|
|
322
|
+
|
|
323
|
+
- **PRD**: if ≥1 finding applied → bump **minor** version (auto-fix only applies P1 banned-term replacements and P4 skeleton additions — never alters UC structure or BR content, so minor bump is always correct), add Changelog entry:
|
|
324
|
+
`Auto-fix: applied {N} auto-fixable review-context findings`
|
|
325
|
+
- **BDD**: if ≥1 finding applied → increment `@trace.bdd_version` by 0.1
|
|
326
|
+
|
|
327
|
+
### Phase 4 — Report
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
/review-context --fix Applied — {target file}
|
|
331
|
+
Mode: {PRD | BDD}
|
|
332
|
+
|
|
333
|
+
Auto-fixed : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
334
|
+
- {change 1 summary}
|
|
335
|
+
- {change 2 summary}
|
|
336
|
+
|
|
337
|
+
Still pending (needs human decision): {N}
|
|
338
|
+
- F00X [{severity}] {finding summary} ← open findings file in Review Board
|
|
339
|
+
|
|
340
|
+
{If PRD}: Version bumped: {old} → {new}
|
|
341
|
+
{If BDD}: bdd_version: {old} → {new}
|
|
342
|
+
|
|
343
|
+
Findings file:
|
|
344
|
+
{If PRD}: {paths.refinement_dir}/{prd-slug}-review-context-findings.yaml
|
|
345
|
+
{If BDD}: {paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml
|
|
346
|
+
Re-run /review-context {file} to confirm 0 remaining critical findings.
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
If 0 findings were auto-fixable → print:
|
|
350
|
+
```
|
|
351
|
+
Nothing to auto-fix. All {N} findings require human decision.
|
|
352
|
+
Open findings file in Review Board → then run: /review-context --resume {file}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Resume Mode — Apply Accepted Findings
|
|
358
|
+
|
|
359
|
+
*Triggered when `$ARGUMENTS` contains `--resume`.*
|
|
360
|
+
*Example: `/review-context --resume specs/payment/process-payment/prd.md`*
|
|
361
|
+
|
|
362
|
+
### Phase 1 — Read accepted findings
|
|
363
|
+
|
|
364
|
+
1. Derive findings filename from target file using the same rule as Detect Review Mode:
|
|
365
|
+
- PRD: `{paths.refinement_dir}/{prd-slug}-review-context-findings.yaml`
|
|
366
|
+
- BDD: `{paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml`
|
|
367
|
+
2. Read the findings file.
|
|
368
|
+
3. Collect findings where `status: "accepted"` or `status: "modified"`.
|
|
369
|
+
4. If none → report "No accepted findings. File unchanged." and stop.
|
|
370
|
+
|
|
371
|
+
### Phase 2 — Apply fixes
|
|
372
|
+
|
|
373
|
+
Apply in order: critical → major → minor.
|
|
374
|
+
|
|
375
|
+
**For PRD findings:**
|
|
376
|
+
| check_id | What to do |
|
|
377
|
+
|----------|-----------|
|
|
378
|
+
| P0.3 (Missing status) | Add `@trace.status: draft` to frontmatter |
|
|
379
|
+
| P1 (Banned term) | Replace every occurrence of banned term with canonical term |
|
|
380
|
+
| P2 (Ambiguity) | Apply the fix stated in `suggestion` or `modified` note |
|
|
381
|
+
| P3 (Conflict) | Apply the resolution stated in the modified note |
|
|
382
|
+
| P4 (Structure) | Add the missing section/metadata field |
|
|
383
|
+
| P5 (Custom) | Apply as stated in suggestion/note |
|
|
384
|
+
|
|
385
|
+
→ After applying, bump PRD version (minor) and add Changelog entry.
|
|
386
|
+
|
|
387
|
+
**For BDD findings:**
|
|
388
|
+
| check_id | What to do |
|
|
389
|
+
|----------|-----------|
|
|
390
|
+
| B1 (Coverage gap) | Generate new scenario(s) for the uncovered AC/BR and insert into correct NHÓM |
|
|
391
|
+
| B2 (Terminology) | Replace banned terms, fix entity/field names |
|
|
392
|
+
| B3 (Gherkin rule) | Apply rule-specific fix (replace tech terms, add concrete values, etc.) |
|
|
393
|
+
| B4 (Compliance) | Add NHÓM grouping, fix @trace tags |
|
|
394
|
+
| B5 (Metadata) | Add missing @trace headers, regenerate Coverage Matrix / Pre-merge Checklist |
|
|
395
|
+
| B6 (Side effects) | Add missing `And <side-effect>` to Then block |
|
|
396
|
+
|
|
397
|
+
→ After applying, increment `@trace.bdd_version` in file header by 0.1.
|
|
398
|
+
→ Also update `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv`: set `bdd_version` column to the new `@trace.bdd_version` value for all rows, and set `last_updated` to today's date.
|
|
399
|
+
|
|
400
|
+
### Phase 3 — Report
|
|
401
|
+
|
|
402
|
+
```
|
|
403
|
+
/review-context --resume Applied — {target file}
|
|
404
|
+
Applied : {N} findings ({critical} critical, {major} major, {minor} minor)
|
|
405
|
+
Skipped : {N} rejected/deferred
|
|
406
|
+
|
|
407
|
+
Changes:
|
|
408
|
+
- {change 1 summary}
|
|
409
|
+
- {change 2 summary}
|
|
410
|
+
|
|
411
|
+
{If PRD}: Version bumped: {old} → {new}
|
|
412
|
+
{If BDD}: bdd_version: {old} → {new}
|
|
413
|
+
|
|
414
|
+
Re-run /review-context {file} to confirm 0 remaining critical findings.
|
|
415
|
+
```
|