Granskningsberäkning (kohorter, axlar och deterministiska diffar)
Fliken Granskning på en PR visar granskningspipelinen i realtid medan den arbetar, och sedan artefakten den publicerade, med åtgärderna på den. En flik med två tillstånd, eftersom det är samma sak vid två tidpunkter. Den är ingen standardflik: en PR har ingen granskning förrän någon begär en, så det är Fråga AI som öppnar den.
Bakom den fliken bygger cc_server filkohorter, kör de deterministiska axlarna
och exponerar dem via RPC-operationerna review_studio.* (cohorts,
blastRadius, cohortImpact, ciSignals, dependencyDiffs,
setContractDecision, approveVisual, compute och deras watch*-tvillingar).
En sparad layout som fortfarande heter pr.reviewStudio öppnar samma flik
Granskning.
På fliken Granskning:
- Den sammanställande agenten publicerar en vanlig samtalsartefakt med
publish_artifact, så fliken renderar den genom samma artefaktvisare som en chattbubbla öppnar – det finns ingen granskningsformad kopia av artefaktsystemet. - Fynden sitter i en smal kolumn bredvid, och utfallet ligger på en tunn rad ovanför artefakten i stället för i en rubrik på en instrumentpanel.
- En banner om inaktuell granskning visas när PR:ens head har flyttat sig förbi granskningen.
Se Använd AI-driven granskning för flödet och Granska och slå ihop en PR för hur du agerar på den.
Kohorter
Avsnitt med rubriken “Kohorter”Kohorter grupperar PR:ens ändrade filer i innehållshärledda buntar av filer som hör ihop till betydelsen, rangordnade efter påverkan så att den mest riskabla gruppen läses först. De räknas om vid varje ändring av head-SHA och ersätts i sin helhet; varje kohort har en nyckel som är stabil mellan pushar, så ett sammandrag och granskningsframstegen överlever en rebase.
Om repot inte är kodindexerat faller kohorterna tillbaka på gruppering efter
sökväg. För att indexera ett repo använder du
Inställningar → Arbetsyta → Arkiv – varje arkivrad har åtgärden Indexera
kod som kör pipelinen index_code och rapporterar framdriften på plats.
Kodgrafen parsar bara språk med en medföljande grammatik (Dart, JS/TS, PHP, Python, Rust, Zig, C/C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada). Ett repo på något annat språk kan aldrig producera semantiska kohorter, hur ofta du än indexerar det.
En agent kan registrera ett markdown-sammandrag för en kohort med
set_cohort_summary och bifoga ett strukturerat genomgångsdiagram med
add_review_diagram – ett typat objekt för sekvens, entitetsrelation eller
tillståndsmaskin, aldrig mermaid-text. Varje kant korsverifieras mot den
verkliga kodgrafen, och en kant som grafen inte kan styrka markeras som
overifierad i stället för att ritas som ett faktum.
Axeln för API-kontraktet
Avsnitt med rubriken “Axeln för API-kontraktet”Kontraktaxeln diffar bara explicita specifikationsfiler. Den matchar de sex
standardnamnen – openapi.yaml, openapi.yml, openapi.json, swagger.yaml,
swagger.yml, swagger.json – plus varje ändrad fil vars namn innehåller
openapi eller swagger och slutar på .yaml, .yml eller .json. Ett
kontrakt som härleds ur handlerkod ligger utanför omfånget, och GraphQL-scheman
diffas inte.
Varje ändring klassificeras – tillägg, borttagningar och ändringar av endpoint, parameter, schema och svar – och bär en allvarlighetsgrad: breaking (borttagen endpoint eller parameter, stramad typ, ny obligatorisk parameter), icke-brytande (additiv) eller informativ. En avvisad ändring fallerar kontraktgrinden, och detsamma gäller en breaking-ändring som lämnas oavgjord; breaking men godkänd varnar; inga breaking-ändringar passerar. En diff märkt härledd (rådgivande) utgör aldrig en grind.
Att godkänna eller avvisa en ändring är review_studio.setContractDecision.
Den visuella axeln
Avsnitt med rubriken “Den visuella axeln”Om PR:en ändrar UI-komponenter i ett Flutter-repo med en Widgetbook-app renderar
beräkningskörningen de ändrade komponenterna före och efter via en headless
golden-körning med flutter test i PR:ens base- och head-worktrees, och diffar
sedan pixlarna.
Ögonblicksbilder märkta changed eller removed håller kvar den visuella grinden tills de godkänns; ögonblicksbilder märkta unchanged, added och approved öppnar den. Otillgänglighet har en av fyra orsaker: ingen Flutter SDK på värden, ingen Widgetbook-app i repot, inga golden-testbara användningsfall eller ett fel i golden-harnesset.
Att godkänna en avsedd ändring är review_studio.approveVisual.
Axlarna och utfallet
Avsnitt med rubriken “Axlarna och utfallet”| Axel | Drivs av |
|---|---|
| Korrekthet | Granskaragenter (tokens) |
| Säkerhet | Granskaragenter (tokens) |
| Testgap | Granskaragenter (tokens) |
| Visuell | Deterministisk (golden-harness) |
| API-kontrakt | Deterministisk (spec-diff) |
De tre tokenaxlarna registreras när en ledaragent anropar finalize_review; de
två deterministiska axlarna registreras av beräkningskörningen.
Varje axel rapporterar ett av:
| Tillstånd | Betydelse |
|---|---|
| Pass | Körde, hittade inget blockerande |
| Warn | Körde, icke-blockerande problem |
| Fail | Körde, hittade ett blockerande problem |
| Partial | Körde men kunde inte slutföras; resultaten är ofullständiga |
| Unavailable | Kunde inte köras alls |
Bara pass och warn öppnar en grindad axel. Partial och unavailable är medvetet åtskilda från fail, och ingen av dem öppnar en grind.
Axlarna vävs samman till Ship, Hold eller Block, och de kan bara göra utfallet allvarligare – det nedgraderas aldrig. En grindad axel som fallerar tvingar fram Block; en som är partial eller unavailable tvingar fram minst Hold. Så en blockerande axel som inte kunde köras håller kvar utfallet: frånvaro av bevis blir aldrig en grön grind.
Utfallet på fliken Granskning är det som finalize_review lade in.