@anhth2/spec-driven-dev-plugin 0.10.0 → 0.11.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 +38 -8
- package/commands/define-product.md +38 -8
- package/commands/dev-gen-test.md +39 -9
- package/commands/dev-gen-test.tmpl +1 -1
- package/commands/dev-run-test.md +43 -10
- package/commands/dev-run-test.tmpl +5 -2
- package/commands/dev-smoke-test.md +38 -8
- package/commands/fix-bug.md +38 -8
- package/commands/generate-bdd.md +42 -10
- package/commands/generate-bdd.tmpl +4 -2
- package/commands/generate-code.md +39 -9
- package/commands/generate-code.tmpl +1 -1
- package/commands/generate-design-spec.md +38 -8
- package/commands/generate-prd.md +38 -8
- package/commands/generate-spec-manifest.md +38 -8
- package/commands/generate-tech-docs.md +38 -8
- package/commands/learn.md +38 -8
- package/commands/propose-scenario.md +38 -8
- package/commands/qc-analyze.md +514 -0
- package/commands/qc-analyze.tmpl +71 -0
- package/commands/qc-design-test.md +510 -0
- package/commands/qc-design-test.tmpl +67 -0
- package/commands/qc-plan.md +492 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +491 -0
- package/commands/qc-report.tmpl +48 -0
- package/commands/qc-review.md +496 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +538 -0
- package/commands/qc-run-test.tmpl +77 -0
- package/commands/refine-prd.md +38 -8
- package/commands/report-bug.md +38 -8
- package/commands/review-code.md +38 -8
- package/commands/review-context.md +38 -8
- package/commands/review-tech-docs.md +38 -8
- package/commands/setup-ai-first.md +7 -0
- package/commands/sync.md +7 -0
- package/commands/update-framework.md +7 -0
- package/commands/validate-traces.md +54 -12
- package/commands/validate-traces.tmpl +16 -4
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +38 -8
- package/core/commands/define-product.md +38 -8
- package/core/commands/dev-gen-test.md +39 -9
- package/core/commands/dev-run-test.md +43 -10
- package/core/commands/dev-smoke-test.md +38 -8
- package/core/commands/fix-bug.md +38 -8
- package/core/commands/generate-bdd.md +42 -10
- package/core/commands/generate-code.md +39 -9
- package/core/commands/generate-design-spec.md +38 -8
- package/core/commands/generate-prd.md +38 -8
- package/core/commands/generate-spec-manifest.md +38 -8
- package/core/commands/generate-tech-docs.md +38 -8
- package/core/commands/learn.md +38 -8
- package/core/commands/propose-scenario.md +38 -8
- package/core/commands/qc-analyze.md +514 -0
- package/core/commands/qc-design-test.md +510 -0
- package/core/commands/qc-plan.md +492 -0
- package/core/commands/qc-report.md +491 -0
- package/core/commands/qc-review.md +496 -0
- package/core/commands/qc-run-test.md +538 -0
- package/core/commands/refine-prd.md +38 -8
- package/core/commands/report-bug.md +38 -8
- package/core/commands/review-code.md +38 -8
- package/core/commands/review-context.md +38 -8
- package/core/commands/review-tech-docs.md +38 -8
- package/core/commands/setup-ai-first.md +7 -0
- package/core/commands/sync.md +7 -0
- package/core/commands/update-framework.md +7 -0
- package/core/commands/validate-traces.md +54 -12
- package/core/modules/qc-playwright/stack-profile.yaml +65 -0
- package/core/skills/code/SKILL.md +45 -8
- package/core/skills/debug/SKILL.md +52 -8
- package/core/skills/design-spec/SKILL.md +38 -8
- package/core/skills/discovery/SKILL.md +38 -8
- package/core/skills/prd/SKILL.md +14 -0
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
- package/core/skills/qc/qa-analyst/business-rules.md +55 -0
- package/core/skills/qc/qa-analyst/data-flow.md +60 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +57 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/core/skills/qc/qa-designer/functional/api.md +45 -0
- package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/core/skills/qc/qa-designer/integration/api.md +42 -0
- package/core/skills/qc/qa-designer/integration/db.md +39 -0
- package/core/skills/qc/qa-designer/integration/gui.md +40 -0
- package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/core/skills/qc/qa-designer/non-functional.md +40 -0
- package/core/skills/qc/qa-planner/test-plan.md +120 -0
- package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/core/skills/qc/qa-runner/e2e.md +49 -0
- package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/core/skills/qc/qa-runner/functional/api.md +35 -0
- package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/core/skills/qc/qa-runner/integration.md +47 -0
- package/core/skills/qc/qa-runner/non-functional.md +49 -0
- package/core/skills/qc/qa-runner/report/report.md +37 -0
- package/core/skills/setup-ai-first/SKILL.md +7 -0
- package/core/skills/spec/SKILL.md +14 -0
- package/core/skills/test/SKILL.md +83 -16
- package/core/steps/context-loader.md +31 -8
- package/core/steps/report-footer.md +7 -0
- package/core/templates/project-context.yaml +8 -0
- package/docs/01-getting-started/README.md +19 -0
- package/docs/01-getting-started/core-concepts.md +102 -0
- package/docs/01-getting-started/installation.md +154 -0
- package/docs/01-getting-started/quickstart.md +85 -0
- package/docs/02-guides/README.md +27 -0
- package/docs/02-guides/developer/README.md +46 -0
- package/docs/02-guides/developer/bdd-and-trace.md +123 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +15 -0
- package/docs/02-guides/developer/scenarios.md +448 -0
- package/docs/02-guides/developer/workflow.md +59 -0
- package/docs/02-guides/product-owner/README.md +77 -0
- package/docs/02-guides/product-owner/commands.md +30 -0
- package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
- package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
- package/docs/02-guides/product-owner/scenarios.md +357 -0
- package/docs/02-guides/qc-automation.md +92 -0
- package/docs/02-guides/tester/README.md +72 -0
- package/docs/02-guides/tester/bug-reporting.md +117 -0
- package/docs/02-guides/tester/reading-specs.md +79 -0
- package/docs/02-guides/tester/scenarios.md +186 -0
- package/docs/02-guides/tester/spec-manifest.md +124 -0
- package/docs/02-guides/tester/test-checklist.md +31 -0
- package/docs/02-guides/tester/workflow.md +79 -0
- package/docs/03-concepts/README.md +19 -0
- package/docs/03-concepts/architecture.md +243 -0
- package/docs/03-concepts/pipeline.md +249 -0
- package/docs/03-concepts/traceability.md +148 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +321 -0
- package/docs/04-operations/publishing.md +137 -0
- package/docs/04-operations/sync-and-update.md +328 -0
- package/docs/05-reference/README.md +29 -0
- package/docs/05-reference/commands.md +229 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +146 -0
- package/docs/README.md +51 -0
- package/modules/qc-playwright/stack-profile.yaml +65 -0
- package/package.json +2 -2
- package/skills/code/SKILL.md +45 -8
- package/skills/debug/SKILL.md +52 -8
- package/skills/design-spec/SKILL.md +38 -8
- package/skills/discovery/SKILL.md +38 -8
- package/skills/prd/SKILL.md +14 -0
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
- package/skills/qc/qa-analyst/business-rules.md +55 -0
- package/skills/qc/qa-analyst/data-flow.md +60 -0
- package/skills/qc/qa-analyst/spec-breakdown.md +57 -0
- package/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/skills/qc/qa-designer/functional/api.md +45 -0
- package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/skills/qc/qa-designer/integration/api.md +42 -0
- package/skills/qc/qa-designer/integration/db.md +39 -0
- package/skills/qc/qa-designer/integration/gui.md +40 -0
- package/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/skills/qc/qa-designer/non-functional.md +40 -0
- package/skills/qc/qa-planner/test-plan.md +120 -0
- package/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/skills/qc/qa-runner/e2e.md +49 -0
- package/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/skills/qc/qa-runner/functional/api.md +35 -0
- package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/skills/qc/qa-runner/integration.md +47 -0
- package/skills/qc/qa-runner/non-functional.md +49 -0
- package/skills/qc/qa-runner/report/report.md +37 -0
- package/skills/setup-ai-first/SKILL.md +7 -0
- package/skills/spec/SKILL.md +14 -0
- package/skills/test/SKILL.md +83 -16
- package/steps/context-loader.md +31 -8
- package/steps/report-footer.md +7 -0
- package/templates/project-context.yaml +8 -0
- package/ARCHITECTURE.md +0 -258
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Concepts](README.md) › Architecture
|
|
2
|
+
|
|
3
|
+
# Architecture
|
|
4
|
+
|
|
5
|
+
> **Nguyên tắc**: Đọc file này để hiểu toàn bộ framework trước khi đọc bất kỳ file chi tiết nào.
|
|
6
|
+
|
|
7
|
+
Cách framework được xây dựng: 6 lớp runtime, build pipeline `*.tmpl → *.md → core/`, module plug-in system, hook data-protection, và sub-agent orchestration.
|
|
8
|
+
|
|
9
|
+
## Mục lục
|
|
10
|
+
|
|
11
|
+
- [Layer diagram (L0 → L5)](#layer-diagram-l0--l5)
|
|
12
|
+
- [Data flow — một command chạy như thế nào](#data-flow--một-command-chạy-như-thế-nào)
|
|
13
|
+
- [Build system](#build-system)
|
|
14
|
+
- [Module plug-in system](#module-plug-in-system)
|
|
15
|
+
- [Hook system — data protection](#hook-system--data-protection)
|
|
16
|
+
- [Sub-agent orchestration](#sub-agent-orchestration)
|
|
17
|
+
- [Directory map](#directory-map)
|
|
18
|
+
- [Maintenance guide](#maintenance-guide)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Layer diagram (L0 → L5)
|
|
23
|
+
|
|
24
|
+
Mỗi command chạy qua 6 lớp, từ bảo vệ dữ liệu đến sinh artifact:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
LAYER 0 — PROTECTION (luôn chạy trước)
|
|
28
|
+
hooks/data-guard.js → PreToolUse hook: chặn đọc file nhạy cảm
|
|
29
|
+
rules/data-protection.md → quy tắc declarative cho AI agent
|
|
30
|
+
│ safe ↓ blocked → ✋ STOP
|
|
31
|
+
LAYER 1 — ENTRY POINT (user trigger)
|
|
32
|
+
commands/*.tmpl (slash commands: /generate-bdd, /generate-code, …)
|
|
33
|
+
skills/*/SKILL.tmpl (auto-trigger theo description match)
|
|
34
|
+
│ cả hai build bởi bin/build.js
|
|
35
|
+
LAYER 2 — SHARED STEPS (DRY, injected)
|
|
36
|
+
steps/gate.md → resolve target file + CHECKPOINT
|
|
37
|
+
steps/context-loader.md → load project config + rules
|
|
38
|
+
steps/report-footer.md → standard output format
|
|
39
|
+
Injected ở build time qua {{include:steps/X.md}} (*.tmpl → *.md, gitignored)
|
|
40
|
+
│ context loaded
|
|
41
|
+
LAYER 3 — PROJECT CONTEXT (đọc từ consumer project)
|
|
42
|
+
.agent/project-context.yaml → paths, tech_stack, domains
|
|
43
|
+
CLAUDE.md (root) → umbrella-wide shared rules (base layer)
|
|
44
|
+
{service_root}/CLAUDE.md → service architecture + coding standards (overlay, wins)
|
|
45
|
+
rules/data-protection.md → AI không được đọc gì
|
|
46
|
+
.agent/modules/{stack}/ → stack rules (plug-in, optional)
|
|
47
|
+
│ context-aware
|
|
48
|
+
LAYER 4 — EXECUTION (command logic)
|
|
49
|
+
Discovery /define-product
|
|
50
|
+
PRD / BDD /generate-prd · /refine-prd · /generate-bdd · /generate-tech-docs
|
|
51
|
+
Code /generate-code · /review-code
|
|
52
|
+
Dev check /dev-gen-test · /dev-run-test · /dev-smoke-test → set dev_selftest
|
|
53
|
+
QC suite /qc-analyze → /qc-plan → /qc-design-test → /qc-review →
|
|
54
|
+
/qc-run-test → /qc-report → set qc_status
|
|
55
|
+
Trace/Debug /validate-traces · /fix-bug · /debug
|
|
56
|
+
│
|
|
57
|
+
LAYER 5 — OUTPUT (artifacts in consumer proj)
|
|
58
|
+
Spec module (cross-team, via {spec_source}):
|
|
59
|
+
specs/product-definition/ · specs/prd/ · specs/bdd/
|
|
60
|
+
specs/tech-docs/ (API contract) · .living-docs/ (gitignored)
|
|
61
|
+
Service submodule (per-service):
|
|
62
|
+
src/ · .trace/*.tsv (authoritative, committed) · .agent/review/
|
|
63
|
+
QC automation outputs:
|
|
64
|
+
QC test cases / scripts (Python pytest-playwright, Page Object)
|
|
65
|
+
→ guides per-layer ở skills/qc/<stage>/ · qc_status trong .trace/*.tsv
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> **Dev self-check vs QC chính thức:** `/dev-*` set `dev_selftest` (smoke, dev tự kiểm code của mình); 6 lệnh `/qc-*` là QC automation pipeline CHÍNH THỨC (port từ agent của team QC; QC repo nay chỉ còn reference) → set `qc_status`. Hai tín hiệu **orthogonal**, cả hai surface trong Living Docs. Chi tiết: [traceability.md](traceability.md).
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Data flow — một command chạy như thế nào
|
|
73
|
+
|
|
74
|
+
Ví dụ `/generate-bdd specs/prd/payment/PAY-01.md`:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
User types: /generate-bdd specs/prd/payment/PAY-01.md
|
|
78
|
+
│
|
|
79
|
+
[L0] data-guard.js check tool calls real-time → đọc .env/*.key → BLOCK + warn
|
|
80
|
+
│
|
|
81
|
+
[L1] commands/generate-bdd.md (assembled từ .tmpl + injected steps) được Claude đọc
|
|
82
|
+
│
|
|
83
|
+
[L2] gate.md → resolve file path từ $ARGUMENTS
|
|
84
|
+
context-loader.md → đọc project-context.yaml, CLAUDE.md,
|
|
85
|
+
rules/data-protection.md, modules/{stack}/stack-profile.yaml
|
|
86
|
+
│
|
|
87
|
+
[L3] Claude biết: tech_stack, domains, architecture rules, sensitive files, stack patterns
|
|
88
|
+
│
|
|
89
|
+
[L4] generate-bdd logic: đọc PRD → extract UC/BR/AC → apply BDD rules R1–R10
|
|
90
|
+
│
|
|
91
|
+
[L5] Output: specs/bdd/payment/PAY-01-UC1.feature
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Chi tiết về step-architecture (gate / context-loader / report-footer) và sub-agent model: xem [pipeline.md](pipeline.md#command-internals--step-architecture).
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Build system
|
|
99
|
+
|
|
100
|
+
`*.tmpl` (committed) được assemble thành `*.md` (gitignored) bởi `bin/build.js`:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Source (committed) Build output (gitignored)
|
|
104
|
+
commands/*.tmpl ──┐
|
|
105
|
+
skills/**/SKILL.tmpl ──┤ node bin/build.js → commands/*.md · skills/**/SKILL.md
|
|
106
|
+
steps/*.md (shared) ──┘
|
|
107
|
+
|
|
108
|
+
Trigger:
|
|
109
|
+
npm run build ← manual
|
|
110
|
+
prepublishOnly hook ← auto trước npm publish
|
|
111
|
+
bin/index.js install ← auto khi user chạy npx
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
> Build output cũng bao gồm `core/` — bản distributable được copy vào `.agent/` của consumer khi `--init`.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Module plug-in system
|
|
119
|
+
|
|
120
|
+
Stack module là plug-in tùy chọn: cài qua `--module`, đọc ở runtime bởi `context-loader.md`.
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Available modules (modules/):
|
|
124
|
+
java-spring, angular, react, nextjs, vue, nuxt, dotnet, golang,
|
|
125
|
+
php-laravel, flutter, react-native, ios-swiftui, android-compose,
|
|
126
|
+
context-engineering, qc-playwright
|
|
127
|
+
|
|
128
|
+
Usage:
|
|
129
|
+
npx @anhth2/spec-driven-dev-plugin --module java-spring
|
|
130
|
+
└─ copies modules/java-spring/ → consumer/.agent/modules/java-spring/
|
|
131
|
+
|
|
132
|
+
Runtime, context-loader.md đọc:
|
|
133
|
+
.agent/modules/{tech_stack.module}/stack-profile.yaml
|
|
134
|
+
.agent/modules/{tech_stack.module}/architecture-snippets/
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
> **`qc-playwright`** là stack module cho native QC pipeline (`/qc-run-test`, `/qc-report`) — Python + pytest-playwright + Page Object — **ĐỘC LẬP** với dev implementation module (java-spring / react / flutter / …). Per-layer guides ở `skills/qc/<stage>/`. Danh sách module đầy đủ: [../05-reference/modules.md](../05-reference/modules.md).
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Hook system — data protection
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
Consumer project setup:
|
|
145
|
+
.claude/settings.json ← registers hook (template)
|
|
146
|
+
hooks/data-guard.js ← copied khi install
|
|
147
|
+
|
|
148
|
+
Runtime — mỗi tool use (Read, Write, Edit, Bash):
|
|
149
|
+
data-guard.js checks:
|
|
150
|
+
.env* · *.key · *.pem · *secret* · *password* · *credential*
|
|
151
|
+
application-prod.* · appsettings.Production.*
|
|
152
|
+
│
|
|
153
|
+
safe → allow blocked → exit(2) + warn user
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Sub-agent orchestration
|
|
159
|
+
|
|
160
|
+
Khi một command quá nặng cho single context window, orchestrator spawn các sub-agent độc lập (mỗi agent có context window riêng):
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Main session (orchestrator — lightweight, chỉ coordinate)
|
|
164
|
+
├─ spawn spec-agent ──→ /refine-prd analysis → returns findings.yaml
|
|
165
|
+
├─ spawn codegen-agent ──→ /generate-code UC1 → returns src/ changes
|
|
166
|
+
└─ spawn test-agent ──→ /dev-gen-test UC1 → returns self-check test files
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Lợi ích:** main session không bị bloat bởi large file reads · mỗi agent focus 1 task, ít hallucination · parallel cho nhiều UC.
|
|
170
|
+
|
|
171
|
+
Pattern này được hiện thực hóa qua `steps/spawn-agent.md` và tự kích hoạt cho `/generate-bdd`, `/generate-code`, `/dev-gen-test` khi PRD vượt ngưỡng phức tạp (> 3 UC hoặc > 300 dòng). Chi tiết flow + tiết kiệm context: [pipeline.md](pipeline.md#spawn-agentmd--sub-agent-orchestration).
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Directory map
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
spec-driven-dev/
|
|
179
|
+
├── docs/ ← Toàn bộ tài liệu (bắt đầu ở docs/README.md) ◀◀◀
|
|
180
|
+
│ ├── 01-getting-started/
|
|
181
|
+
│ ├── 02-guides/
|
|
182
|
+
│ ├── 03-concepts/ ← file này (architecture.md)
|
|
183
|
+
│ ├── 04-operations/
|
|
184
|
+
│ └── 05-reference/
|
|
185
|
+
├── bin/
|
|
186
|
+
│ ├── build.js ← assembles *.tmpl → *.md
|
|
187
|
+
│ └── index.js ← npm installer + hook installer
|
|
188
|
+
├── commands/
|
|
189
|
+
│ └── *.tmpl ← slash commands
|
|
190
|
+
├── hooks/
|
|
191
|
+
│ ├── data-guard.js ← PreToolUse sensitive file protection
|
|
192
|
+
│ └── settings.json ← hook registration template
|
|
193
|
+
├── modules/
|
|
194
|
+
│ └── {stack}/ ← java-spring, react, …, qc-playwright
|
|
195
|
+
│ ├── module.yaml
|
|
196
|
+
│ ├── stack-profile.yaml
|
|
197
|
+
│ └── architecture-snippets/
|
|
198
|
+
├── rules/
|
|
199
|
+
│ ├── data-protection.md ← what AI must NEVER read/write
|
|
200
|
+
│ └── workflow.md ← general AI behavior rules
|
|
201
|
+
├── skills/
|
|
202
|
+
│ ├── {name}/SKILL.tmpl ← Claude plugin skills
|
|
203
|
+
│ └── qc/<stage>/ ← per-layer QC automation guides
|
|
204
|
+
├── steps/
|
|
205
|
+
│ ├── gate.md ← shared: file resolve + checkpoint
|
|
206
|
+
│ ├── context-loader.md ← shared: load all project context
|
|
207
|
+
│ ├── spawn-agent.md ← shared: sub-agent orchestration
|
|
208
|
+
│ ├── capture-lesson.md ← shared: record a guardrail (/learn etc.)
|
|
209
|
+
│ └── report-footer.md ← shared: standard output format
|
|
210
|
+
└── templates/
|
|
211
|
+
├── project-context.yaml ← consumer project config template
|
|
212
|
+
├── architecture.template.md
|
|
213
|
+
└── platform-guide.template.md
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
> **Build output (gitignored):** `commands/*.md`, `skills/**/SKILL.md`, và `core/`. Consumer-side tester artifacts nằm trong shared spec repo tại `feedback/bug-reports/` và `feedback/bdd-proposals/`.
|
|
217
|
+
|
|
218
|
+
> **Umbrella mode — API contract (tech-docs) là cross-team artifact:** khi `setup.spec_source` được set, tech-docs LUÔN route về `{spec_source}/specs/tech-docs/` (giống PRD / design-spec / domain-knowledge), KHÔNG per-service — để FE/App đọc contract qua spec submodule ở `/generate-code --phase=integration`. Chỉ khi không có `spec_source` thì tech-docs mới nằm per-service.
|
|
219
|
+
|
|
220
|
+
> **Living Docs / trace data location:** `.trace/*.tsv` của mỗi service là **authoritative** và commit trong chính service submodule. Canonical report (`trace-report.json` + TSV mirror namespaced) sinh vào spec module tại `{spec_source}/.living-docs/` (gitignored), cộng một panel mirror cục bộ tại `./.trace`. Chi tiết: [traceability.md](traceability.md#living-docs--canonical-trong-spec-module--panel-mirror).
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Maintenance guide
|
|
225
|
+
|
|
226
|
+
| Muốn thay đổi gì | Sửa file nào |
|
|
227
|
+
|------------------|-------------|
|
|
228
|
+
| Logic của 1 command cụ thể | `commands/{name}.tmpl` |
|
|
229
|
+
| Logic của 1 skill cụ thể | `skills/{name}/SKILL.tmpl` |
|
|
230
|
+
| Gate / checkpoint pattern | `steps/gate.md` |
|
|
231
|
+
| Context loading | `steps/context-loader.md` |
|
|
232
|
+
| Report format | `steps/report-footer.md` |
|
|
233
|
+
| Sensitive file patterns | `hooks/data-guard.js` + `rules/data-protection.md` |
|
|
234
|
+
| Stack-specific rules | `modules/{stack}/stack-profile.yaml` |
|
|
235
|
+
| QC automation rules (per-layer) | `skills/qc/<stage>/` + `modules/qc-playwright/` |
|
|
236
|
+
| Project setup template | `templates/project-context.yaml` |
|
|
237
|
+
| Build system | `bin/build.js` |
|
|
238
|
+
| Installer | `bin/index.js` |
|
|
239
|
+
|
|
240
|
+
Sau khi sửa bất kỳ `.tmpl` hoặc `steps/*.md`:
|
|
241
|
+
```bash
|
|
242
|
+
npm run build # regenerate tất cả *.md
|
|
243
|
+
```
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Concepts](README.md) › Pipeline
|
|
2
|
+
|
|
3
|
+
# Pipeline
|
|
4
|
+
|
|
5
|
+
Vòng đời feature đi qua các phase, mỗi transition có một **AI review gate**:
|
|
6
|
+
**Discovery → PRD → Design-Spec → BDD → Tech-Docs → Code → Dev self-check → QC automation → Tester feedback.** Phần sau mô tả từng phase và **step-architecture model** đằng sau mỗi command.
|
|
7
|
+
|
|
8
|
+
## Mục lục
|
|
9
|
+
|
|
10
|
+
- [Phase overview](#phase-overview)
|
|
11
|
+
- [Workflow chi tiết](#workflow-chi-tiết)
|
|
12
|
+
- [QC automation pipeline (Phase 5b)](#qc-automation-pipeline-phase-5b)
|
|
13
|
+
- [Command internals — step architecture](#command-internals--step-architecture)
|
|
14
|
+
- [gate.md — universal entry](#gatemd--universal-entry)
|
|
15
|
+
- [context-loader.md — context loading sequence](#context-loadermd--context-loading-sequence)
|
|
16
|
+
- [spawn-agent.md — sub-agent orchestration](#spawn-agentmd--sub-agent-orchestration)
|
|
17
|
+
- [report-footer.md — standard output format](#report-footermd--standard-output-format)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase overview
|
|
22
|
+
|
|
23
|
+
| Phase | Who | Commands | Output |
|
|
24
|
+
|-------|-----|----------|--------|
|
|
25
|
+
| **0. Setup** *(one-time)* | Tech Lead | `/setup-ai-first`, `/sync`, `/sync-figma-*` | Config files, submodules, component catalog |
|
|
26
|
+
| **1. Discovery** | PO + AI | `/define-product` | `specs/product-definition/{TICKET-ID}-{slug}.md` |
|
|
27
|
+
| **2. PRD** | AI → SA/PO review | `/generate-prd`, `/refine-prd`, `/review-context` | `specs/prd/{domain}/{TICKET-ID}-{slug}.md` |
|
|
28
|
+
| **2b. Design Spec** *(FE/App only)* | AI → Designer/PO sign-off | `/generate-design-spec` | `specs/design-spec/{domain}/{TICKET-ID}-design-spec-{platform}.md` |
|
|
29
|
+
| **3. BDD Spec** | AI → SA/Dev review | `/generate-bdd`, `/review-context` | `specs/bdd/{domain}/{UC-ID}.feature` |
|
|
30
|
+
| **4. Tech Design** | AI → SA/Lead review | `/generate-tech-docs`, `/review-tech-docs` | `tech-docs/{domain}/{UC-ID}-tech-design.md` |
|
|
31
|
+
| **5. Code** | AI → Dev review | `/generate-code` *(FE: `--phase=ui`/`--phase=integration`)*, `/review-code` | `src/...` |
|
|
32
|
+
| **6. Dev Self-Check** | Dev (own code) | `/dev-gen-test`, `/dev-run-test`, `/dev-smoke-test` | `src/test/...` — dev smoke (`dev_selftest`), tách khỏi QC suite |
|
|
33
|
+
| **6b. QC Automation** *(official QC suite)* | QC | `/qc-analyze` → `/qc-plan` → `/qc-design-test` → `/qc-review` → `/qc-run-test` → `/qc-report` | QC test designs + run results — set `qc_status` (`qc-playwright` module) |
|
|
34
|
+
| **7. Trace** | Tech Lead | `/validate-traces` | Coverage matrix + drift report |
|
|
35
|
+
| **8. Tester Feedback** | QA → PO/Dev | `/report-bug`, `/propose-scenario` → `/sync` surfaces | `{spec}/feedback/...` → bug fix / new scenario / PRD update |
|
|
36
|
+
| **Cross-cutting** | Any role | `/sync`, `/learn`, `/update-framework` | Synced repo · project guardrails · upgraded tooling |
|
|
37
|
+
|
|
38
|
+
> **PRD là platform-agnostic (Option C):** Một PRD phục vụ mọi platform — chỉ mô tả business outcome, không UI/API. FE/App: PRD → Design Spec (2b) → BDD. BE: PRD → BDD (skip 2b). Thêm platform sau không cần đổi PRD.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Workflow chi tiết
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Phase 1: Discovery
|
|
46
|
+
/define-product ──────────→ specs/product-definition/{slug}.md
|
|
47
|
+
(7 phase Q&A: knowledge sync → feature def → user flow → clarify →
|
|
48
|
+
business rules → business logic → AC → validation matrix)
|
|
49
|
+
|
|
50
|
+
Phase 2: PRD
|
|
51
|
+
/generate-prd ────────────→ specs/prd/{domain}/{slug}.md
|
|
52
|
+
/refine-prd ──────────────→ .agent/review/{prd-slug}-findings.yaml
|
|
53
|
+
[Review Board: Accept/Modify/Reject]
|
|
54
|
+
/refine-prd --resume → apply + bump version
|
|
55
|
+
/review-context {prd} ────→ .agent/review/{prd-slug}-review-context-findings.yaml
|
|
56
|
+
--fix (auto-fixable) | Review Board → --resume (apply + bump)
|
|
57
|
+
Checks: banned terms (P1) · ambiguity AC/BR (P2) · conflicts (P3) · completeness (P4)
|
|
58
|
+
✅ APPROVED → Phase 3 · ❌ NEEDS_FIX → fix + re-run
|
|
59
|
+
|
|
60
|
+
Phase 2b/3: Design Spec & BDD
|
|
61
|
+
/generate-design-spec ────→ specs/design-spec/{domain}/{TICKET-ID}-design-spec-{platform}.md
|
|
62
|
+
(FE/App only — PO supplies node-level Figma link ?node-id= per screen;
|
|
63
|
+
AI fetches each frame via Figma MCP. Screen with no readable link → ❌ Missing;
|
|
64
|
+
sign-off + /generate-bdd blocked tới khi mọi screen có link)
|
|
65
|
+
[Designer review + PO sign-off]
|
|
66
|
+
/generate-bdd ────────────→ specs/bdd/{domain}/{UC-ID}.feature
|
|
67
|
+
(apply platform vocabulary: web "clicks" / mobile "taps" / backend "submits a request")
|
|
68
|
+
/review-context {feature} → .agent/review/{uc-id}-review-bdd-findings.yaml
|
|
69
|
+
Checks: PRD coverage (mỗi AC + BR bullet → ≥1 scenario) · Gherkin R1–R10 · compliance C1–C5
|
|
70
|
+
✅ APPROVED → Phase 4
|
|
71
|
+
|
|
72
|
+
Phase 4: Tech Design
|
|
73
|
+
/generate-tech-docs ──────→ tech-docs/{domain}/{UC-ID}-tech-design.md
|
|
74
|
+
(đọc @trace.module → chọn template theo platform; brownfield: reverse-document mode)
|
|
75
|
+
/review-tech-docs ────────→ .agent/review/{uc-id}-tech-review-findings.yaml
|
|
76
|
+
[Review Board] → --resume (apply + bump revision)
|
|
77
|
+
✅ APPROVED → Phase 5
|
|
78
|
+
|
|
79
|
+
Phase 5: Code
|
|
80
|
+
/generate-code ───────────→ src/... (@trace.implements tags)
|
|
81
|
+
FE: --phase=ui (UI + mock adapter, tester-ready) → --phase=integration (real API after sign-off)
|
|
82
|
+
(component enforcement: ✅ existing / ⚠️ TODO blocked / ❌ NEW confirm)
|
|
83
|
+
/review-code ─────────────→ Report: Critical / Major / Minor → fix CRITICAL/MAJOR
|
|
84
|
+
|
|
85
|
+
Phase 5 (cont): Dev Self-Check (dev verifies their OWN code — NOT the official QC suite)
|
|
86
|
+
/dev-gen-test ────────────→ src/test/... (@trace.verifies tags)
|
|
87
|
+
/dev-run-test ────────────→ records dev_selftest (pass/fail/not_run) + dev_selftest_at in trace
|
|
88
|
+
/dev-smoke-test ──────────→ live endpoint check (optional)
|
|
89
|
+
/validate-traces {domain} → coverage matrix + drift detection
|
|
90
|
+
|
|
91
|
+
Phase 5b: QC Automation (the OFFICIAL QC suite — see below)
|
|
92
|
+
|
|
93
|
+
Phase 6: Tester Feedback (QA → PO/Dev, closes the loop)
|
|
94
|
+
/report-bug {UC-ID} ──────→ {spec}/feedback/bug-reports/{BUG-ID}.md → commit+push
|
|
95
|
+
/propose-scenario {UC-ID} → {spec}/feedback/bdd-proposals/{...}.md → commit+push
|
|
96
|
+
PO/Dev: /sync → "📥 New tester feedback" → /fix-bug · add to BDD · update PRD
|
|
97
|
+
|
|
98
|
+
Cross-cutting (any role, anytime)
|
|
99
|
+
/sync ────────────────────→ git pull + submodules + Living Docs + surface feedback
|
|
100
|
+
/learn "AI does X, should Y" → project guardrail (loaded vào mọi command)
|
|
101
|
+
/update-framework ────────→ upgrade framework tooling từ npm
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
> **Large PRD (> 3 UC hoặc > 300 dòng):** `/generate-bdd`, `/generate-code`, `/dev-gen-test` tự chuyển sang **orchestration mode** — spawn 1 sub-agent/UC (xem [spawn-agent.md](#spawn-agentmd--sub-agent-orchestration)).
|
|
105
|
+
|
|
106
|
+
> **Phase 7 — `/validate-traces` statuses:** ✅ OK (code version khớp spec) · ⚠️ DRIFT (code gen từ PRD/BDD cũ → re-generate) · 🔴 GAP (scenario có trong spec nhưng không có code) · — UNTRACKED (scenario ghi nhận nhưng chưa code-gen). Chi tiết: [traceability.md](traceability.md).
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## QC automation pipeline (Phase 5b)
|
|
111
|
+
|
|
112
|
+
Bộ test QC **chính thức** — native pipeline, chạy như một **branch sau khi BDD được approve** (`/review-context` (BDD) APPROVED), song song / sau khi dev `/generate-code`. 6 stage tuần tự, port từ agent của team QC (QC repo nay chỉ còn reference):
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
BDD approved (specs/bdd/*.feature)
|
|
116
|
+
▼
|
|
117
|
+
/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
|
|
118
|
+
(đọc UC/SC, phân tích) chạy test → set qc_status
|
|
119
|
+
▼ ▼
|
|
120
|
+
QC test cases / scripts .trace/*.tsv: qc_status
|
|
121
|
+
(skills/qc/<stage>/ guides) (pass/fail/skip/not_run)
|
|
122
|
+
|
|
123
|
+
Mapping: mỗi QC test → scenario qua @trace.verifies={UC-ID}-SC{N}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
- **Implementation module:** `qc-playwright` (Python + pytest-playwright + Page Object; Playwright Trace + pytest-html, KHÔNG dùng Allure). ĐỘC LẬP với dev implementation module — dùng bởi `/qc-run-test` & `/qc-report`.
|
|
127
|
+
- **Khác biệt với dev self-check:** dev self-check (`/dev-*`) → `dev_selftest` (smoke, dev tự kiểm); QC automation (`/qc-*`) → `qc_status` (coverage QC chính thức). Hai tín hiệu **orthogonal**, cả hai surface trong Living Docs → xem [traceability.md](traceability.md).
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Command internals — step architecture
|
|
132
|
+
|
|
133
|
+
Mỗi command trong `.agent/commands/` được compose từ các **step file** dùng chung trong `.agent/steps/`. Đây là nền tảng — mọi command gọi chúng theo thứ tự trước khi chạy logic riêng.
|
|
134
|
+
|
|
135
|
+
| File | Role | Called by |
|
|
136
|
+
|------|------|-----------|
|
|
137
|
+
| `gate.md` | Universal entry — model check, file resolution, context load, user checkpoint | Mọi command |
|
|
138
|
+
| `context-loader.md` | Multi-step context loading (stack → service routing → conventions → arch → safety → domain → UI → recap) | `gate.md` Step 2 |
|
|
139
|
+
| `spawn-agent.md` | Sub-agent orchestration cho PRD lớn | `generate-bdd`, `generate-code`, `dev-gen-test` |
|
|
140
|
+
| `capture-lesson.md` | Append/refine guardrail trong project lessons file | `learn`, `review-code`, `fix-bug`, `debug` |
|
|
141
|
+
| `report-footer.md` | Standard output format (status badge, artifact list, next command) | Mọi command |
|
|
142
|
+
|
|
143
|
+
### gate.md — universal entry
|
|
144
|
+
|
|
145
|
+
Mọi command bắt đầu ở đây, theo thứ tự:
|
|
146
|
+
|
|
147
|
+
| Step | What it does |
|
|
148
|
+
|------|-------------|
|
|
149
|
+
| **Step 0** | Sub-agent mode check — nếu `$ARGUMENTS` là JSON payload với `_agent_mode: true`, skip Step 1–3, dùng slim context trực tiếp |
|
|
150
|
+
| **Step 0-B** | Model check — prompt switch sang `claude-opus` cho generation phức tạp; `S` để skip |
|
|
151
|
+
| **Step 1** | Resolve target file từ `$ARGUMENTS`; nếu thiếu, liệt kê candidate và hỏi user chọn |
|
|
152
|
+
| **Step 2** | Execute `context-loader.md` — load toàn bộ project context vào working memory |
|
|
153
|
+
| **Step 3** | CHECKPOINT — hiển thị summary (target file, stack, module, domains), chờ `Y` |
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
CHECKPOINT
|
|
157
|
+
-----------
|
|
158
|
+
Target : specs/prd/auth/FEAT-042-login.md
|
|
159
|
+
Project : My App
|
|
160
|
+
Tech stack : TypeScript / React 18
|
|
161
|
+
Module : react
|
|
162
|
+
Domains : auth, profile
|
|
163
|
+
|
|
164
|
+
Proceed? (Y/N)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### context-loader.md — context loading sequence
|
|
168
|
+
|
|
169
|
+
Load toàn bộ project context vào working memory theo thứ tự ưu tiên nghiêm ngặt:
|
|
170
|
+
|
|
171
|
+
| Step | Priority | What loads |
|
|
172
|
+
|------|----------|-----------|
|
|
173
|
+
| 1 | PROJECT-CONFIG | `project-context.yaml` → stack, conventions, domains, services, paths |
|
|
174
|
+
| 1.5 | SERVICE ROUTING | *(umbrella only)* detect active domain, route `specs_dir`/`tech_docs_dir` tới service submodule, store `service_root` |
|
|
175
|
+
| 1.6 | SERVICE CONVENTIONS | *(umbrella only)* load `{service_root}/.agent/project-context.yaml` → override `test_command`, `build_command`, `paths.trace_dir` |
|
|
176
|
+
| 2 | PROJECT-CONFIG | `.agent/modules/{module}/stack-profile.yaml` → layer patterns |
|
|
177
|
+
| 3 | **CRITICAL** | `CLAUDE.md` → architecture layers, coding standards, naming |
|
|
178
|
+
| 4 | SAFETY | `.agent/rules/data-protection.md` → sensitive file patterns |
|
|
179
|
+
| 5 | DOMAIN | `business-dictionary.md` → canonical + banned terms |
|
|
180
|
+
| 6 | DOMAIN | `core-entities.md` → entity catalog |
|
|
181
|
+
| 6.7 | **GUARDRAILS** | `lessons_file` → mistakes tích lũy (via `/learn`) loaded như hard constraints |
|
|
182
|
+
| 6-B | UI COMPONENTS | `figma-components/{module}.md` → Figma name → code component + import path |
|
|
183
|
+
| 6-C | UI TOKENS | `figma-tokens.md` → design tokens |
|
|
184
|
+
| 7 | **RECAP** | `[CTX LOADED]` block — lock critical facts vào working memory |
|
|
185
|
+
|
|
186
|
+
**Anti-lost-in-middle:** critical facts (Step 3) load đầu tiên; RECAP (Step 7) restate ở cuối để fresh khi generation bắt đầu (recency effect).
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
[CTX LOADED]
|
|
190
|
+
Stack : TypeScript / React 18 / PostgreSQL
|
|
191
|
+
Layers : Controller → Facade → Service → Repository
|
|
192
|
+
Services : 2 services: web-admin(react), api-backend(java-spring)
|
|
193
|
+
Svc Root : api-backend — conventions + trace_dir loaded from service config
|
|
194
|
+
Dict : loaded — 42 canonical terms, 8 banned terms
|
|
195
|
+
Entities : loaded — User, Order, Product
|
|
196
|
+
Lessons : loaded — 6 guardrails
|
|
197
|
+
Components : loaded — web-admin (react) — 23 components mapped
|
|
198
|
+
Tokens : loaded — colors: 18, spacing: 12, typography: 6
|
|
199
|
+
Status : FULL
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Status values: `FULL` · `PARTIAL — missing: {list}` · `MINIMAL` (chỉ project-context.yaml).
|
|
203
|
+
|
|
204
|
+
### spawn-agent.md — sub-agent orchestration
|
|
205
|
+
|
|
206
|
+
Khi PRD vượt ngưỡng phức tạp, `generate-bdd`, `generate-code`, `dev-gen-test` tự chuyển từ single-session sang orchestration mode.
|
|
207
|
+
|
|
208
|
+
**Complexity thresholds:**
|
|
209
|
+
|
|
210
|
+
| Signal | Threshold | Action |
|
|
211
|
+
|--------|-----------|--------|
|
|
212
|
+
| UC count trong PRD | > 3 UC | Spawn 1 sub-agent / UC |
|
|
213
|
+
| PRD length | > 300 dòng | Spawn agents bất kể UC count |
|
|
214
|
+
|
|
215
|
+
**Orchestration flow:**
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
Main session (orchestrator)
|
|
219
|
+
├─ Step A: Build slim context JSON (stack + active_service + active_module + paths + arch summary + banned_terms)
|
|
220
|
+
├─ Step B: Scan PRD → extract UC list [{uc_id, line_start, line_end}]
|
|
221
|
+
├─ Step C: Announce plan → "Spawning N sub-agents..."
|
|
222
|
+
├─ Step D: Spawn 1 sub-agent / UC (parallel)
|
|
223
|
+
│ mỗi agent nhận: { _agent_mode: true, uc_id, target_file, uc_section, context }
|
|
224
|
+
│ mỗi agent đọc CHỈ UC section của mình (không phải full PRD)
|
|
225
|
+
└─ Step E: Collect results → merge → { uc_id, files_created, status, errors }
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Tiết kiệm context window:**
|
|
229
|
+
|
|
230
|
+
| Mode | What loads per agent |
|
|
231
|
+
|------|---------------------|
|
|
232
|
+
| Single session (≤ 3 UC) | Full context + full PRD + all UCs |
|
|
233
|
+
| Orchestrator | Slim context + UC heading list only |
|
|
234
|
+
| Each sub-agent | Slim context + **1 UC section only** |
|
|
235
|
+
|
|
236
|
+
### report-footer.md — standard output format
|
|
237
|
+
|
|
238
|
+
Mọi command kết thúc với footer này:
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
---
|
|
242
|
+
Status : ✅ Complete
|
|
243
|
+
Output Artifacts:
|
|
244
|
+
created specs/bdd/auth/FEAT-042-UC1-login.feature (3 scenarios)
|
|
245
|
+
updated .trace/FEAT-042.tsv
|
|
246
|
+
Next : /review-context specs/bdd/auth/FEAT-042-UC1-login.feature
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Status badges:** `✅ Complete` · `⚠️ Warnings` · `❌ Failed`. Field **Next** luôn gợi ý command tiếp theo hợp lý — không phải tra cứu.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Concepts](README.md) › Traceability
|
|
2
|
+
|
|
3
|
+
# Traceability & Living Docs
|
|
4
|
+
|
|
5
|
+
Mỗi artifact link tới mọi artifact khác qua `@trace.*` tags, và trạng thái coverage/drift được tổng hợp vào **trace TSV** rồi surface trong **Living Docs**. Đây là cách framework đảm bảo *mọi dòng code trace về một scenario*, và phân biệt hai tín hiệu test độc lập: **`dev_selftest`** (dev tự kiểm) vs **`qc_status`** (QC chính thức).
|
|
6
|
+
|
|
7
|
+
## Mục lục
|
|
8
|
+
|
|
9
|
+
- [Artifact chain & @trace tags](#artifact-chain--trace-tags)
|
|
10
|
+
- [Trace TSV — coverage & drift](#trace-tsv--coverage--drift)
|
|
11
|
+
- [Hai tín hiệu test: dev_selftest vs qc_status](#hai-tín-hiệu-test-dev_selftest-vs-qc_status)
|
|
12
|
+
- [Living Docs — canonical trong spec-module + panel mirror](#living-docs--canonical-trong-spec-module--panel-mirror)
|
|
13
|
+
- [/validate-traces](#validate-traces)
|
|
14
|
+
|
|
15
|
+
> Schema TSV đầy đủ (mọi cột) và full danh sách trace tag: xem [../05-reference/trace-schema.md](../05-reference/trace-schema.md). Trang này tập trung vào **khái niệm** và cách hai tín hiệu hoạt động.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Artifact chain & @trace tags
|
|
20
|
+
|
|
21
|
+
Mỗi artifact mang `@trace.*` metadata liên kết về artifact trước nó:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
product-definition.md
|
|
25
|
+
└─► PRD.md (Service, Module trong metadata; @trace.domain, @trace.status)
|
|
26
|
+
└─► {UC-ID}.feature (@trace.service, @trace.module, @trace.prd_version)
|
|
27
|
+
└─► tech-design.md (@trace.bdd_version)
|
|
28
|
+
└─► src/ code (@trace.implements, @trace.prd_version, @trace.bdd_version)
|
|
29
|
+
└─► src/test/ (@trace.verifies, @trace.service)
|
|
30
|
+
└─► .trace/{UC-ID}.tsv (drift tracking)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Các trace field quan trọng:**
|
|
34
|
+
|
|
35
|
+
| Field | Vị trí | Ý nghĩa |
|
|
36
|
+
|-------|--------|---------|
|
|
37
|
+
| `@trace.domain` | PRD frontmatter | Domain của feature (auth, payment, …) — route vào đúng service submodule |
|
|
38
|
+
| `@trace.status` | PRD frontmatter | `draft` / `approved` — dev team chỉ code khi `approved` |
|
|
39
|
+
| `@trace.service` / `@trace.module` | BDD / Tech Doc header | Service + module sẽ implement |
|
|
40
|
+
| `@trace.prd_version` / `@trace.bdd_version` | BDD / code / test | Version của spec mà artifact được sinh từ — base cho drift detection |
|
|
41
|
+
| `@trace.implements` | Code comment | Scenario mà code này implement: `={UC-ID}-SC{N}` |
|
|
42
|
+
| `@trace.verifies` | Test / QC test | Scenario mà test này verify: `={UC-ID}` hoặc `={UC-ID}-SC{N}` |
|
|
43
|
+
| `@trace.api_source: existing` | BDD header | Brownfield — API đã tồn tại, contract lấy từ PRD |
|
|
44
|
+
|
|
45
|
+
Ví dụ tags trong `.feature`, code, và test:
|
|
46
|
+
|
|
47
|
+
```gherkin
|
|
48
|
+
# @trace.id: FEAT-001-UC1
|
|
49
|
+
# @trace.service: web-admin
|
|
50
|
+
# @trace.module: react
|
|
51
|
+
# @trace.prd_version: 1.2
|
|
52
|
+
# @trace.bdd_version: 3
|
|
53
|
+
```
|
|
54
|
+
```java
|
|
55
|
+
// @trace.implements=FEAT-001-UC1-SC2 // @trace.verifies=FEAT-001-UC1
|
|
56
|
+
// @trace.prd_version=1.2 // @trace.service=api-backend
|
|
57
|
+
// @trace.bdd_version=3 // @trace.test_type=integration
|
|
58
|
+
// @trace.tech_doc_revision=2
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Trace TSV — coverage & drift
|
|
64
|
+
|
|
65
|
+
`.trace/{UC-ID}.tsv` là nguồn sự thật per-scenario về trạng thái implement/test. Được **ghi** bởi `/generate-bdd`, `/generate-code`, `/dev-gen-test`, `/qc-run-test`, và **update** bởi `/validate-traces`. File `.trace/*.tsv` authoritative **được commit** trong chính service submodule (không phải mirror).
|
|
66
|
+
|
|
67
|
+
Status coverage per scenario:
|
|
68
|
+
|
|
69
|
+
| Status | Meaning |
|
|
70
|
+
|--------|---------|
|
|
71
|
+
| ✅ OK | Code version khớp spec version |
|
|
72
|
+
| ⚠️ DRIFT | Code gen từ PRD/BDD cũ hơn — re-generate |
|
|
73
|
+
| 🔴 GAP | Scenario có trong spec nhưng không tìm thấy code implement |
|
|
74
|
+
| — UNTRACKED | Scenario ghi nhận nhưng chưa code-gen |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Hai tín hiệu test: dev_selftest vs qc_status
|
|
79
|
+
|
|
80
|
+
Trace TSV mang **hai cột độc lập**, cả hai **orthogonal** với cột `status` (coverage) ở trên:
|
|
81
|
+
|
|
82
|
+
| Cột | Set bởi | Giá trị | Ý nghĩa |
|
|
83
|
+
|-----|---------|---------|---------|
|
|
84
|
+
| `dev_selftest` (+ `dev_selftest_at`) | `/dev-run-test` | `pass` / `fail` / `not_run` | **Dev self-check** — dev tự chạy bộ self-check test của mình trên scenario đó. **KHÔNG** phải coverage QC chính thức. |
|
|
85
|
+
| `qc_status` (+ `qc_run_at`) | `/qc-run-test` | `pass` / `fail` / `skip` / `not_run` | **QC chính thức** — kết quả native QC pipeline (do QC chạy, không phải dev), keyed theo `@trace.verifies={UC-ID}-SC{N}`. |
|
|
86
|
+
|
|
87
|
+
- **`dev_selftest`** là tín hiệu để QC **thấy** rằng developer đã smoke/self-check qua scenario đó. `dev_selftest: pass` chỉ nghĩa "dev đã tự kiểm" — không phải tuyên bố coverage.
|
|
88
|
+
- **`qc_status`** là coverage QC chính thức từ pipeline `/qc-analyze → … → /qc-run-test → /qc-report` (xem [pipeline.md](pipeline.md#qc-automation-pipeline-phase-5b)). `/qc-run-test` dùng stack module `qc-playwright`, độc lập với dev implementation module.
|
|
89
|
+
- Hai tín hiệu **sit side by side** trong Living Docs để dễ phân biệt hai luồng. Tester vẫn nên verify độc lập theo BDD + PRD ở phần chưa được automation cover.
|
|
90
|
+
|
|
91
|
+
> Phân biệt rõ: `/dev-*` (dev self-check, `dev_selftest`) ≠ `/qc-*` (official QC suite, `qc_status`). Đừng coi output của `/dev-*` là coverage chính thức.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Living Docs — canonical trong spec-module + panel mirror
|
|
96
|
+
|
|
97
|
+
Living Docs (VS Code panel) đọc trace TSV và hiển thị traceability health toàn dự án:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
101
|
+
│ PRDs Use Cases Scenarios Code Cov. Test Cov. Drift Gap │
|
|
102
|
+
│ 19 86 1077 93% 89% 212 93 │
|
|
103
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- Drill down: PRD → UC → per-scenario table (Spec ver, Gen ver, Code, Tests, **Dev Self-Check**, **QC Status**, Status)
|
|
107
|
+
- Status badges: ✅ OK · ⚠️ DRIFT · 🔴 GAP · — UNTRACKED · filter theo domain/PRD status/doc status · search theo UC/SC ID.
|
|
108
|
+
|
|
109
|
+
**Ba nơi chứa trace data — phân biệt authoritative vs mirror:**
|
|
110
|
+
|
|
111
|
+
| Vị trí | Vai trò | Commit? |
|
|
112
|
+
|--------|---------|---------|
|
|
113
|
+
| `{service}/.trace/*.tsv` | **Authoritative** — nguồn sự thật per-service | ✅ Committed trong service submodule |
|
|
114
|
+
| `{spec_source}/.living-docs/` (`trace-report.json` + TSV mirror namespaced) | **Canonical report** — tổng hợp cross-team, regenerate bởi `/sync` hoặc `/validate-traces` | ❌ Gitignored |
|
|
115
|
+
| `./.trace` của workspace hiện tại | **Panel mirror** — giữ Living Docs panel không trống kể cả khi mở Claude Code/VS Code bên trong một service submodule đơn lẻ | ❌ Gitignored |
|
|
116
|
+
|
|
117
|
+
**Vì sao canonical nằm ở spec module?** Spec module được mount vào mọi umbrella/service workspace, nên nó là nơi chung luôn resolve được cho cross-team dashboard. Vấn đề trước đây: panel mở ở umbrella root (hoặc một service submodule đơn lẻ) sẽ TRỐNG nếu không có mirror — vì TSV authoritative nằm rải rác trong từng service submodule. Panel mirror `./.trace` giải quyết case mở single service.
|
|
118
|
+
|
|
119
|
+
Thêm vào `.gitignore` (cả hai là mirror read-only, không commit):
|
|
120
|
+
```
|
|
121
|
+
# spec module
|
|
122
|
+
.living-docs/
|
|
123
|
+
# workspace / umbrella root (mirror)
|
|
124
|
+
.trace/
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> **Prerequisite cho data chính xác:** mỗi service submodule cần `.agent/project-context.yaml` với `paths.trace_dir` configure đúng. Thiếu → framework không biết ghi trace TSV về đâu → panel thiếu data.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## /validate-traces
|
|
132
|
+
|
|
133
|
+
Chạy `/validate-traces {domain}` bất cứ lúc nào (đặc biệt **sau mỗi codegen session trong umbrella mode**) để:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
/validate-traces {domain}
|
|
137
|
+
→ Reads .trace/*.tsv authoritative (committed) trong từng service:
|
|
138
|
+
user-service/.trace/, order-service/.trace/, ...
|
|
139
|
+
→ Writes canonical trace-report.json + TSV mirror → {spec_source}/.living-docs/ (gitignored)
|
|
140
|
+
→ Writes panel mirror → ./.trace của workspace hiện tại (non-empty khi mở single service)
|
|
141
|
+
→ Living Docs panel cập nhật ngay
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Báo cáo: scenario nào chưa có code (GAP) · code nào gen từ PRD/BDD cũ (DRIFT) · broken links / orphan BDD (không có PRD) / dead code traces · coverage % per domain.
|
|
145
|
+
|
|
146
|
+
**Khi nào chạy:** sau refactor đổi tên file/function · sau khi PO cập nhật PRD (version mới) · trước PR lớn · khi CI báo trace validation fail · sau mỗi codegen session (umbrella).
|
|
147
|
+
|
|
148
|
+
> **Nguyên tắc:** không merge code khi traces broken — fix traces trước. `/sync` cũng regenerate Living Docs như một bước phụ; `/validate-traces` là lệnh chuyên trách kiểm tra trace chain.
|