목표
- 결과: 제목 블록과 왼쪽 H1~H6 표시를 유지하면서 방향키로 제목 표시의 원문 위치에 이동해 편집할 수 있다.
- 완료 조건: 좌우 이동, 해당 위치에서 # 입력·Delete·Backspace, 제목 단계 변경과 일반 문장 전환, 실행 취소를 실제 Bear 화면에서 검증한다.
- 유지 조건: Markdown 원문·복사·선택 좌표를 보존하고 기존 IME 처리를 유지한다. 다른 Markdown 문법의 표시 정책은 변경하지 않는다.
범위와 근거
사용자 요청: “heading만 헤딩 블록을 유지하고 h1/h2/h3/4 등의 표기를 좌측 블록 옆에 기호로 표기”, “키보드 왼쪽으로 커서도 H1 마크로 보낼수있고 # 이나 del bs 등도 가능하게”.
기존 app-bear 구현 위에 제목 표시와 편집 연결을 추가한다. Bear 화면에 편집 로직을 직접 추가하지 않고 기존 정본 패키지의 책임 경계를 따른다.
진행 및 검증
- 제목 원문과 시각적 표시·커서 좌표 연결
- 입력·삭제·선택·실행 취소 검증
- 관련 패키지 테스트·타입 검사와 Chrome Bear 흐름 검증 후 PR
후속 합의: 인용문 Enter
사용자 요청에 따라 내용이 있는 인용 줄에서 Enter를 누르면 같은 글상자를 다음 줄로 이어가고, 빈 인용 줄에서 Enter를 누르면 일반 문단으로 빠져나옵니다. 원문 결정은 Markdown 공개 API, 입력 수명은 contenteditable, 변경·선택·Undo는 Editing이 소유합니다. 붙여넣기는 원문 그대로 유지합니다. 원문·IME 명령 연결·실제 Bear Enter 및 Undo/Redo·Usage 소스 등록을 검증합니다.
후속 합의: 수직 커서 이동의 경계 보정
실제 키 입력으로 확인한 인용문 경계부터 순차 개선합니다. 첫 범위는 동일한 원문 offset의 유효한 DOM 선택을 보존하고, 숨긴 인용 기호와 블록 배치 때문에 발생하는 수직 이동 정지·건너뛰기를 줄이는 것입니다. 일반 텍스트·자동 줄바꿈의 native 이동을 유지하며, ↑↓와 Shift 선택·기존 원문 편집을 검증합니다. 전면적인 수직 이동 엔진 도입은 이번 범위가 아닙니다.
2026-09-11 수직 이동 조사 기록
- 재현 원문:
abcdefghij\n> quote text\n> next line\n\nabcdefghij, 시작 offset 7. Chrome에서 ↓ 직후 native 선택은 숨긴 > 의 시작(offset 11)에 놓이지만, 원문 선택 동기화가 같은 offset인 이전 개행 Text node 끝으로 다시 배치했습니다. setBaseAndExtent 전후 DOM endpoint와 좌표를 기록해 확인했습니다.
- 첫 수정: 명시적 affinity가 없는 endpoint는 현재 DOM 위치가 같은 원문 offset을 가리키면 보존합니다. anchor/focus를 각각 판단하며, DOM 교체로 무효화되면 기존 복원을 수행합니다. projection adapter도 모든 위치에 backward를 강제하지 않습니다. following의 명시적 forward 정책은 유지합니다.
- 결과: 인용 진입 뒤 모델 동기화가 커서를 인용 밖으로 옮기는 문제가 사라졌고, 재현 fixture에서 아래 문단까지 내려간 뒤 위로 돌아올 때 시작 offset 7과 가로 위치가 복원됐습니다.
- 남은 현상: native ↑가 인용 내부 줄을 건너뛰거나 숨긴 인용 접두사에 멈추는 현상은 여전히 있습니다. 첫 수정이 전체 수직 이동 해결을 뜻하지 않습니다.
- 비교 실험: 인용 display를 inline-block에서 block으로 바꾸면 위쪽 진입은 달라지지만 여분의 빈 줄과 가로 위치 손실이 발생했습니다. 숨긴 source를 static·font-size:0으로 바꿔도 추가 정지가 생겼습니다. 두 CSS 실험은 제품에 반영하지 않았습니다.
- 일반 텍스트의 긴 줄→짧은 줄→긴 줄, 인용 내부 자동 줄바꿈은 기존 native 이동으로 정상 왕복했습니다. 원문에 실제 빈 줄이 있는 제목·목록 사이 정지와 인용 경계 결함을 구분합니다.
후속 합의: 문법별 예외를 공용 화면 줄 탐색으로 수렴
사용자가 다양한 실제 키 입력 검사를 통해 하나의 솔루션과 생태계 모듈을 찾도록 요청했습니다. 이전 단계의 전면 이동 보류 범위를 확장해, 원문 문자열 DOM adapter의 선택적 공용 수직 이동 기능을 구현·검증합니다.
책임 감사 범위는 source-string contenteditable 입력·DOM 복원·투영, Markdown Web·React, Bear와 Markdown caret Usage입니다. 저장소 검색에서 이에 해당하는 기존 화면 줄 이동 구현은 없었습니다. 분류는 contenteditable의 canonical API gap 1건, Markdown Web/React의 canonical consumer 2건, Bear/Usage의 Host composition 2건입니다. 구조화된 Rich Text의 node-point 선택과 Canvas 공간 navigation은 좌표·의미 계약이 달라 범위 밖입니다.
createTextNavigationDOMAdapter가 보이는 DOM 줄·hit test·가로 목표 위치를 소유하고 기존 projection adapter가 이를 조합합니다. 입력 수명과 키 해석은 기존 binding/Web adapter, 원문·선택·History는 Editing에 남깁니다. 목표는 인용·제목·목록·todo·코드·표·빈 줄·wrap·Shift 선택·스크롤에 동일 알고리즘을 적용하는 것입니다. 수직 writing mode와 Alt/Ctrl/Meta 명령은 native 경로를 유지합니다. 공개 export·소유 API 문서·Usage·source registration과 Markdown 없는 직접 소비 검사까지 연결합니다.
화면 줄 탐색 구현 및 검증 완료
공개 createTextNavigationDOMAdapter를 contenteditable 정본에 추가했습니다. 최종 조합은 Markdown Web이 공개 투영 adapter와 공개 탐색 adapter를 감싸는 형태이며, 투영 adapter 자체에 수직 탐색을 강제하지 않습니다. Bear에는 별도 키 이동 구현을 두지 않습니다. 패키지 API 문서·Usage·소스 등록을 연결했습니다.
브라우저 Range와 caret hit testing으로 보이는 줄을 탐색하고 가로 목표·Shift anchor·스크롤 노출을 유지합니다. 일반 문단, 인용·중첩 인용, 제목, 목록, task, 코드, inline, 표, 한글·emoji 줄바꿈, 빈 마지막 줄과 포인터 초기화를 검사했습니다. Markdown 없이 일반 텍스트 1,000줄에도 같은 공개 API를 적용했습니다.
Chrome 회귀 검사 71개 정상 통과 후, 최종 공개 조합 및 1,000줄 탐색 검사 25개를 정상 재검증했습니다(각 준비 포함). contenteditable 49개, Markdown Web 29개, Usage 등록 1개 단위 검사와 변경 패키지 타입 검사·전체 패키지 빌드 통과. 기존 native ↑ 인용 줄 건너뛰기와 숨긴 기호의 추가 정지는 회귀 검사로 해결을 확인했습니다. Chrome 가로 쓰기 source-text DOM 범위이며, 세로 쓰기·배치 미지원은 native fallback입니다. 구조화된 rich-text와 Canvas의 별도 좌표 모델은 이번 범위 밖입니다.
최종 사이트 production 빌드 통과. 기존 theme utility·chunk 크기 경고는 유지됩니다.
목표
범위와 근거
사용자 요청: “heading만 헤딩 블록을 유지하고 h1/h2/h3/4 등의 표기를 좌측 블록 옆에 기호로 표기”, “키보드 왼쪽으로 커서도 H1 마크로 보낼수있고 # 이나 del bs 등도 가능하게”.
기존 app-bear 구현 위에 제목 표시와 편집 연결을 추가한다. Bear 화면에 편집 로직을 직접 추가하지 않고 기존 정본 패키지의 책임 경계를 따른다.
진행 및 검증
후속 합의: 인용문 Enter
사용자 요청에 따라 내용이 있는 인용 줄에서 Enter를 누르면 같은 글상자를 다음 줄로 이어가고, 빈 인용 줄에서 Enter를 누르면 일반 문단으로 빠져나옵니다. 원문 결정은 Markdown 공개 API, 입력 수명은 contenteditable, 변경·선택·Undo는 Editing이 소유합니다. 붙여넣기는 원문 그대로 유지합니다. 원문·IME 명령 연결·실제 Bear Enter 및 Undo/Redo·Usage 소스 등록을 검증합니다.
후속 합의: 수직 커서 이동의 경계 보정
실제 키 입력으로 확인한 인용문 경계부터 순차 개선합니다. 첫 범위는 동일한 원문 offset의 유효한 DOM 선택을 보존하고, 숨긴 인용 기호와 블록 배치 때문에 발생하는 수직 이동 정지·건너뛰기를 줄이는 것입니다. 일반 텍스트·자동 줄바꿈의 native 이동을 유지하며, ↑↓와 Shift 선택·기존 원문 편집을 검증합니다. 전면적인 수직 이동 엔진 도입은 이번 범위가 아닙니다.
2026-09-11 수직 이동 조사 기록
abcdefghij\n> quote text\n> next line\n\nabcdefghij, 시작 offset 7. Chrome에서 ↓ 직후 native 선택은 숨긴>의 시작(offset 11)에 놓이지만, 원문 선택 동기화가 같은 offset인 이전 개행 Text node 끝으로 다시 배치했습니다.setBaseAndExtent전후 DOM endpoint와 좌표를 기록해 확인했습니다.후속 합의: 문법별 예외를 공용 화면 줄 탐색으로 수렴
사용자가 다양한 실제 키 입력 검사를 통해 하나의 솔루션과 생태계 모듈을 찾도록 요청했습니다. 이전 단계의 전면 이동 보류 범위를 확장해, 원문 문자열 DOM adapter의 선택적 공용 수직 이동 기능을 구현·검증합니다.
책임 감사 범위는 source-string contenteditable 입력·DOM 복원·투영, Markdown Web·React, Bear와 Markdown caret Usage입니다. 저장소 검색에서 이에 해당하는 기존 화면 줄 이동 구현은 없었습니다. 분류는 contenteditable의 canonical API gap 1건, Markdown Web/React의 canonical consumer 2건, Bear/Usage의 Host composition 2건입니다. 구조화된 Rich Text의 node-point 선택과 Canvas 공간 navigation은 좌표·의미 계약이 달라 범위 밖입니다.
createTextNavigationDOMAdapter가 보이는 DOM 줄·hit test·가로 목표 위치를 소유하고 기존 projection adapter가 이를 조합합니다. 입력 수명과 키 해석은 기존 binding/Web adapter, 원문·선택·History는 Editing에 남깁니다. 목표는 인용·제목·목록·todo·코드·표·빈 줄·wrap·Shift 선택·스크롤에 동일 알고리즘을 적용하는 것입니다. 수직 writing mode와 Alt/Ctrl/Meta 명령은 native 경로를 유지합니다. 공개 export·소유 API 문서·Usage·source registration과 Markdown 없는 직접 소비 검사까지 연결합니다.화면 줄 탐색 구현 및 검증 완료
공개
createTextNavigationDOMAdapter를 contenteditable 정본에 추가했습니다. 최종 조합은 Markdown Web이 공개 투영 adapter와 공개 탐색 adapter를 감싸는 형태이며, 투영 adapter 자체에 수직 탐색을 강제하지 않습니다. Bear에는 별도 키 이동 구현을 두지 않습니다. 패키지 API 문서·Usage·소스 등록을 연결했습니다.브라우저 Range와 caret hit testing으로 보이는 줄을 탐색하고 가로 목표·Shift anchor·스크롤 노출을 유지합니다. 일반 문단, 인용·중첩 인용, 제목, 목록, task, 코드, inline, 표, 한글·emoji 줄바꿈, 빈 마지막 줄과 포인터 초기화를 검사했습니다. Markdown 없이 일반 텍스트 1,000줄에도 같은 공개 API를 적용했습니다.
Chrome 회귀 검사 71개 정상 통과 후, 최종 공개 조합 및 1,000줄 탐색 검사 25개를 정상 재검증했습니다(각 준비 포함). contenteditable 49개, Markdown Web 29개, Usage 등록 1개 단위 검사와 변경 패키지 타입 검사·전체 패키지 빌드 통과. 기존 native ↑ 인용 줄 건너뛰기와 숨긴 기호의 추가 정지는 회귀 검사로 해결을 확인했습니다. Chrome 가로 쓰기 source-text DOM 범위이며, 세로 쓰기·배치 미지원은 native fallback입니다. 구조화된 rich-text와 Canvas의 별도 좌표 모델은 이번 범위 밖입니다.
최종 사이트 production 빌드 통과. 기존 theme utility·chunk 크기 경고는 유지됩니다.