@anhth2/spec-driven-dev-plugin 0.11.0 → 0.12.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.
Files changed (133) hide show
  1. package/commands/debug.md +5 -0
  2. package/commands/define-product.md +5 -0
  3. package/commands/dev-gen-test.md +5 -0
  4. package/commands/dev-run-test.md +5 -0
  5. package/commands/dev-smoke-test.md +5 -0
  6. package/commands/fix-bug.md +41 -6
  7. package/commands/fix-bug.tmpl +36 -6
  8. package/commands/generate-bdd.md +9 -2
  9. package/commands/generate-bdd.tmpl +4 -2
  10. package/commands/generate-code.md +5 -0
  11. package/commands/generate-design-spec.md +5 -0
  12. package/commands/generate-prd.md +5 -0
  13. package/commands/generate-spec-manifest.md +5 -0
  14. package/commands/generate-tech-docs.md +5 -0
  15. package/commands/learn.md +5 -0
  16. package/commands/propose-scenario.md +36 -11
  17. package/commands/propose-scenario.tmpl +31 -11
  18. package/commands/qc-analyze.md +25 -5
  19. package/commands/qc-analyze.tmpl +20 -5
  20. package/commands/qc-design-test.md +8 -3
  21. package/commands/qc-design-test.tmpl +3 -3
  22. package/commands/qc-plan.md +8 -3
  23. package/commands/qc-plan.tmpl +3 -3
  24. package/commands/qc-report.md +18 -1
  25. package/commands/qc-report.tmpl +13 -1
  26. package/commands/qc-review.md +7 -2
  27. package/commands/qc-review.tmpl +2 -2
  28. package/commands/qc-run-test.md +13 -2
  29. package/commands/qc-run-test.tmpl +8 -2
  30. package/commands/refine-prd.md +5 -0
  31. package/commands/report-bug.md +21 -2
  32. package/commands/report-bug.tmpl +16 -2
  33. package/commands/review-code.md +5 -0
  34. package/commands/review-context.md +5 -0
  35. package/commands/review-tech-docs.md +5 -0
  36. package/commands/sync.md +12 -9
  37. package/commands/sync.tmpl +12 -9
  38. package/commands/validate-traces.md +15 -2
  39. package/commands/validate-traces.tmpl +10 -2
  40. package/core/FRAMEWORK_VERSION +1 -1
  41. package/core/commands/debug.md +5 -0
  42. package/core/commands/define-product.md +5 -0
  43. package/core/commands/dev-gen-test.md +5 -0
  44. package/core/commands/dev-run-test.md +5 -0
  45. package/core/commands/dev-smoke-test.md +5 -0
  46. package/core/commands/fix-bug.md +41 -6
  47. package/core/commands/generate-bdd.md +9 -2
  48. package/core/commands/generate-code.md +5 -0
  49. package/core/commands/generate-design-spec.md +5 -0
  50. package/core/commands/generate-prd.md +5 -0
  51. package/core/commands/generate-spec-manifest.md +5 -0
  52. package/core/commands/generate-tech-docs.md +5 -0
  53. package/core/commands/learn.md +5 -0
  54. package/core/commands/propose-scenario.md +36 -11
  55. package/core/commands/qc-analyze.md +25 -5
  56. package/core/commands/qc-design-test.md +8 -3
  57. package/core/commands/qc-plan.md +8 -3
  58. package/core/commands/qc-report.md +18 -1
  59. package/core/commands/qc-review.md +7 -2
  60. package/core/commands/qc-run-test.md +13 -2
  61. package/core/commands/refine-prd.md +5 -0
  62. package/core/commands/report-bug.md +21 -2
  63. package/core/commands/review-code.md +5 -0
  64. package/core/commands/review-context.md +5 -0
  65. package/core/commands/review-tech-docs.md +5 -0
  66. package/core/commands/sync.md +12 -9
  67. package/core/commands/validate-traces.md +15 -2
  68. package/core/modules/qc-playwright/stack-profile.yaml +3 -3
  69. package/core/skills/code/SKILL.md +5 -0
  70. package/core/skills/debug/SKILL.md +5 -0
  71. package/core/skills/design-spec/SKILL.md +5 -0
  72. package/core/skills/discovery/SKILL.md +5 -0
  73. package/core/skills/qc/qa-analyst/acceptance-criteria.md +5 -1
  74. package/core/skills/qc/qa-analyst/business-rules.md +6 -2
  75. package/core/skills/qc/qa-analyst/data-flow.md +6 -2
  76. package/core/skills/qc/qa-analyst/spec-breakdown.md +7 -3
  77. package/core/skills/qc/qa-designer/e2e/journey.md +1 -1
  78. package/core/skills/qc/qa-designer/exploratory/charter.md +2 -2
  79. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
  80. package/core/skills/qc/qa-designer/functional/api.md +1 -1
  81. package/core/skills/qc/qa-designer/functional/gui-feature.md +1 -1
  82. package/core/skills/qc/qa-designer/functional/gui-screen.md +1 -1
  83. package/core/skills/qc/qa-designer/integration/api.md +1 -1
  84. package/core/skills/qc/qa-designer/integration/db.md +1 -1
  85. package/core/skills/qc/qa-designer/integration/gui.md +1 -1
  86. package/core/skills/qc/qa-designer/integration/kafka.md +1 -1
  87. package/core/skills/qc/qa-designer/non-functional.md +1 -1
  88. package/core/skills/qc/qa-planner/test-plan.md +4 -4
  89. package/core/skills/qc/qa-runner/exploratory/session.md +2 -2
  90. package/core/skills/test/SKILL.md +10 -0
  91. package/core/steps/context-loader.md +5 -0
  92. package/core/templates/project-context.yaml +19 -1
  93. package/docs/01-getting-started/installation.md +3 -1
  94. package/docs/02-guides/developer/commands.md +1 -1
  95. package/docs/02-guides/developer/workflow.md +2 -0
  96. package/docs/02-guides/qc-automation.md +66 -1
  97. package/docs/02-guides/tester/README.md +2 -0
  98. package/docs/02-guides/tester/bug-reporting.md +1 -1
  99. package/docs/02-guides/tester/workflow.md +4 -3
  100. package/docs/03-concepts/architecture.md +2 -0
  101. package/docs/03-concepts/pipeline.md +19 -6
  102. package/docs/03-concepts/traceability.md +2 -1
  103. package/docs/04-operations/bug-flow.md +45 -4
  104. package/docs/04-operations/sync-and-update.md +38 -1
  105. package/docs/05-reference/commands.md +11 -11
  106. package/docs/05-reference/modules.md +2 -2
  107. package/docs/05-reference/trace-schema.md +18 -12
  108. package/modules/qc-playwright/stack-profile.yaml +3 -3
  109. package/package.json +1 -1
  110. package/skills/code/SKILL.md +5 -0
  111. package/skills/debug/SKILL.md +5 -0
  112. package/skills/design-spec/SKILL.md +5 -0
  113. package/skills/discovery/SKILL.md +5 -0
  114. package/skills/qc/qa-analyst/acceptance-criteria.md +5 -1
  115. package/skills/qc/qa-analyst/business-rules.md +6 -2
  116. package/skills/qc/qa-analyst/data-flow.md +6 -2
  117. package/skills/qc/qa-analyst/spec-breakdown.md +7 -3
  118. package/skills/qc/qa-designer/e2e/journey.md +1 -1
  119. package/skills/qc/qa-designer/exploratory/charter.md +2 -2
  120. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
  121. package/skills/qc/qa-designer/functional/api.md +1 -1
  122. package/skills/qc/qa-designer/functional/gui-feature.md +1 -1
  123. package/skills/qc/qa-designer/functional/gui-screen.md +1 -1
  124. package/skills/qc/qa-designer/integration/api.md +1 -1
  125. package/skills/qc/qa-designer/integration/db.md +1 -1
  126. package/skills/qc/qa-designer/integration/gui.md +1 -1
  127. package/skills/qc/qa-designer/integration/kafka.md +1 -1
  128. package/skills/qc/qa-designer/non-functional.md +1 -1
  129. package/skills/qc/qa-planner/test-plan.md +4 -4
  130. package/skills/qc/qa-runner/exploratory/session.md +2 -2
  131. package/skills/test/SKILL.md +10 -0
  132. package/steps/context-loader.md +5 -0
  133. package/templates/project-context.yaml +19 -1
