Skip to content

편집 입력의 host 소유권과 composition 수명을 보존한다 - #712

Merged
developer-1px merged 2 commits into
mainfrom
codex/issue-711-input-lifecycle
Sep 7, 2026
Merged

편집 입력의 host 소유권과 composition 수명을 보존한다#712
developer-1px merged 2 commits into
mainfrom
codex/issue-711-input-lifecycle

Conversation

@developer-1px

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

Copy link
Copy Markdown
Owner

Goal Anchor

Closes #711

변경

  • Web에 isWebEditingHostTarget을 공개하고 local·collaborative·Rich Text binding의 중복 판별을 제거했습니다. model reconciliation 계약은 각 owner에 유지합니다.
  • Rich Text Web은 replacement/yank/transpose의 dataTransfer와 target range를 소비합니다. composition endpoint가 달라지거나 삭제되면 rich-text.composition-stale로 거절하고 render lease를 해제합니다.
  • Rich Text React는 기존 render store를 mounted surface별로 소유합니다. composing DOM은 유예하고 release 때 누적 model 변경 및 거절/취소된 native DOM을 복구합니다. callback 변경은 latest ref, 실제 as/editor/unmount 변경은 binding 수명으로 처리합니다.
  • local composition tail의 timer/input 종료가 최신 model을 publish합니다.
  • owner README/API reference, 실제 Clipboard Usage, source registration, DOM lifecycle 문서와 browser corpus를 함께 갱신했습니다.

검증

  • 수정 전 3개 회귀 파일의 9개 테스트 실패 → 수정 후 통과.
  • WebKit의 합성 InputEvent 생성자가 dataTransfer를 누락하는 차이를 fixture에서 명시적으로 보완했습니다. 제품 코드는 그대로이며, replacement 문자열과 target range에 대한 기존 검증을 유지합니다.
  • 재개 검증: Firefox·WebKit Rich Text demo/corpus 33건 통과, 기존 native/CDP 제외 4건. WebKit replacement 회귀는 수정 전 실패 → 수정 후 통과했습니다. 기존 Chrome profile의 페이지 realm에서도 replacement의 model/DOM 일치를 확인했습니다.
  • 전체 프로젝트: 135개 파일, 1,228개 테스트 통과 / 기존 4개 skip.
  • Site: 23개 파일, 121개 테스트 통과. 최종 Usage 갱신 뒤 관련 16개 재검증.
  • npm run build, 관련 5개 package test typecheck, workspace:check, docs:api:check, docs:evaluate, standard:check 통과.
  • Site guard/typecheck 및 site:verify:pages의 build·정적/HTTP 검사 통과.
  • 기존 Chrome profile의 실제 Rich Text route: 중첩 control synthetic event 격리, DataTransfer synthetic replacement, synthetic composition 중 제품 command의 model 변경/DOM 유예/최신 복구 통과. 페이지 오류 0개. 실제 Clipboard Usage와 Web source 표시 확인.
  • rejection(모델 불변인데 native DOM은 변한 경우)의 DOM/caret 복구, target 삭제, unrelated model 변경 보존, 두 surface, callback 갱신, 활성 composition 중 as 변경, StrictMode/editor 교체/unmount를 검증했습니다.
  • typing locality 회귀 유지. React placeholder benchmark 1,000→10,000 block: p50 0.207→0.271ms, p95 0.315→0.381ms.
  • self-review: 내부 factory 변경의 benchmark 소비까지 갱신하고 동등한 private host 판별 잔존 없음 확인.

후보와 pending frontier

잔여 조건과 배포 경계

  • 로컬 Firefox·WebKit Rich Text demo/corpus와 기존 Chrome profile의 replacement 경로를 검증했습니다. OS native IME·spellchecker·system clipboard 전체 지원은 합성 입력 검증으로 입증하지 않습니다. 최종 원격 CI는 Plan·Package·External kit·Site 모두 통과했습니다. Site 전체 브라우저 suite는 208건 통과, 기존 4건 제외이며 세 엔진의 replacement 회귀를 포함합니다.
  • 국제화/입력 수명/데이터 소유권의 qualified owner review는 아직 unavailable입니다. self-review로 대체하지 않았으며 merge 전 필요합니다.
  • Wire/schema/저장 형식은 그대로입니다. binding 교체는 canonical JSON 변환을 요구하지 않습니다. 되돌리기는 기존 consumer/Web 조합 복원이며 이미 정상 commit한 사용자 텍스트를 자동 취소하지 않습니다.
  • 새 consumer는 이 API를 제공하는 Web revision이 필요합니다. 구 consumer+신 Web은 additive이며, 신 consumer+구 Web은 지원하지 않습니다. Draft package를 배포할 때 공급 Web을 먼저/같이 배포하고 적합한 release version을 사용해야 합니다.
  • 별도 telemetry는 추가하지 않았습니다. model/DOM 일치, commit 횟수, onAction failure와 기존 browser corpus가 관찰 신호입니다.
  • Project 상태 변경은 read:project 권한 부족으로 unavailable. Issue/PR에서 진행 상태를 기록했습니다.
  • 이번 요청은 PR까지이며 merge하지 않습니다.

@developer-1px
developer-1px merged commit 058422f into main Sep 7, 2026
4 checks passed
@developer-1px

Copy link
Copy Markdown
Owner Author

후속 마무리 요청에 따라 67632511의 녹색 CI와 최신 main을 확인하고 squash merge했습니다. 반영 commit은 058422f3964d3be9b0ffeb4310aa21270e991649이며, 병합 tree가 검증한 PR HEAD tree와 정확히 일치합니다. #711은 자동 종료됐습니다. 본문의 PR까지만 진행한다는 문구는 최초 실행 단계의 기록이며 이번 사용자 요청으로 병합까지 승인됐습니다. 별도 qualified owner review는 미수행 사실로 남기되, 저장소에서 요구하지 않는 자체 추가 대기 조건으로 취급하지 않았습니다. OS native 입력 전체 지원을 입증한 것으로 확대하지 않습니다.

@developer-1px
developer-1px deleted the codex/issue-711-input-lifecycle branch September 7, 2026 07:22
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.

편집 입력의 host 소유권과 composition 수명을 보존한다

1 participant