@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
@@ -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
  ```
@@ -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`
@@ -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 reviewed `.Test.md` from `{paths.refinement_dir}/qc/{UC-ID}/test-cases/`. This command uses the **qc-playwright** stack module (`.agent/modules/qc-playwright/stack-profile.yaml`) — Python + pytest-playwright + Page Object — independent of the dev implementation module.*
95
+ *Note: For this command, the target in Step 1 is a UC-ID. Read the reviewed `.Test.md` from `{paths.qc_dir}/{UC-ID}/test-cases/`. This command uses the **qc-playwright** stack module (`.agent/modules/qc-playwright/stack-profile.yaml`) — Python + pytest-playwright + Page Object — independent of the dev implementation module.*
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
 
@@ -407,7 +412,7 @@ Stack rules (MANDATORY — from `modules/qc-playwright/stack-profile.yaml`):
407
412
  - Cover **100%** of TCs in the file — every TC ends Pass/Fail/Skip (none left Draft).
408
413
  - Classify each FAIL: script-bug (fix selector/logic) vs product-gap (keep FAIL + evidence, never fake-pass).
409
414
 
410
- ## Skills — pick the layer, load ONE file (`skills/qc/qa-runner/`)
415
+ ## Skills — pick the layer, load ONE file (`{paths.qc_skills_dir}/qa-runner/`)
411
416
 
412
417
  `functional/{gui-screen,gui-feature,api}.md`, `integration.md`, `e2e.md`,
413
418
  `non-functional.md`, `exploratory/session.md`.
@@ -431,6 +436,12 @@ After the run, update `{paths.trace_dir}/{UC-ID}.tsv` — for each scenario row
431
436
  |--------|-------|
432
437
  | `qc_status` | `pass` if all QC tests for this SC passed · `fail` if any failed · `skip` if all skipped/xfail · `not_run` if no QC test covers it |
433
438
  | `qc_run_at` | today `YYYY-MM-DD` |
