@educa-corp/sdd-framework 0.2.4 → 0.2.5
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/generate-architecture.md +706 -0
- package/commands/generate-architecture.tmpl +194 -0
- package/commands/generate-code.md +16 -2
- package/commands/generate-code.tmpl +16 -2
- package/commands/generate-tech-docs.md +19 -0
- package/commands/generate-tech-docs.tmpl +19 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/generate-architecture.md +706 -0
- package/core/commands/generate-code.md +16 -2
- package/core/commands/generate-tech-docs.md +19 -0
- package/core/skills/setup-ai-first/SKILL.md +12 -4
- package/core/templates/architecture.template.md +392 -111
- package/docs/01-getting-started/installation.md +47 -112
- package/docs/01-getting-started/quickstart.md +58 -72
- package/docs/01-getting-started/what-is-sdd.md +75 -0
- package/docs/02-concepts/architecture.md +109 -0
- package/docs/02-concepts/glossary.md +87 -0
- package/docs/02-concepts/overview.md +93 -0
- package/docs/02-concepts/pipeline-steps/00-setup.md +102 -0
- package/docs/02-concepts/pipeline-steps/01-discovery.md +129 -0
- package/docs/02-concepts/pipeline-steps/02-specification.md +130 -0
- package/docs/02-concepts/pipeline-steps/03-design-spec.md +90 -0
- package/docs/02-concepts/pipeline-steps/04-bdd.md +120 -0
- package/docs/02-concepts/pipeline-steps/05-tech-docs.md +101 -0
- package/docs/02-concepts/pipeline-steps/06-code.md +119 -0
- package/docs/02-concepts/pipeline-steps/07-dev-selftest.md +92 -0
- package/docs/02-concepts/pipeline-steps/08-qc-automation.md +102 -0
- package/docs/02-concepts/pipeline-steps/09-validate-traces.md +104 -0
- package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +105 -0
- package/docs/02-concepts/pipeline-steps/README.md +92 -0
- package/docs/02-concepts/roles-and-hitl.md +73 -0
- package/docs/02-concepts/traceability.md +94 -0
- package/docs/03-guides/architect.md +98 -0
- package/docs/03-guides/developer.md +76 -0
- package/docs/03-guides/product-owner.md +68 -0
- package/docs/03-guides/tester-qa.md +70 -0
- package/docs/04-reference/commands.md +105 -0
- package/docs/04-reference/configuration.md +94 -0
- package/docs/04-reference/model-selection.md +68 -0
- package/docs/04-reference/modules.md +74 -0
- package/docs/04-reference/trace-schema.md +93 -0
- package/docs/README.md +29 -40
- package/docs/explain/00-setup-ai-first.md +77 -0
- package/docs/explain/00b-generate-architecture.md +76 -0
- package/docs/explain/01-define-product.md +79 -0
- package/docs/explain/02-generate-prd.md +78 -0
- package/docs/explain/03-refine-prd.md +86 -0
- package/docs/explain/04-review-context.md +100 -0
- package/docs/explain/05-generate-design-spec.md +73 -0
- package/docs/explain/06-generate-bdd.md +77 -0
- package/docs/explain/07-generate-tech-docs.md +71 -0
- package/docs/explain/08-review-tech-docs.md +79 -0
- package/docs/explain/09-generate-code.md +78 -0
- package/docs/explain/10-review-code.md +70 -0
- package/docs/explain/11-map-testids.md +69 -0
- package/docs/explain/12-dev-gen-test.md +66 -0
- package/docs/explain/13-dev-run-test.md +69 -0
- package/docs/explain/14-dev-smoke-test.md +67 -0
- package/docs/explain/15-qc-analyze.md +68 -0
- package/docs/explain/16-qc-plan.md +61 -0
- package/docs/explain/17-qc-design-test.md +61 -0
- package/docs/explain/18-qc-review.md +59 -0
- package/docs/explain/19-qc-run-test.md +67 -0
- package/docs/explain/20-qc-report.md +61 -0
- package/docs/explain/21-validate-traces.md +68 -0
- package/docs/explain/22-generate-spec-manifest.md +60 -0
- package/docs/explain/23-fix-bug.md +69 -0
- package/docs/explain/24-debug.md +61 -0
- package/docs/explain/25-report-bug.md +65 -0
- package/docs/explain/26-propose-scenario.md +63 -0
- package/docs/explain/27-learn.md +65 -0
- package/docs/explain/28-sync.md +70 -0
- package/docs/explain/29-update-framework.md +65 -0
- package/docs/explain/README.md +134 -0
- package/package.json +1 -1
- package/skills/setup-ai-first/SKILL.md +12 -4
- package/skills/setup-ai-first/SKILL.tmpl +12 -4
- package/templates/architecture.template.md +392 -111
- package/docs/01-getting-started/README.md +0 -19
- package/docs/01-getting-started/core-concepts.md +0 -102
- package/docs/02-guides/README.md +0 -26
- package/docs/02-guides/bdd-input-checklist.md +0 -68
- package/docs/02-guides/developer/README.md +0 -49
- package/docs/02-guides/developer/bdd-and-trace.md +0 -126
- package/docs/02-guides/developer/commands.md +0 -76
- package/docs/02-guides/developer/pr-checklist.md +0 -16
- package/docs/02-guides/developer/scenarios.md +0 -460
- package/docs/02-guides/developer/workflow.md +0 -121
- package/docs/02-guides/prd-input-checklist.md +0 -94
- package/docs/02-guides/product-owner/README.md +0 -81
- package/docs/02-guides/product-owner/commands.md +0 -30
- package/docs/02-guides/product-owner/handoff-checklist.md +0 -42
- package/docs/02-guides/product-owner/prd-writing-rules.md +0 -45
- package/docs/02-guides/product-owner/scenarios.md +0 -438
- package/docs/02-guides/tech-docs-input-checklist.md +0 -109
- package/docs/02-guides/tester/README.md +0 -75
- package/docs/02-guides/tester/bug-reporting.md +0 -117
- package/docs/02-guides/tester/qc-automation.md +0 -165
- package/docs/02-guides/tester/reading-specs.md +0 -79
- package/docs/02-guides/tester/scenarios.md +0 -186
- package/docs/02-guides/tester/spec-manifest.md +0 -130
- package/docs/02-guides/tester/test-checklist.md +0 -31
- package/docs/02-guides/tester/workflow.md +0 -77
- package/docs/03-concepts/README.md +0 -20
- package/docs/03-concepts/architecture.md +0 -248
- package/docs/03-concepts/mechanisms-explained.md +0 -124
- package/docs/03-concepts/pipeline.md +0 -278
- package/docs/03-concepts/traceability.md +0 -152
- package/docs/04-operations/README.md +0 -33
- package/docs/04-operations/bug-flow.md +0 -364
- package/docs/04-operations/publishing.md +0 -154
- package/docs/04-operations/sync-and-update.md +0 -522
- package/docs/05-reference/README.md +0 -34
- package/docs/05-reference/command-cheatsheet.md +0 -147
- package/docs/05-reference/commands.md +0 -234
- package/docs/05-reference/model-selection.md +0 -74
- package/docs/05-reference/modules.md +0 -110
- package/docs/05-reference/trace-schema.md +0 -154
- package/docs/06-commands/README.md +0 -75
- package/docs/06-commands/explain-debug.md +0 -32
- package/docs/06-commands/explain-define-product.md +0 -43
- package/docs/06-commands/explain-dev-gen-test.md +0 -28
- package/docs/06-commands/explain-dev-run-test.md +0 -24
- package/docs/06-commands/explain-dev-smoke-test.md +0 -25
- package/docs/06-commands/explain-fix-bug.md +0 -28
- package/docs/06-commands/explain-generate-bdd.md +0 -45
- package/docs/06-commands/explain-generate-code.md +0 -53
- package/docs/06-commands/explain-generate-design-spec.md +0 -54
- package/docs/06-commands/explain-generate-prd.md +0 -45
- package/docs/06-commands/explain-generate-spec-manifest.md +0 -20
- package/docs/06-commands/explain-generate-tech-docs.md +0 -56
- package/docs/06-commands/explain-learn.md +0 -21
- package/docs/06-commands/explain-map-testids.md +0 -28
- package/docs/06-commands/explain-propose-scenario.md +0 -24
- package/docs/06-commands/explain-qc-analyze.md +0 -22
- package/docs/06-commands/explain-qc-design-test.md +0 -20
- package/docs/06-commands/explain-qc-plan.md +0 -21
- package/docs/06-commands/explain-qc-report.md +0 -23
- package/docs/06-commands/explain-qc-review.md +0 -24
- package/docs/06-commands/explain-qc-run-test.md +0 -27
- package/docs/06-commands/explain-refine-prd.md +0 -51
- package/docs/06-commands/explain-report-bug.md +0 -24
- package/docs/06-commands/explain-review-code.md +0 -45
- package/docs/06-commands/explain-review-context.md +0 -68
- package/docs/06-commands/explain-review-tech-docs.md +0 -45
- package/docs/06-commands/explain-setup-ai-first.md +0 -25
- package/docs/06-commands/explain-sync.md +0 -24
- package/docs/06-commands/explain-update-framework.md +0 -22
- package/docs/06-commands/explain-validate-traces.md +0 -25
- package/docs/t-sample.md +0 -826
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# /generate-architecture — Sinh / làm mới Architecture Context (SSOT)
|
|
2
|
+
|
|
3
|
+
> **Mô hình phạm vi:** MỘT `architecture.md` cho mỗi codebase — nguồn chân lý (SSOT)
|
|
4
|
+
> cross-cutting cho kiến trúc, dùng cho cả AI code-gen lẫn ops. Lệnh **thu thập từ mọi
|
|
5
|
+
> nguồn sẵn có (config + tài liệu + code) → phỏng vấn lấp chỗ trống → draft → bàn giao
|
|
6
|
+
> cho người verify**. Tách khỏi `/setup-ai-first` để SA chạy lại nhiều lần (refresh /
|
|
7
|
+
> điền dần). Nó KHÔNG tự ký duyệt — con người là trust-gate.
|
|
8
|
+
>
|
|
9
|
+
> **Triết lý điền:** ưu tiên **hút cái đã biết**, chỉ **hỏi cái chưa biết**. SA không phải
|
|
10
|
+
> điền tay 140 ô — chỉ trả lời vài câu dễ hiểu về phần chưa nguồn nào trả lời được.
|
|
11
|
+
>
|
|
12
|
+
> **Khác `/generate-tech-docs`:** tech-docs là thiết kế **per-PRD/feature**; lệnh này mô tả
|
|
13
|
+
> **kiến trúc toàn hệ thống dùng chung**. Chi tiết per-repo (thư mục, namespace) vẫn ở
|
|
14
|
+
> `.ai-project-guide.md` / CLAUDE.md của từng repo — lệnh này chỉ lo phần cross-cutting.
|
|
15
|
+
|
|
16
|
+
## Gate
|
|
17
|
+
{{include:steps/gate.md}}
|
|
18
|
+
|
|
19
|
+
*Với lệnh này — **bỏ qua Gate Bước 1** (không có input feature-file). `$ARGUMENTS` là **tuỳ chọn**, có thể gồm:
|
|
20
|
+
- **service path** (chế độ umbrella, vd `user-service`) → target là `architecture.md` của service đó, scan giới hạn trong `{service}/`.
|
|
21
|
+
- `--from=<path/glob,...>` → danh sách **tài liệu có sẵn** để hút nội dung (README, wiki, ADR, doc thiết kế cũ). Vd `--from=docs/**/*.md,README.md`.
|
|
22
|
+
- `--section=<slug>` → chỉ lấp/refresh **đúng một mục** (điền dần). Danh sách slug ở Bước 5.
|
|
23
|
+
- `--interview` → ép chạy phỏng vấn kể cả brownfield.
|
|
24
|
+
Vẫn chạy Bước 0-B (model check) và Context Loader.*
|
|
25
|
+
|
|
26
|
+
## Context
|
|
27
|
+
{{include:steps/context-loader.md}}
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Bước 1 — Phân giải target, chế độ & tham số
|
|
32
|
+
|
|
33
|
+
1. **Target file:**
|
|
34
|
+
- Mặc định → `{paths.specs_dir}/architecture.md` (thường `specs/architecture.md`). Umbrella: context-loader đã trỏ `specs_dir`/`service_root` về service active → target nằm cạnh code service.
|
|
35
|
+
- `$ARGUMENTS` có **service path** → `target = {service}/specs/architecture.md`, scan giới hạn trong `{service}/`.
|
|
36
|
+
- **Umbrella mà không truyền service path** → DỪNG, hỏi: *"Umbrella không có một stack đơn. Chạy `/generate-architecture {service-path}` cho từng service."*
|
|
37
|
+
|
|
38
|
+
2. **Parse cờ:** `--from` (danh sách nguồn tài liệu), `--section=<slug>` (chế độ 1-mục → nhảy Bước 5), `--interview` (ép phỏng vấn).
|
|
39
|
+
|
|
40
|
+
3. **Chế độ code:** brownfield (có build/manifest: `pom.xml`/`*.csproj`/`package.json`/`go.mod`/`pubspec.yaml`/`build.gradle`/`Cargo.toml`) vs greenfield (không có code để scan).
|
|
41
|
+
|
|
42
|
+
4. **File đã tồn tại?**
|
|
43
|
+
- Chưa → tạo mới.
|
|
44
|
+
- `verified_by: AI-draft` (hoặc trống) → được regenerate (xác nhận: *"architecture.md đang là AI-draft chưa verify — regenerate đè lên? (Y/N)"*).
|
|
45
|
+
- `verified_by: {người thật}` → **KHÔNG đè** → nhảy **Bước 6** (refresh có kiểm soát).
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Bước 2 — Thu thập từ mọi nguồn (điền cái đã biết)
|
|
50
|
+
|
|
51
|
+
Gom dữ kiện cho từng section/field theo **thứ tự ưu tiên**. Với mỗi giá trị điền được, ghi lại **nguồn** + **độ chắc chắn** (chắc / cần xác nhận). KHÔNG bịa ngoài bằng chứng.
|
|
52
|
+
|
|
53
|
+
**Thứ tự nguồn:**
|
|
54
|
+
|
|
55
|
+
1. **Config dự án** (luôn có) — đọc `project-context.yaml` + `CLAUDE.md`:
|
|
56
|
+
| Field template | Nguồn |
|
|
57
|
+
|---|---|
|
|
58
|
+
| Tech Stack (language/framework/db/build/test) | `project-context.yaml → tech_stack`, `conventions` |
|
|
59
|
+
| Các tầng + rules kiến trúc | `CLAUDE.md §2` |
|
|
60
|
+
| Quy ước đặt tên, response wrapper, error handling | `CLAUDE.md §3, §5` |
|
|
61
|
+
| Quy ước Git/DB nếu có | `CLAUDE.md §6, §7` |
|
|
62
|
+
|
|
63
|
+
2. **Tài liệu có sẵn** (nếu có `--from`, hoặc hỏi 1 lần: *"Có tài liệu kiến trúc/thiết kế sẵn không? Trỏ path — README, wiki, ADR, doc cũ. Enter để bỏ qua."*) — đọc từng tài liệu, rút fact và **map vào section/field** tương ứng của template. Ghi chú nguồn theo dạng `<!-- nguồn: {đường-dẫn} -->` ở section được điền.
|
|
64
|
+
|
|
65
|
+
3. **Scan code** (chỉ brownfield) — quét có mục tiêu:
|
|
66
|
+
| Nguồn quét | Section suy ra |
|
|
67
|
+
|---|---|
|
|
68
|
+
| build/manifest (dependencies) | **Tech Stack** |
|
|
69
|
+
| cây thư mục + tên project/layer (`*.Domain`/`*.Application`… hoặc `controller/service/repository`) | **Các tầng** + chiều phụ thuộc |
|
|
70
|
+
| DI registration (`Program.cs`/`Startup`/`*ServiceExtensions`) | **Đăng ký DI**, danh mục service/repo, **Ranh giới truy cập dữ liệu** |
|
|
71
|
+
| middleware / filter / interceptor | **Luồng Xác thực**, correlation-id, gateway |
|
|
72
|
+
| `appsettings*`/`application.yml`/`.env.example` | **Caching** (TTL), **Event Bus/Sharding**, **Feature Toggle** (chỉ ghi *tên* cấu hình, KHÔNG copy secret) |
|
|
73
|
+
| response wrapper / base controller / global exception handler | **Response API chuẩn** |
|
|
74
|
+
| entity/model (DbSet/@Entity) vs POCO/DTO từ API client | **Phân loại Entity**, **Identity Resolution** (nếu có external-id) |
|
|
75
|
+
| CI (`.github/workflows`, `Jenkinsfile`…), Dockerfile, k8s | **Triển khai & DevOps** |
|
|
76
|
+
|
|
77
|
+
**Xử lý xung đột:** nếu ≥2 nguồn nói khác nhau (vd doc cũ "Redis TTL 10m" nhưng config "5m") → **KHÔNG tự chọn**. Đưa vào danh sách cần hỏi (Bước 3) hoặc gắn ⚠️ vào draft. Quy tắc chung: fact máy móc (tech stack, TTL, DI) ưu tiên **code/config**; phần ý đồ/narrative (data flow, rules, NFR) ưu tiên **tài liệu**.
|
|
78
|
+
|
|
79
|
+
**Sản phẩm Bước 2:** với mỗi section — trạng thái `đã-điền` (kèm nguồn) / `còn-trống` / `xung-đột`. Đây là đầu vào cho phỏng vấn (chỉ hỏi phần còn-trống/xung-đột).
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Bước 3 — Phỏng vấn thích ứng (chỉ hỏi cái chưa biết)
|
|
84
|
+
|
|
85
|
+
### 3.0 — Báo cáo coverage trước khi hỏi
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Đã điền từ config/tài liệu/code : {X}/{tổng} mục
|
|
89
|
+
Còn cần hỏi : §{A}, §{B}, §{C}
|
|
90
|
+
Xung đột cần xác nhận : §{D} (nguồn 1 nói …, nguồn 2 nói …)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 3.1 — Cách đặt câu hỏi (BẮT BUỘC: dễ hiểu, không thuật ngữ trần)
|
|
94
|
+
|
|
95
|
+
Mỗi câu là một **thẻ giải thích**: tên mục + 1–2 câu nghĩa + ví dụ cụ thể + Có/Không nghĩa là gì. Ví dụ mẫu:
|
|
96
|
+
```
|
|
97
|
+
【 Hệ thống có Multi-tenant không? 】
|
|
98
|
+
Một hệ thống phục vụ NHIỀU khách hàng/chi nhánh, dữ liệu mỗi bên tách riêng,
|
|
99
|
+
không bên nào thấy của bên kia (vd: app SaaS bán hàng — mỗi shop chỉ thấy đơn của mình).
|
|
100
|
+
• CÓ → phục vụ nhiều bên, cần cách ly dữ liệu
|
|
101
|
+
• KHÔNG → chỉ phục vụ một tổ chức duy nhất
|
|
102
|
+
```
|
|
103
|
+
Áp dụng phong cách này cho MỌI câu. Tuyệt đối không hỏi kiểu "Multi-tenant? [Y/N]" trơ trọi.
|
|
104
|
+
|
|
105
|
+
### 3.2 — Pha 1: Sàng lọc (quyết mục conditional nào bật)
|
|
106
|
+
|
|
107
|
+
Hỏi các thẻ dưới đây, **BỎ câu nào đã có đáp án** từ Bước 2 (config/tài liệu/code). Mỗi thẻ quyết định (các) section:
|
|
108
|
+
|
|
109
|
+
| Thẻ hỏi (diễn đạt dễ hiểu như 3.1) | Bật section |
|
|
110
|
+
|---|---|
|
|
111
|
+
| Kiểu kiến trúc? (Layered/Clean/Hexagonal/Component-based) | §Các tầng (chọn sơ đồ mẫu) |
|
|
112
|
+
| Backend có expose REST API cho client gọi? | §Response API + §Quy ước API |
|
|
113
|
+
| Multi-tenant (nhiều khách hàng, dữ liệu tách riêng)? | §Multi-tenant |
|
|
114
|
+
| Có tích hợp hệ ngoài có ID riêng (partner/hệ cũ)? | §Phân loại Entity + §Identity Resolution + §Nguồn dữ liệu + §Ranh giới truy cập dữ liệu |
|
|
115
|
+
| Có xử lý bất đồng bộ qua message bus (Kafka/RabbitMQ…)? | §Event Bus |
|
|
116
|
+
| Dữ liệu chia nhiều DB / sharding? | §Sharding |
|
|
117
|
+
| Có bật/tắt tính năng bằng feature flag lúc chạy? | §Feature Toggle |
|
|
118
|
+
| Có API Gateway đứng trước các service? | §API Gateway |
|
|
119
|
+
| Có cache riêng (Redis…) để tăng tốc? | §Caching |
|
|
120
|
+
| Nhiều repo / nhiều service? | §Repos + §Trách nhiệm service + §Giao tiếp giữa service |
|
|
121
|
+
|
|
122
|
+
Trả lời KHÔNG → section tương ứng để **STUB** (không hỏi thêm về nó nữa).
|
|
123
|
+
|
|
124
|
+
### 3.3 — Pha 2: Đào sâu (drill loop, tới khi ĐỦ-ĐỂ-VIẾT)
|
|
125
|
+
|
|
126
|
+
Với **mỗi mục được bật (CÓ)** mà nội dung còn thiếu để viết đúng, hỏi tiếp bằng thẻ dễ hiểu — **lặp tới khi đủ**. Ví dụ sau khi CÓ multi-tenant:
|
|
127
|
+
```
|
|
128
|
+
Bạn nói CÓ multi-tenant. Để viết đúng phần này, cho hỏi thêm:
|
|
129
|
+
1. Mỗi bản ghi phân biệt khách hàng bằng cột nào? (vd TenantId, MerchantId, OrgId)
|
|
130
|
+
2. Cách ly kiểu gì? [tự động lọc mọi truy vấn / mỗi khách một DB riêng / khác]
|
|
131
|
+
(Chưa rõ thì gõ "để sau" — mục này để trống, bổ sung sau bằng --section=multi-tenant)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Ràng buộc loop (BẮT BUỘC — tránh lan man/phiền):**
|
|
135
|
+
- **Chỉ đào sâu trong phạm vi mục SA đã trả lời CÓ.** KHÔNG tự mở chủ đề mới. Mục SA nói KHÔNG → không bao giờ hỏi lại.
|
|
136
|
+
- **Chỉ hỏi khi mơ hồ THỰC SỰ cản việc viết đúng** mục đó — không hỏi chi tiết "cho vui".
|
|
137
|
+
- **Gộp 2–3 câu/lượt** theo cụm, không hỏi lắt nhắt từng cái.
|
|
138
|
+
- **Luôn có lối thoát:** SA gõ "để sau / chưa rõ" → mục đó thành **STUB**, dừng đào sâu ngay. → Loop chắc chắn kết thúc.
|
|
139
|
+
- Follow-up cũng **skip-if-answered**: nếu tài liệu/config/code đã trả lời thì không hỏi.
|
|
140
|
+
|
|
141
|
+
**Kết thúc phỏng vấn khi:** mọi mục CÓ đều (a) đủ để viết, hoặc (b) SA chủ động hoãn (→ stub). Xung đột ở 3.0 cũng được hỏi xác nhận trong pha này.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Bước 4 — Lắp ráp theo tier
|
|
146
|
+
|
|
147
|
+
Nguồn khung: `.agent/templates/architecture.template.md` (đọc marker `<!-- tier: core|conditional|ops -->` mỗi mục).
|
|
148
|
+
|
|
149
|
+
1. **core** → **luôn viết**, pre-fill từ Bước 2 + đáp án. Field nào vẫn chưa rõ → giữ `{{PLACEHOLDER}}` + comment (không stub cả mục core).
|
|
150
|
+
2. **conditional** → nếu mục được bật (Bước 2 có nguồn HOẶC phỏng vấn CÓ) → viết đầy đủ; ngược lại → **STUB**:
|
|
151
|
+
```
|
|
152
|
+
## {Tên mục} <!-- tier: conditional --> <!-- status: stub -->
|
|
153
|
+
> ⏳ Chưa tài liệu hoá. Chạy `/generate-architecture --section={slug}` khi cần, hoặc điền tay.
|
|
154
|
+
```
|
|
155
|
+
3. **ops** → mặc định **STUB** (không ép điền upfront). Chỉ điền nếu Bước 2 đã có nguồn rõ ràng (vd CI config, logging setup) — khi đó điền luôn, bỏ stub.
|
|
156
|
+
4. **Provenance:** mỗi section điền từ tài liệu ngoài → chèn `<!-- nguồn: {path} -->`. Section có xung đột chưa giải → chèn `<!-- ⚠️ xung đột: … -->`.
|
|
157
|
+
5. **Frontmatter — trust-gate:** `last_verified: {hôm nay}`; `verified_by: AI-draft` (khi có bất kỳ nội dung do AI hút/suy) hoặc `{{AUTHOR}}` (greenfield thuần tay chưa có gì).
|
|
158
|
+
6. Nhất quán thuật ngữ với `business-dictionary.md` + tên entity `core-entities.md`; KHÔNG dùng banned term.
|
|
159
|
+
7. Ghi ra `target`.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Bước 5 — Chế độ `--section=<slug>` (điền dần một mục)
|
|
164
|
+
|
|
165
|
+
Khi `$ARGUMENTS` có `--section=<slug>`: bỏ qua lắp ráp toàn bộ, **chỉ** lấp/refresh đúng mục đó.
|
|
166
|
+
1. Định vị mục theo bảng slug bên dưới trong `target`.
|
|
167
|
+
2. Chạy thu thập (Bước 2) + phỏng vấn đào sâu (Bước 3.3) **giới hạn cho mục này**.
|
|
168
|
+
3. Thay khối stub bằng nội dung đã điền, gỡ `<!-- status: stub -->`. Nếu mục đã có nội dung → refresh theo chênh lệch, giữ chỉnh tay của người.
|
|
169
|
+
4. Cập nhật `last_verified`; nếu file đang `verified_by: {người}` → chỉ đề xuất diff (không tự đè).
|
|
170
|
+
|
|
171
|
+
**Bảng slug ↔ mục:** `tech-stack` · `layers` · `naming` · `api-response` · `api-conventions` · `database` (core) — `data-flow` · `repositories` · `entity-classification` · `data-access` · `service-responsibilities` · `di` · `multi-tenant` · `identity-resolution` · `api-gateway` · `caching` · `event-bus` · `sharding` · `feature-toggle` · `auth` (conditional) — `observability` · `deployment` · `testing` · `nfr` (ops).
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Bước 6 — Refresh có kiểm soát (khi file đã verify bởi người)
|
|
176
|
+
|
|
177
|
+
Nếu Bước 1.4 xác định `verified_by: {người thật}`:
|
|
178
|
+
- KHÔNG ghi đè. Chạy lại thu thập (Bước 2) và **so sánh** với nội dung hiện tại.
|
|
179
|
+
- Xuất **danh sách chênh lệch** (drift): mục nào trong code/config/tài liệu đã khác doc.
|
|
180
|
+
- Với mỗi drift, đề xuất câu chữ cập nhật để SA tự áp; KHÔNG tự đổi `verified_by`.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Bước 7 — Bàn giao cho người verify
|
|
185
|
+
|
|
186
|
+
> Nếu frontmatter ghi `verified_by: AI-draft`:
|
|
187
|
+
> 1. Tech Lead/Architect **duyệt từng section**, sửa chỗ AI đoán sai (đối chiếu `<!-- nguồn: … -->` và `<!-- ⚠️ xung đột -->`).
|
|
188
|
+
> 2. Điền nốt `{{PLACEHOLDER}}` còn lại; lấp các mục STUB cần thiết bằng `--section=<slug>`.
|
|
189
|
+
> 3. Đổi `verified_by: AI-draft` → **tên bạn**, cập nhật `last_verified`. Commit.
|
|
190
|
+
>
|
|
191
|
+
> Chỉ khi `verified_by` là người thật, `/generate-tech-docs` (Bước 0.5 [ARCH]) mới coi doc là **ràng buộc kiến trúc chính thức**. Còn `AI-draft` thì bị gắn ⚠️ và ưu tiên CLAUDE.md/BDD khi mâu thuẫn.
|
|
192
|
+
|
|
193
|
+
## Output
|
|
194
|
+
{{include:steps/report-footer.md}}
|
|
@@ -443,6 +443,8 @@ Lệnh này giới hạn nghiêm ngặt trong **một file feature** được tr
|
|
|
443
443
|
3. CLAUDE.md §architecture + §coding_standards
|
|
444
444
|
4. **(chỉ FE/App)** Design Spec — nạp qua **Guard** bên dưới (gate approved/độ-tươi + sanity), là nguồn của màn hình, component inventory, và link Figma frame từng-màn.
|
|
445
445
|
|
|
446
|
+
> **Phạm vi vét nguồn (SRC-CHAIN):** khi một giá trị còn thiếu ở nguồn chính, được phép đọc thêm các artifact **cùng feature-package** `{paths.specs_dir}/{domain}/{prd-slug}/` — PRD `{TICKET-ID}-{prd-slug}.md`, các `.feature` khác (system/web/app), design-spec, tech-doc anh em — cùng `core-entities.md`/`business-dictionary.md`. Đọc **theo nhu cầu** để phân giải giá trị trước khi hỏi người (xem §Quy tắc nguồn giá trị).
|
|
447
|
+
|
|
446
448
|
---
|
|
447
449
|
|
|
448
450
|
## Guard — BDD & Design Spec đã sẵn sàng chưa *(cảnh báo MỀM — đồng bộ generate-bdd)*
|
|
@@ -775,7 +777,18 @@ DTOs → Entity/Model → Repository → Service interface → Service impl →
|
|
|
775
777
|
|
|
776
778
|
> **Quy tắc entry-point:** `@trace.implements` phải xuất hiện ở **layer entry-point** như định nghĩa trong `CLAUDE.md §2`. Với REST API → Controller. Với module event-driven → event handler / consumer class. Với context-engineering → hàm orchestration prompt. Không bao giờ chỉ đặt ở layer trong.
|
|
777
779
|
|
|
778
|
-
> **Quy tắc nguồn giá trị (chống hard-code):** MỌI giá trị cụ thể (endpoint path, error code, tên field/DTO, enum, limit/timeout, header) phải lấy từ **nguồn đã chốt** —
|
|
780
|
+
> **Quy tắc nguồn giá trị (chống hard-code):** MỌI giá trị cụ thể (endpoint path, error code, tên field/DTO, enum, limit/timeout, header) phải lấy từ **nguồn đã chốt** — **KHÔNG bịa inline**. Nếu một hằng số nghiệp vụ lặp lại hoặc mang ý nghĩa (retry count, ngưỡng, key) → **đặt tên hằng số** (constant/config), không rải magic number/string trong code.
|
|
781
|
+
>
|
|
782
|
+
> **VÉT CẠN NGUỒN TRƯỚC KHI HỎI (SRC-CHAIN) — bắt buộc.** Khi một giá trị chưa thấy ở nguồn chính, PHẢI quét lần lượt các nguồn đã có trong context/spec-package theo thứ tự sau, **dừng ngay khi tìm thấy** (skip-if-answered), KHÔNG hỏi người ngay:
|
|
783
|
+
> 1. Tech-doc gộp §4 (contract: §4.1 endpoint · §4.2 request/response · §4.3 error · §4.5.4 client integration)
|
|
784
|
+
> 2. `core-entities.md` (tên field / type / enum) · `business-dictionary.md` (thuật ngữ chuẩn)
|
|
785
|
+
> 3. PRD của UC (nhất là Appendix "Existing API Contract" khi `API Source: existing`, và metadata)
|
|
786
|
+
> 4. Design-spec (FE/App: field/label/state màn hình)
|
|
787
|
+
> 5. System/platform BDD — mệnh đề `Then` (behavior + giá trị fixture)
|
|
788
|
+
> 6. Code/adapter đã sinh ở lần chạy trước (vd mock adapter `--phase=ui` đã chốt shape port/DTO) · config/env
|
|
789
|
+
> 7. Tech-doc anh em cùng domain
|
|
790
|
+
>
|
|
791
|
+
> Chỉ giá trị **thật sự không nguồn nào có** mới là GAP. **Gom TẤT CẢ GAP còn lại vào MỘT checkpoint** (mỗi GAP ghi rõ "đã tìm ở: {các nguồn}"), hỏi một lượt — KHÔNG hỏi lắt nhắt từng câu, KHÔNG chế bừa (đồng bộ Cổng 2 của generate-tech-docs). *(DS3 đã đảm bảo có §4 contract trước khi tới đây với BE.)*
|
|
779
792
|
|
|
780
793
|
### Test Selectors — emit element ID ổn định *(chỉ UI FE/App)*
|
|
781
794
|
|
|
@@ -829,7 +842,8 @@ Dựng mock từ `mock_source` đã phân giải ở Phase Detection — **shape
|
|
|
829
842
|
*Bỏ qua hoàn toàn section này nếu `--phase` không phải `integration`.*
|
|
830
843
|
|
|
831
844
|
1. **Đọc integration design.** Trong tech-doc gộp `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{TICKET-ID}-tech-design.md`: ưu tiên §4.5.4 (mapping port→endpoint→DTO→error của platform), dùng §4.1/§4.2/§4.3 làm nguồn endpoint / request-response / error-code. Nếu doc chưa có §4.5.4 cho platform này, trích endpoint + shape + error code trực tiếp từ §4.1–§4.3.
|
|
832
|
-
|
|
845
|
+
- **Nếu §4/§4.5.4 thiếu bất kỳ chi tiết integration nào (endpoint, field/DTO, error-code, mapping):** ÁP DỤNG **SRC-CHAIN** (xem §Quy tắc nguồn giá trị) — vét cạn PRD (Appendix Existing API Contract), design-spec, mệnh đề `Then` của System/platform BDD, `core-entities.md`, **mock adapter đã sinh ở `--phase=ui`** (shape port/DTO đã chốt — nguồn shape mạnh nhất, đừng bỏ quên), tech-doc anh em cùng domain — TRƯỚC khi coi là GAP. Skip-if-answered. Chỉ hỏi cái không nguồn nào có, và **gộp mọi GAP còn lại vào MỘT checkpoint** (ghi rõ đã tìm ở đâu). *(Đây là fix cho tình trạng phase=integration hỏi nhiều dù đáp án đã nằm trong tài liệu khác.)*
|
|
846
|
+
2. **Đọc mock adapter có sẵn** interface (`{UC-ID}ApiPort`) từ output `--phase=ui`. Real adapter implements **cùng** interface này → shape port/DTO đã cố định từ mock; **không hỏi lại shape** đã có ở đây.
|
|
833
847
|
3. **Sinh real API adapter** tại `{paths.src_dir}/{domain}/{UC-ID}ApiAdapter.{ext}`:
|
|
834
848
|
- Implements cùng interface `{UC-ID}ApiPort` như mock adapter
|
|
835
849
|
- Gọi HTTP thật tới endpoint từ contract tech-doc
|
|
@@ -31,6 +31,8 @@ Lệnh này giới hạn nghiêm ngặt trong **một file feature** được tr
|
|
|
31
31
|
3. CLAUDE.md §architecture + §coding_standards
|
|
32
32
|
4. **(chỉ FE/App)** Design Spec — nạp qua **Guard** bên dưới (gate approved/độ-tươi + sanity), là nguồn của màn hình, component inventory, và link Figma frame từng-màn.
|
|
33
33
|
|
|
34
|
+
> **Phạm vi vét nguồn (SRC-CHAIN):** khi một giá trị còn thiếu ở nguồn chính, được phép đọc thêm các artifact **cùng feature-package** `{paths.specs_dir}/{domain}/{prd-slug}/` — PRD `{TICKET-ID}-{prd-slug}.md`, các `.feature` khác (system/web/app), design-spec, tech-doc anh em — cùng `core-entities.md`/`business-dictionary.md`. Đọc **theo nhu cầu** để phân giải giá trị trước khi hỏi người (xem §Quy tắc nguồn giá trị).
|
|
35
|
+
|
|
34
36
|
---
|
|
35
37
|
|
|
36
38
|
## Guard — BDD & Design Spec đã sẵn sàng chưa *(cảnh báo MỀM — đồng bộ generate-bdd)*
|
|
@@ -363,7 +365,18 @@ DTOs → Entity/Model → Repository → Service interface → Service impl →
|
|
|
363
365
|
|
|
364
366
|
> **Quy tắc entry-point:** `@trace.implements` phải xuất hiện ở **layer entry-point** như định nghĩa trong `CLAUDE.md §2`. Với REST API → Controller. Với module event-driven → event handler / consumer class. Với context-engineering → hàm orchestration prompt. Không bao giờ chỉ đặt ở layer trong.
|
|
365
367
|
|
|
366
|
-
> **Quy tắc nguồn giá trị (chống hard-code):** MỌI giá trị cụ thể (endpoint path, error code, tên field/DTO, enum, limit/timeout, header) phải lấy từ **nguồn đã chốt** —
|
|
368
|
+
> **Quy tắc nguồn giá trị (chống hard-code):** MỌI giá trị cụ thể (endpoint path, error code, tên field/DTO, enum, limit/timeout, header) phải lấy từ **nguồn đã chốt** — **KHÔNG bịa inline**. Nếu một hằng số nghiệp vụ lặp lại hoặc mang ý nghĩa (retry count, ngưỡng, key) → **đặt tên hằng số** (constant/config), không rải magic number/string trong code.
|
|
369
|
+
>
|
|
370
|
+
> **VÉT CẠN NGUỒN TRƯỚC KHI HỎI (SRC-CHAIN) — bắt buộc.** Khi một giá trị chưa thấy ở nguồn chính, PHẢI quét lần lượt các nguồn đã có trong context/spec-package theo thứ tự sau, **dừng ngay khi tìm thấy** (skip-if-answered), KHÔNG hỏi người ngay:
|
|
371
|
+
> 1. Tech-doc gộp §4 (contract: §4.1 endpoint · §4.2 request/response · §4.3 error · §4.5.4 client integration)
|
|
372
|
+
> 2. `core-entities.md` (tên field / type / enum) · `business-dictionary.md` (thuật ngữ chuẩn)
|
|
373
|
+
> 3. PRD của UC (nhất là Appendix "Existing API Contract" khi `API Source: existing`, và metadata)
|
|
374
|
+
> 4. Design-spec (FE/App: field/label/state màn hình)
|
|
375
|
+
> 5. System/platform BDD — mệnh đề `Then` (behavior + giá trị fixture)
|
|
376
|
+
> 6. Code/adapter đã sinh ở lần chạy trước (vd mock adapter `--phase=ui` đã chốt shape port/DTO) · config/env
|
|
377
|
+
> 7. Tech-doc anh em cùng domain
|
|
378
|
+
>
|
|
379
|
+
> Chỉ giá trị **thật sự không nguồn nào có** mới là GAP. **Gom TẤT CẢ GAP còn lại vào MỘT checkpoint** (mỗi GAP ghi rõ "đã tìm ở: {các nguồn}"), hỏi một lượt — KHÔNG hỏi lắt nhắt từng câu, KHÔNG chế bừa (đồng bộ Cổng 2 của generate-tech-docs). *(DS3 đã đảm bảo có §4 contract trước khi tới đây với BE.)*
|
|
367
380
|
|
|
368
381
|
### Test Selectors — emit element ID ổn định *(chỉ UI FE/App)*
|
|
369
382
|
|
|
@@ -417,7 +430,8 @@ Dựng mock từ `mock_source` đã phân giải ở Phase Detection — **shape
|
|
|
417
430
|
*Bỏ qua hoàn toàn section này nếu `--phase` không phải `integration`.*
|
|
418
431
|
|
|
419
432
|
1. **Đọc integration design.** Trong tech-doc gộp `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{TICKET-ID}-tech-design.md`: ưu tiên §4.5.4 (mapping port→endpoint→DTO→error của platform), dùng §4.1/§4.2/§4.3 làm nguồn endpoint / request-response / error-code. Nếu doc chưa có §4.5.4 cho platform này, trích endpoint + shape + error code trực tiếp từ §4.1–§4.3.
|
|
420
|
-
|
|
433
|
+
- **Nếu §4/§4.5.4 thiếu bất kỳ chi tiết integration nào (endpoint, field/DTO, error-code, mapping):** ÁP DỤNG **SRC-CHAIN** (xem §Quy tắc nguồn giá trị) — vét cạn PRD (Appendix Existing API Contract), design-spec, mệnh đề `Then` của System/platform BDD, `core-entities.md`, **mock adapter đã sinh ở `--phase=ui`** (shape port/DTO đã chốt — nguồn shape mạnh nhất, đừng bỏ quên), tech-doc anh em cùng domain — TRƯỚC khi coi là GAP. Skip-if-answered. Chỉ hỏi cái không nguồn nào có, và **gộp mọi GAP còn lại vào MỘT checkpoint** (ghi rõ đã tìm ở đâu). *(Đây là fix cho tình trạng phase=integration hỏi nhiều dù đáp án đã nằm trong tài liệu khác.)*
|
|
434
|
+
2. **Đọc mock adapter có sẵn** interface (`{UC-ID}ApiPort`) từ output `--phase=ui`. Real adapter implements **cùng** interface này → shape port/DTO đã cố định từ mock; **không hỏi lại shape** đã có ở đây.
|
|
421
435
|
3. **Sinh real API adapter** tại `{paths.src_dir}/{domain}/{UC-ID}ApiAdapter.{ext}`:
|
|
422
436
|
- Implements cùng interface `{UC-ID}ApiPort` như mock adapter
|
|
423
437
|
- Gọi HTTP thật tới endpoint từ contract tech-doc
|
|
@@ -463,6 +463,25 @@ Lưu `input_features`, `platforms_present`, danh sách scenario theo từng UC,
|
|
|
463
463
|
|
|
464
464
|
---
|
|
465
465
|
|
|
466
|
+
## Bước 0.5 — [ARCH] Nạp Architecture Context (nếu có)
|
|
467
|
+
|
|
468
|
+
Tech-design chắt lọc kiến trúc hệ thống thành API contract + client design, nên đây là **nơi duy nhất** trong pipeline nạp `architecture.md` (SSOT cross-cutting sinh bởi `/generate-architecture`). Không nạp toàn cục ở context-loader — chỉ lệnh này cần nó ở mức sâu.
|
|
469
|
+
|
|
470
|
+
1. **Phân giải path:** `{paths.specs_dir}/architecture.md` (mặc định `specs/architecture.md`). Chế độ umbrella: context-loader đã trỏ `specs_dir`/`service_root` về service đang active → dùng `architecture.md` của chính service đó (kiến trúc là code-level, per-service).
|
|
471
|
+
2. **Nếu file KHÔNG tồn tại** → bỏ qua âm thầm, đặt `arch = none`. Vẫn dựa vào CLAUDE.md §2 (layers/rules) + core-entities như trước. (Gợi ý mềm một lần trong report cuối: "Chưa có architecture.md — cân nhắc chạy `/generate-architecture` để tech-design bám kiến trúc hệ thống.")
|
|
472
|
+
3. **Nếu tồn tại** → đọc **có chọn lọc theo tier** (mỗi mục có marker `<!-- tier: core|conditional|ops -->`):
|
|
473
|
+
- **Nạp** thân các mục **`core` + `conditional`** — đây là phần ảnh hưởng code/API/data: layer boundaries + dependency direction, phân loại/nguồn dữ liệu, injection rules, luồng xác thực, response API chuẩn, caching/sharding/messaging, multi-tenant/identity-resolution.
|
|
474
|
+
- **BỎ QUA** các mục **`ops`** (Observability, Triển khai & DevOps, Chiến lược kiểm thử, NFR) — không đổi thiết kế API/data-model, chỉ làm nhiễu context.
|
|
475
|
+
- Các section §2–§4 (data model, API contract, integration) PHẢI nhất quán với phần đã nạp — KHÔNG tự suy khác.
|
|
476
|
+
4. **Mục đang STUB (`<!-- status: stub -->`):** nếu một UC trong batch **chạm** tới một concern mà mục tương ứng còn stub (vd UC có tenant scoping nhưng §Multi-tenant là stub) → **cảnh báo mềm** trong report: *"§{Mục} chưa tài liệu hoá trong architecture.md — chạy `/generate-architecture --section={slug}` để tech-design chính xác hơn."* Vẫn tiếp tục dựa vào CLAUDE.md.
|
|
477
|
+
5. **Trust-gate — đọc frontmatter `verified_by`:**
|
|
478
|
+
- `verified_by: AI-draft` (hoặc trống) → nội dung do AI dựng từ config/tài liệu/code, CHƯA ai verify. Vẫn dùng làm tham chiếu nhưng **cảnh báo** trong report: *"⚠️ architecture.md còn là AI-draft chưa verify — tech-design có thể kế thừa giả định sai. Nên để Tech Lead verify (đổi `verified_by`) trước khi chốt."* Khi mâu thuẫn với CLAUDE.md/BDD thì ưu tiên CLAUDE.md/BDD.
|
|
479
|
+
- `verified_by: {người thật}` → coi là ràng buộc kiến trúc chính thức.
|
|
480
|
+
|
|
481
|
+
Lưu `arch` (`none` | `ai-draft` | `verified`) để dùng ở các bước sinh section và report.
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
466
485
|
## Bước 1 — Chế độ Fresh vs Append
|
|
467
486
|
|
|
468
487
|
Kiểm tra `output_path` đã tồn tại chưa.
|
|
@@ -51,6 +51,25 @@ Lưu `input_features`, `platforms_present`, danh sách scenario theo từng UC,
|
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
54
|
+
## Bước 0.5 — [ARCH] Nạp Architecture Context (nếu có)
|
|
55
|
+
|
|
56
|
+
Tech-design chắt lọc kiến trúc hệ thống thành API contract + client design, nên đây là **nơi duy nhất** trong pipeline nạp `architecture.md` (SSOT cross-cutting sinh bởi `/generate-architecture`). Không nạp toàn cục ở context-loader — chỉ lệnh này cần nó ở mức sâu.
|
|
57
|
+
|
|
58
|
+
1. **Phân giải path:** `{paths.specs_dir}/architecture.md` (mặc định `specs/architecture.md`). Chế độ umbrella: context-loader đã trỏ `specs_dir`/`service_root` về service đang active → dùng `architecture.md` của chính service đó (kiến trúc là code-level, per-service).
|
|
59
|
+
2. **Nếu file KHÔNG tồn tại** → bỏ qua âm thầm, đặt `arch = none`. Vẫn dựa vào CLAUDE.md §2 (layers/rules) + core-entities như trước. (Gợi ý mềm một lần trong report cuối: "Chưa có architecture.md — cân nhắc chạy `/generate-architecture` để tech-design bám kiến trúc hệ thống.")
|
|
60
|
+
3. **Nếu tồn tại** → đọc **có chọn lọc theo tier** (mỗi mục có marker `<!-- tier: core|conditional|ops -->`):
|
|
61
|
+
- **Nạp** thân các mục **`core` + `conditional`** — đây là phần ảnh hưởng code/API/data: layer boundaries + dependency direction, phân loại/nguồn dữ liệu, injection rules, luồng xác thực, response API chuẩn, caching/sharding/messaging, multi-tenant/identity-resolution.
|
|
62
|
+
- **BỎ QUA** các mục **`ops`** (Observability, Triển khai & DevOps, Chiến lược kiểm thử, NFR) — không đổi thiết kế API/data-model, chỉ làm nhiễu context.
|
|
63
|
+
- Các section §2–§4 (data model, API contract, integration) PHẢI nhất quán với phần đã nạp — KHÔNG tự suy khác.
|
|
64
|
+
4. **Mục đang STUB (`<!-- status: stub -->`):** nếu một UC trong batch **chạm** tới một concern mà mục tương ứng còn stub (vd UC có tenant scoping nhưng §Multi-tenant là stub) → **cảnh báo mềm** trong report: *"§{Mục} chưa tài liệu hoá trong architecture.md — chạy `/generate-architecture --section={slug}` để tech-design chính xác hơn."* Vẫn tiếp tục dựa vào CLAUDE.md.
|
|
65
|
+
5. **Trust-gate — đọc frontmatter `verified_by`:**
|
|
66
|
+
- `verified_by: AI-draft` (hoặc trống) → nội dung do AI dựng từ config/tài liệu/code, CHƯA ai verify. Vẫn dùng làm tham chiếu nhưng **cảnh báo** trong report: *"⚠️ architecture.md còn là AI-draft chưa verify — tech-design có thể kế thừa giả định sai. Nên để Tech Lead verify (đổi `verified_by`) trước khi chốt."* Khi mâu thuẫn với CLAUDE.md/BDD thì ưu tiên CLAUDE.md/BDD.
|
|
67
|
+
- `verified_by: {người thật}` → coi là ràng buộc kiến trúc chính thức.
|
|
68
|
+
|
|
69
|
+
Lưu `arch` (`none` | `ai-draft` | `verified`) để dùng ở các bước sinh section và report.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
54
73
|
## Bước 1 — Chế độ Fresh vs Append
|
|
55
74
|
|
|
56
75
|
Kiểm tra `output_path` đã tồn tại chưa.
|
package/core/FRAMEWORK_VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.2.
|
|
1
|
+
0.2.5
|