Hoppa till innehåll

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 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.

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.

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.

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.