439
+ | `qc_owner` | **who the SC is waiting on** (the PM/PO "pending" view): `dev` if FAIL = product-gap (real defect → dev fixes) · `po` if `skip`/`not_run` because an **open `DOC_GAPS` 🔴 Blocker** prevents testing (PO must clarify PRD/BDD) · `—` if `pass`, or FAIL = script-bug (QC's own to fix — transient) |
440
+ | `qc_blocked_by` | linked artifact: `GAP-{id}` when blocked by a spec gap (set here) · `BUG-{id}` once `/report-bug` is filed for the product-gap (backfilled by `/report-bug`) · `—` otherwise |
441
+
442
+ Set `qc_owner`/`qc_blocked_by` together with `qc_status`. On `pass`, **clear** both to `—`.
443
+ For a product-gap FAIL, set `qc_owner=dev` now; the `BUG-{id}` is backfilled into `qc_blocked_by`
444
+ when QC runs the `/report-bug` that `/qc-report` prompts.
434
445
 
435
446
  Leave all other columns unchanged — **never** touch `dev_selftest`/`dev_selftest_at`
436
447
  (owned by `/dev-run-test`). `qc_status` (official QC) and `dev_selftest` (dev smoke) are
@@ -125,6 +125,8 @@ Read `.agent/project-context.yaml`. Extract and store:
125
125
  - `paths.specs_dir` → BDD specs root
126
126
  - `paths.prd_dir` → PRD documents root
127
127
  - `paths.refinement_dir` → findings/review output dir
128
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
129
+ - `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)
128
130
  - `paths.product_definitions_dir` → product definitions root
129
131
  - `paths.domain_knowledge_dir` → domain knowledge root
130
132
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -137,6 +139,8 @@ If `paths` section is absent, use these defaults:
137
139
  - `specs_dir` = `specs/bdd`
138
140
  - `prd_dir` = `specs/prd`
139
141
  - `refinement_dir` = `.agent/review`
142
+ - `qc_dir` = `docs`
143
+ - `qc_skills_dir` = `.agent/skills/qc`
140
144
  - `product_definitions_dir` = `specs/product-definition`
141
145
  - `domain_knowledge_dir` = `specs/domain-knowledge`
142
146
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -181,6 +185,7 @@ If `services` section is present:
181
185
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
182
186
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
183
187
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
188
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
184
189
 
185
190
  > **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.
186
191
 
@@ -1,6 +1,8 @@
1
- # /report-bug — File a Spec-Traced Bug (Tester-Facing)
1
+ # /report-bug — File a Spec-Traced Bug (Tester & QC-Facing)
2
2
 
3
- For **testers**. Produces a structured bug report with full spec context, classifies the likely
3
+ For **testers and QC** including **product-gaps** surfaced by the `/qc-*` pipeline
4
+ (`/qc-run-test` FAIL classified product-gap, or a `DOC_GAPS` spec-defect blocker from
5
+ `/qc-analyze`). Produces a structured bug report with full spec context, classifies the likely
4
6
  layer, and saves it for handoff to the dev team.
5
7
 
6
8
  **READ-ONLY on specs and code.** This command never edits PRD, BDD, tech-docs, or source.
@@ -134,6 +136,8 @@ Read `.agent/project-context.yaml`. Extract and store:
134
136
  - `paths.specs_dir` → BDD specs root
135
137
  - `paths.prd_dir` → PRD documents root
136
138
  - `paths.refinement_dir` → findings/review output dir
139
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
140
+ - `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
141
  - `paths.product_definitions_dir` → product definitions root
138
142
  - `paths.domain_knowledge_dir` → domain knowledge root
139
143
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -146,6 +150,8 @@ If `paths` section is absent, use these defaults:
146
150
  - `specs_dir` = `specs/bdd`
147
151
  - `prd_dir` = `specs/prd`
148
152
  - `refinement_dir` = `.agent/review`
153
+ - `qc_dir` = `docs`
154
+ - `qc_skills_dir` = `.agent/skills/qc`
149
155
  - `product_definitions_dir` = `specs/product-definition`
150
156
  - `domain_knowledge_dir` = `specs/domain-knowledge`
151
157
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -190,6 +196,7 @@ If `services` section is present:
190
196
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
191
197
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
192
198
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
199
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
193
200
 
194
201
  > **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
202
 
@@ -446,6 +453,17 @@ State the classification as a suggestion (dev confirms during `/fix-bug`).
446
453
  Assign `BUG-{today YYYYMMDD}-{NN}` (NN = next sequence among existing reports).
447
454
  Write to `{paths.bug_reports_dir}/{BUG-ID}.md` (resolved to `{spec_source}/feedback/bug-reports/` in umbrella mode; create dir if needed) using the structure in the Output block, and also print it for pasting into Jira/Slack.
448
455
 
456
+ ## Step 5.5 — Backfill the trace (pending-view link)
457
+
458
+ If Step 1 matched a specific failing scenario `{UC-ID}-SC{N}` **and** a trace row exists in
459
+ `{paths.trace_dir}/{UC-ID}.tsv`, update **only** that row so the PO/PM "waiting-on" view points
460
+ to this bug — leave every other column (incl. `qc_status`) unchanged:
461
+ - `qc_blocked_by` = `{BUG-ID}`
462
+ - `qc_owner` = `dev` if likely layer ∈ {Code, BDD, Design Spec, Env} · `po` if likely layer = PRD ambiguity
463
+
464
+ Skip silently if no SC matched or no trace file/row exists (a bug can still be filed). This is
465
+ the only write this command makes to operational state — it still **never** edits PRD/BDD/code.
466
+
449
467
  ## Step 6 — Handoff (so PO/Dev actually see it)
450
468
 
451
469
  The report only reaches PO/Dev if it is **committed and pushed to the shared spec repo**. A local file is a dead drop.
@@ -545,6 +563,7 @@ Next : {suggested command with example arguments}
545
563
  🐞 {BUG-ID} → {paths.bug_reports_dir}/{BUG-ID}.md (in shared spec repo)
546
564
 
547
565
  Feature : {UC-ID} — {feature name} | Service: {service} | Severity: {Critical|Major|Minor}
566
+ State : 🟢 Open (lifecycle: Open → Fixed → Closed — set `Fixed` by /fix-bug, `Closed` after /qc-run-test re-verify pass)
548
567
 
549
568
  Spec context
550
569
  PRD : {prd_path} (v{prd_version})
@@ -127,6 +127,8 @@ Read `.agent/project-context.yaml`. Extract and store:
127
127
  - `paths.specs_dir` → BDD specs root
128
128
  - `paths.prd_dir` → PRD documents root
129
129
  - `paths.refinement_dir` → findings/review output dir
130
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
131
+ - `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)
130
132
  - `paths.product_definitions_dir` → product definitions root
131
133
  - `paths.domain_knowledge_dir` → domain knowledge root
132
134
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -139,6 +141,8 @@ If `paths` section is absent, use these defaults:
139
141
  - `specs_dir` = `specs/bdd`
140
142
  - `prd_dir` = `specs/prd`
141
143
  - `refinement_dir` = `.agent/review`
144
+ - `qc_dir` = `docs`
145
+ - `qc_skills_dir` = `.agent/skills/qc`
142
146
  - `product_definitions_dir` = `specs/product-definition`
143
147
  - `domain_knowledge_dir` = `specs/domain-knowledge`
144
148
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -183,6 +187,7 @@ If `services` section is present:
183
187
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
184
188
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
185
189
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
190
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
186
191
 
187
192
  > **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.
188
193
 
@@ -132,6 +132,8 @@ Read `.agent/project-context.yaml`. Extract and store:
132
132
  - `paths.specs_dir` → BDD specs root
133
133
  - `paths.prd_dir` → PRD documents root
134
134
  - `paths.refinement_dir` → findings/review output dir
135
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
136
+ - `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)
135
137
  - `paths.product_definitions_dir` → product definitions root
