# Điều Tra Source Code — Kiểm Soát Chi Phí Token

> File này là quy tắc dùng chung cho **mọi** skill có bước "đọc/điều tra source code trước khi phân tích" (Gate 1 kiểu BA/Dev/QA: `read-study-requirement`, `create-spec` (`skill-ba-initial-analysis-v1`), `test-analysis`, `create-system-requirement`, và bất kỳ skill mới nào có cùng pattern).
> Trích xuất từ `create-system-requirement/SKILL.md` Step 2 — skill đầu tiên áp dụng và tự xác nhận đây là đòn bẩy tiết kiệm token hiệu quả nhất trong cả bộ ai-flow-kit (xem `docs/internal/Token Problems.md` §2.5/§2.3). Nguyên nhân tốn token phổ biến nhất ở bước điều tra source code **không phải** do đọc nhiều file, mà do **mở lại cùng 1 file/module nhiều lần** — một lần cho mỗi Business Rule/Flow step/tiêu chí đang được đối chiếu, thay vì điều tra module đó 1 lần rồi trả lời nhiều câu hỏi từ cùng 1 lần đọc.

## Quy tắc — áp dụng theo đúng thứ tự ưu tiên

1. **GitNexus MCP trước tiên, luôn luôn** — nếu `.mcp.json` có entry `gitnexus`, dùng `gitnexus: context()`/`query()`/`impact()` thay cho việc đọc nhiều file thủ công cho khu vực đó. Không fallback về `grep`/`Read` thủ công cho 1 module mà GitNexus đã cover được.
2. **Delegate việc explore cho `Explore` sub-agent khi không có GitNexus hoặc GitNexus không cover** — spawn 1 `Explore` agent cho mỗi concern riêng biệt (vd "checkout controller + transaction boundary", "cart/pricing repository", "frontend checkout flow"), chạy song song, mỗi agent trả về finding cô đọng (`file:line` + 1–2 câu mô tả hành vi) — **không** trả raw file content. Đây là đòn bẩy thực sự kiểm soát chi phí token của session chính, độc lập với model đang chạy skill chính.
3. **Điều tra theo module/concern, không theo từng item (Business Rule/Flow step/tiêu chí).** Đọc/query "toàn bộ luồng checkout transaction" 1 lần, rồi trả lời 10 Business Rule từ đúng 1 lần đọc đó — không mở lại `OrderController.php` từ đầu cho mỗi BR có chạm tới file này.
4. **Giữ 1 bảng Investigation Notes chạy dọc quá trình điều tra** (cột: tham chiếu yêu cầu → `file:line` → 1 dòng finding), xây từ kết quả GitNexus/Explore. Bước phân tích/viết draft phía sau phải đọc từ bảng này, không trigger đọc file mới cho từng mục — chỉ mở lại file khi bảng chưa trả lời được đúng câu hỏi đang cần.

## Rủi ro cần biết khi áp dụng

Explore sub-agent trả về finding cô đọng thay vì raw content — có thể bỏ sót chi tiết nhỏ mà chỉ đọc full file mới thấy (vd 1 edge case ẩn trong logic phức tạp). Đây là rủi ro đã được chấp nhận ở `create-system-requirement` (skill đầu tiên áp dụng quy tắc này) — không phải rủi ro mới phát sinh khi mở rộng sang skill khác, chỉ là mở rộng phạm vi rủi ro đã biết. Nếu 1 khu vực code đặc biệt phức tạp/rủi ro cao (payment, auth, data integrity), cân nhắc đọc trực tiếp thay vì delegate.

## Cách trích dẫn quy tắc này trong một SKILL.md

Thêm 1 dòng ngay tại bước điều tra source code của skill:

```
Áp dụng `custom/rules/investigation-cost-control.md` (GitNexus-first → Explore sub-agent
delegation → điều tra theo module không theo item → Investigation Notes table) — đây là
bước thường tốn token nhất trong skill, xem file rule để biết cách kiểm soát.
```
