콘텐츠로 이동

리뷰 컴퓨트(코호트, 축, 결정적 diff)

PR의 리뷰 탭은 리뷰 파이프라인이 작동하는 동안에는 실시간 진행 상황이고, 작업이 끝난 뒤에는 게시한 아티팩트와 그 위의 액션입니다. 하나의 탭에 두 가지 상태가 있는 것은 같은 대상의 두 시점이기 때문입니다. 기본 탭은 아닙니다. 누군가 요청하기 전까지 PR에는 리뷰가 없으므로, 이 탭을 여는 것은 AI에게 물어보기입니다.

그 탭 뒤에서 cc_server는 파일 코호트를 만들고 결정적 축을 실행하며, 이를 review_studio.* RPC 작업(cohorts, blastRadius, cohortImpact, ciSignals, dependencyDiffs, setContractDecision, approveVisual, compute 및 그에 대응하는 watch* 쌍)으로 제공합니다. 여전히 pr.reviewStudio를 이름에 둔 영속 레이아웃도 이 같은 리뷰 탭을 엽니다.

리뷰 탭에서:

  • 통합 에이전트는 publish_artifact로 평범한 대화 아티팩트를 게시하므로, 탭은 채팅 버블이 여는 것과 같은 아티팩트 뷰어로 그것을 렌더링합니다. 리뷰 전용 형태의 아티팩트 시스템 사본은 없습니다.
  • 발견 사항은 그 옆의 레일에 놓이고, 판정은 대시보드 헤더가 아니라 아티팩트 위의 얇은 바에 실립니다.
  • PR head가 리뷰 이후로 이동했으면 오래된 리뷰 배너가 나타납니다.

흐름은 AI 기반 리뷰 사용을, 그 결과로 무엇을 할지는 PR 리뷰 및 병합을 참고하세요.

코호트는 PR에서 변경된 파일을 의미상 함께 속하는 파일들의 콘텐츠 기반 버킷으로 묶고, 영향도 순으로 정렬해 가장 위험한 그룹을 먼저 읽게 합니다. 코호트는 head SHA가 바뀔 때마다 다시 계산되어 통째로 교체되며, 각 코호트에는 푸시에 안정적인 키가 있어 요약과 리뷰 진행 상황이 리베이스 후에도 유지됩니다.

저장소가 코드 인덱싱되어 있지 않으면 코호트는 경로 그룹화로 폴백합니다. 저장소를 인덱싱하려면 설정 → 워크스페이스 → 리포지토리를 사용하세요. 각 리포지토리 행에는 index_code 파이프라인을 실행하고 진행 상황을 그 자리에서 보고하는 코드 인덱싱 액션이 있습니다.

코드 그래프는 함께 제공되는 문법이 있는 언어만 파싱합니다(Dart, JS/TS, PHP, Python, Rust, Zig, C/C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada). 그 밖의 언어로 된 저장소는 아무리 자주 인덱싱해도 의미 기반 코호트를 만들 수 없습니다.

에이전트는 set_cohort_summary로 코호트의 마크다운 요약을 기록하고, add_review_diagram으로 구조화된 워크스루 다이어그램 — 타입이 지정된 시퀀스, 개체-관계 또는 상태 머신 객체이며 mermaid 텍스트는 결코 아닙니다 — 을 첨부할 수 있습니다. 모든 엣지는 실제 코드 그래프와 대조해 검증하며, 그래프가 뒷받침할 수 없는 엣지는 사실로 그리지 않고 미검증으로 표시합니다.

계약 축은 명시적 스펙 파일만 diff합니다. 기본 이름 여섯 개 — openapi.yaml, openapi.yml, openapi.json, swagger.yaml, swagger.yml, swagger.json — 와 더불어, 이름에 openapi 또는 swagger가 들어가고 .yaml, .yml, .json으로 끝나는 변경된 파일을 대상으로 삼습니다. 핸들러 코드에서 추론한 계약은 범위 밖이며 GraphQL 스키마는 diff하지 않습니다.

각 변경은 엔드포인트, 파라미터, 스키마, 응답의 추가·삭제·수정으로 분류되며 심각도를 함께 가집니다. breaking(엔드포인트나 파라미터 삭제, 타입 강화, 새 필수 파라미터), non-breaking(추가만 있음), informational 중 하나입니다. 거부된 변경은 계약 게이트를 실패시키며, 결정하지 않고 남겨 둔 breaking 변경도 마찬가지입니다. breaking이지만 승인된 변경은 경고하고, breaking 변경이 없으면 통과합니다. **derived (advisory)**로 표시된 diff는 결코 게이트하지 않습니다.

변경을 승인하거나 거부하는 것은 review_studio.setContractDecision입니다.

PR이 Widgetbook 앱이 있는 Flutter 저장소의 UI 컴포넌트를 변경하면, 컴퓨트 패스는 PR의 base와 head 워크트리에서 헤드리스 flutter test 골든 패스로 변경된 컴포넌트를 이전과 이후 상태로 렌더링한 다음 픽셀을 diff합니다.

changed 또는 removed로 표시된 스냅숏은 승인될 때까지 시각적 게이트를 붙잡아 둡니다. unchanged, added, approved 스냅숏은 게이트를 통과시킵니다. 실행 불가는 다음 네 가지 이유 중 하나입니다. 호스트에 Flutter SDK 없음, 저장소에 Widgetbook 앱 없음, 골든 테스트 가능한 사용 사례 없음, 또는 골든 하네스 오류.

의도한 변경을 승인하는 것은 review_studio.approveVisual입니다.

축 구동 주체
정확성 리뷰어 에이전트(토큰)
보안 리뷰어 에이전트(토큰)
테스트 갭 리뷰어 에이전트(토큰)
시각적 결정적(골든 하네스)
API 계약 결정적(스펙 diff)

세 개의 토큰 축은 리드 에이전트가 finalize_review를 호출할 때 기록되고, 두 개의 결정적 축은 컴퓨트 패스가 기록합니다.

각 축은 다음 중 하나를 보고합니다:

상태 의미
Pass 실행했고, 차단 요소를 찾지 못함
Warn 실행했고, 비차단 우려 사항이 있음
Fail 실행했고, 차단 문제를 찾음
Partial 실행했지만 완료하지 못함. 결과가 불완전함
Unavailable 전혀 실행할 수 없었음

게이트 대상 축을 통과시키는 것은 pass와 warn뿐입니다. Partial과 unavailable은 fail과 일부러 구분되며, 둘 다 게이트를 통과시키지 않습니다.

축은 Ship, Hold, Block으로 합쳐지며, 판정을 더 엄격하게만 만들 수 있고 결코 완화하지 않습니다. 게이트 대상 축이 실패하면 Block이 강제되고, partial이나 unavailable이면 최소한 Hold가 강제됩니다. 따라서 실행되지 못한 차단 축은 판정을 붙잡아 둡니다. 증거의 부재는 결코 게이트를 초록으로 만들지 않습니다.

리뷰 탭의 판정은 finalize_review가 게시한 판정입니다.