136
138
  - `paths.domain_knowledge_dir` → domain knowledge root
137
139
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -144,6 +146,8 @@ If `paths` section is absent, use these defaults:
144
146
  - `specs_dir` = `specs/bdd`
145
147
  - `prd_dir` = `specs/prd`
146
148
  - `refinement_dir` = `.agent/review`
149
+ - `qc_dir` = `docs`
150
+ - `qc_skills_dir` = `.agent/skills/qc`
147
151
  - `product_definitions_dir` = `specs/product-definition`
148
152
  - `domain_knowledge_dir` = `specs/domain-knowledge`
149
153
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -188,6 +192,7 @@ If `services` section is present:
188
192
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
189
193
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
190
194
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
195
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
191
196
 
192
197
  > **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.
193
198
 
@@ -129,6 +129,8 @@ Read `.agent/project-context.yaml`. Extract and store:
129
129
  - `paths.specs_dir` → BDD specs root
130
130
  - `paths.prd_dir` → PRD documents root
131
131
  - `paths.refinement_dir` → findings/review output dir
132
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
133
+ - `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)
132
134
  - `paths.product_definitions_dir` → product definitions root
133
135
  - `paths.domain_knowledge_dir` → domain knowledge root
134
136
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -141,6 +143,8 @@ If `paths` section is absent, use these defaults:
141
143
  - `specs_dir` = `specs/bdd`
142
144
  - `prd_dir` = `specs/prd`
143
145
  - `refinement_dir` = `.agent/review`
146
+ - `qc_dir` = `docs`
147
+ - `qc_skills_dir` = `.agent/skills/qc`
144
148
  - `product_definitions_dir` = `specs/product-definition`
145
149
  - `domain_knowledge_dir` = `specs/domain-knowledge`
146
150
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -185,6 +189,7 @@ If `services` section is present:
185
189
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
186
190
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
187
191
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
192
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
188
193
 
189
194
  > **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.
190
195
 
@@ -144,9 +144,9 @@ Collect from output:
144
144
 
145
145
  ---
146
146
 
147
- ## Step 1d — Surface Tester Feedback *(new bug reports / scenario proposals)*
147
+ ## Step 1d — Surface Tester/QC Feedback *(bug reports / scenario proposals / PRD change requests)*
148
148
 
149
- Tester `/report-bug` and `/propose-scenario` commit feedback into the spec repo. This step tells PO/Dev what arrived in **this** pull, so they are notified through their normal routine. It covers both audiences:
149
+ Tester & QC `/report-bug`, `/propose-scenario` (incl. Case B PRD change requests) commit feedback into the spec repo. This step tells PO/Dev what arrived in **this** pull, so they are notified through their normal routine. It covers both audiences:
150
150
 
151
151
  - **Dev/tester in umbrella** → feedback came in via the spec submodule advance (Step 1c)
152
152
  - **PO working directly in the spec repo** → feedback came in via the umbrella/current-repo `git pull` (Step 1)
@@ -158,22 +158,25 @@ Pick the repo + range that pulled the feedback:
158
158
  If `feedback/` does not exist in REPO → skip silently.
159
159
 
160
160
  ```bash
