
# SKILL: entity-matcher ## Purpose So khớp các Entity (Class/Interface/Enum) giữa `ProcessedUMLGraph` của Đáp án và của Sinh viên để tạo ra `MappingTable`. Nhờ có dữ liệu đã tiền xử lý, Matcher sử dụng cấu trúc `ArchWeight` kết hợp với Fuzzy Text Matching để đưa ra các quyết định nối (map) chính xác nhất, ngay cả khi tên bị sai chính tả hoặc gõ tắt. ## Use When - Sau khi `Prematcher` đã sinh ra 2 cây `ProcessedUMLGraph` với `ArchWeight` đầy đủ. - Cần dóng hàng các Node trước khi đưa qua `Compa
# SKILL: uml-model-builder ## Purpose Chuyển đổi chuỗi RawXMLData thành cấu trúc domain.UMLGraph thống nhất (bao gồm trích xuất Nodes, Edges, Attributes, Methods). ## Required Inputs - domain.RawXMLData (chuỗi XML thô từ DrawioParser) ## Expected Output - *domain.UMLGraph (Mô hình OOP hoàn chỉnh) ## Architecture (Interface-Based — DIP) `StandardModelBuilder` là orchestrator thuần tuý, **chỉ phụ thuộc vào 4 internal interfaces**: | Interface | File impl | Trách nhiệm | |---|---|---| | `IXMLPa
# SKILL: uml-comparator ## Purpose So sánh 2 UMLGraph đã được Match chẻ sát với nhau. Tìm ra sự khác lạ cục bộ (sai thuộc tính, thiếu class, sai chiều mũi tên kế thừa). Trả ra `*DiffReport` chứa các con trỏ trực tiếp đến đối tượng bị lỗi. ## Execution Approach 1. **TypeMap Registration**: Dựa vào `MappingTable`, tạo `TypeMap[SolutionNodeName] = StudentNodeName` để phục vụ dịch đổi ngữ nghĩa các kiểu tham số hoặc thuộc tính tự định nghĩa. 2. **Missing Node Check**: Duyệt List Nodes của Mẫu. Nếu
# SKILL: data-flow-comparator ## Purpose (Mục đích) Kiểm tra tính toàn vẹn luồng dữ liệu (Data Flow Integrity) trước khi triển khai module Comparator thực sự. Khi dữ liệu từ Builder ra bị biến dạng (như lỗi swimlane vừa phát hiện), Comparator sẽ chấm điểm sai hoàn toàn. Skill này định nghĩa cách xác minh rằng pipeline Parser→Builder đang chạy chính xác trước khi so sánh 2 Graph. ## Use When - Vừa sửa xong `IModelBuilder` và cần kiểm tra output chưa bị méo mó trước khi code Matcher/Comparator.
# SKILL: drawio-xml-parser ## Purpose (Mục đích) Phân tích file `.drawio` hoặc xml của sinh viên và đáp án, biến chúng từ dạng nén/mã hoá (hoặc raw) về dạng chuỗi `RawXMLData` (thuần text XML) một cách chính xác. ## Use When (Khi nào dùng skill này) - Vừa mới bắt đầu pipeline so sánh UML. - Cần lập trình module con `IFileParser` bằng Golang. - Cần cung cấp dữ liệu sạch đầu vào (XML thô) cho cụm `IModelBuilder`. ## Required Inputs - Đường dẫn file vật lý trên ổ cứng (`filePath` kiểu String).
# SKILL: uml-pre-matcher ## Purpose Biến đổi mô hình `domain.UMLGraph` (dạng chuỗi thô) thành `domain.ProcessedUMLGraph` (dạng cấu trúc chi tiết). Đây là bước đệm quan trọng để module Matcher có thể so khớp chính xác dựa trên thuộc tính, phương thức và trọng số kiến trúc (ArchWeight). ## Use When - Khi Builder đã tạo xong `UMLGraph`. - Khi cần phân tích sâu cấu trúc của từng Class/Interface (tách biệt Name, Scope, Type của Attribute/Method). - Khi cần tính toán trọng số thiết kế (ArchWeight)
Skill để tái cấu trúc (refactor) một module bất kỳ theo chuẩn SOLID, áp dụng Interface-first và bổ sung Unit Test hoàn chỉnh.
# SKILL: batch-grader-reporter ## Purpose Cung cấp chức năng chấm điểm đồng loạt (Batch Grading) cho nhiều file bài làm UML (`.drawio`) của sinh viên đối chiếu với 1 file đáp án mẫu. Kết quả của tất cả các bài nộp được tổng hợp lại thành `BatchGradeResult` và chuyển đền interface `IReporter` để sinh report. ## Execution 1. Cấu trúc: - Load file solution `solution.drawio`. - Quét thư mục `student_dir` tìm các file `.drawio`. - Với mỗi file: Parse → Build → PreMatch → Match → Compare →
Chạy test case trên các file UML draw.io để kiểm tra xem Builder + ValidateGraph có phát hiện đúng lỗi. Dùng để verify rằng pipeline xử lý UML bắt được các loại lỗi sai trong file .drawio.
# SKILL: drawio-visualizer ## Purpose Render kết quả chấm UML ra 2 loại file HTML self-contained: 1. **Grader Report** (`report_*.html`): Full side-by-side Student vs Solution, summary, deduction feedbacks — dành cho người chấm. 2. **Student Feedback** (`feedback_*.html`): Chỉ hiển thị bài làm SV với color-coded status (đúng/sai/thừa). Không lộ đáp án, không hiện deduction details — gửi cho sinh viên xem lại. ## Execution 1. Pipeline: Parse → Build → Validate → PreMatch → Match → Compare → Grad
# SKILL: rule-based-grader ## Purpose Tính toán điểm số cuối cùng dựa trên các list lỗi của DiffReport. Tính toán bằng lấy điểm chuẩn trừ đi điểm lỗi (miss/wrong). + Các điểm lỗi thông qua { edge = 1, node = 1,//(class, interface, enum,...) attribute = 1, method = 1, } Điểm tối đa mặc định là 20, truyến vào qua Dependency Injection ## Execution Gán điểm tuyệt đối ban đầu (VD: 10đ). Trích DiffReport, cứ mỗi MissingNodes duyệt trừ đi penalty định biên. Chặn mốc Max(0, Score)