Skip to content

task: kevin9327 그룹B(studio 편집 — IME·그리드 뷰) 통합 - #2676

Merged
edwardkim merged 2 commits into
develfrom
task/kevin-groupB-studio-20260721
Jul 21, 2026
Merged

task: kevin9327 그룹B(studio 편집 — IME·그리드 뷰) 통합#2676
edwardkim merged 2 commits into
develfrom
task/kevin-groupB-studio-20260721

Conversation

@edwardkim

Copy link
Copy Markdown
Owner

통합

kevin9327 님의 studio 편집 계열 2건을 cherry-pick(-x) 통합.

검증

운영

head CI 성공 + merge 승인 후 원 PR 크레딧·close.

🤖 Generated with Claude Code

[#2337-review] 계약: WASM 삭제/조회 count 는 Rust Paragraph::delete_text_at 의
char(Unicode scalar) 단위이며, JS String.length(UTF-16)를 넘기면 astral 문자에서
실제보다 많이 지운다. 당시 undo/HF/FN 경로에는 charCount() 가 적용됐지만 IME
조합 경로는 누락돼 있었다.

compositionLength(:488)와 iOS 폴백 _iosLength(:553)는 deleteTextAt 의 삭제
count 로 전달되므로(deleteTextAt → wasm.deleteText*) scalar 여야 한다. 조합 중
후보에 astral 문자가 있으면 다음 업데이트가 뒤따르는 실제 문자까지 지우고,
조합 종료 시 getTextAt 도 이웃 문자를 포함해 읽어 undo 레코드가 부정확해진다.

커서 오프셋(anchor.charOffset + text.length 등)은 studio 의 UTF-16 관례를
유지하므로 손대지 않았다 — command.ts charCount 주석과
tests/undo-delete-char-count.test.ts 가 그 관례를 명시한다.

검증:
- 신규 정적 소스 가드 3건(tests/ime-composition-char-count.test.ts). 수정을
  되돌리면 2건 실패, 복원하면 3건 통과(red→green 실증).
- 전체 studio 테스트 436 pass / 1 fail. 유일한 실패 cell-flow-boundary 는
  깨끗한 devel 에서도 동일하게 실패하는 사전 실패임을 stash 로 확인.

처리결과 문서: mydocs/report/task_m100_2548_report.md

(cherry picked from commit 4515f95)
getPageAtY 가 그리드 보기에서 행의 마지막 쪽을 반환한다. layoutGrid 가 한 행의
모든 쪽에 같은 rowTop 을 넣기 때문이다. 이 의미 자체는 의도된 것이고
(getPageAtPoint 가 rowLastIdx 라 명명하고 스캔 끝점으로 사용), 문제는 "현재 쪽"
이 필요한 소비처가 이 Y 전용 진입점을 직접 쓴 것이었다.

- PageUp 무동작: 행의 마지막 쪽에서 -1 하면 같은 행이라 offset 이 동일해
  스크롤이 제자리다. PageDown 은 +1 이 실제로 다음 행이라 우연히 동작했고,
  이 비대칭이 근본 원인을 가리킨다.
- 쪽 표시기: 3열이면 첫 행에서 "3 / N" 으로 표시돼 1·2쪽을 표시할 수 없었다.

getPageAtY 의미를 바꾸면 getPageAtPoint 가 깨지므로 의미는 유지하고
getRowFirstPageAtY() 와 pagesPerRow 게터를 추가해 두 소비처를 고쳤다.
PageUp/PageDown 은 ±1 이 아니라 ±열수로 이동한다. 단일 컬럼에서는
pagesPerRow=1 이라 종전 동작과 동일하다.

영향 없음 확인: canvas-view.ts:512 focusPage(offset 만 사용, 행 내 동일),
getPageAtPoint(스캔 끝점 의미가 맞음).

검증: tests/virtual-scroll-grid-page.test.ts 4건 신규 — 이 클래스의 첫 테스트다
(종전 tests/virtual-scroll* 파일 부재). DOM 없이 node --test 로 검증되며,
그리드 전제 조건을 테스트 내에서 단언해 조용한 통과를 막는다.

처리결과 문서: mydocs/report/task_m100_2560_report.md

(cherry picked from commit acd8ab9)
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.

2 participants