Skip to content

편집 프로토콜의 구현 간 동등성과 조합 안전성을 보장한다 - #715

Merged
developer-1px merged 6 commits into
mainfrom
issue-713-editing-protocol-composition
Sep 7, 2026
Merged

편집 프로토콜의 구현 간 동등성과 조합 안전성을 보장한다#715
developer-1px merged 6 commits into
mainfrom
issue-713-editing-protocol-composition

Conversation

@developer-1px

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

Copy link
Copy Markdown
Owner

Goal Anchor

Closes #713

결과

완료 조건 구현·증거
1. 구현 간 변경 동등성 최종 값이 같은 structural batch는 빈 applied와 무통지. 공통 conformance vector로 reference·독립 구현을 검증합니다.
2. transaction·inverse subscriber 재진입의 own/external snapshot을 분리하고 FIFO를 유지합니다. move/copy inverse는 영향 경로를 복원하며 암묵적 root snapshot 대체를 제거했습니다. 등록 순서 3종과 inverse 8종 회귀가 있습니다.
3. domain ID Document·Order·Object·Tree·Calendar 및 Rich Text가 canonical UUID 생성 owner를 사용합니다. custom createId 유지, 인스턴스·재생성·동시 replica 병합·ID 기반 명령 검증을 추가했습니다.
4. selection Editing에 before/change/after mapping 경계를 두고 9개 domain이 각 selection 의미로 외부 삭제를 reconcile합니다. Calendar의 유효한 off-screen occurrence는 유지합니다. Rich Text는 안정된 text ID의 replacement span·affinity·Unicode scalar 경계를 mapping합니다.
5. selective history Editing의 optional history owner와 Collaboration의 공개 /editing 연결을 추가했습니다. toolbar·키보드·history input·availability가 같은 owner를 사용하며 editor-authored target의 selection을 현재 문서로 복원합니다.
6. 실제 consumer·public closure 실제 Document editor의 reference·independent·collaboration matrix, Rich Text+TextRuntime 동시 text, 합성 DOM 입력, 기존 Chrome의 실제 페이지 흐름을 검증했습니다. owner README/API, Usage, source registration을 연결했습니다.

보존한 의미와 제한

  • 기본 local inverse history는 외부 값 변경 시 비워집니다. collaboration document만 주입해서 selective history로 오인하지 않도록 명시적 연결이 필요합니다.
  • 협업 undo 단위는 native history와 동일한 인과 commit 하나입니다. local historyGroup으로 wire 기여를 합치지 않으며 external history의 ignore plan은 변경 전에 거절합니다.
  • snapshot만으로 임의 작성자의 text 의도를 복원한다고 주장하지 않습니다. 같은 text ID의 공통 prefix/suffix로 replacement span을 정하고 affinity로 경계를 처리합니다.
  • Core six members, 23 exports, runtime peers 0과 기존 collaboration wire를 보존합니다.
  • A2UI 문서 통합 책임을 공식 모듈로 정본화한다 #714 A2UI 정본화는 독립 작업이며 이 PR에 포함하지 않습니다.

큰 snapshot의 조합 회귀

새 inverse의 정상 Core snapshot 소비 과정에서 반복 split/undo가 중단되는 Proxy reflection 예외가 드러났습니다. Core의 기존 shared-array owner에서 reflection 시에만 frozen dense snapshot을 materialize하도록 고쳤습니다. JSON clone이나 Editing에 소비자별 우회를 두지 않았습니다. indexed leaf 경로는 lazy로 유지하며 snapshot 재입력(64/512/4096 항목), reflection·immutability, 반복 structural undo 회귀로 검증했습니다.

검증

  • npm run build, npm run test:projects: 142 files, 1317 passed, 4 skipped.
  • 전체 28개 library의 verify 수행: 초기 순차 실행에서 public-subpath expectation을 갱신한 뒤 나머지 11개 workspace 재실행 완료. 최신 Core/Editing/Rich Text typecheck와 전체 build/tests를 재검증했습니다.
  • npm run standard:check, npm run workspace:check, npm run docs:evaluate: 통과.
  • Site typecheck 및 정본·UI·design-token guards, 121 site tests: 통과.
  • npm run site:verify:pages: build·site evaluation·HTTP smoke 통과.
  • Core·Editing benchmark 완료. Rich Text 10,000 blocks 입력 p95 0.063ms(headless, 로컬 측정), 반복 split/undo 완료. UI frame 또는 실기기 성능 주장으로 사용하지 않습니다.
  • git diff --check: 통과.

실제 Chrome와 unavailable 범위

기존 Chrome profile에서 작업트리의 실제 Rich Text 페이지를 열고 합성 beforeinput 입력 → 원격 삽입 → toolbar Undo → historyRedo → 합성 Meta+Z를 확인했습니다. 원격 문자열을 유지하며 내 입력과 caret offset을 복원했고 error/unhandledrejection 기록은 비었습니다. Document 페이지에서는 기본 UUID로 복제 후 move/undo의 ID 유지도 확인했습니다. Usage source에서 공개 connection과 ID API import를 확인했습니다.

macOS System Events 키 입력은 권한 오류 1002로 unavailable입니다. 새 browser profile이나 로그인 상태 변경 없이 진행했습니다. 전체 Playwright browser suite, OS native 키 입력, 실기기 IME 검증을 완료했다고 보고하지 않습니다. browser regression spec은 추가했으며 이번 실제 페이지 증거는 합성 이벤트 경로입니다.

Clean CI source 경로 보완