161
- git -C {REPO} diff --name-status {old_sha}..{new_sha} -- feedback/bug-reports/ feedback/bdd-proposals/
161
+ git -C {REPO} diff --name-status {old_sha}..{new_sha} -- feedback/bug-reports/ feedback/bdd-proposals/ feedback/prd-change-requests/
162
162
  ```
163
163
 
164
- For each entry, read its title/summary and report:
164
+ For each entry, read its title/summary + `State` and report. **Bug reports: surface only `State: Open`** as needing attention; list `Fixed`/`Closed` separately (or omit) so the PO/PM sees what's still pending:
165
165
  ```
166
- 📥 New tester feedback (pulled this sync):
167
- Bug reports:
168
- BUG-20260608-01 FT-001 — account locks after 6 fails (spec says 5) [layer: Code]
166
+ 📥 New feedback (pulled this sync):
167
+ Bug reports (open):
168
+ BUG-20260608-01 FT-001 — account locks after 6 fails (spec says 5) [layer: Code · waiting: dev]
169
+ Bug reports (fixed, awaiting QC re-verify): BUG-20260605-02
169
170
  Scenario proposals:
170
171
  FT-001-trailing-spaces.md → maps to AC2 (pending review)
172
+ PRD change requests:
173
+ FT-001-bulk-export.md → new requirement, needs an AC (waiting: PO)
171
174
  ```
172
175
 
173
- If none changed → print `📥 Tester feedback: none new this sync`.
176
+ If none changed → print `📥 Feedback: none new this sync`.
174
177
 
175
178
  If the reader is a PO/Dev, add a one-line nudge:
176
- `→ Review feedback/ then act: /fix-bug {BUG-ID} · promote proposal into BDD · or update PRD.`
179
+ `→ Review feedback/ then act: /fix-bug {BUG-ID} · promote proposal via /generate-bdd · or add an AC to the PRD.`
177
180
 
178
181
  ---
179
182
 
@@ -127,6 +127,8 @@ Read `.agent/project-context.yaml`. Extract and store:
127
127
  - `paths.specs_dir` → BDD specs root
128
128
  - `paths.prd_dir` → PRD documents root
129
129
  - `paths.refinement_dir` → findings/review output dir
130
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
131
+ - `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)
130
132
  - `paths.product_definitions_dir` → product definitions root
131
133
  - `paths.domain_knowledge_dir` → domain knowledge root
132
134
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -139,6 +141,8 @@ If `paths` section is absent, use these defaults:
139
141
  - `specs_dir` = `specs/bdd`
140
142
  - `prd_dir` = `specs/prd`
141
143
  - `refinement_dir` = `.agent/review`
144
+ - `qc_dir` = `docs`
145
+ - `qc_skills_dir` = `.agent/skills/qc`
142
146
  - `product_definitions_dir` = `specs/product-definition`
143
147
  - `domain_knowledge_dir` = `specs/domain-knowledge`
144
148
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -183,6 +187,7 @@ If `services` section is present:
183
187
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
184
188
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
185
189
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
190
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
186
191
 
187
192
  > **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.
188
193
 
@@ -467,7 +472,7 @@ If code was generated from an older revision → flag `TECHDOC_DRIFT`.
467
472
  *Skip this step if no TSV files existed (handled by Step 1 no-TSV path).*
