Skip to content

모디파이어 의존 제스처를 자동 검증에 넣는다 (1.3 3단계) - #51

Merged
centwon merged 1 commit into
mainfrom
feat/pointer-pipeline-phase3
Sep 20, 2026
Merged

centwon merged 1 commit into
mainfrom
feat/pointer-pipeline-phase3

Conversation

@centwon

@centwon centwon commented Sep 20, 2026

Copy link
Copy Markdown
Owner

1.3 상호작용 테스트의 마지막 단계. 테스트 826 → 832, 공개 표면 변화 없음.

왜 지금까지 검증이 없었나

포인터 경로의 Ctrl/Shift는 실제 키보드를 읽는 정적 프로퍼티였다(InputKeyboardSource.GetKeyStateForCurrentThread). 테스트가 그것을 정할 수 없으니 Ctrl 복사 끌기 · Ctrl+클릭 링크 · Shift 선택 · Ctrl+휠에는 자동 검증이 하나도 없었다. 1단계에서 모디파이어를 PointerStep에 실어 두었으므로 이제 구동된다.

들어간 검증

  • 개체 끌기: 놓을 때 Ctrl이면 복사(원본 인스턴스가 문서에 남는 것으로 확인), 아니면 이동
  • 텍스트 끌기: 놓을 때 Ctrl이면 복사 — 원본이 남고 "drag"가 둘이 된다
  • Ctrl+클릭은 포인터 아래 링크를 열고, 평범한 클릭은 열지 않는다
  • 뷰어: 제자리 클릭은 링크를 열고, 링크 위를 끌면 선택만 된다(브라우저 규약)
  • 휠: Ctrl일 때만 확대, 아니면 처리하지 않는다(스크롤이 되어야 하므로). PointerWheelCore(delta, ctrl)로 분리 — 포인터 경로의 마지막 ambient 읽기였다

테스트 seam 1개 (internal, 공개 표면 아님)

RichEditor.LaunchOverride — 어느 제스처가 링크를 여는지는 테스트 기계에서 브라우저를 띄우지 않고는 단정할 수 없었다. 결정 자체(IsLaunchableLink)는 전부터 직접 시험돼 있었고, 이제 거기 닿는 경로까지 덮는다.

반증 6종 — 전부 의도한 테스트만 빨강

개체 드롭의 Ctrl 무시 · 텍스트 드롭의 Ctrl 무시 · Ctrl+클릭 분기 차단 · 뷰어 링크의 "선택 없음·슬롭 이내" 가드 제거 · 누르기의 Shift 무시 · 휠의 Ctrl 게이트 제거.
⚠ 휠 교란은 공유 에디터의 확대를 바꿔 좌표 테스트 하나를 함께 넘어뜨렸다 — 교란의 부수 효과지 제품 문제가 아니다.

로드맵

1~3단계 결과를 기록했고, 반증이 가르쳐 준 두 가지도 남겼다: 열 끌기 놓기 순서는 실제로 무해(캡처 상실이 완료시키고 멱등이라 — 순서 규칙은 취소하는 경로에서만 힘을 쓴다), 가짜가 캡처 상실을 동기로 안 쏘면 깨진 순서도 통과(그래서 호출 순서를 테스트가 직접 단정한다).

🤖 Generated with Claude Code

…휠 (1.3 3단계)

포인터 경로의 `Ctrl`/`Shift`는 실제 키보드를 읽는 정적 프로퍼티였고(`InputKeyboardSource`), 테스트는 그것을
정할 수 없어 이 동작들에 자동 검증이 **하나도 없었다**. 1단계에서 step으로 옮겨 놓았으므로 이제 구동된다.

- 개체 끌기: 놓을 때 Ctrl이면 **복사**(원본 인스턴스가 문서에 남는 것으로 확인), 아니면 이동.
- 텍스트 끌기: 놓을 때 Ctrl이면 복사 — 원본이 남고 "drag"가 둘이 된다.
- Ctrl+클릭은 **포인터 아래** 링크를 열고, 평범한 클릭은 열지 않는다.
- 뷰어(읽기 전용): 제자리 클릭은 링크를 열고, 링크 위를 **끌면 선택만** 된다(브라우저 규약).
- 휠은 Ctrl일 때만 확대하고, 아닐 때는 처리하지 않는다(스크롤이 되어야 하므로). `OnCanvasPointerWheel`도
  `PointerWheelCore(delta, ctrl)`로 분리 — 포인터 경로에 남아 있던 마지막 ambient 읽기였다.

테스트 seam 1개(`internal`): `RichEditor.LaunchOverride`. 어느 제스처가 링크를 여는지는 테스트 기계에서
브라우저를 띄우지 않고는 단정할 수 없었다. 결정(`IsLaunchableLink`)은 전부터 직접 시험돼 있고, 이제 거기
**닿는 경로**까지 덮는다.

반증 6종 전부 의도한 테스트만 빨강: 개체 드롭의 Ctrl 무시 · 텍스트 드롭의 Ctrl 무시 · Ctrl+클릭 분기 차단 ·
뷰어 링크의 "선택 없음·슬롭 이내" 가드 제거 · 누르기의 Shift 무시 · 휠의 Ctrl 게이트 제거.
⚠ 휠 교란은 공유 에디터의 확대를 바꿔 좌표 테스트 하나를 함께 넘어뜨렸다(교란의 부수 효과, 제품 아님).

테스트 826 → 832. 공개 표면 변화 없음. 로드맵에 1~3단계 결과와 반증이 가르쳐 준 두 가지를 기록했다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@centwon
centwon merged commit 63a8c03 into main Sep 20, 2026
2 checks passed
@centwon
centwon deleted the feat/pointer-pipeline-phase3 branch September 20, 2026 08:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant