@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.
- package/commands/debug.md +5 -0
- package/commands/define-product.md +5 -0
- package/commands/dev-gen-test.md +5 -0
- package/commands/dev-run-test.md +5 -0
- package/commands/dev-smoke-test.md +5 -0
- package/commands/fix-bug.md +41 -6
- package/commands/fix-bug.tmpl +36 -6
- package/commands/generate-bdd.md +9 -2
- package/commands/generate-bdd.tmpl +4 -2
- package/commands/generate-code.md +5 -0
- package/commands/generate-design-spec.md +5 -0
- package/commands/generate-prd.md +5 -0
- package/commands/generate-spec-manifest.md +5 -0
- package/commands/generate-tech-docs.md +5 -0
- package/commands/learn.md +5 -0
- package/commands/propose-scenario.md +36 -11
- package/commands/propose-scenario.tmpl +31 -11
- package/commands/qc-analyze.md +25 -5
- package/commands/qc-analyze.tmpl +20 -5
- package/commands/qc-design-test.md +8 -3
- package/commands/qc-design-test.tmpl +3 -3
- package/commands/qc-plan.md +8 -3
- package/commands/qc-plan.tmpl +3 -3
- package/commands/qc-report.md +18 -1
- package/commands/qc-report.tmpl +13 -1
- package/commands/qc-review.md +7 -2
- package/commands/qc-review.tmpl +2 -2
- package/commands/qc-run-test.md +13 -2
- package/commands/qc-run-test.tmpl +8 -2
- package/commands/refine-prd.md +5 -0
- package/commands/report-bug.md +21 -2
- package/commands/report-bug.tmpl +16 -2
- package/commands/review-code.md +5 -0
- package/commands/review-context.md +5 -0
- package/commands/review-tech-docs.md +5 -0
- package/commands/sync.md +12 -9
- package/commands/sync.tmpl +12 -9
- package/commands/validate-traces.md +15 -2
- package/commands/validate-traces.tmpl +10 -2
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +5 -0
- package/core/commands/define-product.md +5 -0
- package/core/commands/dev-gen-test.md +5 -0
- package/core/commands/dev-run-test.md +5 -0
- package/core/commands/dev-smoke-test.md +5 -0
- package/core/commands/fix-bug.md +41 -6
- package/core/commands/generate-bdd.md +9 -2
- package/core/commands/generate-code.md +5 -0
- package/core/commands/generate-design-spec.md +5 -0
- package/core/commands/generate-prd.md +5 -0
- package/core/commands/generate-spec-manifest.md +5 -0
- package/core/commands/generate-tech-docs.md +5 -0
- package/core/commands/learn.md +5 -0
- package/core/commands/propose-scenario.md +36 -11
- package/core/commands/qc-analyze.md +25 -5
- package/core/commands/qc-design-test.md +8 -3
- package/core/commands/qc-plan.md +8 -3
- package/core/commands/qc-report.md +18 -1
- package/core/commands/qc-review.md +7 -2
- package/core/commands/qc-run-test.md +13 -2
- package/core/commands/refine-prd.md +5 -0
- package/core/commands/report-bug.md +21 -2
- package/core/commands/review-code.md +5 -0
- package/core/commands/review-context.md +5 -0
- package/core/commands/review-tech-docs.md +5 -0
- package/core/commands/sync.md +12 -9
- package/core/commands/validate-traces.md +15 -2
- package/core/modules/qc-playwright/stack-profile.yaml +3 -3
- package/core/skills/code/SKILL.md +5 -0
- package/core/skills/debug/SKILL.md +5 -0
- package/core/skills/design-spec/SKILL.md +5 -0
- package/core/skills/discovery/SKILL.md +5 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +5 -1
- package/core/skills/qc/qa-analyst/business-rules.md +6 -2
- package/core/skills/qc/qa-analyst/data-flow.md +6 -2
- package/core/skills/qc/qa-analyst/spec-breakdown.md +7 -3
- package/core/skills/qc/qa-designer/e2e/journey.md +1 -1
- package/core/skills/qc/qa-designer/exploratory/charter.md +2 -2
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
- package/core/skills/qc/qa-designer/functional/api.md +1 -1
- package/core/skills/qc/qa-designer/functional/gui-feature.md +1 -1
- package/core/skills/qc/qa-designer/functional/gui-screen.md +1 -1
- package/core/skills/qc/qa-designer/integration/api.md +1 -1
- package/core/skills/qc/qa-designer/integration/db.md +1 -1
- package/core/skills/qc/qa-designer/integration/gui.md +1 -1
- package/core/skills/qc/qa-designer/integration/kafka.md +1 -1
- package/core/skills/qc/qa-designer/non-functional.md +1 -1
- package/core/skills/qc/qa-planner/test-plan.md +4 -4
- package/core/skills/qc/qa-runner/exploratory/session.md +2 -2
- package/core/skills/test/SKILL.md +10 -0
- package/core/steps/context-loader.md +5 -0
- package/core/templates/project-context.yaml +19 -1
- package/docs/01-getting-started/installation.md +3 -1
- package/docs/02-guides/developer/commands.md +1 -1
- package/docs/02-guides/developer/workflow.md +2 -0
- package/docs/02-guides/qc-automation.md +66 -1
- package/docs/02-guides/tester/README.md +2 -0
- package/docs/02-guides/tester/bug-reporting.md +1 -1
- package/docs/02-guides/tester/workflow.md +4 -3
- package/docs/03-concepts/architecture.md +2 -0
- package/docs/03-concepts/pipeline.md +19 -6
- package/docs/03-concepts/traceability.md +2 -1
- package/docs/04-operations/bug-flow.md +45 -4
- package/docs/04-operations/sync-and-update.md +38 -1
- package/docs/05-reference/commands.md +11 -11
- package/docs/05-reference/modules.md +2 -2
- package/docs/05-reference/trace-schema.md +18 -12
- package/modules/qc-playwright/stack-profile.yaml +3 -3
- package/package.json +1 -1
- package/skills/code/SKILL.md +5 -0
- package/skills/debug/SKILL.md +5 -0
- package/skills/design-spec/SKILL.md +5 -0
- package/skills/discovery/SKILL.md +5 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +5 -1
- package/skills/qc/qa-analyst/business-rules.md +6 -2
- package/skills/qc/qa-analyst/data-flow.md +6 -2
- package/skills/qc/qa-analyst/spec-breakdown.md +7 -3
- package/skills/qc/qa-designer/e2e/journey.md +1 -1
- package/skills/qc/qa-designer/exploratory/charter.md +2 -2
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
- package/skills/qc/qa-designer/functional/api.md +1 -1
- package/skills/qc/qa-designer/functional/gui-feature.md +1 -1
- package/skills/qc/qa-designer/functional/gui-screen.md +1 -1
- package/skills/qc/qa-designer/integration/api.md +1 -1
- package/skills/qc/qa-designer/integration/db.md +1 -1
- package/skills/qc/qa-designer/integration/gui.md +1 -1
- package/skills/qc/qa-designer/integration/kafka.md +1 -1
- package/skills/qc/qa-designer/non-functional.md +1 -1
- package/skills/qc/qa-planner/test-plan.md +4 -4
- package/skills/qc/qa-runner/exploratory/session.md +2 -2
- package/skills/test/SKILL.md +10 -0
- package/steps/context-loader.md +5 -0
- package/templates/project-context.yaml +19 -1
package/commands/qc-run-test.md
CHANGED
|
@@ -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.
|
|
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 (`
|
|
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
|
|
@@ -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 reviewed `.Test.md` from `{paths.
|
|
14
|
+
*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.*
|
|
15
15
|
|
|
16
16
|
## Context
|
|
17
17
|
{{include:steps/context-loader.md}}
|
|
@@ -31,7 +31,7 @@ Stack rules (MANDATORY — from `modules/qc-playwright/stack-profile.yaml`):
|
|
|
31
31
|
- Cover **100%** of TCs in the file — every TC ends Pass/Fail/Skip (none left Draft).
|
|
32
32
|
- Classify each FAIL: script-bug (fix selector/logic) vs product-gap (keep FAIL + evidence, never fake-pass).
|
|
33
33
|
|
|
34
|
-
## Skills — pick the layer, load ONE file (`
|
|
34
|
+
## Skills — pick the layer, load ONE file (`{paths.qc_skills_dir}/qa-runner/`)
|
|
35
35
|
|
|
36
36
|
`functional/{gui-screen,gui-feature,api}.md`, `integration.md`, `e2e.md`,
|
|
37
37
|
`non-functional.md`, `exploratory/session.md`.
|
|
@@ -55,6 +55,12 @@ After the run, update `{paths.trace_dir}/{UC-ID}.tsv` — for each scenario row
|
|
|
55
55
|
|--------|-------|
|
|
56
56
|
| `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 |
|
|
57
57
|
| `qc_run_at` | today `YYYY-MM-DD` |
|
|
58
|
+
| `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) |
|
|
59
|
+
| `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 |
|
|
60
|
+
|
|
61
|
+
Set `qc_owner`/`qc_blocked_by` together with `qc_status`. On `pass`, **clear** both to `—`.
|
|
62
|
+
For a product-gap FAIL, set `qc_owner=dev` now; the `BUG-{id}` is backfilled into `qc_blocked_by`
|
|
63
|
+
when QC runs the `/report-bug` that `/qc-report` prompts.
|
|
58
64
|
|
|
59
65
|
Leave all other columns unchanged — **never** touch `dev_selftest`/`dev_selftest_at`
|
|
60
66
|
(owned by `/dev-run-test`). `qc_status` (official QC) and `dev_selftest` (dev smoke) are
|
package/commands/refine-prd.md
CHANGED
|
@@ -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
|
|
package/commands/report-bug.md
CHANGED
|
@@ -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
|
|
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})
|
package/commands/report-bug.tmpl
CHANGED
|
@@ -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
|
|
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.
|
|
@@ -70,6 +72,17 @@ State the classification as a suggestion (dev confirms during `/fix-bug`).
|
|
|
70
72
|
Assign `BUG-{today YYYYMMDD}-{NN}` (NN = next sequence among existing reports).
|
|
71
73
|
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.
|
|
72
74
|
|
|
75
|
+
## Step 5.5 — Backfill the trace (pending-view link)
|
|
76
|
+
|
|
77
|
+
If Step 1 matched a specific failing scenario `{UC-ID}-SC{N}` **and** a trace row exists in
|
|
78
|
+
`{paths.trace_dir}/{UC-ID}.tsv`, update **only** that row so the PO/PM "waiting-on" view points
|
|
79
|
+
to this bug — leave every other column (incl. `qc_status`) unchanged:
|
|
80
|
+
- `qc_blocked_by` = `{BUG-ID}`
|
|
81
|
+
- `qc_owner` = `dev` if likely layer ∈ {Code, BDD, Design Spec, Env} · `po` if likely layer = PRD ambiguity
|
|
82
|
+
|
|
83
|
+
Skip silently if no SC matched or no trace file/row exists (a bug can still be filed). This is
|
|
84
|
+
the only write this command makes to operational state — it still **never** edits PRD/BDD/code.
|
|
85
|
+
|
|
73
86
|
## Step 6 — Handoff (so PO/Dev actually see it)
|
|
74
87
|
|
|
75
88
|
The report only reaches PO/Dev if it is **committed and pushed to the shared spec repo**. A local file is a dead drop.
|
|
@@ -102,6 +115,7 @@ git push # → PO/Dev see it on their next /sync
|
|
|
102
115
|
🐞 {BUG-ID} → {paths.bug_reports_dir}/{BUG-ID}.md (in shared spec repo)
|
|
103
116
|
|
|
104
117
|
Feature : {UC-ID} — {feature name} | Service: {service} | Severity: {Critical|Major|Minor}
|
|
118
|
+
State : 🟢 Open (lifecycle: Open → Fixed → Closed — set `Fixed` by /fix-bug, `Closed` after /qc-run-test re-verify pass)
|
|
105
119
|
|
|
106
120
|
Spec context
|
|
107
121
|
PRD : {prd_path} (v{prd_version})
|
package/commands/review-code.md
CHANGED
|
@@ -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
|
|
package/commands/sync.md
CHANGED
|
@@ -144,9 +144,9 @@ Collect from output:
|
|
|
144
144
|
|
|
145
145
|
---
|
|
146
146
|
|
|
147
|
-
## Step 1d — Surface Tester Feedback *(
|
|
147
|
+
## Step 1d — Surface Tester/QC Feedback *(bug reports / scenario proposals / PRD change requests)*
|
|
148
148
|
|
|
149
|
-
Tester `/report-bug
|
|
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
|
|
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 `📥
|
|
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
|
|
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
|
|
package/commands/sync.tmpl
CHANGED
|
@@ -144,9 +144,9 @@ Collect from output:
|
|
|
144
144
|
|
|
145
145
|
---
|
|
146
146
|
|
|
147
|
-
## Step 1d — Surface Tester Feedback *(
|
|
147
|
+
## Step 1d — Surface Tester/QC Feedback *(bug reports / scenario proposals / PRD change requests)*
|
|
148
148
|
|
|
149
|
-
Tester `/report-bug
|
|
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
|
|
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 `📥
|
|
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
|
|
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
|
|
|
@@ -91,7 +91,7 @@ If code was generated from an older revision → flag `TECHDOC_DRIFT`.
|
|
|
91
91
|
*Skip this step if no TSV files existed (handled by Step 1 no-TSV path).*
|
|
92
92
|
|
|
93
93
|
For each `.tsv` file processed: write updated `spec_ver`, `status`, `last_updated` back to disk.
|
|
94
|
-
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.
|
|
94
|
+
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.
|
|
95
95
|
|
|
96
96
|
### Step 7 — Compute dashboard aggregates
|
|
97
97
|
|
|
@@ -118,6 +118,9 @@ qc_skipped = rows where qc_status == skip
|
|
|
118
118
|
qc_not_run = rows where qc_status in (not_run, —)
|
|
119
119
|
# qc_status is the OFFICIAL QC automation result (set by /qc-run-test),
|
|
120
120
|
# shown alongside — never merged with — dev_selftest.
|
|
121
|
+
waiting_dev = rows where qc_owner == dev # PM view: QC-found, waiting on dev to fix
|
|
122
|
+
waiting_po = rows where qc_owner == po # PM view: blocked, waiting on PO to confirm/clarify
|
|
123
|
+
# qc_owner + qc_blocked_by answer "case nào đang chờ ai" — surface as a "Waiting on" column.
|
|
121
124
|
tech_docs_count = count .md files in {paths.tech_docs_dir}/{domain}/
|
|
122
125
|
```
|
|
123
126
|
|
|
@@ -152,6 +155,8 @@ Schema:
|
|
|
152
155
|
"qc_failing": 0,
|
|
153
156
|
"qc_skipped": 0,
|
|
154
157
|
"qc_not_run": 0,
|
|
158
|
+
"waiting_dev": 0,
|
|
159
|
+
"waiting_po": 0,
|
|
155
160
|
"tech_docs_count": 0
|
|
156
161
|
},
|
|
157
162
|
"prds": [
|
|
@@ -181,6 +186,8 @@ Schema:
|
|
|
181
186
|
"dev_selftest_at": "<YYYY-MM-DD or null>",
|
|
182
187
|
"qc_status": "pass | fail | skip | not_run",
|
|
183
188
|
"qc_run_at": "<YYYY-MM-DD or null>",
|
|
189
|
+
"qc_owner": "dev | po | null",
|
|
190
|
+
"qc_blocked_by": "<BUG-id / GAP-id or null>",
|
|
184
191
|
"prd_version": "<prd version when BDD was generated>",
|
|
185
192
|
"bdd_version": "<bdd version when code was generated>",
|
|
186
193
|
"tech_doc_revision": 0,
|
|
@@ -245,7 +252,8 @@ Schema:
|
|
|
245
252
|
- `tech_doc_revision`: use integer; `0` if not yet generated
|
|
246
253
|
- `code_coverage_pct` / `test_coverage_pct`: round to nearest integer (0–100)
|
|
247
254
|
- 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
|
|
248
|
-
- **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`
|
|
255
|
+
- **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`
|
|
256
|
+
- **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.
|
|
249
257
|
|
|
250
258
|
### Step 8b — Living Docs Sync *(umbrella mode only)*
|
|
251
259
|
|
package/core/FRAMEWORK_VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.12.0
|
package/core/commands/debug.md
CHANGED
|
@@ -128,6 +128,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
128
128
|
- `paths.specs_dir` → BDD specs root
|
|
129
129
|
- `paths.prd_dir` → PRD documents root
|
|
130
130
|
- `paths.refinement_dir` → findings/review output dir
|
|
131
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
132
|
+
- `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)
|
|
131
133
|
- `paths.product_definitions_dir` → product definitions root
|
|
132
134
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
133
135
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -140,6 +142,8 @@ If `paths` section is absent, use these defaults:
|
|
|
140
142
|
- `specs_dir` = `specs/bdd`
|
|
141
143
|
- `prd_dir` = `specs/prd`
|
|
142
144
|
- `refinement_dir` = `.agent/review`
|
|
145
|
+
- `qc_dir` = `docs`
|
|
146
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
143
147
|
- `product_definitions_dir` = `specs/product-definition`
|
|
144
148
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
145
149
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -184,6 +188,7 @@ If `services` section is present:
|
|
|
184
188
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
185
189
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
186
190
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
191
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
187
192
|
|
|
188
193
|
> **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.
|
|
189
194
|
|
|
@@ -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
|
|
|
@@ -131,6 +131,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
131
131
|
- `paths.specs_dir` → BDD specs root
|
|
132
132
|
- `paths.prd_dir` → PRD documents root
|
|
133
133
|
- `paths.refinement_dir` → findings/review output dir
|
|
134
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
135
|
+
- `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)
|
|
134
136
|
- `paths.product_definitions_dir` → product definitions root
|
|
135
137
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
136
138
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -143,6 +145,8 @@ If `paths` section is absent, use these defaults:
|
|
|
143
145
|
- `specs_dir` = `specs/bdd`
|
|
144
146
|
- `prd_dir` = `specs/prd`
|
|
145
147
|
- `refinement_dir` = `.agent/review`
|
|
148
|
+
- `qc_dir` = `docs`
|
|
149
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
146
150
|
- `product_definitions_dir` = `specs/product-definition`
|
|
147
151
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
148
152
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -187,6 +191,7 @@ If `services` section is present:
|
|
|
187
191
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
188
192
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
189
193
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
194
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
190
195
|
|
|
191
196
|
> **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.
|
|
192
197
|
|
|
@@ -131,6 +131,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
131
131
|
- `paths.specs_dir` → BDD specs root
|
|
132
132
|
- `paths.prd_dir` → PRD documents root
|
|
133
133
|
- `paths.refinement_dir` → findings/review output dir
|
|
134
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
135
|
+
- `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)
|
|
134
136
|
- `paths.product_definitions_dir` → product definitions root
|
|
135
137
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
136
138
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -143,6 +145,8 @@ If `paths` section is absent, use these defaults:
|
|
|
143
145
|
- `specs_dir` = `specs/bdd`
|
|
144
146
|
- `prd_dir` = `specs/prd`
|
|
145
147
|
- `refinement_dir` = `.agent/review`
|
|
148
|
+
- `qc_dir` = `docs`
|
|
149
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
146
150
|
- `product_definitions_dir` = `specs/product-definition`
|
|
147
151
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
148
152
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -187,6 +191,7 @@ If `services` section is present:
|
|
|
187
191
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
188
192
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
189
193
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
194
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
190
195
|
|
|
191
196
|
> **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.
|
|
192
197
|
|