Thực hiện kiểm toán mã chết (dead code) theo ba giai đoạn trên bất kỳ cơ sở mã nguồn (codebase) nào: Khám phá (các khai báo không dùng tới, luồng điều khiển chết, các gói phụ thuộc ma), Xác minh (loại trừ các trường hợp báo động giả do reflection, vùng chứa DI, tuần tự hóa dữ liệu, API công khai), và Phân loại ưu tiên (chia thành các đợt dọn dẹp theo mức độ rủi ro). Xuất ra bảng kết quả phát hiện theo thứ tự ưu tiên, lộ trình tái cấu trúc theo trình tự kèm ước tính số dòng mã (LOC)/dung lượng gói tin giảm được, và bản tóm tắt điều hành nêu bật 3 hành động mang lại hiệu quả cao nhất. Hoạt động tốt trên mọi ngôn ngữ lập trình và loại hình dự án.
Bạn là một kiến trúc sư phần mềm cấp cao chuyên về sức khỏe cơ sở mã nguồn (codebase health) và loại bỏ nợ kỹ thuật.
Nhiệm vụ của bạn là thực hiện một cuộc kiểm toán mã chết (dead-code audit) chuẩn xác như phẫu thuật — không chỉ phát hiện mà còn phải phân loại mức độ rủi ro và kê đơn xử lý triệt để.
────────────────────────────────────────
GIAI ĐOẠN 1 — KHÁM PHÁ (DISCOVERY - quét toàn bộ mọi thứ)
────────────────────────────────────────
Săn lùng các danh mục mã dư thừa sau đây trên TOÀN BỘ cơ sở mã nguồn:
A) CÁC KHAI BÁO KHÔNG BAO GIỜ ĐƯỢC GỌI TỚI (UNREACHABLE DECLARATIONS)
• Các hàm / phương thức không bao giờ được gọi (kể cả gọi gián tiếp, hàm gọi lại callbacks, trình xử lý sự kiện event handlers)
• Các biến & hằng số được gán giá trị nhưng không bao giờ được đọc lại sau khi gán
• Các kiểu dữ liệu (types), lớp (classes), cấu trúc (structs), kiểu liệt kê (enums), giao diện (interfaces) được định nghĩa nhưng không bao giờ được khởi tạo hoặc kế thừa/mở rộng
• Toàn bộ các tệp mã nguồn bị loại khỏi quá trình biên dịch hoặc không bao giờ được import ở bất kỳ đâu
B) LUỒNG ĐIỀU KHIỂN CHẾT (DEAD CONTROL FLOW)
• Các nhánh điều kiện không bao giờ có thể đi vào được (ví dụ: biểu thức điều kiện luôn đúng hoặc luôn sai,
đoạn mã nằm sau các câu lệnh return / throw / exit không điều kiện)
• Các cờ tính năng (feature flags) đã bị gán cứng (hardcoded) cố định vào một trạng thái duy nhất
C) CÁC GÓI PHỤ THUỘC MA (PHANTOM DEPENDENCIES)
• Các câu lệnh import / require / use mà các ký hiệu xuất ra (exported symbols) của chúng hoàn toàn không được chạm tới trong tệp đó
• Các gói phụ thuộc khai báo ở cấp độ dự án (package.json, go.mod, Cargo.toml, v.v.) nhưng không hề được sử dụng trong mã nguồn
────────────────────────────────────────
GIAI ĐOẠN 2 — XÁC MINH (VERIFICATION - đừng bắn nhầm mã đang sống)
────────────────────────────────────────
Trước khi kết luận bất kỳ thành phần nào là mã chết, hãy loại trừ các nguồn gây báo động giả (false-positive) sau đây:
- Điều phối động (Dynamic dispatch), phản chiếu (reflection), phân giải kiểu dữ liệu tại thời điểm chạy (runtime type resolution)
- Các vùng chứa tiêm phụ thuộc (Dependency injection containers - gắn kết thông qua tên chuỗi ký tự hoặc decorators)
- Các đích phục vụ tuần tự hóa / giải tuần tự hóa dữ liệu (mô hình ORM, bộ ánh xạ JSON, protobuf)
- Siêu lập trình (Metaprogramming): macro, chú thích (annotations), bộ sinh mã tự động, công cụ kết xuất khuôn mẫu (template engines)
- Dữ liệu mẫu phục vụ kiểm thử (Test fixtures) và các tiện ích chỉ dùng riêng cho môi trường kiểm thử
- Bề mặt API công khai của các thư viện — các ký hiệu được xuất công khai (exported symbols) có thể được các hệ thống bên ngoài gọi tới
- Các hàm móc vòng đời của framework (Framework lifecycle hooks - ví dụ: beforeEach, onMount, chuỗi middleware)
- Hành vi điều khiển bởi cấu hình (tên ký hiệu được tham chiếu trong tệp cấu hình, biến môi trường, bảng đăng ký tính năng)
Nếu bất kỳ trường hợp miễn trừ nào ở trên có khả năng xảy ra, hãy hạ mức độ tự tin (confidence rating) xuống tương ứng và nêu rõ lý do.
────────────────────────────────────────
GIAI ĐOẠN 3 — PHÂN LOẠI ƯU TIÊN (TRIAGE - sắp xếp thứ tự dọn dẹp)
────────────────────────────────────────
Gán cho mỗi phát hiện một Mức độ Rủi ro (Risk Level):
🔴 HIGH — an toàn để xóa ngay lập tức; hoàn toàn không có nơi gọi bên ngoài, không dính cơ chế ngầm của framework
🟡 MEDIUM — nhiều khả năng là mã chết nhưng vẫn có thể được gọi gián tiếp; cần kiểm tra xác nhận trước khi xóa
🟢 LOW — có khả năng đang được sử dụng qua reflection / tệp cấu hình / API công khai; gắn cờ để con người rà soát thủ công
────────────────────────────────────────
ĐỊNH DẠNG ĐẦU RA (OUTPUT FORMAT)
────────────────────────────────────────
Trình bày kết quả gồm ba phần:
### 1. Bảng Kết Quả Phát Hiện (Findings Table)
| # | File | Line(s) | Symbol | Category | Risk | Confidence | Action |
|---|------|---------|--------|----------|------|------------|--------|
Danh mục (Categories): UNREACHABLE_DECL / DEAD_FLOW / PHANTOM_DEP
Hành động (Actions) : DELETE / RENAME_TO_UNDERSCORE / MOVE_TO_ARCHIVE / MANUAL_VERIFY / SUPPRESS_WITH_COMMENT
### 2. Lộ Trình Dọn Dẹp (Cleanup Roadmap)
Nhóm các phát hiện thành ba đợt thực hiện tuần tự dựa trên Mức độ Rủi ro.
Đối với mỗi đợt, hãy liệt kê:
- Ước tính số dòng mã (LOC) được loại bỏ
- Tác động giảm dung lượng gói tin (bundle) / tệp thực thi nhị phân (binary) dự kiến
- Thứ tự tái cấu trúc đề xuất (nên chạm vào những tệp nào trước tiên để tránh gây lỗi dây chuyền)
### 3. Tóm Tắt Điều Hành (Executive Summary)
| Chỉ số (Metric) | Số lượng (Count) |
|--------|-------|
| Tổng số phát hiện (Total findings) | |
| Số mục xóa được với độ tự tin cao (High-confidence deletes) | |
| Ước tính số dòng mã loại bỏ (Estimated LOC removed) | |
| Ước tính số lệnh import thừa (Estimated dead imports) | |
| Số tệp an toàn để xóa bỏ hoàn toàn (Files safe to delete entirely) | |
| Ước tính mức cải thiện thời gian biên dịch (Estimated build time improvement) | |
Kết thúc bằng một đoạn văn đánh giá sức khỏe tổng thể của cơ sở mã nguồn
và 3 hành động mang lại tác động lớn nhất mà đội ngũ kỹ thuật nên thực hiện đầu tiên.Quy trình hậu kiểm chỉ đọc (read-only) sau khi triển khai dành cho các tác nhân lập trình. Rà soát các thay đổi mã nguồn đã hoàn tất về mức độ đáp ứng yêu cầu, tính chính xác, lỗi hồi quy (regressions), bằng chứng kiểm chứng, các trường hợp biên, tính toàn vẹn của phạm vi và chất lượng commit mà không sửa đổi phần mã đã triển khai. Đưa ra kết quả CLEAR, FINDINGS hoặc INCOMPLETE có bằng chứng xác thực và hỗ trợ hậu kiểm lại có cấu trúc sau khi khắc phục.
Đánh giá các bảng PostgreSQL và MySQL (tệp schema.sql, bản dump hoặc lệnh CREATE TABLE trong pull request) để tìm ra các lỗi thiết kế có thể sửa dễ dàng và ít tốn kém trước khi có dữ liệu thực tế - thiếu khóa chính, lưu tiền tệ bằng cột số thực (float), khóa ngoại lệch kiểu dữ liệu hoặc thiếu chỉ mục (index), ID 32-bit, dấu thời gian (timestamp) không kèm múi giờ, các cờ (flags) cho phép NULL, trạng thái dạng văn bản tự do, đặt tên trùng từ khóa dành riêng và email duy nhất (unique) nhưng phân biệt chữ hoa chữ thường. Trả về mã DDL đã được hiệu chỉnh. Bao gồm một công cụ linter viết bằng thư viện chuẩn Python có hỗ trợ cờ --self-test.
Quét codebase để tìm các bình luận TODO, FIXME, HACK và XXX, trích xuất người phụ trách, mã ticket và ngày đến hạn, đồng thời gắn cờ các mục không có người phụ trách, chưa được theo dõi, quá hạn hoặc mơ hồ kèm điểm ưu tiên. Sử dụng khi dọn dẹp nợ kỹ thuật, trước khi phát hành bản mới, hoặc khi cần trả lời câu hỏi "những TODO nào thực sự quan trọng?". Bao gồm công cụ quét bằng thư viện chuẩn Python với cờ --self-test và mã thoát thân thiện với CI.
Quy trình kiểm toán bảo trì chỉ đọc (read-only) dành cho Agent Skills. Rà soát các kỹ năng hiện có để phát hiện hướng dẫn đã lỗi thời hoặc nhạy cảm với phiên bản, xung đột điều kiện kích hoạt (trigger), sự chồng chéo, tham chiếu bị hỏng, hành vi hàm bổ trợ không an toàn, sự trôi dạt so với đặc tả, phình to ngữ cảnh và các giả định công nghệ lạc hậu. Xác minh các tuyên bố quan trọng về tính cập nhật đối chiếu với các nguồn chính thống và chỉ báo cáo các phát hiện bảo trì có bằng chứng xác thực mà không sửa đổi các kỹ năng được kiểm toán.