Lewati ke konten

Komputasi tinjauan (kohort, sumbu, dan diff deterministik)

Tab Tinjau milik PR menampilkan kemajuan langsung pipeline tinjauan saat pipeline itu bekerja, lalu artefak yang dipublikasikannya, beserta tindakan-tindakan di dalamnya. Satu tab dengan dua keadaan, karena keduanya adalah hal yang sama pada dua waktu berbeda. Tab ini bukan tab bawaan: sebuah PR tidak memiliki tinjauan sampai ada yang memintanya, jadi Tanya AI adalah yang membukanya.

Di balik tab itu, cc_server membangun kohort file, menjalankan sumbu-sumbu deterministik, dan menyajikannya melalui operasi RPC review_studio.* (cohorts, blastRadius, cohortImpact, ciSignals, dependencyDiffs, setContractDecision, approveVisual, compute dan kembaran watch*-nya). Tata letak tersimpan yang masih menyebut pr.reviewStudio akan membuka tab Tinjau yang sama ini.

Di tab Tinjau:

  • Agen pengonsolidasi memublikasikan artefak percakapan biasa dengan publish_artifact, sehingga tab merendernya melalui penampil artefak yang sama seperti yang dibuka gelembung chat — tidak ada salinan sistem artefak yang berbentuk khusus tinjauan.
  • Temuan berada di rel di sampingnya, dan putusan berada pada bilah ramping di atas artefak, bukan pada tajuk dasbor.
  • Banner usang muncul ketika head PR sudah bergerak melampaui tinjauan.

Lihat Gunakan tinjauan bertenaga AI untuk alurnya dan Tinjau dan gabungkan PR untuk menindaklanjutinya.

Kohort mengelompokkan file yang berubah pada PR menjadi wadah turunan konten berisi file-file yang secara makna memang berkelompok, diurutkan berdasarkan dampak agar kelompok paling berisiko dibaca lebih dulu. Kohort dihitung ulang pada setiap perubahan head-SHA dan diganti seluruhnya; setiap kohort memiliki kunci yang stabil terhadap push, sehingga ringkasan dan kemajuan tinjauan tetap bertahan melewati rebase.

Jika repo tidak terindeks kode, kohort akan mundur ke pengelompokan berdasarkan path. Untuk mengindeks repo, gunakan Pengaturan → Ruang kerja → Repositori — setiap baris repo memiliki tindakan Indekskan kode yang menjalankan pipeline index_code dan melaporkan kemajuannya di tempat.

Graf kode hanya mengurai bahasa yang gramarnya sudah tersedia (Dart, JS/TS, PHP, Python, Rust, Zig, C/C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada). Repo dalam bahasa lain tidak akan pernah menghasilkan kohort semantik, seberapa sering pun Anda mengindeksnya.

Agen dapat mencatat ringkasan markdown untuk sebuah kohort dengan set_cohort_summary dan melampirkan diagram penelusuran terstruktur dengan add_review_diagram — objek bertipe sequence, entity-relation, atau state-machine, tidak pernah berupa teks mermaid. Setiap tepi diperiksa silang terhadap graf kode yang sebenarnya, dan tepi yang tidak dapat didukung graf tersebut ditandai belum terverifikasi alih-alih digambar sebagai fakta.

Sumbu kontrak hanya melakukan diff pada file spec yang eksplisit. Ia mencocokkan enam nama bawaan — openapi.yaml, openapi.yml, openapi.json, swagger.yaml, swagger.yml, swagger.json — plus setiap file yang berubah yang namanya memuat openapi atau swagger dan berakhiran .yaml, .yml, atau .json. Kontrak yang disimpulkan dari kode handler berada di luar cakupan, dan skema GraphQL tidak ikut dibandingkan.

Setiap perubahan diklasifikasikan — penambahan, penghapusan, dan modifikasi endpoint, parameter, skema, serta respons — dan membawa tingkat keparahan: breaking (endpoint atau param dihapus, tipe diperketat, param wajib baru), non-breaking (aditif), atau informational. Perubahan yang ditolak menggagalkan gerbang kontrak, begitu pula perubahan breaking yang dibiarkan tanpa keputusan; breaking tetapi disetujui memberi peringatan; tanpa perubahan breaking berarti lulus. Diff yang ditandai derived (advisory) tidak pernah menjadi gerbang.

Menyetujui atau menolak suatu perubahan adalah review_studio.setContractDecision.

Jika PR mengubah komponen UI di repo Flutter yang memiliki aplikasi Widgetbook, proses komputasi merender komponen yang berubah sebelum dan sesudah melalui proses golden flutter test secara headless di worktree base dan head PR, lalu membandingkan pikselnya.

Snapshot yang ditandai changed atau removed menahan gerbang visual sampai disetujui; snapshot unchanged, added, dan approved membukanya. Ketidaktersediaan memiliki salah satu dari empat alasan: tidak ada Flutter SDK di host, tidak ada aplikasi Widgetbook di repo, tidak ada kasus penggunaan yang dapat diuji golden, atau galat harness golden.

Menyetujui perubahan yang memang diinginkan adalah review_studio.approveVisual.

Sumbu Digerakkan oleh
Correctness Agen peninjau (token)
Security Agen peninjau (token)
Test gap Agen peninjau (token)
Visual Deterministik (harness golden)
API contract Deterministik (diff spec)

Ketiga sumbu token dicatat saat agen pemimpin memanggil finalize_review; kedua sumbu deterministik dicatat oleh proses komputasi.

Setiap sumbu melaporkan salah satu dari:

Keadaan Arti
Pass Berjalan, tidak menemukan hal yang menghambat
Warn Berjalan, ada kekhawatiran yang tidak menghambat
Fail Berjalan, menemukan masalah yang menghambat
Partial Berjalan tetapi tidak dapat diselesaikan; hasilnya tidak lengkap
Unavailable Tidak dapat dijalankan sama sekali

Hanya pass dan warn yang membuka sumbu bergerbang. Partial dan unavailable sengaja dibedakan dari fail dan keduanya tidak membuka gerbang.

Sumbu-sumbu ini beragregasi menjadi Ship, Hold, atau Block, dan hanya dapat membuat putusan menjadi lebih berat — putusan itu tidak pernah diturunkan. Sumbu bergerbang yang gagal memaksa Block; sumbu yang partial atau unavailable memaksa setidaknya Hold. Jadi sumbu penghambat yang tidak dapat dijalankan menahan putusan: tidak adanya bukti tidak pernah membuka gerbang.

Putusan di tab Tinjau adalah putusan yang diposting oleh finalize_review.