@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,260 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codebase-scanner
|
|
3
|
+
description: "Hướng dẫn Understand Agent scan sâu code để generate Module Cards có giá trị. Agent PHẢI đọc skill này trước khi scan bất kỳ module nào."
|
|
4
|
+
trigger: "Khi /v.understand cần generate module cards (Bước 4)"
|
|
5
|
+
phase: "U.0b"
|
|
6
|
+
used_by:
|
|
7
|
+
- /v.understand
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Codebase Scanner — Chiến lược Scan Chi Tiết
|
|
11
|
+
|
|
12
|
+
> ⚠️ Đây là **Skill bắt buộc** cho Understand Agent khi generate module cards.
|
|
13
|
+
> Đọc trước khi scan bất kỳ module nào. Không có chiến lược scan → output sơ sài.
|
|
14
|
+
>
|
|
15
|
+
> → Xem `gotchas.md` cho Anti-patterns (output vô giá trị) và Quality Gate.
|
|
16
|
+
> → Xem `examples/good/` cho mẫu output module card.
|
|
17
|
+
> → Chạy `.v-flow/skills/understand/codebase-scanner/scripts/scan-project-structure.sh <dir>` để pre-scan cấu trúc.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Nguyên tắc chung: Deep Code Reading
|
|
22
|
+
|
|
23
|
+
Với MỌI file module card, bạn phải:
|
|
24
|
+
|
|
25
|
+
1. **Đọc toàn bộ file code quan trọng** — KHÔNG CHỈ đọc tên file hoặc vài dòng đầu. Đọc ĐỦ SÂU để hiểu logic.
|
|
26
|
+
2. **Trích xuất logic từ if/else, switch, try/catch** — Đây là nơi chứa business rules thực sự.
|
|
27
|
+
3. **Theo dõi data flow** — Input vào từ đâu → xử lý qua hàm nào → output ra đâu → lưu DB bảng nào.
|
|
28
|
+
4. **Ghi nguồn tham chiếu** — Luôn kèm `file:line` hoặc tên hàm cụ thể.
|
|
29
|
+
5. **Gắn nhãn suy luận** — `[⚠️ AI-inferred]` khi suy đoán, `[❓ CẦN HUMAN BỔ SUNG]` khi thiếu context.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 🗂️ Module Lớn — Đầy Đủ & Đúng (nhiều file / LOC lớn)
|
|
34
|
+
|
|
35
|
+
> ⚠️ Áp dụng khi module có **>~30 file** hoặc **>~5k LOC** — lúc 1 context không nhồi hết → dễ ra card **nông, thiếu**.
|
|
36
|
+
> Quy trình thực thi (inventory → fan-out theo card → reconcile) nằm ở `agents/understand-agent.md` **Bước 4.0**. Mục này là **chuẩn chất lượng + kỷ luật đọc** mà mỗi (sub-)agent phải theo.
|
|
37
|
+
|
|
38
|
+
**"Đầy đủ" & "đúng" nghĩa là gì — đo được, không cảm tính:**
|
|
39
|
+
|
|
40
|
+
| | Định nghĩa cụ thể | Kiểm bằng |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| **Đầy đủ** | Phủ HẾT inventory: mọi endpoint · entity/bảng · state + transition · E2E flow · permission · cross-service call | Đối chiếu card vs `_inventory.md` — không còn mục trống |
|
|
43
|
+
| **Đúng** | Mọi claim/rule kèm `Source: file:line`; suy đoán → `[⚠️ AI-inferred]`; thiếu context → `[❓ CẦN HUMAN]` | Ref resolve được trong code/graph |
|
|
44
|
+
|
|
45
|
+
> ❌ "Đầy đủ" KHÔNG đo bằng "đã đọc hết file". Module 30k LOC vẫn chỉ có hữu hạn endpoint/entity/state — phủ hết *cái đó* mới là đủ.
|
|
46
|
+
|
|
47
|
+
**Kỷ luật đọc cho mỗi (sub-)agent — đọc SÂU đúng chỗ, không trải mỏng:**
|
|
48
|
+
|
|
49
|
+
- ✅ **Đọc sâu** (nơi chứa logic thật): entry points (controller/route), service nhiều `if/throw/validate`, entity + migration, enum status + nơi mutate, symbol blast-radius cao (`gitnexus impact`).
|
|
50
|
+
- ⏭️ **Table-scan là đủ** (đừng tốn ngân sách đọc sâu): DTO, generated code, boilerplate, test (chỉ đọc tên).
|
|
51
|
+
- 🦴 **Graph làm xương sống** khi có GitNexus: `query` (flow → use-cases) · `impact` (No-Go + dev-quiz target) · `context` (verify data flow controller→service→repo). Không đọc file tuần tự.
|
|
52
|
+
|
|
53
|
+
> 🔎 Spot-check sau khi xong (tùy chọn): `score-card` — `structural` + `grounded` là tín hiệu chất lượng có ích; `coverage` thấp trên module lớn là **bình thường**, ĐỪNG nhồi card để chạy theo nó. Score là nhiệt kế, không phải mục tiêu.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Scan Strategy cho từng file Module Card
|
|
58
|
+
|
|
59
|
+
### SKILL.md — Entry Point
|
|
60
|
+
|
|
61
|
+
**Cách scan:**
|
|
62
|
+
1. Đọc README, package description, hoặc comment đầu file chính để hiểu mục đích module.
|
|
63
|
+
2. Đếm số files, LOC (lines of code) ước tính để đánh giá Complexity.
|
|
64
|
+
3. Grep `if`, `throw`, `assert`, `validate` trong service/business logic files → trích xuất Key Business Rules.
|
|
65
|
+
4. Grep entity/model files → liệt kê Key Entities kèm fields chính.
|
|
66
|
+
5. Tìm files >500 LOC không có test, files có `// TODO`, `// HACK` → No-Go Zones.
|
|
67
|
+
|
|
68
|
+
**Output phải có:**
|
|
69
|
+
- **description**: Không phải "Module quản lý X". Phải là "Module xử lý CRUD cho X, tích hợp với Y để Z, sử dụng pattern A".
|
|
70
|
+
- **Quick Summary**: 3-4 câu phân tích kiến trúc thực tế (VD: "Sử dụng BLoC pattern, gọi API qua Repository layer, cache local bằng Hive. Không có unit test cho business logic.")
|
|
71
|
+
- **Key Business Rules**: Trích xuất TỪ CODE CỤ THỂ. VD: `BR-01: Nếu trạng thái WO là COMPLETED thì không cho phép chỉnh sửa (file: wo_service.dart:145, hàm updateWo)` [⚠️ AI-inferred]
|
|
72
|
+
- **Key Entities**: Kèm schema/fields quan trọng, VD: `WorkOrder — id, status (enum: DRAFT|PENDING|APPROVED), assigneeId, createdAt`
|
|
73
|
+
- **No-Go Zones**: Chỉ đích danh file + lý do, VD: "`auth_interceptor.dart` — 650 LOC, không có test, xử lý token refresh phức tạp"
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### use-cases.md — Logic & Flow
|
|
78
|
+
|
|
79
|
+
**Cách scan:**
|
|
80
|
+
1. **Tìm entry points** (controllers, handlers, route definitions) → liệt kê tất cả actions/endpoints.
|
|
81
|
+
2. **Với mỗi action quan trọng**: Đọc code từ controller → service → repository → DB. Vẽ lại luồng chạy.
|
|
82
|
+
3. **Tìm business rules**: Grep `if`, `when`, `switch`, `throw`, `guard`, `validate`, `check` trong service files. ĐỌC context xung quanh mỗi câu lệnh điều kiện để hiểu rule.
|
|
83
|
+
4. **Tìm state transitions**: Grep các enum status/state, tìm nơi chúng được thay đổi (setter, update, transition).
|
|
84
|
+
5. **Tìm permissions/roles**: Grep `@Roles`, `@Guard`, `authorize`, `permission`, `role`, `canAccess` trong module.
|
|
85
|
+
|
|
86
|
+
**Output phải có:**
|
|
87
|
+
- **E2E Flows**: VẼ RA LUỒNG CHẠY CỤ THỂ dạng: `Controller (POST /api/x) -> Service A (validate input, check permission) -> Repository (query DB, join table X+Y) -> Response (status 201, body: {id, status})`. Dùng mermaid sequence diagram cho flow phức tạp.
|
|
88
|
+
- **Business Rules**: KHÔNG liệt kê chung chung. Phải có dạng: "BR-01: Khi amount > 1000, hệ thống yêu cầu approval từ Manager (file: order_service.ts:89, hàm createOrder, `if (dto.amount > 1000) { await this.approvalService.request(...) }`)".
|
|
89
|
+
- **State Machine**: Vẽ mermaid stateDiagram-v2 với CÁC TRẠNG THÁI THỰC TẾ từ code (không bịa). Liệt kê transitions kèm điều kiện và actor.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### api-specs.md — Contracts
|
|
94
|
+
|
|
95
|
+
**Cách scan:**
|
|
96
|
+
1. **Tìm tất cả route/endpoint definitions**: Grep `@Get`, `@Post`, `@Put`, `@Delete`, `@Patch`, `router.get`, `app.post`, `@RequestMapping`, hoặc route file.
|
|
97
|
+
2. **Với mỗi endpoint**: Đọc handler/controller → xác định request params, body DTO, response format.
|
|
98
|
+
3. **Đọc DTO/Request/Response classes**: Liệt kê CHI TIẾT fields, types, validation rules (grep `@IsNotEmpty`, `@Min`, `@Max`, `required`, `@Field`).
|
|
99
|
+
4. **Tìm error responses**: Grep `throw`, `HttpException`, `BadRequest`, `Forbidden`, `NotFound` → liệt kê error codes và điều kiện.
|
|
100
|
+
5. **Tìm enums**: Grep `enum`, `const`, status codes → liệt kê values và ý nghĩa.
|
|
101
|
+
|
|
102
|
+
**Output phải có:**
|
|
103
|
+
- Bảng endpoints đầy đủ: Method, Path, Auth (role cụ thể), Mô tả ngắn.
|
|
104
|
+
- DTOs với TỪNG FIELD: name, type, required?, validation rules, default value.
|
|
105
|
+
- Error codes đặc thù kèm điều kiện trigger.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### ui-flows.md — Frontend (nếu có)
|
|
110
|
+
|
|
111
|
+
**Cách scan:**
|
|
112
|
+
1. **Tìm route/navigation definitions**: Grep `Route`, `GoRouter`, `Navigator`, `router`, `path:` → liệt kê tất cả màn hình.
|
|
113
|
+
2. **Với mỗi màn hình**: Đọc widget/component chính → xác định UI elements, form fields, buttons, lists.
|
|
114
|
+
3. **Tìm state management**: Grep `BLoC`, `Provider`, `Cubit`, `useState`, `Redux`, `Vuex` → xác định state nào quản lý data gì.
|
|
115
|
+
4. **Tìm API calls trong UI**: Grep `fetch`, `http`, `dio`, `axios`, `repository`, `api` trong component files → map component → API endpoint.
|
|
116
|
+
5. **Tìm field mapping**: So sánh form field names với DTO/entity field names → tạo bảng mapping UI field → DB column.
|
|
117
|
+
|
|
118
|
+
**Output phải có:**
|
|
119
|
+
- Bảng màn hình: Route, Component chính, Mô tả chức năng.
|
|
120
|
+
- Chi tiết UI Elements + behavior (VD: "Nút Submit → disabled khi form chưa valid, hiển thị loading spinner khi đang gọi API").
|
|
121
|
+
- **Fields Mapping**: Bảng rõ ràng: UI Label → API Field → DB Column → Validation.
|
|
122
|
+
- User Flow: Mô tả step-by-step thao tác người dùng.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### tech-context.md — Technical Details
|
|
127
|
+
|
|
128
|
+
**Cách scan:**
|
|
129
|
+
1. **List tất cả files trong module** → phân nhóm theo vai trò (controller, service, repository, entity, DTO, util).
|
|
130
|
+
2. **Với mỗi file cốt lõi**: Đọc code, viết 1-2 câu giải thích trách nhiệm CỤ THỂ (không chỉ "xử lý logic").
|
|
131
|
+
3. **Phân tích patterns**: Module dùng Repository pattern? Service layer? Event-driven? Direct DB access? Middleware chain?
|
|
132
|
+
4. **Tìm dependencies**: Grep `import`, `require`, `from`, `use` → lọc ra các module/service KHÁC đang được gọi.
|
|
133
|
+
5. **Tìm tech debt**: Grep `TODO`, `FIXME`, `HACK`, `WORKAROUND`, `DEPRECATED`. Đếm LOC lớn, cyclomatic complexity cao (files >300 LOC, hàm >50 LOC).
|
|
134
|
+
6. **Kiểm tra test coverage**: Tìm test files tương ứng (`*.test.*`, `*.spec.*`, `*_test.*`). Liệt kê files KHÔNG có test.
|
|
135
|
+
|
|
136
|
+
**Output phải có:**
|
|
137
|
+
- Bảng Key Files: File path, Vai trò CỤ THỂ (VD: "Xử lý CRUD cho WorkOrder, validate business rules trước khi save"), LOC, Có test?
|
|
138
|
+
- Patterns: Giải thích CÁCH module dùng pattern (VD: "Repository pattern — nhưng service layer bypass repository ở 3 chỗ để query trực tiếp DB").
|
|
139
|
+
- Dependencies: Bảng Target → Cách gọi → Mục đích.
|
|
140
|
+
- Tech Debt: Danh sách cụ thể kèm severity và file reference.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### cross-service.md — Integrations (nếu có)
|
|
145
|
+
|
|
146
|
+
**Cách scan:**
|
|
147
|
+
1. **Tìm HTTP calls ra ngoài**: Grep `HttpClient`, `fetch`, `axios`, `dio`, `RestTemplate`, `http.get/post` → xác định target service, endpoint, mục đích.
|
|
148
|
+
2. **Tìm message queue**: Grep `publish`, `emit`, `subscribe`, `consume`, `@EventHandler`, `@OnEvent`, `Kafka`, `RabbitMQ`, `Redis pub/sub`.
|
|
149
|
+
3. **Tìm shared resources**: Grep bảng DB được nhiều module đọc/ghi (cross-reference với db.md).
|
|
150
|
+
4. **Tìm external APIs**: Grep URLs, API keys, third-party SDKs.
|
|
151
|
+
|
|
152
|
+
**Output phải có:**
|
|
153
|
+
- Bảng HTTP Calls: Direction, Target, Endpoint cụ thể, Mục đích, Có retry/circuit breaker?
|
|
154
|
+
- Bảng Message Queue: Direction, Topic/Queue, Event name, Payload fields chính.
|
|
155
|
+
- External Integrations: System, Protocol, SLA/Timeout config.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### db.md — Database & Schema
|
|
160
|
+
|
|
161
|
+
**Cách scan:**
|
|
162
|
+
1. **Tìm entity/model definitions**: Grep `@Entity`, `@Table`, `@Model`, `@Collection`, class definitions kế thừa từ ORM base class.
|
|
163
|
+
2. **Với mỗi entity**: Đọc TẤT CẢ fields/columns — type, constraints (PK, FK, NOT NULL, UNIQUE, DEFAULT), annotations.
|
|
164
|
+
3. **Tìm relationships**: Grep `@OneToMany`, `@ManyToOne`, `@ManyToMany`, `@BelongsTo`, `@HasMany`, `@JoinColumn`, `references`, `foreign_key`.
|
|
165
|
+
4. **Tìm migration/DDL files**: List files trong `migrations/`, `database/`, `schema/`.
|
|
166
|
+
5. **Tìm indexes**: Grep `@Index`, `createIndex`, `INDEX` trong DDL.
|
|
167
|
+
|
|
168
|
+
**Output phải có:**
|
|
169
|
+
- Bảng Tables: Tên bảng, Mô tả mục đích, Entity file tham chiếu.
|
|
170
|
+
- Chi tiết từng bảng: TẤT CẢ columns — tên, type, constraints, default, ý nghĩa.
|
|
171
|
+
- Relationships: Bảng A → Quan hệ (1-1, 1-n, n-n) → Bảng B, Foreign key cụ thể, ON DELETE behavior.
|
|
172
|
+
- Links đến migration files (nếu có).
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### state-diagram.md — State Machine
|
|
177
|
+
|
|
178
|
+
**Cách scan:**
|
|
179
|
+
1. **Tìm enum/const định nghĩa states**: Grep `enum.*Status`, `enum.*State`, `const.*STATUS`, `PENDING`, `APPROVED`, `REJECTED`, `COMPLETED`.
|
|
180
|
+
2. **Tìm nơi state thay đổi**: Grep setter hoặc assignment của status field → đọc context xung quanh để hiểu điều kiện chuyển state.
|
|
181
|
+
3. **Tìm side-effects**: Khi state thay đổi, có gửi notification? Update bảng khác? Gọi API? Grep trong cùng hàm/method.
|
|
182
|
+
4. **Tìm guards/conditions**: Điều kiện nào phải thỏa mãn trước khi chuyển state? (VD: "Phải có approval trước khi PENDING → APPROVED").
|
|
183
|
+
|
|
184
|
+
**Output phải có:**
|
|
185
|
+
- Mermaid stateDiagram-v2 với TẤT CẢ states thực tế từ code.
|
|
186
|
+
- Bảng States: Mã enum, Tên hiển thị, Ý nghĩa/Định nghĩa.
|
|
187
|
+
- Bảng Transitions: State hiện tại → Event → State mới → Điều kiện/Guards → Actor (ai được phép).
|
|
188
|
+
- Side-Effects: Hệ quả cụ thể khi chuyển state (email, notification, sync, audit log...).
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### permissions.md — Authorization
|
|
193
|
+
|
|
194
|
+
**Cách scan:**
|
|
195
|
+
1. **Tìm role definitions**: Grep `enum.*Role`, `ROLE_`, `role:`, `@Roles`.
|
|
196
|
+
2. **Tìm permission definitions**: Grep `enum.*Permission`, `PERMISSION_`, `canAccess`, `authorize`, `@RequirePermission`.
|
|
197
|
+
3. **Tìm guards/middleware**: Grep `@Guard`, `@UseGuards`, `middleware`, `interceptor`, `canActivate` → đọc logic kiểm tra quyền.
|
|
198
|
+
4. **Tìm data-level permissions**: Grep `branch_id`, `tenant_id`, `owner_id`, `created_by` trong WHERE clauses hoặc query filters.
|
|
199
|
+
5. **Tìm RBAC config**: File config permissions, seed data, hoặc database table chứa role-permission mapping.
|
|
200
|
+
|
|
201
|
+
**Output phải có:**
|
|
202
|
+
- Bảng Roles: Mã, Tên, Phạm vi, Mô tả.
|
|
203
|
+
- Bảng Permissions: Mã permission, Chức năng tương ứng, Nhóm.
|
|
204
|
+
- Ma trận Role x Permission: Bảng chi tiết với ✅/❌ và điều kiện bổ sung.
|
|
205
|
+
- Data Policies: Giải thích cách hệ thống chặn data theo tenant/VPS/owner.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 🛑 Pre-Write Validation Gate (BẮT BUỘC)
|
|
210
|
+
|
|
211
|
+
> ⚠️ **TRƯỚC KHI GHI MỖI FILE**, agent PHẢI tự kiểm tra output. Đây là bước cuối cùng trước khi write.
|
|
212
|
+
|
|
213
|
+
### Checklist bắt buộc:
|
|
214
|
+
|
|
215
|
+
1. **Placeholder Check**: File output CÓ CHỨA các placeholder chưa thay thế không?
|
|
216
|
+
- Tìm: `{Tên Module}`, `{file}:{line}`, `{functionName}`, `{tên service}`, `{table_name}`, `{EntityName}`
|
|
217
|
+
- Nếu CÓ → ❌ DỪNG, quay lại scan code và điền data thực
|
|
218
|
+
|
|
219
|
+
2. **Example Data Check**: File output CÓ CHỨA data mẫu từ template không?
|
|
220
|
+
- Tìm: `work_orders`, `wo_items`, `wo_approval_logs`, `WoService`, `WoStatus`, `WoController`, `SAP ERP`, `wo.service.ts`, `wo.entity.ts`, `WoListBloc`, `WoDetailBloc`
|
|
221
|
+
- Nếu CÓ và module đang scan KHÔNG phải work-order → ❌ DỪNG, xóa data mẫu, thay bằng data thực
|
|
222
|
+
|
|
223
|
+
3. **Structure Check**: Heading structure (##, ###) có khớp template không?
|
|
224
|
+
- So sánh với template tương ứng trong `.v-flow/templates/module-card/`
|
|
225
|
+
- Nếu KHÔNG khớp → ❌ DỪNG, sửa lại
|
|
226
|
+
|
|
227
|
+
4. **Relevance Check**: Module không có feature tương ứng?
|
|
228
|
+
- VD: Mobile app không có REST API → bỏ `api-specs.md` hoặc ghi rõ "N/A"
|
|
229
|
+
- VD: Module không có state machine → bỏ `state-diagram.md` hoặc mô tả UI states
|
|
230
|
+
|
|
231
|
+
5. **Existing File Check**: File output ĐÃ TỒN TẠI với nội dung thực?
|
|
232
|
+
- Nếu CÓ → MERGE: đọc file cũ, bổ sung chi tiết mới, KHÔNG overwrite bằng template
|
|
233
|
+
- Nếu file cũ CÒN PLACEHOLDER → tạo lại từ đầu
|
|
234
|
+
|
|
235
|
+
6. **Heading Text Check** (QUAN TRỌNG): So sánh TỪNG heading (`##`, `###`) trong file output với `<!-- HEADING MAP -->` trong template tương ứng.
|
|
236
|
+
- Heading PHẢI GIỐNG NGUYÊN VĂN template (bao gồm: numbering, emoji, ngoặc đơn, ngôn ngữ VN)
|
|
237
|
+
- Chỉ thay phần `{placeholder}` bằng data thực
|
|
238
|
+
- Nếu heading **dùng `—` thay `:` (VD: `# Database Schema — X` thay vì `# Database Schema: X`)** → ❌ SAI
|
|
239
|
+
- Nếu heading **thiếu numbering (VD: `## E2E Flows` thay vì `## 1. Luồng Nghiệp Vụ E2E`)** → ❌ SAI
|
|
240
|
+
- Nếu heading **viết EN thay VN (VD: `## Relationships` thay vì `## 3. Mối Quan Hệ (Relationships)`)** → ❌ SAI
|
|
241
|
+
- Nếu heading **thiếu emoji (VD: `## No-Go Zones` thay vì `## ⚠️ No-Go Zones (trong module này)`)** → ❌ SAI
|
|
242
|
+
|
|
243
|
+
> 💡 **Quy tắc đơn giản**: Đọc lại file output — nếu Dev đọc mà confused "đây là data của module nào?" → file đó SAI.
|
|
244
|
+
> 💡 **Heading check nhanh**: Đếm số headings `##` trong output. Nếu ít hơn số headings `##` trong template → thiếu sections.
|
|
245
|
+
|
|
246
|
+
### Verify bằng CLI (tùy chọn — khi cần, KHÔNG phải cổng sinh card)
|
|
247
|
+
|
|
248
|
+
Checklist ở trên (Pre-Write Gate) là self-check bằng mắt và là điều kiện trước khi ghi file.
|
|
249
|
+
CLI dưới đây là kiểm tra **máy on-demand** — KHÔNG chạy xen kẽ lúc sinh card; chạy khi muốn
|
|
250
|
+
đối chiếu nhanh, vd **trước Tech Lead review / handoff**:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
v-flow validate --module-cards <module> # cấu trúc + heading + business-quiz
|
|
254
|
+
v-flow score-card <module> --oracle gitnexus --repo <repo> # điểm objective + "👉 Cần làm gì tiếp"
|
|
255
|
+
v-flow dev-quiz <module> --repo <repo> # answer key từ graph — target phải resolve
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
> ✅ "Scan xong" 1 module = **đủ bộ file card + đạt Quality Gate chiều sâu** (dev đọc hiểu logic
|
|
259
|
+
> không cần mở code), KHÔNG phải "validate sạch issue". `validate`/`score-card` chỉ để tham khảo on-demand.
|
|
260
|
+
> Cần `gitnexus` trên PATH (hoặc env `VFLOW_GITNEXUS_BIN`); `--repo` khi máy index nhiều repo.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codebase-scanner",
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"description": "Scan codebase structure, detect frameworks, modules, entry points, No-Go Zones",
|
|
5
|
+
"agent": "understand",
|
|
6
|
+
"phase": ["U.0"],
|
|
7
|
+
"triggers": ["understand_all", "understand_module", "understand_refresh"],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"config": {
|
|
10
|
+
"scan_depth": "full",
|
|
11
|
+
"ignore_patterns": ["node_modules", ".git", "dist", "build", "coverage", "__pycache__"],
|
|
12
|
+
"framework_detection": true,
|
|
13
|
+
"module_detection": true,
|
|
14
|
+
"entry_point_detection": true,
|
|
15
|
+
"output_format": "markdown"
|
|
16
|
+
},
|
|
17
|
+
"setup_questions": [
|
|
18
|
+
{
|
|
19
|
+
"id": "scan_scope",
|
|
20
|
+
"question": "Scope scan?",
|
|
21
|
+
"options": ["full", "src-only", "custom"],
|
|
22
|
+
"default": "full",
|
|
23
|
+
"description": "full = toàn bộ project. src-only = chỉ src/. custom = specify paths."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "include_tests",
|
|
27
|
+
"question": "Có scan test files không?",
|
|
28
|
+
"type": "boolean",
|
|
29
|
+
"default": true,
|
|
30
|
+
"description": "Scan tests giúp đánh giá coverage hiện tại."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "include_config",
|
|
34
|
+
"question": "Có scan config files không?",
|
|
35
|
+
"type": "boolean",
|
|
36
|
+
"default": true,
|
|
37
|
+
"description": "Scan configs giúp detect linting, CI/CD, và DevOps setup."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "max_file_size_kb",
|
|
41
|
+
"question": "Max file size để đọc nội dung (KB)?",
|
|
42
|
+
"type": "number",
|
|
43
|
+
"default": 500,
|
|
44
|
+
"description": "Files lớn hơn sẽ chỉ đọc header. Giúp tránh timeout."
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"hooks": {
|
|
48
|
+
"pre_scan": "Check project structure exists → detect package manager → detect language/framework",
|
|
49
|
+
"post_scan": "Generate context.md draft → mark all inferences with [⚠️ AI-inferred]"
|
|
50
|
+
},
|
|
51
|
+
"memory": {
|
|
52
|
+
"file": "scan-history.log",
|
|
53
|
+
"format": "[date] | [scope] | [files_scanned] | [modules_detected] | [frameworks] | [nogo_zones] | [duration_sec]",
|
|
54
|
+
"purpose": "Track scan efficiency — optimize future scans"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Good Example — Module Card Output cho `menu` module
|
|
2
|
+
|
|
3
|
+
> Đây là output mẫu khi codebase-scanner scan một module UI-only (không có backend/DB).
|
|
4
|
+
|
|
5
|
+
## SKILL.md Output
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
module: menu
|
|
10
|
+
complexity: Low
|
|
11
|
+
layer: Presentation only
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Module: Menu
|
|
15
|
+
|
|
16
|
+
## Description
|
|
17
|
+
Module quản lý màn hình chính (Home) của ứng dụng Xiangqi, đóng vai trò
|
|
18
|
+
navigation hub chuyển hướng user tới các tính năng: Play, Analysis, Openbook,
|
|
19
|
+
Replay. Sử dụng StatelessWidget pattern, không có business logic phức tạp.
|
|
20
|
+
[⚠️ AI-inferred: Không tìm thấy state management trong module này]
|
|
21
|
+
|
|
22
|
+
## Quick Summary
|
|
23
|
+
- Presentation-only module — không có domain/data layer
|
|
24
|
+
- Navigation qua GoRouter, 4 route targets
|
|
25
|
+
- 2 widgets chính: MenuScreen (grid layout), MenuCard (reusable)
|
|
26
|
+
- Không có API call, không có DB access
|
|
27
|
+
- 0 test files
|
|
28
|
+
|
|
29
|
+
## Key Business Rules
|
|
30
|
+
- Không có business rules — module chỉ hiển thị menu items
|
|
31
|
+
|
|
32
|
+
## Key Entities
|
|
33
|
+
- Không có entities — module không quản lý data
|
|
34
|
+
|
|
35
|
+
## No-Go Zones
|
|
36
|
+
- Không có No-Go Zones (module nhỏ, đơn giản)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Điểm đáng chú ý
|
|
40
|
+
|
|
41
|
+
✅ **description** cụ thể — "navigation hub", không phải "module quản lý menu"
|
|
42
|
+
✅ **[⚠️ AI-inferred]** đánh dấu rõ thông tin suy luận
|
|
43
|
+
✅ **Quick Summary** nêu layer, patterns, test coverage
|
|
44
|
+
✅ **"Không có"** khi module không applicable — KHÔNG bịa data
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Gotchas — Codebase Scanner
|
|
2
|
+
|
|
3
|
+
> Cập nhật liên tục khi Agent gặp edge case mới.
|
|
4
|
+
> Rule of thumb: Nếu Agent mắc cùng một lỗi 2 lần → bắt buộc phải có gotcha.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Anti-patterns — Output VÔ GIÁ TRỊ
|
|
9
|
+
|
|
10
|
+
| Anti-pattern | Ví dụ BAD | Ví dụ GOOD |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Liệt kê tên file không giải thích | "Key files: service.ts, controller.ts" | "service.ts (250 LOC): Xử lý CRUD WO, validate business rules (amount > 0, status DRAFT mới cho sửa)" |
|
|
13
|
+
| Business rule chung chung | "BR-01: Validate input trước khi lưu" | "BR-01: `amount` phải > 0 và `assignee_id` cùng `branch_id` với user (file: wo_service.dart:89)" |
|
|
14
|
+
| API không có chi tiết | "POST /api/orders — Tạo order" | "POST /api/orders — Auth: ROLE_USER. Body: {itemId: required, qty: min:1}. Error 400: qty < 1" |
|
|
15
|
+
| State diagram bịa | "Có trạng thái: Created, Done" | "States từ enum `WoStatus` (wo_status.dart): DRAFT, PENDING, APPROVED, COMPLETED, CANCELLED" |
|
|
16
|
+
| Permissions chung chung | "Admin toàn quyền, User hạn chế" | "MANAGER: ✅ view/edit WO trong branch (filter branch_id), ❌ delete. USER: ✅ WO do mình tạo, ❌ approve" |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Quality Gate — Tự kiểm tra trước khi output
|
|
21
|
+
|
|
22
|
+
| Tiêu chí | Câu hỏi tự kiểm | Nếu KHÔNG → |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| **Depth** | "Tôi đã ĐỌC code bên trong các hàm chính chưa?" | Quay lại đọc code |
|
|
25
|
+
| **Specificity** | "Mỗi business rule có kèm file:line reference?" | Thêm reference |
|
|
26
|
+
| **Actionability** | "Dev đọc file này có HIỂU logic mà không cần mở code?" | Viết chi tiết hơn |
|
|
27
|
+
| **Completeness** | "Đã phủ HẾT inventory? (mọi endpoint/entity/state/flow/permission/cross-service đều có trong card)" | Bổ sung mục thiếu — phủ inventory, không phải đọc hết file |
|
|
28
|
+
| **Honesty** | "Tôi có bịa thông tin? Có gắn [⚠️ AI-inferred]?" | Gắn nhãn |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Gotchas phổ biến
|
|
33
|
+
|
|
34
|
+
1. ❌ ĐỪNG đoán kiến trúc nếu không có bằng chứng trong code → ghi `[⚠️ AI-inferred]`
|
|
35
|
+
2. ❌ ĐỪNG đánh dấu No-Go Zone quá rộng → hỏi Tech Lead trước
|
|
36
|
+
3. ❌ File `package.json` không phản ánh thực tế import → scan `src/` thực tế
|
|
37
|
+
4. ❌ ĐỪNG chỉ đọc tên file/hàm rồi liệt kê — phải đọc NỘI DUNG bên trong
|
|
38
|
+
5. ❌ ĐỪNG bịa state diagram — chỉ vẽ states thực sự có trong enum/const
|
|
39
|
+
6. ✅ Ưu tiên đọc README và commit history để hiểu intent gốc
|
|
40
|
+
7. ✅ Cross-reference giữa controller → service → repository để verify data flow
|
|
41
|
+
8. ✅ Khi gặp business rule phức tạp, trích dẫn code snippet cụ thể
|
|
42
|
+
9. ✅ Module lớn (>~30 file / >5k LOC): KHÔNG đọc tuần tự — quy trình **Bước 4.0** (inventory → fan-out theo card → reconcile) trong agent doc + chuẩn **"Module Lớn — Đầy Đủ & Đúng"** trong `SKILL.md`. "Đầy đủ" = phủ hết inventory; "đúng" = mọi claim có `Source:`/nhãn
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# scan-project-structure.sh — Quét cấu trúc dự án cho Understand Agent
|
|
3
|
+
# Usage: ./scan-project-structure.sh <project_root>
|
|
4
|
+
#
|
|
5
|
+
# Output: Summary cấu trúc dự án, dependencies, entry points
|
|
6
|
+
|
|
7
|
+
ROOT="${1:-.}"
|
|
8
|
+
|
|
9
|
+
echo "📂 Project Structure Scan: $ROOT"
|
|
10
|
+
echo "════════════════════════════════════════"
|
|
11
|
+
echo ""
|
|
12
|
+
|
|
13
|
+
# 1. Tech Stack Detection
|
|
14
|
+
echo "### 1. Tech Stack"
|
|
15
|
+
[ -f "$ROOT/package.json" ] && echo " 📦 Node.js — $(grep '"name"' "$ROOT/package.json" | head -1)"
|
|
16
|
+
[ -f "$ROOT/pubspec.yaml" ] && echo " 🎯 Flutter/Dart"
|
|
17
|
+
[ -f "$ROOT/requirements.txt" ] && echo " 🐍 Python"
|
|
18
|
+
[ -f "$ROOT/pom.xml" ] && echo " ☕ Java (Maven)"
|
|
19
|
+
[ -f "$ROOT/build.gradle" ] && echo " ☕ Java/Kotlin (Gradle)"
|
|
20
|
+
[ -f "$ROOT/go.mod" ] && echo " 🐹 Go"
|
|
21
|
+
[ -f "$ROOT/Cargo.toml" ] && echo " 🦀 Rust"
|
|
22
|
+
echo ""
|
|
23
|
+
|
|
24
|
+
# 2. File Statistics
|
|
25
|
+
echo "### 2. File Statistics"
|
|
26
|
+
for ext in js ts jsx tsx py dart java kt go rs; do
|
|
27
|
+
count=$(find "$ROOT" -name "*.$ext" -not -path "*/node_modules/*" -not -path "*/.dart_tool/*" -not -path "*/build/*" 2>/dev/null | wc -l | tr -d ' ')
|
|
28
|
+
[ "$count" -gt 0 ] && echo " .$ext: $count files"
|
|
29
|
+
done
|
|
30
|
+
echo ""
|
|
31
|
+
|
|
32
|
+
# 3. Entry Points
|
|
33
|
+
echo "### 3. Potential Entry Points"
|
|
34
|
+
for pattern in "main.js" "index.js" "app.js" "server.js" "main.ts" "index.ts" "main.dart" "main.py" "app.py" "Main.java"; do
|
|
35
|
+
find "$ROOT" -name "$pattern" -not -path "*/node_modules/*" -not -path "*/build/*" 2>/dev/null | while read f; do
|
|
36
|
+
echo " → $f"
|
|
37
|
+
done
|
|
38
|
+
done
|
|
39
|
+
echo ""
|
|
40
|
+
|
|
41
|
+
# 4. Test Coverage
|
|
42
|
+
echo "### 4. Test Files"
|
|
43
|
+
test_count=$(find "$ROOT" -name "*.test.*" -o -name "*.spec.*" -o -name "*_test.*" 2>/dev/null | grep -v node_modules | wc -l | tr -d ' ')
|
|
44
|
+
src_count=$(find "$ROOT" -name "*.js" -o -name "*.ts" -o -name "*.dart" -o -name "*.py" 2>/dev/null | grep -v node_modules | grep -v test | grep -v spec | wc -l | tr -d ' ')
|
|
45
|
+
echo " Source files: $src_count"
|
|
46
|
+
echo " Test files: $test_count"
|
|
47
|
+
[ "$src_count" -gt 0 ] && echo " Ratio: $(echo "scale=0; $test_count * 100 / $src_count" | bc 2>/dev/null || echo "N/A")%"
|
|
48
|
+
echo ""
|
|
49
|
+
|
|
50
|
+
# 5. Potential No-Go Zones
|
|
51
|
+
echo "### 5. Potential No-Go Zones (large files, no tests)"
|
|
52
|
+
find "$ROOT" -name "*.js" -o -name "*.ts" -o -name "*.dart" -o -name "*.py" 2>/dev/null | \
|
|
53
|
+
grep -v node_modules | grep -v test | grep -v spec | while read f; do
|
|
54
|
+
loc=$(wc -l < "$f" 2>/dev/null | tr -d ' ')
|
|
55
|
+
if [ "$loc" -gt 300 ]; then
|
|
56
|
+
basename="${f##*/}"
|
|
57
|
+
testfile=$(find "$ROOT" -name "${basename%.*}.test.*" -o -name "${basename%.*}.spec.*" -o -name "${basename%.*}_test.*" 2>/dev/null | head -1)
|
|
58
|
+
[ -z "$testfile" ] && echo " ⚠️ $f ($loc LOC, NO TEST)"
|
|
59
|
+
fi
|
|
60
|
+
done
|
|
61
|
+
echo ""
|
|
62
|
+
|
|
63
|
+
echo "════════════════════════════════════════"
|
|
64
|
+
echo "📊 Scan complete."
|