Tính toán đánh giá (cohort, trục và diff tất định)
Tab Đánh giá của PR là tiến trình trực tiếp của quy trình đánh giá trong lúc nó chạy, rồi sau đó là artifact mà nó đã xuất bản, kèm các hành động trên đó. Một tab với hai trạng thái, vì chúng là cùng một thứ ở hai thời điểm. Đây không phải tab mặc định: một PR không có đánh giá cho đến khi ai đó yêu cầu, nên Hỏi AI mới là thứ mở nó ra.
Phía sau tab đó, cc_server dựng các cohort theo tệp, chạy các trục tất định và
phục vụ chúng qua các thao tác RPC review_studio.* (cohorts, blastRadius,
cohortImpact, ciSignals, dependencyDiffs, setContractDecision,
approveVisual, compute và các cặp watch* tương ứng). Một bố cục được lưu
trữ vẫn mang tên pr.reviewStudio sẽ mở đúng tab Đánh giá này.
Trên tab Đánh giá:
- Agent tổng hợp xuất bản một artifact hội thoại thông thường bằng
publish_artifact, nên tab hiển thị nó qua đúng trình xem artifact mà một bong bóng chat mở ra — không có bản sao nào mang hình dạng đánh giá của hệ thống artifact. - Các phát hiện nằm trong một thanh bên cạnh, còn kết luận nằm trên một thanh mảnh phía trên artifact thay vì một tiêu đề bảng điều khiển.
- Một biểu ngữ lỗi thời xuất hiện khi head của PR đã vượt qua đánh giá.
Xem Dùng đánh giá hỗ trợ AI để biết luồng và Xem xét và merge một PR để hành động dựa trên đó.
Cohort
Phần tiêu đề “Cohort”Cohort nhóm các tệp đã thay đổi của PR thành những nhóm tệp bắt nguồn từ nội dung, gồm các tệp thuộc về nhau theo ý nghĩa, được xếp hạng theo mức ảnh hưởng để nhóm rủi ro nhất được đọc trước. Chúng được tính lại mỗi khi head SHA thay đổi và được thay thế toàn bộ; mỗi cohort có một khóa ổn định qua các lần push, nên bản tóm tắt và tiến trình đánh giá vẫn tồn tại qua một lần rebase.
Nếu kho mã chưa được lập chỉ mục mã, cohort sẽ chuyển sang nhóm theo đường dẫn.
Để lập chỉ mục một kho mã, dùng Cài đặt → Không gian làm việc → Kho lưu trữ —
mỗi hàng kho mã có một hành động Lập chỉ mục mã chạy quy trình index_code
và báo tiến trình ngay tại chỗ.
Đồ thị mã chỉ phân tích các ngôn ngữ có ngữ pháp đi kèm (Dart, JS/TS, PHP, Python, Rust, Zig, C/C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada). Một kho mã bằng bất kỳ ngôn ngữ nào khác không bao giờ tạo được cohort ngữ nghĩa, dù bạn có lập chỉ mục bao nhiêu lần đi nữa.
Một agent có thể ghi bản tóm tắt markdown cho một cohort bằng
set_cohort_summary và đính kèm một sơ đồ dẫn dắt có cấu trúc bằng
add_review_diagram — một đối tượng có kiểu thuộc dạng tuần tự, quan hệ thực
thể hoặc máy trạng thái, không bao giờ là văn bản mermaid. Mọi cạnh đều được đối
chiếu với đồ thị mã thật, và một cạnh mà đồ thị không thể xác nhận sẽ được đánh
dấu là chưa xác minh thay vì được vẽ ra như sự thật.
Trục hợp đồng API
Phần tiêu đề “Trục hợp đồng API”Trục hợp đồng chỉ diff các tệp đặc tả tường minh. Nó khớp sáu tên mặc định —
openapi.yaml, openapi.yml, openapi.json, swagger.yaml, swagger.yml,
swagger.json — cùng bất kỳ tệp đã thay đổi nào có tên chứa openapi hoặc
swagger và kết thúc bằng .yaml, .yml hoặc .json. Một hợp đồng suy ra từ
mã handler nằm ngoài phạm vi và lược đồ GraphQL không được diff.
Mỗi thay đổi được phân loại — thêm, bớt và sửa endpoint, tham số, lược đồ và phản hồi — và mang một mức nghiêm trọng: breaking (bớt endpoint hoặc tham số, siết chặt kiểu, thêm tham số bắt buộc), không phá vỡ (mang tính bổ sung), hoặc chỉ mang tính thông tin. Một thay đổi bị từ chối sẽ khiến cổng hợp đồng thất bại, cũng như một thay đổi breaking còn bỏ ngỏ; breaking nhưng đã được phê duyệt thì cảnh báo; không có thay đổi breaking nào thì đạt. Một diff được đánh dấu derived (advisory) không bao giờ chặn cổng.
Phê duyệt hoặc từ chối một thay đổi là review_studio.setContractDecision.
Trục hình ảnh
Phần tiêu đề “Trục hình ảnh”Nếu PR thay đổi các thành phần UI trong một kho mã Flutter có ứng dụng Widgetbook,
lượt tính toán sẽ kết xuất các thành phần đã thay đổi trước và sau thông qua một
lượt golden flutter test không giao diện trong worktree base và head của PR,
rồi diff các điểm ảnh.
Các ảnh chụp nhanh được đánh dấu changed hoặc removed sẽ giữ cổng hình ảnh cho đến khi được phê duyệt; các ảnh chụp nhanh unchanged, added và approved sẽ mở cổng. Trạng thái không khả dụng có một trong bốn lý do: không có Flutter SDK trên máy chủ, không có ứng dụng Widgetbook trong kho mã, không có use-case nào kiểm thử được bằng golden, hoặc lỗi harness golden.
Phê duyệt một thay đổi có chủ đích là review_studio.approveVisual.
Các trục và kết luận
Phần tiêu đề “Các trục và kết luận”| Trục | Được điều khiển bởi |
|---|---|
| Tính đúng đắn | Agent đánh giá (token) |
| Bảo mật | Agent đánh giá (token) |
| Lỗ hổng kiểm thử | Agent đánh giá (token) |
| Hình ảnh | Tất định (harness golden) |
| Hợp đồng API | Tất định (diff đặc tả) |
Ba trục dùng token được ghi lại khi một agent chủ trì gọi finalize_review; hai
trục tất định được ghi lại bởi lượt tính toán.
Mỗi trục báo cáo một trong các trạng thái sau:
| Trạng thái | Ý nghĩa |
|---|---|
| Pass | Đã chạy, không tìm thấy gì chặn |
| Warn | Đã chạy, có những lo ngại không chặn |
| Fail | Đã chạy, tìm thấy một vấn đề chặn |
| Partial | Đã chạy nhưng không thể hoàn tất; kết quả chưa đầy đủ |
| Unavailable | Hoàn toàn không thể chạy |
Chỉ pass và warn mới mở được một trục có cổng. Partial và unavailable được cố ý tách biệt khỏi fail và cả hai đều không mở được cổng.
Các trục gộp lại thành Ship, Hold hoặc Block, và chúng chỉ có thể khiến kết luận nghiêm trọng hơn — nó không bao giờ bị hạ mức. Một trục có cổng mà thất bại sẽ buộc Block; một trục partial hoặc unavailable buộc ít nhất là Hold. Vì vậy một trục chặn mà không thể chạy sẽ giữ kết luận: thiếu bằng chứng không bao giờ mở được một cổng.
Kết luận trên tab Đánh giá chính là kết luận mà finalize_review đã đăng.