@@ -1,7 +1,8 @@
1
- # /propose-scenario — Propose a New BDD Scenario (Tester-Facing)
1
+ # /propose-scenario — Propose a New BDD Scenario (Tester & QC-Facing)
2
2
 
3
- For **testers** who discover an edge case not covered by existing BDD. Drafts a Gherkin scenario
4
- into a **proposals area** for PO/Dev to review and promote.
3
+ For **testers and QC** who discover an edge case not covered by existing BDD (e.g. a `DOC_GAPS`
4
+ missing-coverage gap from `/qc-analyze`). Drafts a Gherkin scenario into a **proposals area** for
5
+ PO/Dev to review and promote.
5
6
 
6
7
  **Does NOT edit the canonical `.feature` file.** BDD is owned by PO/Dev — this command only writes
7
8
  a proposal. Promotion into the real BDD is a PO/Dev action.
@@ -134,6 +135,8 @@ Read `.agent/project-context.yaml`. Extract and store:
134
135
  - `paths.specs_dir` → BDD specs root
135
136
  - `paths.prd_dir` → PRD documents root
136
137
  - `paths.refinement_dir` → findings/review output dir
138
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
139
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
137
140
  - `paths.product_definitions_dir` → product definitions root
138
141
  - `paths.domain_knowledge_dir` → domain knowledge root
139
142
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -146,6 +149,8 @@ If `paths` section is absent, use these defaults:
146
149
  - `specs_dir` = `specs/bdd`
147
150
  - `prd_dir` = `specs/prd`
148
151
  - `refinement_dir` = `.agent/review`
152
+ - `qc_dir` = `docs`
153
+ - `qc_skills_dir` = `.agent/skills/qc`
149
154
  - `product_definitions_dir` = `specs/product-definition`
150
155
  - `domain_knowledge_dir` = `specs/domain-knowledge`
151
156
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -190,6 +195,7 @@ If `services` section is present:
190
195
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
191
196
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
192
197
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
198
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
193
199
 
194
200
  > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
195
201
 
@@ -410,15 +416,28 @@ A BDD scenario must trace to a PRD acceptance criterion. Determine which case ap
410
416
  → This is a coverage gap. Proceed to draft the scenario (Step 3), mapped to that AC.
411
417
 
412
418
  **Case B — behavior is NOT in any AC** (genuinely new requirement):
413
- STOP. A scenario here would have nothing to trace to. Do **not** draft it as a BDD proposal.
414
- Instead output a **PRD change request** for the PO:
419
+ Do **not** draft a BDD proposal (a scenario would have nothing to trace to). Instead **write a
420
+ PRD change request file** so the PO actually sees it on `/sync` (do not just print it):
421
+
422
+ Write to `{paths.prd_change_requests_dir}/{UC-ID}-{slug}.md` (resolved to
423
+ `{spec_source}/feedback/prd-change-requests/` in umbrella mode; create dir if needed):
415
424
  ```
416
- ⚠️ Not covered by any PRD AC this is a new requirement, not a coverage gap.
417
- Route to PO: add/extend an AC in {prd_path}, then re-run /generate-bdd.
418
- Requested behavior: {description}
419
- Suggested AC: "{draft AC text}"
425
+ # PRD Change Request{UC-ID}: {short title}
426
+
427
+ > ⚠️ New requirement found in test — NOT covered by any PRD AC (not a coverage gap).
428
+ | Field | Value |
429
+ |---|---|
430
+ | UC / Ticket | {UC-ID} |
431
+ | PRD | {prd_path} (v{prd_version}) |
432
+ | Source | {BUG-ID if any | tester/QC observation} |
433
+ | Requested by | tester/QC |
434
+ | Status | Open |
435
+
436
+ **Requested behavior:** {description}
437
+ **Suggested AC (draft for PO):** "{draft AC text}"
438
+ **Route to PO:** add/extend an AC in {prd_path} → `/refine-prd` → re-run `/generate-bdd` → dev `/generate-code`.
420
439
  ```
