@longph2102/v-flow 1.5.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/AGENTS.md +265 -0
- package/CHANGELOG.md +318 -0
- package/LICENSE +21 -0
- package/README.md +326 -0
- package/agents/ba-agent.md +437 -0
- package/agents/ba-critic-agent.md +156 -0
- package/agents/ba-to-ptyc-agent.md +112 -0
- package/agents/bugfix-analyst-agent.md +221 -0
- package/agents/constitute-agent.md +155 -0
- package/agents/help-agent.md +168 -0
- package/agents/implement-agent.md +220 -0
- package/agents/import-ba-docs-agent.md +164 -0
- package/agents/master-check-agent.md +228 -0
- package/agents/metrics-agent.md +180 -0
- package/agents/operations-agent.md +123 -0
- package/agents/plan-agent.md +218 -0
- package/agents/prototype-agent.md +191 -0
- package/agents/retrospective-agent.md +196 -0
- package/agents/review-agent.md +210 -0
- package/agents/sprint-agent.md +191 -0
- package/agents/status-agent.md +186 -0
- package/agents/sync-agent.md +201 -0
- package/agents/test-agent.md +166 -0
- package/agents/understand-agent.md +339 -0
- package/cli/commands/check.js +96 -0
- package/cli/commands/dev-quiz.js +107 -0
- package/cli/commands/doctor.js +348 -0
- package/cli/commands/feature.js +259 -0
- package/cli/commands/hooks.js +163 -0
- package/cli/commands/init.js +189 -0
- package/cli/commands/log.js +199 -0
- package/cli/commands/plugin.js +230 -0
- package/cli/commands/score-card.js +203 -0
- package/cli/commands/status.js +269 -0
- package/cli/commands/sync.js +59 -0
- package/cli/commands/upgrade.js +150 -0
- package/cli/commands/validate.js +1259 -0
- package/cli/commands/watch.js +151 -0
- package/cli/index.js +46 -0
- package/cli/lib/ac-test-gate.js +89 -0
- package/cli/lib/activity-log.js +209 -0
- package/cli/lib/cli-error.js +183 -0
- package/cli/lib/constitution-lint.js +561 -0
- package/cli/lib/dev-quiz-grade.js +127 -0
- package/cli/lib/governance.js +78 -0
- package/cli/lib/hook-targets.js +167 -0
- package/cli/lib/i18n.js +375 -0
- package/cli/lib/knowledge-oracle.js +379 -0
- package/cli/lib/logger.js +203 -0
- package/cli/lib/module-card-lint.js +304 -0
- package/cli/lib/module-card-score.js +223 -0
- package/cli/lib/plugins.js +481 -0
- package/cli/lib/scanner.js +692 -0
- package/cli/lib/sync-core.js +232 -0
- package/cli/lib/sync-targets.js +84 -0
- package/cli/lib/templates.js +268 -0
- package/cli/lib/yaml-parser.js +203 -0
- package/commands/v.ba-critic.md +101 -0
- package/commands/v.ba-to-ptyc.md +71 -0
- package/commands/v.bugfix.md +86 -0
- package/commands/v.check.md +131 -0
- package/commands/v.constitute.md +87 -0
- package/commands/v.constitution.md +84 -0
- package/commands/v.fork.md +127 -0
- package/commands/v.help.md +73 -0
- package/commands/v.hotfix.md +200 -0
- package/commands/v.implement.md +92 -0
- package/commands/v.import-ba-docs.md +222 -0
- package/commands/v.metrics.md +74 -0
- package/commands/v.operations.md +70 -0
- package/commands/v.plan.md +78 -0
- package/commands/v.prototype.md +121 -0
- package/commands/v.quickfix.md +169 -0
- package/commands/v.retrospective.md +80 -0
- package/commands/v.review.md +78 -0
- package/commands/v.rewind.md +127 -0
- package/commands/v.specify.md +118 -0
- package/commands/v.sprint.md +75 -0
- package/commands/v.status.md +62 -0
- package/commands/v.sync.md +81 -0
- package/commands/v.test.md +67 -0
- package/commands/v.understand.md +112 -0
- package/package.json +65 -0
- package/skills/_shared/constitution-reader/SKILL.md +109 -0
- package/skills/_shared/constitution-reader/config.json +52 -0
- package/skills/_shared/constitution-reader/examples/good/b1-phase-output.md +48 -0
- package/skills/_shared/constitution-reader/gotchas.md +46 -0
- package/skills/_shared/context-reader/SKILL.md +111 -0
- package/skills/_shared/context-reader/config.json +54 -0
- package/skills/_shared/context-reader/examples/good/legacy-nodejs-output.md +35 -0
- package/skills/_shared/context-reader/gotchas.md +49 -0
- package/skills/_shared/ears-notation/SKILL.md +63 -0
- package/skills/_shared/ears-notation/config.json +55 -0
- package/skills/_shared/ears-notation/examples/good/plan-test-interpretation.md +29 -0
- package/skills/_shared/ears-notation/gotchas.md +43 -0
- package/skills/check/cross-validator/SKILL.md +206 -0
- package/skills/check/cross-validator/config.json +33 -0
- package/skills/check/cross-validator/examples/good/validation-report-pass-with-concerns.md +105 -0
- package/skills/check/cross-validator/gotchas.md +43 -0
- package/skills/implement/constitution-enforcer/SKILL.md +134 -0
- package/skills/implement/constitution-enforcer/config.json +16 -0
- package/skills/implement/constitution-enforcer/examples/bad/vague-report.md +42 -0
- package/skills/implement/constitution-enforcer/examples/good/compliance-report.md +57 -0
- package/skills/implement/constitution-enforcer/gotchas.md +26 -0
- package/skills/implement/constitution-enforcer/scripts/check-constitution.sh +88 -0
- package/skills/implement/no-go-zone-guard/SKILL.md +173 -0
- package/skills/implement/no-go-zone-guard/config.json +28 -0
- package/skills/implement/no-go-zone-guard/examples/good/adapter-workaround.md +46 -0
- package/skills/implement/no-go-zone-guard/gotchas.md +27 -0
- package/skills/implement/no-go-zone-guard/scripts/check-nogo-zones.sh +148 -0
- package/skills/implement/no-go-zone-guard/scripts/nogo-precommit.sh +96 -0
- package/skills/implement/tdd-driver/SKILL.md +159 -0
- package/skills/implement/tdd-driver/config.json +33 -0
- package/skills/implement/tdd-driver/examples/good/tdd-cycle-product-repo.md +81 -0
- package/skills/implement/tdd-driver/gotchas.md +34 -0
- package/skills/metrics/metrics-collector/SKILL.md +133 -0
- package/skills/metrics/metrics-collector/config.json +16 -0
- package/skills/metrics/metrics-collector/examples/bad/incomplete-report.md +48 -0
- package/skills/metrics/metrics-collector/examples/good/full-metrics-report.md +101 -0
- package/skills/metrics/metrics-collector/gotchas.md +26 -0
- package/skills/operations/incident-runbook/SKILL.md +167 -0
- package/skills/operations/incident-runbook/config.json +21 -0
- package/skills/operations/incident-runbook/examples/bad/vague-incident-report.md +48 -0
- package/skills/operations/incident-runbook/examples/good/p1-hotfix-response.md +119 -0
- package/skills/operations/incident-runbook/gotchas.md +26 -0
- package/skills/plan/architecture-designer/SKILL.md +228 -0
- package/skills/plan/architecture-designer/config.json +32 -0
- package/skills/plan/architecture-designer/examples/bad/vague-plan.md +62 -0
- package/skills/plan/architecture-designer/examples/good/expand-contract-migration.md +56 -0
- package/skills/plan/architecture-designer/examples/good/plan-structure.md +58 -0
- package/skills/plan/architecture-designer/gotchas.md +45 -0
- package/skills/plan/task-breakdown/SKILL.md +208 -0
- package/skills/plan/task-breakdown/config.json +26 -0
- package/skills/plan/task-breakdown/examples/bad/vague-tasks.md +77 -0
- package/skills/plan/task-breakdown/examples/good/spike-clarify-tasks.md +66 -0
- package/skills/plan/task-breakdown/examples/good/tasks-login-feature.md +111 -0
- package/skills/plan/task-breakdown/gotchas.md +39 -0
- package/skills/prototype/LOGIC.md +240 -0
- package/skills/prototype/SKILL.md +185 -0
- package/skills/prototype/UI.md +407 -0
- package/skills/prototype/config.json +104 -0
- package/skills/prototype/examples/bad/prototype-notes.md +68 -0
- package/skills/prototype/examples/good/prototype-notes-ui.md +109 -0
- package/skills/prototype/examples/good/prototype-notes.md +67 -0
- package/skills/prototype/gotchas.md +128 -0
- package/skills/prototype/scripts/check-flow-state.ps1 +112 -0
- package/skills/prototype/scripts/check-flow-state.sh +104 -0
- package/skills/prototype/scripts/check-prototype-cleanup.ps1 +124 -0
- package/skills/prototype/scripts/check-prototype-cleanup.sh +109 -0
- package/skills/prototype/scripts/check-prototype-notes.ps1 +107 -0
- package/skills/prototype/scripts/check-prototype-notes.sh +102 -0
- package/skills/review/adversarial-reviewer/SKILL.md +137 -0
- package/skills/review/adversarial-reviewer/config.json +32 -0
- package/skills/review/adversarial-reviewer/examples/good/review-report-template.md +56 -0
- package/skills/review/adversarial-reviewer/gotchas.md +46 -0
- package/skills/review/adversarial-reviewer/scripts/quick-security-scan.sh +52 -0
- package/skills/specify/ba-bpmn-doc-gen/SKILL.md +108 -0
- package/skills/specify/ba-bpmn-doc-gen/reference/reference-bpmn-generation.md +528 -0
- package/skills/specify/ba-bpmn-doc-gen/reference/reference-drawio-flowchart.md +466 -0
- package/skills/specify/ba-critic/SKILL.md +172 -0
- package/skills/specify/ba-critic/config.json +32 -0
- package/skills/specify/ba-critic/examples/good/critic-report-round1.md +51 -0
- package/skills/specify/ba-critic/gotchas.md +40 -0
- package/skills/specify/ba-critic/scripts/check-spec-quality.sh +72 -0
- package/skills/specify/ba-doc-generator/SKILL.md +102 -0
- package/skills/specify/ba-doc-generator/references/template-clevel.md +84 -0
- package/skills/specify/ba-doc-generator/references/template-compliance.md +83 -0
- package/skills/specify/ba-doc-generator/references/template-dev.md +138 -0
- package/skills/specify/ba-doc-generator/references/template-partner.md +167 -0
- package/skills/specify/ba-doc-generator/references/template-pm.md +92 -0
- package/skills/specify/ba-doc-generator/references/template-review.md +114 -0
- package/skills/specify/ba-doc-generator/references/template-tester.md +108 -0
- package/skills/specify/ba-doc-generator/references/template-user.md +98 -0
- package/skills/specify/bugfix-analyst/SKILL.md +296 -0
- package/skills/specify/bugfix-analyst/config.json +41 -0
- package/skills/specify/bugfix-analyst/examples/bad/common-mistakes.md +71 -0
- package/skills/specify/bugfix-analyst/examples/good/email-validation-bugfix.md +53 -0
- package/skills/specify/bugfix-analyst/gotchas.md +51 -0
- package/skills/specify/ears-writer/SKILL.md +129 -0
- package/skills/specify/ears-writer/config.json +20 -0
- package/skills/specify/ears-writer/examples/bad/common-mistakes.md +17 -0
- package/skills/specify/ears-writer/examples/good/login-requirements.md +41 -0
- package/skills/specify/ears-writer/gotchas.md +43 -0
- package/skills/specify/ears-writer/scripts/check-ears-compliance.sh +51 -0
- package/skills/test/test-case-generator/SKILL.md +161 -0
- package/skills/test/test-case-generator/config.json +33 -0
- package/skills/test/test-case-generator/examples/good/test-cases-login.md +104 -0
- package/skills/test/test-case-generator/gotchas.md +43 -0
- package/skills/understand/ba-docs-scanner/SKILL.md +239 -0
- package/skills/understand/ba-docs-scanner/config.json +47 -0
- package/skills/understand/ba-docs-scanner/examples/good/work-order-br-extract.md +28 -0
- package/skills/understand/ba-docs-scanner/gotchas.md +44 -0
- package/skills/understand/ba-docs-scanner/merge-rules.md +47 -0
- package/skills/understand/codebase-scanner/SKILL.md +260 -0
- package/skills/understand/codebase-scanner/config.json +56 -0
- package/skills/understand/codebase-scanner/examples/good/menu-module-output.md +44 -0
- package/skills/understand/codebase-scanner/gotchas.md +42 -0
- package/skills/understand/codebase-scanner/scripts/scan-project-structure.sh +64 -0
- package/templates/DESIGN.md +456 -0
- package/templates/agent-command-template.yaml +240 -0
- package/templates/agent-config-template.md +170 -0
- package/templates/agent-definition-template.md +145 -0
- package/templates/agent-metrics-template.md +150 -0
- package/templates/api-contract-template.md +72 -0
- package/templates/bugfix-report-template.md +195 -0
- package/templates/bugfix-spec-template.md +134 -0
- package/templates/code-review-report-template.md +119 -0
- package/templates/constitution-template.md +234 -0
- package/templates/context-template.md +94 -0
- package/templates/data-model-template.md +95 -0
- package/templates/decision-log-template.md +92 -0
- package/templates/flow-state-template.yaml +208 -0
- package/templates/github/workflows/v-flow-validate.yml +30 -0
- package/templates/knowledge/adr-template.md +70 -0
- package/templates/knowledge/api-contract-template.md +140 -0
- package/templates/knowledge/domain-glossary.md +29 -0
- package/templates/knowledge/golden-tests-readme.md +115 -0
- package/templates/knowledge/lessons-learned.md +41 -0
- package/templates/knowledge/patterns.md +103 -0
- package/templates/module-card/SKILL.md +85 -0
- package/templates/module-card/api-specs.md +96 -0
- package/templates/module-card/business-quiz.md +119 -0
- package/templates/module-card/cross-service.md +125 -0
- package/templates/module-card/db.md +85 -0
- package/templates/module-card/dev-quiz.md +62 -0
- package/templates/module-card/permissions.md +83 -0
- package/templates/module-card/state-diagram.md +64 -0
- package/templates/module-card/tech-context.md +90 -0
- package/templates/module-card/ui-flows.md +91 -0
- package/templates/module-card/use-cases.md +142 -0
- package/templates/module-template.yaml +161 -0
- package/templates/operations-report-template.md +108 -0
- package/templates/plan-template.md +308 -0
- package/templates/prototype-notes-template.md +116 -0
- package/templates/ptyc/PTYC.template.docx +0 -0
- package/templates/ptyc/ptyc.meta.example.yaml +44 -0
- package/templates/retrospective-report-template.md +136 -0
- package/templates/security-review-template.md +84 -0
- package/templates/session-template.md +167 -0
- package/templates/spec-review-log-template.md +75 -0
- package/templates/spec-template.md +229 -0
- package/templates/sprint-status-template.md +101 -0
- package/templates/tasks-template.md +275 -0
- package/templates/test-cases-template.md +124 -0
- package/templates/ux-checklist-template.md +79 -0
- package/templates/validation-report-template.md +125 -0
- package/templates/vflow-config-template.yaml +22 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# Business Quiz: {Tên Module}
|
|
3
|
+
## ⚠️ Hướng Dẫn Sử Dụng
|
|
4
|
+
## MUST — Câu Hỏi Bắt Buộc
|
|
5
|
+
### Q{NN}: {Tên ngắn của câu hỏi}
|
|
6
|
+
## SHOULD — Câu Hỏi Nâng Cao
|
|
7
|
+
### Q{NN}: {Tên ngắn của câu hỏi}
|
|
8
|
+
## Changelog
|
|
9
|
+
-->
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
module: domain-{tên-module}
|
|
13
|
+
module_version: "{version}" # Version của module card lúc tạo file này
|
|
14
|
+
created_at: "YYYY-MM-DD"
|
|
15
|
+
created_by: "v.understand" # "v.understand" | "human"
|
|
16
|
+
last_reviewed_by: null # Human BA/PO đã review câu hỏi chưa?
|
|
17
|
+
last_reviewed_at: null
|
|
18
|
+
status: "draft" # "draft" | "ready" (ready = đã được Human review)
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Business Quiz: {Tên Module}
|
|
22
|
+
|
|
23
|
+
> ⚠️ **FILE NÀY KHÔNG CHỨA ĐÁP ÁN**
|
|
24
|
+
> Human BA/PO là answer key — đánh giá câu trả lời của AI bằng domain knowledge của mình.
|
|
25
|
+
> AI Agent: Đọc câu hỏi, trả lời dựa trên hiểu biết từ module cards (`use-cases.md`, `SKILL.md`...). **KHÔNG** dùng nội dung file này làm đáp án.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## ⚠️ Hướng Dẫn Sử Dụng
|
|
30
|
+
|
|
31
|
+
**Dành cho Human BA/PO (khi review câu hỏi):**
|
|
32
|
+
- Xóa nhãn `[⚙️ AI draft]` và thay bằng `[✅ Human verified]` khi câu hỏi đã đúng
|
|
33
|
+
- Chỉnh sửa câu hỏi nếu AI draft chưa đúng trọng tâm
|
|
34
|
+
- Thêm câu hỏi mới nếu cần (đặc biệt: "bẫy nghiệp vụ" mà AI dễ hiểu sai)
|
|
35
|
+
- Đặt `status: "ready"` trong frontmatter khi hoàn tất review
|
|
36
|
+
- Câu hỏi tốt: test *reasoning về ý nghĩa nghiệp vụ*, KHÔNG phải *biết API endpoint hay tên bảng*
|
|
37
|
+
|
|
38
|
+
**Dành cho AI Agent (khi trả lời):**
|
|
39
|
+
- Đọc câu hỏi → trả lời dựa trên module cards, KHÔNG đọc file này để lấy gợi ý
|
|
40
|
+
- Trả lời bằng ngôn ngữ tự nhiên, giải thích reasoning
|
|
41
|
+
- Nếu không chắc → nói thẳng, đừng đoán
|
|
42
|
+
|
|
43
|
+
> ⛔ **QUY TẮC NGÔN NGỮ (cưỡng chế bằng máy):** Câu hỏi phải viết bằng **ngôn ngữ nghiệp vụ**, người không-code đọc được. **CẤM** dính token code trong câu hỏi: `backtick`, `camelCase`, `snake_case`, `TÊN_HẰNG`, `tênHàm()`, endpoint `/api/...`, đuôi file (`.dart/.js`…). Nếu phải nói tới một khái niệm code → diễn đạt lại bằng nghiệp vụ ("trạng thái đơn hàng" thay vì `OrderStatus`). Kiểm bằng: `v-flow validate --module-cards` (cảnh báo; `--strict` chặn).
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## MUST — Câu Hỏi Bắt Buộc
|
|
48
|
+
|
|
49
|
+
> Tất cả câu hỏi MUST phải được AI trả lời đúng → mới được proceed `/v.specify`.
|
|
50
|
+
> Trả lời sai bất kỳ câu MUST nào → FAILED → dừng lại, không viết spec.
|
|
51
|
+
|
|
52
|
+
<!-- HƯỚNG DẪN: Viết 3-5 câu hỏi về business rules/flows QUAN TRỌNG NHẤT của module.
|
|
53
|
+
Câu hỏi phải:
|
|
54
|
+
- Yêu cầu AI giải thích ý nghĩa nghiệp vụ (WHY), không chỉ mô tả code (WHAT)
|
|
55
|
+
- Có liên quan trực tiếp đến spec sắp viết
|
|
56
|
+
- Không thể trả lời đúng chỉ bằng cách đọc tên hàm/endpoint
|
|
57
|
+
- Ưu tiên KHUNG TÌNH HUỐNG (scenario) — tự nó là ngôn ngữ nghiệp vụ:
|
|
58
|
+
dùng 5 dạng trong docs/business-quiz-guide.md (WHY / EXCEPTION / OWNERSHIP / IMPACT / CROSS-MODULE)
|
|
59
|
+
- KHÔNG dính token code (xem QUY TẮC NGÔN NGỮ ở trên) → `v-flow validate --module-cards` cảnh báo
|
|
60
|
+
Ví dụ tốt: "Khách gọi 45 phút sau khi đặt đòi đổi địa chỉ giao — hệ thống cho phép gì và vì sao? Ai quyết định mốc thời gian này?"
|
|
61
|
+
Ví dụ tệ: "Enum OrderStatus có những giá trị nào?"
|
|
62
|
+
-->
|
|
63
|
+
|
|
64
|
+
### Q01: {Tên ngắn — ví dụ: "Điều kiện hủy đơn hàng"} [⚙️ AI draft]
|
|
65
|
+
|
|
66
|
+
**Câu hỏi**: {Câu hỏi mở về business rule/flow quan trọng nhất — yêu cầu giải thích WHY và ai chịu trách nhiệm}
|
|
67
|
+
|
|
68
|
+
**Lý do quan trọng**: {Nếu AI hiểu sai điều này → spec sẽ sai ở đâu? Ảnh hưởng gì?}
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### Q02: {Tên ngắn} [⚙️ AI draft]
|
|
73
|
+
|
|
74
|
+
**Câu hỏi**: {Câu hỏi về edge case hoặc business constraint ít rõ ràng từ code}
|
|
75
|
+
|
|
76
|
+
**Lý do quan trọng**: {Tại sao điều này quan trọng với feature sắp viết spec}
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### Q03: {Tên ngắn} [⚙️ AI draft]
|
|
81
|
+
|
|
82
|
+
**Câu hỏi**: {Câu hỏi về actor, permission, hoặc ownership trong domain này}
|
|
83
|
+
|
|
84
|
+
**Lý do quan trọng**: {Hiểu sai actor → spec có thể thiếu/sai use case}
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## SHOULD — Câu Hỏi Nâng Cao
|
|
89
|
+
|
|
90
|
+
> Câu hỏi SHOULD: Trả lời sai → PASSED WITH WARNING, không block.
|
|
91
|
+
> Agent ghi concern vào `_session.md` và tiếp tục.
|
|
92
|
+
|
|
93
|
+
<!-- HƯỚNG DẪN: 2-3 câu hỏi về business context nâng cao:
|
|
94
|
+
- Integration với module khác
|
|
95
|
+
- Exceptional cases ít phổ biến
|
|
96
|
+
- Business rationale đằng sau thiết kế hiện tại
|
|
97
|
+
-->
|
|
98
|
+
|
|
99
|
+
### Q04: {Tên ngắn} [⚙️ AI draft]
|
|
100
|
+
|
|
101
|
+
**Câu hỏi**: {Câu hỏi về tích hợp với module khác hoặc exceptional case}
|
|
102
|
+
|
|
103
|
+
**Lý do quan trọng**: {Bỏ qua điều này sẽ ảnh hưởng gì đến chất lượng spec}
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### Q05: {Tên ngắn} [⚙️ AI draft]
|
|
108
|
+
|
|
109
|
+
**Câu hỏi**: {Câu hỏi về business rationale hoặc lịch sử quyết định thiết kế}
|
|
110
|
+
|
|
111
|
+
**Lý do quan trọng**: {Context này giúp spec tốt hơn ở điểm nào}
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Changelog
|
|
116
|
+
|
|
117
|
+
| Version | Ngày | Thay đổi | Bởi |
|
|
118
|
+
|---|---|---|---|
|
|
119
|
+
| 1.0 | {date} | Khởi tạo từ AI scan | v.understand |
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# Cross-Service Integration: {Tên Module}
|
|
3
|
+
## 1. HTTP/REST Calls
|
|
4
|
+
### Outgoing (Module này GỌI ra ngoài)
|
|
5
|
+
### Incoming (Service khác GỌI module này)
|
|
6
|
+
## 2. Message Queue (nếu có)
|
|
7
|
+
### Publish (Module này GỬI event)
|
|
8
|
+
### Consume (Module này NHẬN event)
|
|
9
|
+
## 3. Shared Database (nếu có)
|
|
10
|
+
## 4. External Integrations (hệ thống ngoài, nếu có)
|
|
11
|
+
## 5. Dependency Map (Tổng quan)
|
|
12
|
+
-->
|
|
13
|
+
# Cross-Service Integration: {Tên Module}
|
|
14
|
+
|
|
15
|
+
> **Audience**: Dev, Architect
|
|
16
|
+
> **AI generate**: Có Graph → cross-service calls auto-detected. Không Graph → scan HTTP clients, message consumers, external SDK imports.
|
|
17
|
+
> ⚠️ Mỗi integration phải ghi rõ: file nào gọi, endpoint/topic gì, payload gì, có retry/fallback không.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. HTTP/REST Calls
|
|
22
|
+
|
|
23
|
+
> Scan: Grep `HttpClient`, `fetch`, `axios`, `dio`, `RestTemplate`, `http.get/post`, `@HttpService` trong module.
|
|
24
|
+
|
|
25
|
+
### Outgoing (Module này GỌI ra ngoài)
|
|
26
|
+
|
|
27
|
+
<!-- HƯỚNG DẪN: Liệt kê TẤT CẢ HTTP calls RA NGOÀI module.
|
|
28
|
+
Phải scan code tìm http client calls, dio requests, fetch calls...
|
|
29
|
+
Ghi rõ file + line number thực tế.
|
|
30
|
+
-->
|
|
31
|
+
|
|
32
|
+
| # | Target Service | Endpoint | Method | Mục đích | File thực hiện gọi | Timeout | Retry? | Circuit Breaker? |
|
|
33
|
+
|---|---|---|---|---|---|---|---|---|
|
|
34
|
+
| 1 | {service_thực} | `{endpoint_thực}` | {method} | {mục đích} | `{file_thực}:{line}` | {timeout} | {✅/❌} | {✅/❌} |
|
|
35
|
+
|
|
36
|
+
**Payload chi tiết (nếu có):**
|
|
37
|
+
|
|
38
|
+
#### Call #1: {mô tả}
|
|
39
|
+
```json
|
|
40
|
+
// Request
|
|
41
|
+
{METHOD} {/endpoint/thực}
|
|
42
|
+
{
|
|
43
|
+
"{field}": "{type — mô tả}"
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Response
|
|
47
|
+
{
|
|
48
|
+
"{field}": "{type — mô tả}"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Error handling: {mô tả cách xử lý lỗi thực tế từ code}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Incoming (Service khác GỌI module này)
|
|
55
|
+
|
|
56
|
+
| # | Caller Service | Endpoint bị gọi | Method | Mục đích | Controller/Handler |
|
|
57
|
+
|---|---|---|---|---|---|
|
|
58
|
+
| 1 | {service_thực} | `{endpoint_thực}` | {method} | {mục đích} | `{file_thực}:{line}` |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 2. Message Queue (nếu có)
|
|
63
|
+
|
|
64
|
+
> Scan: Grep `publish`, `emit`, `subscribe`, `consume`, `@EventHandler`, `@OnEvent`, `Kafka`, `RabbitMQ`, `@MessagePattern`.
|
|
65
|
+
> Nếu module KHÔNG dùng message queue → ghi "Không sử dụng" và bỏ chi tiết.
|
|
66
|
+
|
|
67
|
+
### Publish (Module này GỬI event)
|
|
68
|
+
|
|
69
|
+
| # | Topic / Queue | Event Name | Khi nào publish | Payload chính | File publish | Ghi chú |
|
|
70
|
+
|---|---|---|---|---|---|---|
|
|
71
|
+
| 1 | `{topic_thực}` | `{EVENT_thực}` | {điều kiện} | `{fields chính}` | `{file_thực}:{line}` | |
|
|
72
|
+
|
|
73
|
+
### Consume (Module này NHẬN event)
|
|
74
|
+
|
|
75
|
+
| # | Topic / Queue | Event Name | Xử lý gì | File consumer | Error handling |
|
|
76
|
+
|---|---|---|---|---|---|
|
|
77
|
+
| 1 | `{topic_thực}` | `{EVENT_thực}` | {xử lý gì} | `{file_thực}:{line}` | {error handling} |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 3. Shared Database (nếu có)
|
|
82
|
+
|
|
83
|
+
> ⚠️ Shared DB là antipattern. Ghi lại để awareness và risk management.
|
|
84
|
+
> Nếu module KHÔNG share DB → ghi "Không có" và bỏ chi tiết.
|
|
85
|
+
|
|
86
|
+
| Table | Dùng chung với Module | Đọc/Ghi | Rủi ro | File access |
|
|
87
|
+
|---|---|---|---|---|
|
|
88
|
+
| `{table_thực}` | {module khác} | {R/W} | {rủi ro} | `{file_thực}:{line}` |
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 4. External Integrations (hệ thống ngoài, nếu có)
|
|
93
|
+
|
|
94
|
+
| # | System | Protocol | Mục đích | SLA / Timeout | Auth | File xử lý | Fallback khi fail |
|
|
95
|
+
|---|---|---|---|---|---|---|---|
|
|
96
|
+
| 1 | {system_thực} | {protocol} | {mục đích} | {timeout} | {auth} | `{file_thực}` | {fallback} |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 5. Dependency Map (Tổng quan)
|
|
101
|
+
|
|
102
|
+
<!-- HƯỚNG DẪN: Vẽ mermaid graph với tên service/module THỰC TẾ từ codebase.
|
|
103
|
+
KHÔNG copy graph mẫu — phải phản ánh dependencies thực tế đã scan ở trên.
|
|
104
|
+
-->
|
|
105
|
+
|
|
106
|
+
```mermaid
|
|
107
|
+
graph LR
|
|
108
|
+
subgraph "Module: {Tên Module}"
|
|
109
|
+
M[{ServiceChính}]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
subgraph "Internal"
|
|
113
|
+
I1[{DependencyNội1}]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
subgraph "External"
|
|
117
|
+
E1[{DependencyNgoài1}]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
M -->|{cách gọi}| I1
|
|
121
|
+
M -->|{cách gọi}| E1
|
|
122
|
+
|
|
123
|
+
style M fill:#4CAF50,color:#fff
|
|
124
|
+
style E1 fill:#FF9800,color:#fff
|
|
125
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# Database Schema: {Tên Module}
|
|
3
|
+
## 1. Danh Sách Bảng (Tables)
|
|
4
|
+
## 2. Chi Tiết Từng Bảng
|
|
5
|
+
### Bảng: `{table_thực}`
|
|
6
|
+
## 3. Mối Quan Hệ (Relationships)
|
|
7
|
+
## 4. DDL & Migrations Links
|
|
8
|
+
-->
|
|
9
|
+
# Database Schema: {Tên Module}
|
|
10
|
+
|
|
11
|
+
> **Audience chính**: Backend Dev, DBA, Data Analyst
|
|
12
|
+
> **AI generate**: Scan entity/model files, migrations, ORM annotations → auto-generate. Human verify constraints.
|
|
13
|
+
|
|
14
|
+
**Database**: {database thực — VD: PostgreSQL, MySQL, SQLite, MongoDB...}
|
|
15
|
+
**ORM**: {ORM thực — VD: TypeORM, Prisma, Sqflite, Mongoose...}
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 1. Danh Sách Bảng (Tables)
|
|
20
|
+
|
|
21
|
+
<!-- HƯỚNG DẪN: Liệt kê TẤT CẢ bảng/collection THỰC TẾ của module từ code.
|
|
22
|
+
Lấy từ entity files, migration files, hoặc CREATE TABLE statements.
|
|
23
|
+
TUYỆT ĐỐI KHÔNG copy bảng mẫu — phải scan code để tìm bảng thực.
|
|
24
|
+
-->
|
|
25
|
+
|
|
26
|
+
| Tên Bảng | Ý Nghĩa / Chức Năng | Entity/Model File | Số Cột | Ghi chú |
|
|
27
|
+
|---|---|---|---|---|
|
|
28
|
+
| `{table_thực_1}` | {mô tả chức năng} | `{entity_file_thực}` | {N} | {ghi chú} |
|
|
29
|
+
| `{table_thực_2}` | {mô tả chức năng} | `{entity_file_thực}` | {N} | {ghi chú} |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Chi Tiết Từng Bảng
|
|
34
|
+
|
|
35
|
+
### Bảng: `{table_thực_1}`
|
|
36
|
+
|
|
37
|
+
**Mô tả**: {mô tả bảng — lấy từ comment trong code hoặc suy luận từ tên + fields}
|
|
38
|
+
**Entity file**: `{entity_file_thực}`
|
|
39
|
+
|
|
40
|
+
<!-- HƯỚNG DẪN: Liệt kê TẤT CẢ columns từ entity/model definition.
|
|
41
|
+
Phải đọc file entity để lấy chính xác: tên cột, kiểu dữ liệu, constraints, default values.
|
|
42
|
+
-->
|
|
43
|
+
|
|
44
|
+
| Tên Cột | Kiểu Dữ Liệu | Constraints | Default | Ý Nghĩa | Ghi chú |
|
|
45
|
+
|---|---|---|---|---|---|
|
|
46
|
+
| `{column_thực}` | `{type_thực}` | {PK/FK/NN/UNIQUE} | {default} | {ý nghĩa} | {ghi chú} |
|
|
47
|
+
|
|
48
|
+
**Indexes** (nếu có):
|
|
49
|
+
- `{index_name}` — {type} on `{columns}`
|
|
50
|
+
|
|
51
|
+
### Bảng: `{table_thực_2}`
|
|
52
|
+
|
|
53
|
+
**Mô tả**: {mô tả}
|
|
54
|
+
**Entity file**: `{entity_file_thực}`
|
|
55
|
+
|
|
56
|
+
| Tên Cột | Kiểu Dữ Liệu | Constraints | Default | Ý Nghĩa |
|
|
57
|
+
|---|---|---|---|---|
|
|
58
|
+
| `{column_thực}` | `{type_thực}` | {constraints} | {default} | {ý nghĩa} |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 3. Mối Quan Hệ (Relationships)
|
|
63
|
+
|
|
64
|
+
<!-- HƯỚNG DẪN: Scan foreign keys, @OneToMany, @ManyToOne, @BelongsTo, references... trong code.
|
|
65
|
+
Phải ghi rõ ON DELETE behavior thực tế.
|
|
66
|
+
-->
|
|
67
|
+
|
|
68
|
+
| Bảng A | Quan hệ | Bảng B | Khóa Ngoại (FK) | ON DELETE | Ghi chú |
|
|
69
|
+
|---|---|---|---|---|---|
|
|
70
|
+
| `{table_A}` | {1→n / n→1 / n→n} | `{table_B}` | `{fk_column}` → `{ref_table}.{ref_column}` | {CASCADE/SET NULL/RESTRICT} | {ghi chú} |
|
|
71
|
+
|
|
72
|
+
```mermaid
|
|
73
|
+
erDiagram
|
|
74
|
+
{TABLE_A} ||--o{ {TABLE_B} : "{relationship}"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 4. DDL & Migrations Links
|
|
80
|
+
|
|
81
|
+
<!-- HƯỚNG DẪN: Link đến migration files hoặc CREATE TABLE statements thực tế trong codebase.
|
|
82
|
+
Nếu không có migrations riêng (VD: tạo bảng trong code) → ghi rõ file + hàm tạo bảng.
|
|
83
|
+
-->
|
|
84
|
+
|
|
85
|
+
- [{mô tả migration}]({file:///path/thực/đến/migration})
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# Dev Quiz: {Tên Module}
|
|
3
|
+
## ⚠️ Hướng Dẫn Sử Dụng
|
|
4
|
+
## MUST — Câu Hỏi Bắt Buộc
|
|
5
|
+
### DQ{NN}: {Tên ngắn} [target: {symbol} | direction: {upstream|downstream}]
|
|
6
|
+
## Changelog
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
module: domain-{tên-module}
|
|
11
|
+
module_version: "{version}"
|
|
12
|
+
created_at: "YYYY-MM-DD"
|
|
13
|
+
created_by: "v.understand"
|
|
14
|
+
status: "draft"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Dev Quiz: {Tên Module}
|
|
18
|
+
|
|
19
|
+
> ⚙️ **ANSWER KEY = GRAPH, KHÔNG PHẢI CON NGƯỜI.**
|
|
20
|
+
> Khác business-quiz (human chấm intent nghiệp vụ), dev-quiz **chấm máy** theo GitNexus:
|
|
21
|
+
> mỗi câu khai báo `target` symbol; đáp án đúng = blast-radius thật từ `gitnexus impact`.
|
|
22
|
+
> Sinh answer key: `v-flow dev-quiz <module>` · Chấm: `v-flow dev-quiz <module> --answers <file>`.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ⚠️ Hướng Dẫn Sử Dụng
|
|
27
|
+
|
|
28
|
+
**Cho người viết câu hỏi (Tech Lead / v.understand):**
|
|
29
|
+
- Mỗi câu hỏi PHẢI khai báo `[target: <tên symbol thật> | direction: upstream|downstream]` ở heading.
|
|
30
|
+
- `upstream` = ai phụ thuộc vào symbol (đổi nó thì gãy đâu) — dùng cho câu "blast-radius".
|
|
31
|
+
- `downstream` = symbol phụ thuộc vào ai.
|
|
32
|
+
- `target` phải là **symbol có thật trong graph** (hàm/method/class) — nếu sai tên → `v-flow dev-quiz` báo `unverified`.
|
|
33
|
+
- Câu hỏi test **khả năng suy luận tác động**, thứ phân biệt dev senior với junior.
|
|
34
|
+
|
|
35
|
+
**Cho người/agent trả lời:** liệt kê các symbol bị ảnh hưởng dưới `**Answer**:` (phân tách bằng dấu phẩy). Chấm bằng F1 so với graph.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## MUST — Câu Hỏi Bắt Buộc
|
|
40
|
+
|
|
41
|
+
<!-- HƯỚNG DẪN: 3-5 câu về tác động/kiến trúc. target = symbol QUAN TRỌNG / rủi ro cao của module.
|
|
42
|
+
Ví dụ: ### DQ01: Tác động khi đổi hủy đơn [target: cancelOrder | direction: upstream]
|
|
43
|
+
**Câu hỏi**: Nếu thay đổi logic hủy đơn, những thành phần nào sẽ bị ảnh hưởng trực tiếp/gián tiếp?
|
|
44
|
+
-->
|
|
45
|
+
|
|
46
|
+
### DQ01: {Tên ngắn} [target: {symbol} | direction: upstream]
|
|
47
|
+
|
|
48
|
+
**Câu hỏi**: {Nếu đổi `target`, những đâu sẽ gãy? Liệt kê thành phần phụ thuộc.}
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### DQ02: {Tên ngắn} [target: {symbol} | direction: upstream]
|
|
53
|
+
|
|
54
|
+
**Câu hỏi**: {Câu hỏi blast-radius cho symbol rủi ro thứ 2}
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Changelog
|
|
59
|
+
|
|
60
|
+
| Version | Ngày | Thay đổi | Bởi |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| 1.0 | {date} | Khởi tạo từ AI scan | v.understand |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# Phân Quyền & Vai Trò: {Tên Module}
|
|
3
|
+
## 1. Danh Sách Vai Trò (Roles)
|
|
4
|
+
## 2. Danh Sách Quyền (Permissions)
|
|
5
|
+
## 3. Ma Trận Phân Quyền (Role × Permission Matrix)
|
|
6
|
+
## 4. Phân Quyền Theo Dữ Liệu (Data Policies / VPS)
|
|
7
|
+
### 4.1 {Tên policy}
|
|
8
|
+
### 4.2 Bảng tổng hợp Data Scope
|
|
9
|
+
-->
|
|
10
|
+
# Phân Quyền & Vai Trò: {Tên Module}
|
|
11
|
+
|
|
12
|
+
> **Audience chính**: BA, Security, Backend Dev
|
|
13
|
+
> **AI generate**: Scan Auth Guards, Roles Decorators, RBAC/ABAC logic, middleware.
|
|
14
|
+
> ⚠️ Permissions phải lấy TỪ CODE THỰC TẾ (decorators, guards, middleware, config).
|
|
15
|
+
|
|
16
|
+
**Auth scheme**: {scheme thực — VD: JWT, Session, API Key, hoặc "N/A — local app"}
|
|
17
|
+
**RBAC implementation**: {implementation thực}
|
|
18
|
+
**Guard/Middleware file**: `{file_thực}`
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. Danh Sách Vai Trò (Roles)
|
|
23
|
+
|
|
24
|
+
> Source: `{enum_file_thực}` — enum `{RoleEnum_thực}`
|
|
25
|
+
|
|
26
|
+
<!-- HƯỚNG DẪN: Liệt kê roles TỪ CODE THỰC TẾ.
|
|
27
|
+
Scan enum definitions, role constants, @Roles decorators.
|
|
28
|
+
Nếu module KHÔNG có hệ thống roles → ghi rõ "Module không phân quyền theo roles" và điều chỉnh section.
|
|
29
|
+
-->
|
|
30
|
+
|
|
31
|
+
| Mã Role | Tên Vai Trò | Cấp Độ / Phạm Vi | Mô Tả | Cách xác định phạm vi |
|
|
32
|
+
|---|---|---|---|---|
|
|
33
|
+
| `{ROLE_thực}` | {tên} | {phạm vi} | {mô tả} | {cách filter data} |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2. Danh Sách Quyền (Permissions)
|
|
38
|
+
|
|
39
|
+
> Source: `{permission_file_thực}` — enum `{PermissionEnum_thực}`
|
|
40
|
+
|
|
41
|
+
| Mã Permission | Chức Năng Tương Ứng | API Endpoint / Method | Nhóm | Guard/Decorator |
|
|
42
|
+
|---|---|---|---|---|
|
|
43
|
+
| `{PERM_thực}` | {chức năng} | `{endpoint/method_thực}` | {nhóm} | `{guard thực}` |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 3. Ma Trận Phân Quyền (Role × Permission Matrix)
|
|
48
|
+
|
|
49
|
+
> ⚠️ Mỗi ô phải ghi rõ điều kiện bổ sung (nếu có). Không chỉ ✅/❌.
|
|
50
|
+
|
|
51
|
+
<!-- HƯỚNG DẪN: Tạo ma trận với roles và permissions THỰC TẾ đã liệt kê ở trên.
|
|
52
|
+
Headers cột = roles thực, headers hàng = permissions thực.
|
|
53
|
+
-->
|
|
54
|
+
|
|
55
|
+
| Permission \ Role | `{ROLE_1}` | `{ROLE_2}` | `{ROLE_3}` | Điều kiện bổ sung |
|
|
56
|
+
|---|---|---|---|---|
|
|
57
|
+
| `{PERM_1}` | {✅/❌ + scope} | {✅/❌ + scope} | {✅/❌ + scope} | {điều kiện từ code} |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 4. Phân Quyền Theo Dữ Liệu (Data Policies / VPS)
|
|
62
|
+
|
|
63
|
+
> ⚠️ Mô tả chi tiết cách hệ thống chặn dữ liệu theo Tenant/VPS/Owner. Ghi rõ implementation.
|
|
64
|
+
> Nếu module KHÔNG có data-level permissions → ghi rõ "Không có data filtering — tất cả users xem cùng data".
|
|
65
|
+
|
|
66
|
+
<!-- HƯỚNG DẪN: Scan WHERE clauses, filter logic, tenant_id, owner_id, branch_id trong queries.
|
|
67
|
+
Mô tả CHÍNH XÁC cách code filter data cho từng role.
|
|
68
|
+
-->
|
|
69
|
+
|
|
70
|
+
### 4.1 {Tên policy — VD: "Theo owner", "Theo tenant", "Theo branch"}
|
|
71
|
+
|
|
72
|
+
- **Ai áp dụng**: {role}
|
|
73
|
+
- **Cơ chế**: {mô tả cách filter}
|
|
74
|
+
- **Implementation**:
|
|
75
|
+
- File: `{file_thực}:{line}` — hàm `{function_thực}`
|
|
76
|
+
- **Edge case**: {edge case nếu có}
|
|
77
|
+
|
|
78
|
+
### 4.2 Bảng tổng hợp Data Scope
|
|
79
|
+
|
|
80
|
+
| Role | SELECT (View) | INSERT (Create) | UPDATE (Edit) | DELETE |
|
|
81
|
+
|---|---|---|---|---|
|
|
82
|
+
| `{ROLE_1}` | {scope} | {scope} | {scope} | {scope} |
|
|
83
|
+
| `{ROLE_2}` | {scope} | {scope} | {scope} | {scope} |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# State Machine: {Tên Module}
|
|
3
|
+
## 1. Sơ Đồ Trạng Thái (State Diagram)
|
|
4
|
+
## 2. Chi Tiết Các Trạng Thái (States)
|
|
5
|
+
## 3. Quy Tắc Chuyển Đổi (Transitions & Triggers)
|
|
6
|
+
## 4. Side-Effects (Hệ quả khi chuyển state)
|
|
7
|
+
-->
|
|
8
|
+
# State Machine: {Tên Module}
|
|
9
|
+
|
|
10
|
+
> **Audience chính**: BA, Backend Dev
|
|
11
|
+
> **AI generate**: Scan Enums, transition logic, side-effects trong code.
|
|
12
|
+
> ⚠️ States và transitions phải lấy TỪ CODE THỰC TẾ. Không bịa.
|
|
13
|
+
|
|
14
|
+
**Enum file**: `{file_thực}` — enum `{EnumName_thực}`
|
|
15
|
+
**Transition logic**: `{service_file_thực}` — các hàm xử lý chuyển state
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 1. Sơ Đồ Trạng Thái (State Diagram)
|
|
20
|
+
|
|
21
|
+
<!-- HƯỚNG DẪN: Vẽ stateDiagram với các states LẤY TỪ ENUM/CONST THỰC TẾ trong code.
|
|
22
|
+
Scan: enum Status, enum State, const STATUS_*, và các nơi state được thay đổi.
|
|
23
|
+
TUYỆT ĐỐI KHÔNG copy states mẫu (DRAFT, PENDING_APPROVAL...) nếu code không có.
|
|
24
|
+
Nếu module KHÔNG có state machine → ghi "Module không có state machine rõ ràng" và mô tả UI states thay thế.
|
|
25
|
+
-->
|
|
26
|
+
|
|
27
|
+
```mermaid
|
|
28
|
+
stateDiagram-v2
|
|
29
|
+
[*] --> {STATE_THỰC_1} : {event tạo — từ code}
|
|
30
|
+
{STATE_THỰC_1} --> {STATE_THỰC_2} : {event — từ code}
|
|
31
|
+
{STATE_THỰC_2} --> {STATE_THỰC_3} : {event — từ code}
|
|
32
|
+
{STATE_THỰC_3} --> [*]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2. Chi Tiết Các Trạng Thái (States)
|
|
38
|
+
|
|
39
|
+
| Trạng Thái (Mã Enum) | Tên Hiển Thị (UI) | Ý Nghĩa / Định Nghĩa | Có thể chuyển tiếp? |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| `{STATE_THỰC_1}` | {tên UI} | {ý nghĩa} | {✅ mô tả / ❌ final state} |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. Quy Tắc Chuyển Đổi (Transitions & Triggers)
|
|
46
|
+
|
|
47
|
+
> ⚠️ Mỗi transition phải có file reference + điều kiện cụ thể từ code.
|
|
48
|
+
|
|
49
|
+
| # | Trạng Thái Hiện Tại | Event Kích Hoạt | Trạng Thái Mới | Điều Kiện (Guards) | Actor (Ai được phép) | File Reference |
|
|
50
|
+
|---|---|---|---|---|---|---|
|
|
51
|
+
| T-01 | `{STATE_1}` | {event từ code} | `{STATE_2}` | {điều kiện từ code} | {actor} | `{file_thực}:{line}` |
|
|
52
|
+
|
|
53
|
+
**Transitions KHÔNG hợp lệ (code sẽ throw error):**
|
|
54
|
+
- {Liệt kê transitions bị cấm từ code thực tế}
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 4. Side-Effects (Hệ quả khi chuyển state)
|
|
59
|
+
|
|
60
|
+
> ⚠️ Ghi rõ side-effects từ code: notification, email, sync, audit log...
|
|
61
|
+
|
|
62
|
+
| Transition | Side-Effect | Cơ chế | File Reference | Ghi chú |
|
|
63
|
+
|---|---|---|---|---|
|
|
64
|
+
| → `{STATE}` | {side-effect từ code} | {cơ chế} | `{file_thực}:{line}` | |
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!-- HEADING MAP — Agent PHẢI dùng CHÍNH XÁC các heading dưới đây:
|
|
2
|
+
# Tech Context: {Tên Module}
|
|
3
|
+
## 1. Key Files
|
|
4
|
+
## 2. Architecture Patterns
|
|
5
|
+
## 3. Dependencies
|
|
6
|
+
### Module này GỌI (outgoing)
|
|
7
|
+
### Module khác GỌI module này (incoming)
|
|
8
|
+
## 4. Tech Debt & Known Issues
|
|
9
|
+
## 5. Test Coverage
|
|
10
|
+
-->
|
|
11
|
+
# Tech Context: {Tên Module}
|
|
12
|
+
|
|
13
|
+
> **Audience chính**: Dev, Tech Lead
|
|
14
|
+
> **AI generate**: Có Graph → ~100% auto. Không Graph → scan imports/files → ~70% auto
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Key Files
|
|
19
|
+
|
|
20
|
+
> ⚠️ Mỗi file phải có MÔ TẢ VAI TRÒ CỤ THỂ — không chỉ ghi "core logic" hay "xử lý API".
|
|
21
|
+
> Phải giải thích file này LÀM GÌ đủ rõ để dev mới đọc hiểu mà không cần mở code.
|
|
22
|
+
|
|
23
|
+
<!-- HƯỚNG DẪN: List TẤT CẢ files quan trọng trong module.
|
|
24
|
+
Đọc TỪNG file để viết mô tả vai trò CỤ THỂ (không phải "xử lý logic").
|
|
25
|
+
VD đúng: "Xử lý 5 use cases: load scenarios, open scenario, validate move, check solution, request hint"
|
|
26
|
+
VD sai: "Core business logic"
|
|
27
|
+
-->
|
|
28
|
+
|
|
29
|
+
| File | Vai trò CỤ THỂ | LOC | Có Test? | Ghi chú |
|
|
30
|
+
|---|---|---|---|---|
|
|
31
|
+
| `{file_thực_1}` | {mô tả vai trò cụ thể: file này làm gì, xử lý bao nhiêu operations, gọi dependencies nào} | ~{N} | {✅/❌} | |
|
|
32
|
+
| `{file_thực_2}` | {mô tả vai trò cụ thể} | ~{N} | {✅/❌} | |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Architecture Patterns
|
|
37
|
+
|
|
38
|
+
> ⚠️ Không chỉ liệt kê tên pattern. Mô tả CÁCH module thực sự áp dụng pattern đó — bao gồm cả chỗ vi phạm.
|
|
39
|
+
|
|
40
|
+
<!-- HƯỚNG DẪN: Phân tích patterns TỪ CODE THỰC TẾ.
|
|
41
|
+
Xem cấu trúc thư mục, cách import, flow data giữa các layers.
|
|
42
|
+
Ghi rõ cả nơi pattern bị vi phạm (bypass, coupling).
|
|
43
|
+
-->
|
|
44
|
+
|
|
45
|
+
- **{Pattern_thực}**: {Mô tả CÁCH module dùng — bao gồm ngoại lệ/vi phạm nếu có}
|
|
46
|
+
- **{Pattern_thực_2}**: {Mô tả}
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 3. Dependencies
|
|
51
|
+
|
|
52
|
+
### Module này GỌI (outgoing)
|
|
53
|
+
|
|
54
|
+
| Target | Cách gọi | Mục đích | File thực hiện gọi |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| `{target_thực}` | {DI / import / HTTP / ...} | {mục đích} | `{file_thực}:{line}` |
|
|
57
|
+
|
|
58
|
+
### Module khác GỌI module này (incoming)
|
|
59
|
+
|
|
60
|
+
| Caller | Cách gọi | Mục đích | File bị gọi |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| `{caller_thực}` | {cách gọi} | {mục đích} | `{file_thực}` → hàm `{function_thực}` |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 4. Tech Debt & Known Issues
|
|
67
|
+
|
|
68
|
+
> ⚠️ Chỉ đích danh file, mô tả vấn đề cụ thể, đánh giá severity.
|
|
69
|
+
|
|
70
|
+
<!-- HƯỚNG DẪN: Scan code tìm TODO, FIXME, HACK, WORKAROUND, DEPRECATED.
|
|
71
|
+
Đếm files > 300 LOC, hàm > 50 LOC.
|
|
72
|
+
Đánh giá severity: 🔴 Cao, 🟠 Trung bình, 🟡 Thấp
|
|
73
|
+
-->
|
|
74
|
+
|
|
75
|
+
| # | Vấn đề | Severity | File reference | Ảnh hưởng | Kế hoạch fix |
|
|
76
|
+
|---|---|---|---|---|---|
|
|
77
|
+
| 1 | {vấn đề cụ thể từ code} | {🔴/🟠/🟡} | `{file_thực}` | {ảnh hưởng} | [❓ CẦN HUMAN BỔ SUNG] |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 5. Test Coverage
|
|
82
|
+
|
|
83
|
+
| Loại test | Có? | Coverage ước tính | Tool | Ghi chú |
|
|
84
|
+
|---|---|---|---|---|
|
|
85
|
+
| Unit | {✅/❌} | ~{N}% | {tool} | |
|
|
86
|
+
| Integration | {✅/❌} | ~{N}% | {tool} | |
|
|
87
|
+
| E2E | {✅/❌} | ~{N}% | {tool} | |
|
|
88
|
+
|
|
89
|
+
**Files KHÔNG có test** (cần ưu tiên):
|
|
90
|
+
- `{file_thực}` — {mô tả}, {N} LOC
|