468
473
 
469
474
  For each `.tsv` file processed: write updated `spec_ver`, `status`, `last_updated` back to disk.
470
- Do **not** modify `dev_selftest`/`dev_selftest_at` (owned by `/dev-run-test`) or `qc_status`/`qc_run_at` (owned by `/qc-run-test`); this command only reads them for the report.
475
+ Do **not** modify `dev_selftest`/`dev_selftest_at` (owned by `/dev-run-test`) or `qc_status`/`qc_run_at`/`qc_owner`/`qc_blocked_by` (owned by `/qc-run-test` + `/report-bug`); this command only reads them for the report.
471
476
 
472
477
  ### Step 7 — Compute dashboard aggregates
473
478
 
@@ -494,6 +499,9 @@ qc_skipped = rows where qc_status == skip
494
499
  qc_not_run = rows where qc_status in (not_run, —)
495
500
  # qc_status is the OFFICIAL QC automation result (set by /qc-run-test),
496
501
  # shown alongside — never merged with — dev_selftest.
502
+ waiting_dev = rows where qc_owner == dev # PM view: QC-found, waiting on dev to fix
503
+ waiting_po = rows where qc_owner == po # PM view: blocked, waiting on PO to confirm/clarify
504
+ # qc_owner + qc_blocked_by answer "case nào đang chờ ai" — surface as a "Waiting on" column.
497
505
  tech_docs_count = count .md files in {paths.tech_docs_dir}/{domain}/
498
506
  ```
499
507
 
@@ -528,6 +536,8 @@ Schema:
528
536
  "qc_failing": 0,
529
537
  "qc_skipped": 0,
530
538
  "qc_not_run": 0,
539
+ "waiting_dev": 0,
540
+ "waiting_po": 0,
531
541
  "tech_docs_count": 0
532
542
  },
533
543
  "prds": [
@@ -557,6 +567,8 @@ Schema:
557
567
  "dev_selftest_at": "<YYYY-MM-DD or null>",
558
568
  "qc_status": "pass | fail | skip | not_run",
559
569
  "qc_run_at": "<YYYY-MM-DD or null>",
570
+ "qc_owner": "dev | po | null",
571
+ "qc_blocked_by": "<BUG-id / GAP-id or null>",
560
572
  "prd_version": "<prd version when BDD was generated>",
561
573
  "bdd_version": "<bdd version when code was generated>",
562
574
  "tech_doc_revision": 0,
@@ -621,7 +633,8 @@ Schema:
621
633
  - `tech_doc_revision`: use integer; `0` if not yet generated
622
634
  - `code_coverage_pct` / `test_coverage_pct`: round to nearest integer (0–100)
623
635
  - Always write to `{paths.trace_dir}/trace-report.json` regardless of domain filter — if a domain filter was applied, include only those PRDs in `prds[]` but note the domain in the `domain` field
624
- - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`; `dev_selftest: "—"` → `"not_run"`; `dev_selftest_at: "—"` → `null`; `qc_status: "—"` → `"not_run"`; `qc_run_at: "—"` → `null`
636
+ - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`; `dev_selftest: "—"` → `"not_run"`; `dev_selftest_at: "—"` → `null`; `qc_status: "—"` → `"not_run"`; `qc_run_at: "—"` → `null`; `qc_owner: "—"` → `null`; `qc_blocked_by: "—"` → `null`
637
+ - **Backward-compat (older 19-col TSV):** if `qc_owner` / `qc_blocked_by` columns are **absent** from the header (a pre-upgrade TSV), treat them as `null` — do not error. The next `/generate-bdd` re-gen upgrades the header to include them.
625
638
 
626
639
  ### Step 8b — Living Docs Sync *(umbrella mode only)*
627
640
 
@@ -22,11 +22,11 @@ architecture:
22
22
  - "Group tests by (role, account) so login/logout never interleaves across roles"
23
23
  - "Cover 100% of TCs in the .Test.md — every TC ends Pass/Fail/Skip, none left Draft"
24
24
  folder_structure: |
25
- docs/<project>/<feature>/ ← test-case Markdown (.Test.md) — source of truth
25
+ {paths.qc_dir}/{UC-ID}/test-cases/ ← test-case Markdown (.Test.md) — source of truth (mặc định docs/, lộ ra ngoài)
26
26
  pages/ ← Page Object Model
27
27
  │ ├── base_page.py ← slim BasePage (click/fill/wait/screenshot)
28
28
  │ └── <feature>_page.py
29
- tests/ ← pytest scripts, 1-1 with docs/
29
+ tests/ ← pytest scripts, 1-1 with test-cases/
30
30
  │ ├── conftest.py ← fixtures: browser, page, logged_in_page, tracing
31
31
  │ └── <project>/test_<feature>.py
32
32
  utils/ ← config_loader, logger, steps, test_ordering, report helpers
@@ -41,7 +41,7 @@ coding_standards:
41
41
  test_function: "test_TC<NNN>_<snake_case>"
42
42
  page_object: "<feature>_page.py with <Feature>Page class extending BasePage"
43
43
  files:
44
- test_case_md: "docs/<project>/<feature>/TC_<FEATURE>.Test.md"
44
+ test_case_md: "{paths.qc_dir}/{UC-ID}/test-cases/TC_<FEATURE>.Test.md"
45
45
  page_object: "pages/<feature>_page.py"
46
46
  test_script: "tests/<project>/test_<feature>.py"
47
47
  patterns:
@@ -152,6 +152,8 @@ Read `.agent/project-context.yaml`. Extract and store:
152
152
  - `paths.specs_dir` → BDD specs root
153
153
  - `paths.prd_dir` → PRD documents root
154
154
  - `paths.refinement_dir` → findings/review output dir
155
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
156
+ - `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)
155
157
  - `paths.product_definitions_dir` → product definitions root