421
- Then end (no proposal file written for BDD).
440
+ Then go to Step 5 (handoff applies to this file too). Skip Step 3–4 (no BDD scenario for Case B).
422
441
 
423
442
  If unsure which case → show the AC list and ask the tester which AC this maps to, or confirm it's new.
424
443
 
@@ -447,7 +466,13 @@ git push # → PO/Dev see it on their next /sync
447
466
  ```
448
467
 
449
468
  - No push rights to the spec repo → open a PR / MR instead. Print this fallback.
450
- - For a **PRD change request** (Case B), the same handoff applies — commit the request doc so the PO sees it.
469
+ - For a **PRD change request** (Case B), commit the request file instead:
470
+ ```bash
471
+ cd {spec_source}
472
+ git add feedback/prd-change-requests/{UC-ID}-{slug}.md
473
+ git commit -m "qa(prd-change): {UC-ID} — {title}"
474
+ git push
475
+ ```
451
476
 
452
477
  > PO/Dev are notified through their normal routine: `/sync` lists newly-pulled proposals.
453
478
 
@@ -1,7 +1,8 @@
1
- # /propose-scenario — Propose a New BDD Scenario (Tester-Facing)
1
+ # /propose-scenario — Propose a New BDD Scenario (Tester & QC-Facing)
2
2
 
3
- For **testers** who discover an edge case not covered by existing BDD. Drafts a Gherkin scenario
4
- into a **proposals area** for PO/Dev to review and promote.
3
+ For **testers and QC** who discover an edge case not covered by existing BDD (e.g. a `DOC_GAPS`
4
+ missing-coverage gap from `/qc-analyze`). Drafts a Gherkin scenario into a **proposals area** for
5
+ PO/Dev to review and promote.
5
6
 
6
7
  **Does NOT edit the canonical `.feature` file.** BDD is owned by PO/Dev — this command only writes
7
8
  a proposal. Promotion into the real BDD is a PO/Dev action.
@@ -34,15 +35,28 @@ A BDD scenario must trace to a PRD acceptance criterion. Determine which case ap
34
35
  → This is a coverage gap. Proceed to draft the scenario (Step 3), mapped to that AC.
35
36
 
36
37
  **Case B — behavior is NOT in any AC** (genuinely new requirement):
37
- STOP. A scenario here would have nothing to trace to. Do **not** draft it as a BDD proposal.
38
- Instead output a **PRD change request** for the PO:
38
+ Do **not** draft a BDD proposal (a scenario would have nothing to trace to). Instead **write a
39
+ PRD change request file** so the PO actually sees it on `/sync` (do not just print it):
40
+
41
+ Write to `{paths.prd_change_requests_dir}/{UC-ID}-{slug}.md` (resolved to
42
+ `{spec_source}/feedback/prd-change-requests/` in umbrella mode; create dir if needed):
39
43
  ```
40
- ⚠️ Not covered by any PRD AC this is a new requirement, not a coverage gap.
41
- Route to PO: add/extend an AC in {prd_path}, then re-run /generate-bdd.
42
- Requested behavior: {description}
43
- Suggested AC: "{draft AC text}"
44
+ # PRD Change Request{UC-ID}: {short title}
45
+
46
+ > ⚠️ New requirement found in test — NOT covered by any PRD AC (not a coverage gap).
47
+ | Field | Value |
48
+ |---|---|
49
+ | UC / Ticket | {UC-ID} |
50
+ | PRD | {prd_path} (v{prd_version}) |
51
+ | Source | {BUG-ID if any | tester/QC observation} |
52
+ | Requested by | tester/QC |
53
+ | Status | Open |
54
+
55
+ **Requested behavior:** {description}
56
+ **Suggested AC (draft for PO):** "{draft AC text}"
57
+ **Route to PO:** add/extend an AC in {prd_path} → `/refine-prd` → re-run `/generate-bdd` → dev `/generate-code`.
44
58
  ```
45
- Then end (no proposal file written for BDD).
59
+ Then go to Step 5 (handoff applies to this file too). Skip Step 3–4 (no BDD scenario for Case B).
46
60
 
47
61
  If unsure which case → show the AC list and ask the tester which AC this maps to, or confirm it's new.
48
62
 
@@ -71,7 +85,13 @@ git push # → PO/Dev see it on their next /sync
71
85
  ```
72
86
 
73
87
  - No push rights to the spec repo → open a PR / MR instead. Print this fallback.
74
- - For a **PRD change request** (Case B), the same handoff applies — commit the request doc so the PO sees it.
88
+ - For a **PRD change request** (Case B), commit the request file instead:
89
+ ```bash
90
+ cd {spec_source}
91
+ git add feedback/prd-change-requests/{UC-ID}-{slug}.md
92
+ git commit -m "qa(prd-change): {UC-ID} — {title}"
93
+ git push
94
+ ```
75
95
 
76
96
  > PO/Dev are notified through their normal routine: `/sync` lists newly-pulled proposals.
77
97
 
@@ -133,6 +133,8 @@ Read `.agent/project-context.yaml`. Extract and store:
133
133
  - `paths.specs_dir` → BDD specs root
134
134
  - `paths.prd_dir` → PRD documents root
135
135
  - `paths.refinement_dir` → findings/review output dir
136
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
137
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
136
138
  - `paths.product_definitions_dir` → product definitions root
137
139
  - `paths.domain_knowledge_dir` → domain knowledge root
138
140
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -145,6 +147,8 @@ If `paths` section is absent, use these defaults:
145
147
  - `specs_dir` = `specs/bdd`
146
148
  - `prd_dir` = `specs/prd`
147
149
  - `refinement_dir` = `.agent/review`
150
+ - `qc_dir` = `docs`
151
+ - `qc_skills_dir` = `.agent/skills/qc`
148
152
  - `product_definitions_dir` = `specs/product-definition`
149
153
  - `domain_knowledge_dir` = `specs/domain-knowledge`
150
154
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -189,6 +193,7 @@ If `services` section is present:
189
193
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
190
194
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
191
195
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
196
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
192
197
 
193
198
  > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
194
199
 
@@ -405,7 +410,7 @@ Boundary vs `/qc-plan`: you answer *"what is the requirement?"*; qc-plan answers
405
410
  the risk, what to ask dev?"*. When something is ambiguous/missing, record it as a gap and
406
411
  hand off to qc-plan — never invent an answer.
407
412
 
408
- ## Skills (`skills/qc/qa-analyst/`)
413
+ ## Skills (`{paths.qc_skills_dir}/qa-analyst/`)
409
414
 
410
415
  Load only the file for the step you are doing (each is self-contained):
411
416
  - `spec-breakdown.md` — break a spec/PRD/user story into structure.
@@ -424,15 +429,29 @@ tests with `@trace.verifies` and write `qc_status` per scenario.
424
429
 
425
430
  ## DOC_GAPS (mandatory)
426
431
 
427
- Always produce a gaps file following `skills/qc/qa-analyst/DOC_GAPS.template.md`:
432
+ Always produce a gaps file following `{paths.qc_skills_dir}/qa-analyst/DOC_GAPS.template.md`:
428
433
  - Each gap `GAP-xx`, classified MISSING / AMBIGUOUS / CONTRADICTORY / ASSUMPTION / OPEN QUESTION, with severity (🔴 Blocker → 🟢 Low) and the affected function/BR/AC.
429
434
  - Never fabricate answers; mark assumptions as `ASSUMPTION` for PO/dev to confirm.
430
435
  - Any `🔴 Blocker` still `Open` ⇒ the UC is not ready for qc-design-test — hand off to qc-plan.
436
+ - **Push genuine SPEC defects to the PO (not just keep them local).** A blocker that is a real
437
+ flaw in the official spec — `AMBIGUOUS` / `CONTRADICTORY` / `MISSING` in PRD/BDD — must reach
438
+ the PO via the feedback flow, not sit only in `DOC_GAPS.md`: file `/report-bug {UC-ID} {desc}`
439
+ (its BUG_FLOW classifies PRD vs BDD), or `/propose-scenario {UC-ID}` if the gap is missing test
440
+ coverage. `ASSUMPTION` / `OPEN QUESTION` gaps are confirmed via qc-plan's questions-for-dev — not filed as bugs.
431
441
 
432
442
  ## Output
433
443
 
434
- Write the analysis artifacts under `{paths.refinement_dir}/qc/{UC-ID}/` (requirement
435
- breakdown, BR table, data-flow, AC list with SC mapping, and `DOC_GAPS.md`).
444
+ Write **exactly TWO files** under `{paths.qc_dir}/{UC-ID}/` — do **not** split the analysis
445
+ into one-file-per-step (no separate spec-breakdown / business-rules / data-flow / AC files):
446
+
447
+ 1. **`{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md`** — the single consolidated analysis.
448
+ Sections in order: requirement breakdown → business-rule table (`BR-xx`) → data-flow →
449
+ acceptance-criteria (`AC-xx`), each `BR`/`AC` mapped to its owning `{UC-ID}-SC{N}`.
450
+ 2. **`{paths.qc_dir}/{UC-ID}/DOC_GAPS.md`** — the gaps file (per `{paths.qc_skills_dir}/qa-analyst/DOC_GAPS.template.md`).
451
+
452
+ `{paths.qc_dir}` is a VISIBLE top-level folder in the QC repo (default `docs/`, **not** the
453
+ hidden `.agent/review/`) so the QC team can open and process the output easily. The official
454
+ spec stays in the PO spec submodule — do not write analysis there.
436
455
 
437
456
  ## Report
438
457
 
@@ -507,7 +526,8 @@ Next : {suggested command with example arguments}
507
526
 
508
527
  ```
509
528
  /qc-analyze Complete — {UC-ID}
510
- Gaps: {N} ({blockers} blocker)
529
+ Files: {paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md + DOC_GAPS.md (2 files)
530
+ Gaps: {N} ({blockers} blocker) ← spec-defect blocker? → /report-bug {UC-ID} | coverage gap → /propose-scenario {UC-ID}
511
531
  SC mapping: {M} BR/AC mapped to {K} scenarios
512
532
  Next: /qc-plan {UC-ID} ← risk / what-if / questions-for-dev
513
533
  (resolve 🔴 Blocker gaps with PO/Dev first)
@@ -29,7 +29,7 @@ Boundary vs `/qc-plan`: you answer *"what is the requirement?"*; qc-plan answers
29
29
  the risk, what to ask dev?"*. When something is ambiguous/missing, record it as a gap and
30
30
  hand off to qc-plan — never invent an answer.
31
31
 
32
- ## Skills (`skills/qc/qa-analyst/`)
32
+ ## Skills (`{paths.qc_skills_dir}/qa-analyst/`)
33
33
 
34
34
  Load only the file for the step you are doing (each is self-contained):
35
35
  - `spec-breakdown.md` — break a spec/PRD/user story into structure.
@@ -48,15 +48,29 @@ tests with `@trace.verifies` and write `qc_status` per scenario.
48
48
 
49
49
  ## DOC_GAPS (mandatory)
50
50
 
51
- Always produce a gaps file following `skills/qc/qa-analyst/DOC_GAPS.template.md`:
51
+ Always produce a gaps file following `{paths.qc_skills_dir}/qa-analyst/DOC_GAPS.template.md`:
52
52
  - Each gap `GAP-xx`, classified MISSING / AMBIGUOUS / CONTRADICTORY / ASSUMPTION / OPEN QUESTION, with severity (🔴 Blocker → 🟢 Low) and the affected function/BR/AC.
53
53
  - Never fabricate answers; mark assumptions as `ASSUMPTION` for PO/dev to confirm.
54
54
  - Any `🔴 Blocker` still `Open` ⇒ the UC is not ready for qc-design-test — hand off to qc-plan.
55
+ - **Push genuine SPEC defects to the PO (not just keep them local).** A blocker that is a real
56
+ flaw in the official spec — `AMBIGUOUS` / `CONTRADICTORY` / `MISSING` in PRD/BDD — must reach
57
+ the PO via the feedback flow, not sit only in `DOC_GAPS.md`: file `/report-bug {UC-ID} {desc}`
58
+ (its BUG_FLOW classifies PRD vs BDD), or `/propose-scenario {UC-ID}` if the gap is missing test
59
+ coverage. `ASSUMPTION` / `OPEN QUESTION` gaps are confirmed via qc-plan's questions-for-dev — not filed as bugs.
55
60
 
56
61
  ## Output
57
62
 
58
- Write the analysis artifacts under `{paths.refinement_dir}/qc/{UC-ID}/` (requirement
59
- breakdown, BR table, data-flow, AC list with SC mapping, and `DOC_GAPS.md`).
63
+ Write **exactly TWO files** under `{paths.qc_dir}/{UC-ID}/` — do **not** split the analysis
64
+ into one-file-per-step (no separate spec-breakdown / business-rules / data-flow / AC files):
65
+
66
+ 1. **`{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md`** — the single consolidated analysis.
67
+ Sections in order: requirement breakdown → business-rule table (`BR-xx`) → data-flow →
68
+ acceptance-criteria (`AC-xx`), each `BR`/`AC` mapped to its owning `{UC-ID}-SC{N}`.
69
+ 2. **`{paths.qc_dir}/{UC-ID}/DOC_GAPS.md`** — the gaps file (per `{paths.qc_skills_dir}/qa-analyst/DOC_GAPS.template.md`).
70
+
71
+ `{paths.qc_dir}` is a VISIBLE top-level folder in the QC repo (default `docs/`, **not** the
72
+ hidden `.agent/review/`) so the QC team can open and process the output easily. The official
73
+ spec stays in the PO spec submodule — do not write analysis there.
60
74
 
61
75
  ## Report
62
76
 
@@ -64,7 +78,8 @@ breakdown, BR table, data-flow, AC list with SC mapping, and `DOC_GAPS.md`).
64
78
 
65
79
  ```
66
80
  /qc-analyze Complete — {UC-ID}
67
- Gaps: {N} ({blockers} blocker)
81
+ Files: {paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md + DOC_GAPS.md (2 files)
82
+ Gaps: {N} ({blockers} blocker) ← spec-defect blocker? → /report-bug {UC-ID} | coverage gap → /propose-scenario {UC-ID}
68
83
  SC mapping: {M} BR/AC mapped to {K} scenarios
69
84
  Next: /qc-plan {UC-ID} ← risk / what-if / questions-for-dev
70
85
  (resolve 🔴 Blocker gaps with PO/Dev first)
@@ -92,7 +92,7 @@ Wait for explicit "Y" or "N" from the user before continuing.
92
92
  - "N" → stop and ask what the user wants to change.
93
93
 
94
94
 
95
- *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze + qc-plan outputs from `{paths.refinement_dir}/qc/{UC-ID}/` and the official `.feature` (with `@trace.scenario` per scenario).*
95
+ *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze + qc-plan outputs (`REQUIREMENT_ANALYSIS.md`, `DOC_GAPS.md`, `TEST_PLAN.md`) from `{paths.qc_dir}/{UC-ID}/` and the official `.feature` (with `@trace.scenario` per scenario).*
96
96
 
97
97
  ## Context
98
98
  # Context Loader — Load All Project Context
@@ -133,6 +133,8 @@ Read `.agent/project-context.yaml`. Extract and store:
133
133
  - `paths.specs_dir` → BDD specs root
134
134
  - `paths.prd_dir` → PRD documents root
135
135
  - `paths.refinement_dir` → findings/review output dir
136
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
137
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
136
138
  - `paths.product_definitions_dir` → product definitions root
137
139
  - `paths.domain_knowledge_dir` → domain knowledge root
138
140
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -145,6 +147,8 @@ If `paths` section is absent, use these defaults:
145
147
  - `specs_dir` = `specs/bdd`
146
148
  - `prd_dir` = `specs/prd`
147
149
  - `refinement_dir` = `.agent/review`
150
+ - `qc_dir` = `docs`
151
+ - `qc_skills_dir` = `.agent/skills/qc`
148
152
  - `product_definitions_dir` = `specs/product-definition`
149
153
  - `domain_knowledge_dir` = `specs/domain-knowledge`
150
154
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -189,6 +193,7 @@ If `services` section is present:
189
193
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
190
194
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
191
195
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
196
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
192
197
 
193
198
  > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
194
199
 
@@ -400,7 +405,7 @@ You are the **QC Designer** — stage 3. Produce/maintain test-case Markdown fil
400
405
  (`.Test.md`) from the analyzed requirement + plan. Output feeds qc-run-test (Python) and
401
406
  qc-review. You do **not** write Python.
402
407
 
403
- ## Skills — pick the layer, load ONE file (`skills/qc/qa-designer/`)
408
+ ## Skills — pick the layer, load ONE file (`{paths.qc_skills_dir}/qa-designer/`)
404
409
 
405
410
  | Layer | File |
406
411
  |---|---|
@@ -429,7 +434,7 @@ qc-run-test write `qc_status` per scenario.
429
434
 
430
435
  ## Output
431
436
 
432
- Write `.Test.md` files under `{paths.refinement_dir}/qc/{UC-ID}/test-cases/`.
437
+ Write `.Test.md` files under `{paths.qc_dir}/{UC-ID}/test-cases/`.
433
438
 
434
439
  ## Report
435
440
 
@@ -11,7 +11,7 @@ ported_from: ai-automation-qc-base
11
11
  ## Gate
12
12
  {{include:steps/gate.md}}
13
13
 
14
- *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze + qc-plan outputs from `{paths.refinement_dir}/qc/{UC-ID}/` and the official `.feature` (with `@trace.scenario` per scenario).*
14
+ *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze + qc-plan outputs (`REQUIREMENT_ANALYSIS.md`, `DOC_GAPS.md`, `TEST_PLAN.md`) from `{paths.qc_dir}/{UC-ID}/` and the official `.feature` (with `@trace.scenario` per scenario).*
15
15
 
16
16
  ## Context
17
17
  {{include:steps/context-loader.md}}
@@ -24,7 +24,7 @@ You are the **QC Designer** — stage 3. Produce/maintain test-case Markdown fil
24
24
  (`.Test.md`) from the analyzed requirement + plan. Output feeds qc-run-test (Python) and
25
25
  qc-review. You do **not** write Python.
26
26
 
27
- ## Skills — pick the layer, load ONE file (`skills/qc/qa-designer/`)
27
+ ## Skills — pick the layer, load ONE file (`{paths.qc_skills_dir}/qa-designer/`)
28
28
 
29
29
  | Layer | File |
30
30
  |---|---|
@@ -53,7 +53,7 @@ qc-run-test write `qc_status` per scenario.
53
53
 
54
54
  ## Output
55
55
 
56
- Write `.Test.md` files under `{paths.refinement_dir}/qc/{UC-ID}/test-cases/`.
56
+ Write `.Test.md` files under `{paths.qc_dir}/{UC-ID}/test-cases/`.
57
57
 
58
58
  ## Report
59
59
 
@@ -92,7 +92,7 @@ Wait for explicit "Y" or "N" from the user before continuing.
92
92
  - "N" → stop and ask what the user wants to change.
93
93
 
94
94
 
95
- *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze output (requirement breakdown + `DOC_GAPS.md`) from `{paths.refinement_dir}/qc/{UC-ID}/` and the official `.feature` for the UC.*
95
+ *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze output (`REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`) from `{paths.qc_dir}/{UC-ID}/` and the official `.feature` for the UC.*
96
96
 
97
97
  ## Context
98
98
  # Context Loader — Load All Project Context
@@ -133,6 +133,8 @@ Read `.agent/project-context.yaml`. Extract and store:
133
133
  - `paths.specs_dir` → BDD specs root
134
134
  - `paths.prd_dir` → PRD documents root
135
135
  - `paths.refinement_dir` → findings/review output dir
136
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
137
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
136
138
  - `paths.product_definitions_dir` → product definitions root
137
139
  - `paths.domain_knowledge_dir` → domain knowledge root
138
140
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -145,6 +147,8 @@ If `paths` section is absent, use these defaults:
145
147
  - `specs_dir` = `specs/bdd`
146
148
  - `prd_dir` = `specs/prd`
147
149
  - `refinement_dir` = `.agent/review`
150
+ - `qc_dir` = `docs`
151
+ - `qc_skills_dir` = `.agent/skills/qc`
148
152
  - `product_definitions_dir` = `specs/product-definition`
149
153
  - `domain_knowledge_dir` = `specs/domain-knowledge`
150
154
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -189,6 +193,7 @@ If `services` section is present:
189
193
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
190
194
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
191
195
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
196
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
192
197
 
193
198
  > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
194
199
 
@@ -401,7 +406,7 @@ risk analysis, what-if scenarios, test scope/strategy per layer, and `questions-
401
406
  for any open/blocker gaps. You answer *"where is the risk, what must we ask?"* — you do not
402
407
  design concrete test cases (that is qc-design-test).
403
408
 
404
- ## Skills (`skills/qc/qa-planner/`)
409
+ ## Skills (`{paths.qc_skills_dir}/qa-planner/`)
405
410
 
406
411
  - `test-plan.md` — self-contained: risk matrix, what-if, scope by test layer
407
412
  (functional / integration / e2e / non-functional), entry/exit criteria, and the
@@ -409,7 +414,7 @@ design concrete test cases (that is qc-design-test).
409
414
 
410
415
  ## Output
411
416
 
412
- Write the test plan to `{paths.refinement_dir}/qc/{UC-ID}/TEST_PLAN.md`. Scope the plan to
417
+ Write the test plan to `{paths.qc_dir}/{UC-ID}/TEST_PLAN.md`. Scope the plan to
413
418
  the UC's scenarios (`{UC-ID}-SC{N}` from the `.feature`) so qc-design-test can design
414
419
  cases per scenario.
415
420
 
@@ -11,7 +11,7 @@ ported_from: ai-automation-qc-base
11
11
  ## Gate
12
12
  {{include:steps/gate.md}}
13
13
 
14
- *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze output (requirement breakdown + `DOC_GAPS.md`) from `{paths.refinement_dir}/qc/{UC-ID}/` and the official `.feature` for the UC.*
14
+ *Note: For this command, the target in Step 1 is a UC-ID. Read the qc-analyze output (`REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`) from `{paths.qc_dir}/{UC-ID}/` and the official `.feature` for the UC.*
15
15
 
16
16
  ## Context
17
17
  {{include:steps/context-loader.md}}
@@ -25,7 +25,7 @@ risk analysis, what-if scenarios, test scope/strategy per layer, and `questions-
25
25
  for any open/blocker gaps. You answer *"where is the risk, what must we ask?"* — you do not
26
26
  design concrete test cases (that is qc-design-test).
27
27
 
28
- ## Skills (`skills/qc/qa-planner/`)
28
+ ## Skills (`{paths.qc_skills_dir}/qa-planner/`)
29
29
 
30
30
  - `test-plan.md` — self-contained: risk matrix, what-if, scope by test layer
31
31
  (functional / integration / e2e / non-functional), entry/exit criteria, and the
@@ -33,7 +33,7 @@ design concrete test cases (that is qc-design-test).
33
33
 
34
34
  ## Output
35
35
 
36
- Write the test plan to `{paths.refinement_dir}/qc/{UC-ID}/TEST_PLAN.md`. Scope the plan to
36
+ Write the test plan to `{paths.qc_dir}/{UC-ID}/TEST_PLAN.md`. Scope the plan to
37
37
  the UC's scenarios (`{UC-ID}-SC{N}` from the `.feature`) so qc-design-test can design
38
38
  cases per scenario.
39
39
 
@@ -133,6 +133,8 @@ Read `.agent/project-context.yaml`. Extract and store:
133
133
  - `paths.specs_dir` → BDD specs root
134
134
  - `paths.prd_dir` → PRD documents root
135
135
  - `paths.refinement_dir` → findings/review output dir
136
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
137
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
136
138
  - `paths.product_definitions_dir` → product definitions root
137
139
  - `paths.domain_knowledge_dir` → domain knowledge root
138
140
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -145,6 +147,8 @@ If `paths` section is absent, use these defaults:
145
147
  - `specs_dir` = `specs/bdd`
146
148
  - `prd_dir` = `specs/prd`
147
149
  - `refinement_dir` = `.agent/review`
150
+ - `qc_dir` = `docs`
151
+ - `qc_skills_dir` = `.agent/skills/qc`
148
152
  - `product_definitions_dir` = `specs/product-definition`
149
153
  - `domain_knowledge_dir` = `specs/domain-knowledge`
150
154
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -189,6 +193,7 @@ If `services` section is present:
189
193
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
190
194
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
191
195
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
196
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
192
197
 
193
198
  > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
194
199
 
@@ -398,7 +403,7 @@ Proceed to the next step of the calling command.
398
403
 
399
404
  You are the **QC Report** stage — turn the latest run into a shareable report + evidence.
400
405
 
401
- ## Skill (`skills/qc/qa-runner/report/`)
406
+ ## Skill (`{paths.qc_skills_dir}/qa-runner/report/`)
402
407
 
403
408
  - `report.md` — self-contained: pytest-html (`--html=reports/<feature>/report.html
404
409
  --self-contained-html`) + Playwright Trace (`test-results/<nodeid>/trace.zip`, viewed via
@@ -411,6 +416,12 @@ You are the **QC Report** stage — turn the latest run into a shareable report
411
416
  FAIL/SKIP has a trace + screenshot attached.
412
417
  3. Summarize TOTAL / PASS / FAIL / SKIP; for each FAIL include the `show-trace` command and
413
418
  whether it was classified script-bug or product-gap.
419
+ 4. **Hand off product-gaps to the specs (prompted).** For every FAIL classified **product-gap**
420
+ (a real defect, impl ≠ spec — not a script-bug), print a ready-to-run
421
+ `/report-bug {UC-ID} {one-line expected-vs-actual}` so QC files it to the shared spec repo.
422
+ `/report-bug`'s BUG_FLOW then routes the root cause (Code / BDD / PRD / Design / Env). Never
423
+ fake-pass a product-gap — it stays FAIL in `qc_status` until fixed + re-run. **script-bugs are
424
+ NOT filed** (QC fixes the script and re-runs). List the commands; do not auto-create the reports.
414
425
 
415
426
  ## Report
416
427
 
@@ -487,5 +498,11 @@ Next : {suggested command with example arguments}
487
498
  /qc-report Complete — {UC-ID}
488
499
  Report: reports/<feature>/report.html (TOTAL {N} · PASS {p} · FAIL {f} · SKIP {s})
489
500
  Trace : test-results/<nodeid>/trace.zip (python3 -m playwright show-trace <file>)
501
+
502
+ Product-gaps to file ({g}): ← run these so PO/Dev see them on /sync (script-bugs excluded)
503
+ /report-bug {UC-ID} {gap 1 — expected vs actual}
504
+ /report-bug {UC-ID} {gap 2 …}
505
+ (none → skip)
506
+
490
507
  Next: /validate-traces {UC-ID} ← refresh Living Docs (qc_status), then create PR
491
508
  ```
@@ -22,7 +22,7 @@ ported_from: ai-automation-qc-base
22
22
 
23
23
  You are the **QC Report** stage — turn the latest run into a shareable report + evidence.
24
24
 
25
- ## Skill (`skills/qc/qa-runner/report/`)
25
+ ## Skill (`{paths.qc_skills_dir}/qa-runner/report/`)
26
26
 
27
27
  - `report.md` — self-contained: pytest-html (`--html=reports/<feature>/report.html
28
28
  --self-contained-html`) + Playwright Trace (`test-results/<nodeid>/trace.zip`, viewed via
@@ -35,6 +35,12 @@ You are the **QC Report** stage — turn the latest run into a shareable report
35
35
  FAIL/SKIP has a trace + screenshot attached.
36
36
  3. Summarize TOTAL / PASS / FAIL / SKIP; for each FAIL include the `show-trace` command and
37
37
  whether it was classified script-bug or product-gap.
38
+ 4. **Hand off product-gaps to the specs (prompted).** For every FAIL classified **product-gap**
39
+ (a real defect, impl ≠ spec — not a script-bug), print a ready-to-run
40
+ `/report-bug {UC-ID} {one-line expected-vs-actual}` so QC files it to the shared spec repo.
41
+ `/report-bug`'s BUG_FLOW then routes the root cause (Code / BDD / PRD / Design / Env). Never
42
+ fake-pass a product-gap — it stays FAIL in `qc_status` until fixed + re-run. **script-bugs are
43
+ NOT filed** (QC fixes the script and re-runs). List the commands; do not auto-create the reports.
38
44
 
39
45
  ## Report
40
46
 
@@ -44,5 +50,11 @@ You are the **QC Report** stage — turn the latest run into a shareable report
44
50
  /qc-report Complete — {UC-ID}
45
51
  Report: reports/<feature>/report.html (TOTAL {N} · PASS {p} · FAIL {f} · SKIP {s})
46
52
  Trace : test-results/<nodeid>/trace.zip (python3 -m playwright show-trace <file>)
53
+
54
+ Product-gaps to file ({g}): ← run these so PO/Dev see them on /sync (script-bugs excluded)
55
+ /report-bug {UC-ID} {gap 1 — expected vs actual}
56
+ /report-bug {UC-ID} {gap 2 …}
57
+ (none → skip)
58
+
47
59
  Next: /validate-traces {UC-ID} ← refresh Living Docs (qc_status), then create PR
48
60
  ```
@@ -92,7 +92,7 @@ Wait for explicit "Y" or "N" from the user before continuing.
92
92
  - "N" → stop and ask what the user wants to change.
93
93
 
94
94
 
95
- *Note: For this command, the target in Step 1 is a UC-ID. Detect review mode from `$ARGUMENTS`/context: review test-case `.Test.md` (after design) or review Python scripts (after run). Read artifacts from `{paths.refinement_dir}/qc/{UC-ID}/` and the generated test/page-object source.*
95
+ *Note: For this command, the target in Step 1 is a UC-ID. Detect review mode from `$ARGUMENTS`/context: review test-case `.Test.md` (after design) or review Python scripts (after run). Read artifacts from `{paths.qc_dir}/{UC-ID}/` and the generated test/page-object source.*
96
96
 
97
97
  ## Context
98
98
  # Context Loader — Load All Project Context
@@ -133,6 +133,8 @@ Read `.agent/project-context.yaml`. Extract and store:
133
133
  - `paths.specs_dir` → BDD specs root
134
134
  - `paths.prd_dir` → PRD documents root
135
135
  - `paths.refinement_dir` → findings/review output dir
136
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
137
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
136
138
  - `paths.product_definitions_dir` → product definitions root
137
139
  - `paths.domain_knowledge_dir` → domain knowledge root
138
140
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -145,6 +147,8 @@ If `paths` section is absent, use these defaults:
145
147
  - `specs_dir` = `specs/bdd`
146
148
  - `prd_dir` = `specs/prd`
147
149
  - `refinement_dir` = `.agent/review`
150
+ - `qc_dir` = `docs`
151
+ - `qc_skills_dir` = `.agent/skills/qc`
148
152
  - `product_definitions_dir` = `specs/product-definition`
149
153
  - `domain_knowledge_dir` = `specs/domain-knowledge`
150
154
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -189,6 +193,7 @@ If `services` section is present:
189
193
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
190
194
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
191
195
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
196
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
192
197
 
193
198
  > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
194
199
 
@@ -403,7 +408,7 @@ You are the **QC Reviewer** — the shared review gate, run twice in the pipelin
403
408
  Detect mode: if the target artifacts are `.Test.md` → test-case review; if Python test/PO
404
409
  files exist for the UC and are newer → script review. If ambiguous, ask.
405
410
 
406
- ## Skills (`skills/qc/qa-reviewer/`)
411
+ ## Skills (`{paths.qc_skills_dir}/qa-reviewer/`)
407
412
 
408
413
  Pick by mode + layer, load ONE file:
409
414
  - Test-case review: `test-case/{functional,e2e,integration,non-functional,exploratory}.md`
@@ -11,7 +11,7 @@ ported_from: ai-automation-qc-base
11
11
  ## Gate
12
12
  {{include:steps/gate.md}}
13
13
 
14
- *Note: For this command, the target in Step 1 is a UC-ID. Detect review mode from `$ARGUMENTS`/context: review test-case `.Test.md` (after design) or review Python scripts (after run). Read artifacts from `{paths.refinement_dir}/qc/{UC-ID}/` and the generated test/page-object source.*
14
+ *Note: For this command, the target in Step 1 is a UC-ID. Detect review mode from `$ARGUMENTS`/context: review test-case `.Test.md` (after design) or review Python scripts (after run). Read artifacts from `{paths.qc_dir}/{UC-ID}/` and the generated test/page-object source.*
15
15
 
16
16
  ## Context
17
17
  {{include:steps/context-loader.md}}
@@ -27,7 +27,7 @@ You are the **QC Reviewer** — the shared review gate, run twice in the pipelin
27
27
  Detect mode: if the target artifacts are `.Test.md` → test-case review; if Python test/PO
28
28
  files exist for the UC and are newer → script review. If ambiguous, ask.
29
29
 
30
- ## Skills (`skills/qc/qa-reviewer/`)
30
+ ## Skills (`{paths.qc_skills_dir}/qa-reviewer/`)
31
31
 
32
32
  Pick by mode + layer, load ONE file:
33
33
  - Test-case review: `test-case/{functional,e2e,integration,non-functional,exploratory}.md`