-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
area/pipelineReview pipeline (L1/L2/L3)Review pipeline (L1/L2/L3)area/testingTest coverage and qualityTest coverage and qualitypriority/highImportant improvementImportant improvementsize/L<500 lines<500 lines
Description
Summary
시스템의 핵심 가치 제안(여러 LLM이 토론하고 판결)을 검증하는 E2E 테스트가 없음.
현재 상태
e2e-pipeline.test.ts— mock backend으로 전체 파이프라인, 4개 테스트- 모든 리뷰어가 동일 응답만 테스트됨 — 의견 충돌 시나리오 없음
필요한 E2E 시나리오
P0 — 핵심
-
상충하는 리뷰어 의견 → L2 토론 → L3 판결
- 리뷰어 A: CRITICAL 이슈 발견, 리뷰어 B: 이슈 없음
- → L2 토론 트리거 → 서포터 찬반 → L3 판결
- 시스템의 존재 이유
-
skipDiscussion=true
--no-discussion플래그 → L2 스킵 → L1 결과로 직접 L3orchestrator.ts:374브랜치
-
skipHead=true
- lightweight 모드 → L3 스킵 →
NEEDS_HUMAN반환 orchestrator.ts:452브랜치
- lightweight 모드 → L3 스킵 →
P1 — 중요
-
캐시 히트 경로
- 동일 diff 재실행 → 캐시된 결과 반환
orchestrator.ts:185-202브랜치
-
서킷 브레이커 + 파이프라인 통합
- 특정 프로바이더 연속 실패 → 서킷 open → 해당 리뷰어 forfeit → 나머지로 계속
-
중복 리뷰어 ID
- 같은 ID의 리뷰어 2개 →
mergeReviewOutputsByReviewer()동작 검증
- 같은 ID의 리뷰어 2개 →
P1 — 엣지 케이스
- L2 moderator 자체 실패 — moderator throw 시 파이프라인 동작
- L3 verdict 생성 실패 — L1/L2 성공 후 L3 throw 시 동작
- 무한 길이 LLM 응답 — 1MB+ 응답 시 메모리/성능
구현 방향
mock backend을 사용하되, 리뷰어별로 다른 응답을 반환하도록 구성:
const mockBackend = (reviewerId: string) => {
if (reviewerId === 'r1') return RESPONSE_WITH_CRITICAL_ISSUE;
if (reviewerId === 'r2') return RESPONSE_NO_ISSUES;
return RESPONSE_WITH_WARNING;
};Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area/pipelineReview pipeline (L1/L2/L3)Review pipeline (L1/L2/L3)area/testingTest coverage and qualityTest coverage and qualitypriority/highImportant improvementImportant improvementsize/L<500 lines<500 lines