Skip to content

Cut 입력 소유권을 Web 정본으로 통합하고 실패 시 원본을 보존한다 - #730

Merged
developer-1px merged 41 commits into
mainfrom
issue-729-cut-failure-ownership
Sep 10, 2026
Merged

Cut 입력 소유권을 Web 정본으로 통합하고 실패 시 원본을 보존한다#730
developer-1px merged 41 commits into
mainfrom
issue-729-cut-failure-ownership

Conversation

@developer-1px

@developer-1px developer-1px commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Cut 이벤트의 소유권을 payload 준비 성공 여부로 판단하면, 앱의 쓰기 실패가 native 삭제로 이어지거나 중첩 native 입력을 앱이 가로챌 수 있었습니다. Web 정본 routeWebClipboardEvent가 편집 경계를 먼저 판정하고, 앱 소유 Cut은 준비 전에 취소하도록 통합했습니다.

  • 다른 편집영역과 이미 취소된 이벤트는 read·selection 동기화·편집 callback 없이 위임합니다.
  • 앱 소유 Cut은 빈 선택, clipboardData 부재, read/encode/write 실패에서도 취소를 유지합니다. 모든 표현을 기록한 뒤에만 캡처한 payload를 cut callback에 전달합니다.
  • createWebClipboardSurface는 DOM currentTarget/target으로 자동 라우팅합니다. Rich Text와 Canvas도 같은 공개 API를 사용하며, SVG root와 중첩 native 입력을 지원합니다. Calendar와 Clipboard Usage의 중복 경계 판정을 제거했습니다.
  • 패키지 소유 문서, 공개 API reference, Usage와 Source 등록을 연결했습니다. 기존 programmatic binding은 호출자가 입력 소유권을 판정하는 계약을 유지합니다.

사용자가 승인한 계약 변경은 이슈 댓글에 기록했습니다. OS clipboard와 문서는 단일 트랜잭션이 아니므로 실패 전에 기록된 표현의 rollback은 보장하지 않습니다.

검증한 head: 95984acd13a9c7bbc3bfbef76eef06411a83d595 (main ef860143 통합)

  • Web·Rich Text Web·Canvas·Database: 19 files / 246 tests 통과. 빈 선택·쓰기 실패·중첩 입력·부모 중복 실행·SVG 경계와 Cut/Undo 회귀 포함.
  • site Source: 20 tests 통과. 관련 기본 키보드 검증 포함 이전 실행 24 tests 통과.
  • Web 및 site typecheck/guards, workspace 계약, API reference 검사, 문서 검사, 사이트 build 통과. pre-push 전체 패키지 build 통과.
  • 기존 Chrome 프로필에서 Clipboard Usage의 실패 취소·native textarea 위임·정상 구조화 Cut, Source 등록을 확인했습니다. Rich Text의 실패 취소·중첩 입력 위임·역방향 선택 Cut·Undo 복원도 확인했습니다.
  • 이번 Chrome 확인은 구성한 DOM ClipboardEvent 경로입니다. OS clipboard 전송 및 3-engine native Cut 테스트는 이 head에서 재실행하지 않았습니다. 기존 head의 CI 결과를 새 head 검증으로 사용하지 않았으며 현재 main CI는 workflow_dispatch 전용입니다.

Closes #729

유용태 and others added 2 commits September 8, 2026 16:40
Annotation의 선택·gesture·geometry·출력 책임을 정본 모듈로 연결합니다. 기존 선택 순서와 Undo/Redo 복원, 도구·댓글·raster 동작을 유지하고 Host에는 정책과 화면 조합을 남깁니다.

최신 HEAD ba163a3f의 Plan, Package, Site, External kit 검증이 모두 통과했습니다.

Closes #588
developer-1px and others added 5 commits September 8, 2026 23:44
EditingSession의 공통 계약과 현재 binding 정책을 분리하고, UI 구독 유무에 따른 local History 무효화 차이를 수정한다.

전체 30개 library typecheck·build 및 1,351개 테스트 통과. unmount 이후 외부 값 왕복 회귀를 포함한다.

Closes #735
* fix: JSON 주소와 값 검증을 Core 정본으로 통일한다

* test(site): include canonical JSON validator in source tabs

---------

Co-authored-by: 유용태 <teo.v@navercorp.com>
* Core의 중복 patch 경로와 배열 fast path를 축소한다

* 편집 주변의 중복 복사와 배치 재탐색을 줄인다

---------

Co-authored-by: 유용태 <teo.v@navercorp.com>
Co-authored-by: 유용태 <teo.v@navercorp.com>
Co-authored-by: 유용태 <teo.v@navercorp.com>
developer-1px and others added 8 commits September 9, 2026 15:18
Calendar 문서 모델·검증·의미 연산·projection을 독립 정본으로 옮기고 선택 회차·붙여넣기·입력 검증을 보강한다. 기존 Editing API 호환 경로, 공통 Editing Grammar, 소유자 문서와 Usage/Source를 연결한다.

관련 테스트 796개와 타입·빌드·외부 tarball 소비·기존 Chrome 검증을 확인했다. Core와 자동 PR CI 정책은 변경하지 않는다.

Closes #745
한 장의 Canvas를 Object Document Type, 기존 Editing, Canvas Hand로 구성하고 두 Host를 정본 소비로 통일한다. 공통 아이콘·툴팁 툴바와 문서·Usage·Source 등록 및 회귀 검증을 포함한다. Closes #747.
developer-1px and others added 15 commits September 10, 2026 01:23
선택 박스의 모양을 유지하면서 네 변·네 모서리 resize, 반대편 고정, Shift 비율 유지, Alt 중심 기준과 최소 크기 고정을 정본 Affordance에 연결한다.

Canvas의 modifier·취소·no-op·Undo 연결과 owner 문서, Usage/Source, 회귀 검증을 포함한다. Closes #757.
재사용 가능한 평면 Select와 복제·외부 Clipboard 기본기를 연결한다
Paste·Image 기본기 TBD 계약과 Composer 이미지 첨부를 연결한다
feat(clipboard): HTML 이미지와 순서 있는 혼합 입력을 연결한다
fix(canvas): 생성 기본 크기가 드래그 전에 노출되는 문제를 고친다
feat(canvas): 선택 스타일 편집을 정본 Object 계약으로 연결한다
기본 단축키 해석을 정본 키맵과 chord로 통일한다
…derivation

편집 문법의 하이라키와 기본 Profile 계약을 구체화한다
…chitecture

사이트 구조·프로토콜 문서와 목표 TBD를 정렬한다
@developer-1px

Copy link
Copy Markdown
Owner Author

최신 main은 cut callback이 있으면 clipboardData와 payload 유무 확인 전에 기본 Cut을 차단합니다. 이 PR은 clipboardData와 non-null payload를 확인한 뒤에만 차단하며, 빈 선택·데이터 없음은 브라우저에 위임합니다. 인코딩/쓰기 실패 시 삭제 방지는 같은 목적이지만 빈 입력의 event ownership 계약이 서로 달라, 어느 동작을 보존할지 결정 전까지 병합을 보류합니다.

@developer-1px developer-1px changed the title Cut 표현 쓰기 실패 시 원본과 선택을 보존한다 Cut 입력 소유권을 Web 정본으로 통합하고 실패 시 원본을 보존한다 Sep 10, 2026
@developer-1px
developer-1px merged commit 48890a3 into main Sep 10, 2026
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.

Cut 표현 쓰기 실패 시 브라우저의 후속 삭제를 막는다

1 participant