156
158
  - `paths.domain_knowledge_dir` → domain knowledge root
157
159
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -164,6 +166,8 @@ If `paths` section is absent, use these defaults:
164
166
  - `specs_dir` = `specs/bdd`
165
167
  - `prd_dir` = `specs/prd`
166
168
  - `refinement_dir` = `.agent/review`
169
+ - `qc_dir` = `docs`
170
+ - `qc_skills_dir` = `.agent/skills/qc`
167
171
  - `product_definitions_dir` = `specs/product-definition`
168
172
  - `domain_knowledge_dir` = `specs/domain-knowledge`
169
173
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -208,6 +212,7 @@ If `services` section is present:
208
212
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
209
213
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
210
214
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
215
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
211
216
 
212
217
  > **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.
213
218
 
@@ -67,6 +67,8 @@ Read `.agent/project-context.yaml`. Extract and store:
67
67
  - `paths.specs_dir` → BDD specs root
68
68
  - `paths.prd_dir` → PRD documents root
69
69
  - `paths.refinement_dir` → findings/review output dir
70
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
71
+ - `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)
70
72
  - `paths.product_definitions_dir` → product definitions root
71
73
  - `paths.domain_knowledge_dir` → domain knowledge root
72
74
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -79,6 +81,8 @@ If `paths` section is absent, use these defaults:
79
81
  - `specs_dir` = `specs/bdd`
80
82
  - `prd_dir` = `specs/prd`
81
83
  - `refinement_dir` = `.agent/review`
84
+ - `qc_dir` = `docs`
85
+ - `qc_skills_dir` = `.agent/skills/qc`
82
86
  - `product_definitions_dir` = `specs/product-definition`
83
87
  - `domain_knowledge_dir` = `specs/domain-knowledge`
84
88
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -123,6 +127,7 @@ If `services` section is present:
123
127
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
124
128
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
125
129
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
130
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
126
131
 
127
132
  > **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.
128
133
 
@@ -141,6 +141,8 @@ Read `.agent/project-context.yaml`. Extract and store:
141
141
  - `paths.specs_dir` → BDD specs root
142
142
  - `paths.prd_dir` → PRD documents root
143
143
  - `paths.refinement_dir` → findings/review output dir
144
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
145
+ - `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)
144
146
  - `paths.product_definitions_dir` → product definitions root
