# task-2865-r1 — e2e 로케이터 충돌 수정 (RP 비교블록 텍스트 중복, 머지 차단 해소)

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "tests/e2e/composite-design-vpath.spec.ts"
  forbidden_paths:
    - "src/**"
    - "server/**"
    - "extension/**"
    - ".github/**"
  commands: ["npx playwright","npx tsc","git"]
  merge_policy: "none"
  ttl_hours: 8
```
> ★ merge_policy=none. base=**origin/task/task-2865-dev1**(배치2 브랜치 위에 이어서). 이 브랜치에 커밋 push(같은 PR #141 갱신).

## 배경 (CI e2e 회귀 — 기능버그 아님)
task-2865 신규 `RpComparisonBlocks`가 정당하게 "1사 최저 vs **2사 조합**", "**2사 조합** vs 3사 조합", "**3사 조합**" 등 텍스트를 추가 → 기존 e2e 로케이터 `text=2사 조합`/`text=3사 조합`이 **3개 요소 매칭 → Playwright strict mode violation**.
- CI 로그: `strict mode violation: locator('text=2사 조합') resolved to 3 elements` (매트릭스 헤더 span 1 + 비교블록 p 2).
- 비교블록은 정상. **로케이터를 매트릭스 컨테이너로 한정**하면 해결(테스트로 버그 은폐 아님 — 신규 UI가 같은 문자열을 정당히 포함).

## 작업 (surgical — 3줄만)
`tests/e2e/composite-design-vpath.spec.ts` 403~405:
```
await expect(page.locator("text=1사 최저가")).toBeVisible({ timeout: 10_000 });
await expect(page.locator("text=2사 조합")).toBeVisible({ timeout: 5_000 });
await expect(page.locator("text=3사 조합")).toBeVisible({ timeout: 5_000 });
```
→ **매트릭스 컨테이너(`getByTestId("composite-matrix")`)로 스코프**해 유일화:
```
const matrix = page.getByTestId("composite-matrix");
await expect(matrix.getByText("1사 최저가")).toBeVisible({ timeout: 10_000 });
await expect(matrix.getByText("2사 조합", { exact: true })).toBeVisible({ timeout: 5_000 });
await expect(matrix.getByText("3사 조합", { exact: true })).toBeVisible({ timeout: 5_000 });
```
- 실제 매트릭스 testid 명이 다르면 소스(`CompositeComboResult`/`ConsultationHistoryView`)에서 확인해 정확한 testid 사용. `exact:true`로 "2사 조합 vs 3사 조합" 같은 부분매칭 배제.
- 비교블록(RpComparisonBlocks)을 검증하는 별도 assertion을 추가해도 좋으나 **범위 최소**(우선 strict violation 해소).

## 제약
- e2e spec 파일만. src/·server·확장 불변. 비교블록 로직 변경 금지.

## 검증
- e2e 대상 스펙 통과(로컬 가능하면). 최소 `npx tsc` 클린 + 로케이터가 단일 요소로 resolve.
- CI e2e-test GREEN 확인은 ANU(머지 전).

## 완료 (★ 순서 B)
- 변경 = tests/e2e/composite-design-vpath.spec.ts 만.
- **dev6 금지** — dev1. 커밋 → push(브랜치 task/task-2865-dev1) → finish-task **foreground 1회** → .done 즉시 종료. **background+wait 금지.** ANU 검증·CI 재확인·머지·배포는 ANU.