aa8a43ab에서 Site TypeScript paths에 새 /editing source entry를 등록했습니다. clean CI의 module-resolution 실패를 닫았으며 로컬 source typecheck·전체 build와 재실행 CI의 Verify site 단계가 통과했습니다. External kit은 최초 통과 후 동일 runtime의 재실행에서 keyboard focus 단계가 실패하여 재검증이 필요합니다. workflow 진행 중 개별 job 재실행 요청은 거절되었으며 이를 성공으로 보고하지 않습니다.

승인된 merge 단계와 최신 리뷰

사용자가 “리뷰 하고 merge”를 승인하여 원래 PR-open 종료 조건만 리뷰·merge·merged 작업트리 정리로 확장했습니다. 원래 Goal Anchor는 이력으로 보존하며 npm 배포 제외는 유지합니다.

배열 조상으로 move한 값의 undo 결함을 추가 수정했습니다. 4개 회귀의 실패→통과, Editing 221 tests, 전체 1321 passed / 4 skipped, 유효한 move/copy 884개 복원을 확인했습니다. 새 head의 CI가 merge 기준입니다. 이전 head의 External kit 포커스 실패는 검사 변경 없이 재실행에서 통과했습니다.

@developer-1px

Copy link
Copy Markdown
Owner Author

merge 전 리뷰 수정·검증

원래 완료 조건 2에 해당하는 배열 조상 move의 inverse 결함을 수정했습니다. 회귀 4개가 모두 실패함을 확인한 뒤 수정하여 통과했습니다.

  • 최종 방식: 같은 inverse owner에서 destination parent가 array인지 판별합니다. object/root 조상의 replace 복원은 유지하고 array 삽입은 remove destinationadd original source로 복원합니다. 처음 검토한 단일 역방향 move는 자기 하위 경로로의 이동이 되어 JSON Patch에서 거절되므로 사용하지 않습니다. root snapshot fallback이나 새 공개 API를 추가하지 않았습니다.
  • Editing 검증: typecheck·221 tests·build 통과.
  • 전체 build·test:projects: 142 files, 1321 passed / 4 skipped.
  • 4개 document fixture의 유효한 move/copy 884개 모두 원래 값으로 복원했습니다. 새 fixture 4개는 undo뿐 아니라 redo와 root replacement 부재도 확인합니다.
  • git diff --check 통과. 수정은 inverse owner와 기존 regression table 두 파일뿐입니다.
  • 이전 head의 External kit은 검사 변경 없이 재실행에서 통과했습니다. 이번 수정 head의 CI를 새로 확인한 뒤 merge합니다.

doubt 관점에서 public history 연결·identity owner·domain mapping은 각각 이슈의 직접 계약을 소유하므로 유지했습니다. 이번 역변환 수정은 기존 owner 안에서 해결하여 별도 abstraction·fallback을 만들지 않았습니다.

사용자의 “리뷰 하고 merge”에 따라 원래 PR-open 종료 조건만 review·merge·merged workspace 정리로 확장됐고 npm 배포 제외는 유지됩니다.

@developer-1px

Copy link
Copy Markdown
Owner Author

최신 main과 조합 검증

#716의 최종 CI 통과와 merge를 확인한 뒤, 그 merge commit f281280151742d947047d3f12edacf4ce7660527#715 branch에 일반 merge로 반영했습니다. force push는 하지 않았습니다. #715의 기준 diff는 여전히 원래 편집 조합 계약 55개 path이며 별도 A2UI 구현 변경을 추가하지 않았습니다.

  • 최종 후보 head: 98e4505f0b79dd346a0b9f3d22fbae46c19b1c8b.
  • 로컬 전체 build, 144 files / 1333 passed / 4 skipped.
  • workspace 29 libraries, API/doc 검사, Site typecheck·정본/스타일 guards 통과.
  • 두 공개 subpath와 source registration이 함께 보존됐고 merge conflict 및 lockfile 추가 변경이 없습니다.
  • 이 head의 CI가 마지막 merge gate입니다. 이전 base의 green 결과를 대신 사용하지 않습니다.

npm 배포 제외와 Core 공개 계약 보존은 유지합니다.

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

Copy link
Copy Markdown
Owner Author

merge 확인

PR #715을 최신 main과 조합한 검증 head 98e4505f0b79dd346a0b9f3d22fbae46c19b1c8b에서 squash merge했습니다. 관리자 우회는 사용하지 않았습니다.

  • merge commit: 5df3b687555eb9aa9cd6a2e93db7ec02dc9c200f
  • 원격 PR MERGED, 이슈 편집 프로토콜의 구현 간 동등성과 조합 안전성을 보장한다 #713 CLOSED 확인.
  • 최종 PR CI: Plan·Package·Site·External kit 모두 통과.
  • 통합 로컬 검증: 전체 build 및 1333 passed / 4 skipped.
  • CI Site: unit 123 passed, browser 212 passed / 4 skipped.
  • 리뷰 P1인 배열 조상 move의 undo를 기존 inverse owner에서 수정했고 회귀 4종·유효한 move/copy 884개를 확인했습니다.
  • Core 23 exports·six members·0 runtime peers와 domain/platform/history 경계를 보존했습니다. 기존 macOS native 키 입력 unavailable 기록을 자동화 통과로 대체하지 않습니다.
  • npm 배포는 하지 않았습니다. main fast-forward와 검증된 merged 작업트리/branch 정리를 마무리합니다.

@developer-1px
developer-1px deleted the issue-713-editing-protocol-composition branch September 7, 2026 11:16
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