145
147
  - `paths.domain_knowledge_dir` → domain knowledge root
146
148
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -153,6 +155,8 @@ If `paths` section is absent, use these defaults:
153
155
  - `specs_dir` = `specs/bdd`
154
156
  - `prd_dir` = `specs/prd`
155
157
  - `refinement_dir` = `.agent/review`
158
+ - `qc_dir` = `docs`
159
+ - `qc_skills_dir` = `.agent/skills/qc`
156
160
  - `product_definitions_dir` = `specs/product-definition`
157
161
  - `domain_knowledge_dir` = `specs/domain-knowledge`
158
162
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -197,6 +201,7 @@ If `services` section is present:
197
201
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
198
202
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
199
203
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
204
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
200
205
 
201
206
  > **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.
202
207
 
@@ -46,6 +46,8 @@ Read `.agent/project-context.yaml`. Extract and store:
46
46
  - `paths.specs_dir` → BDD specs root
47
47
  - `paths.prd_dir` → PRD documents root
48
48
  - `paths.refinement_dir` → findings/review output dir
49
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
50
+ - `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)
49
51
  - `paths.product_definitions_dir` → product definitions root
50
52
  - `paths.domain_knowledge_dir` → domain knowledge root
51
53
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -58,6 +60,8 @@ If `paths` section is absent, use these defaults:
58
60
  - `specs_dir` = `specs/bdd`
59
61
  - `prd_dir` = `specs/prd`
60
62
  - `refinement_dir` = `.agent/review`
63
+ - `qc_dir` = `docs`
64
+ - `qc_skills_dir` = `.agent/skills/qc`
61
65
  - `product_definitions_dir` = `specs/product-definition`
62
66
  - `domain_knowledge_dir` = `specs/domain-knowledge`
63
67
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -102,6 +106,7 @@ If `services` section is present:
102
106
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
103
107
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
104
108
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
109
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
105
110
 
106
111
  > **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.
107
112
 
@@ -51,6 +51,10 @@ Mỗi AC gắn mã trace: chức năng + BR-xx để TC sau này map 1-1.
51
51
 
52
52
  ## Output
53
53
 
54
- - Danh sách AC dạng Given/When/Then, có mã trace về chức năng và business rule.
54
+ Ghi vào **mục Acceptance Criteria** của `{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md`
55
+ (KHÔNG tạo file riêng — qc-analyze chỉ trả 2 file: `REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`):
56
+
57
+ - Danh sách AC dạng Given/When/Then, có mã trace về chức năng, business rule (BR-xx)
58
+ và scenario chính thức `{UC-ID}-SC{N}` của `.feature`.
55
59
  - Bảng ma trận: BR / chức năng × AC để xác nhận không bỏ sót.
56
60
  - Đây là đầu vào trực tiếp cho `qa-designer` (mỗi AC → ≥1 test case) và `qa-reviewer` (đối chiếu coverage).
@@ -49,7 +49,11 @@ Với rule có nhiều điều kiện kết hợp → gợi ý dựng **Decision
49
49
 
50
50
  ## Output
51
51
 
52
+ Ghi vào **mục Business Rules** của `{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md`
53
+ (KHÔNG tạo file riêng — qc-analyze chỉ trả 2 file: `REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`):
54
+
52
55
  - Bảng business rule có ID (BR-xx) để TC trace ngược về.
53
- - Rule MÂU THUẪN / KHÔNG RÕ → ghi vào `DOC_GAPS.md` (loại CONTRADICTORY / AMBIGUOUS,
54
- cột "Ảnh hưởng" trỏ BR-xx) rồi ghi vào `DOC_GAPS.md`.
55
56
  - Gợi ý các rule cần Decision Table / BVA khi sang qa-designer.
57
+
58
+ Rule MÂU THUẪN / KHÔNG RÕ → ghi vào `{paths.qc_dir}/{UC-ID}/DOC_GAPS.md`
59
+ (loại CONTRADICTORY / AMBIGUOUS, cột "Ảnh hưởng" trỏ BR-xx).