2026-08-10

요약 (AI 작성)

네이티브 편집기의 selection 계약을 다른 편집기들과 전수 대조해 채운 날입니다. VSCode·CM6·Zed 를 대조해 빈틈 셋을 메우고, 열/블록 선택 원본을 Selections 안에 두는 쪽으로 §3.2a 를 뒤집었으며, 열 선택 원본이 단수인 근거와 무효화 규칙, 커서 상한·정렬 불변식·가로 이동 goal 규칙, 스크롤 추종의 시점을 명령이 정한다는 점을 각각 못박았습니다. 접힘도 정리해 접힌 영역 안의 커서는 접힘 머리로 옮기고, selection 조정이 누구 것이며 언제 도는지를 정했으며, 뷰가 여럿일 때의 규칙 둘과 undo 시 selection 복원 기준을 포커스로 다듬었습니다. 랩 경계 커서 모호성은 미결로 등재하고 isReversed 의 축을 바로잡았으며, 적대적 검증이 잡은 근거 없는 수치·미강제 불변식·부재 증명·계약 공백 넷을 고쳤습니다.

표시 폭과 적대적 입력 처리도 실측으로 확정했습니다. 이모지·기호의 표시 폭을 편집기 규칙으로 세고 배치와 하나로 묶었으며(§4.2), grapheme cluster 경계에 GB11·스킨톤·RI 를 넣고 VS16 이 낀 이모지 시퀀스 오탐과 ZWJ 문맥 구분을 고쳤습니다. 리거처가 셀 대응을 깨지 않음을 실측으로 확정하고, 한글 자간 문제의 원인이 격자가 아니라 fallback 폰트임을 밝혀 한글 폴백 기본값을 번들 Jetendard 로 뒀습니다. Trojan Source 방어로 적대적 입력을 가시화하고(§3.8), 그 판정을 레이어 무관 중립 위치로 옮겼습니다. 검증은 표시 폭 시나리오를 캡처와 골든으로 잠그되, 골든이 이모지 그림 대신 막대만 보도록 했습니다.

SSH 원격 세션의 cwd 판정을 바로잡은 것도 이날입니다. OSC 7 authority 를 보관해 원격 cwd 를 로컬과 가르고, host 만 바뀌는 cwd 전이가 관측 갱신을 건너뛰던 것과 원격 파일 링크를 고쳤으며, 적대적 검증에서 드러난 판정 결함 둘을 정리하고 원격 cwd 쌍을 할당 실패·이상 authority 로 흔들어 §9.4 표를 전수로 채웠습니다. 상태바는 에이전트 개수를 누르면 그 에이전트로 가도록 하고, 앱 자신을 합계에 넣어 팝오버에 "모든 창 공유" 행으로 냈습니다. 문서는 파일 패널·컨트롤 플레인 계약을 주제별로 가르고 구현 계획을 docs/plans/ 이니셔티브별 파일로 나눴으며, 언어 서버는 번들하지 않고 설치를 안내하기로 정했습니다(§8.1a). IME 는 1차 실측 기준선만 기록하고 결정을 2차로 미뤘습니다.

session-host 는 이벤트 준비를 불변으로 만드는 b2b3 작업이 이어졌습니다. 순수 이벤트 준비 레시피를 명세하고 분류된 이벤트를 불변으로 준비하도록 했으며, raw pending control 을 격리하고 pending preparation 수명주기를 결속했고 trusted preparation seal 과 runtime observation canonicalize, process seal 전제, 모든 이벤트 ordering correlation 고정까지 진행했습니다. zntc 는 #4598 다운레벨 ESM 의 top-level await 를 하루 종일 붙들었습니다 — async cone 을 계산해 init_X() 가 완료 promise 를 반환하게 하고, cone factory 를 async 로 만들며 init 호출부를 양쪽에서 게이트하고, export 선언 안의 TLA 를 async IIFE 로 바꾸는 wip 을 거쳐 async cone 을 __esm 래퍼로 승격하는 방식으로 타겟 준수와 값 정확성을 양립시켰습니다. 4차 리뷰에서 나온 회귀 4건은 "기다려 줄 기계가 있는 위상"으로 한정해 해결하고 await 판정 술어를 단일화했습니다.

커밋

ohah/maru

ohah/zntc

PR (해당일 생성/머지)

repo#상태제목
ohah/maru#2077mergeddocs(file-panel): 파일 패널 계약을 주제별 문서로 가른다
ohah/maru#2076mergeddocs(control-plane): 컨트롤 플레인 계약을 주제별 문서로 가른다
ohah/maru#2075closeddocs(editor): 네이티브 편집기 계약을 주제별 문서로 가른다
ohah/maru#2074mergeddocs(plan): 구현 계획을 docs/plans/ 이니셔티브별 파일로 가른다
ohah/maru#2073mergeddocs(editor): 뷰가 여럿일 때의 selection 규칙 둘을 채운다 (§3.3)
ohah/maru#2072mergeddocs(editor): 접힌 영역 안의 커서 규칙을 정한다 (§4)
ohah/maru#2071mergedfeat(session-host): own immutable event preparation
ohah/maru#2070mergedfeat(session-host): prepare classified events immutably
ohah/maru#2069mergeddocs(ime): 1차 IME 실측 기준선을 기록한다 — 결정은 2차로 미룬다
ohah/maru#2068mergeddocs(lsp): 언어 서버는 번들하지 않고 설치를 안내한다 (§8.1a)
ohah/maru#2067mergedfeat(session-host): seal trusted event preparation
ohah/maru#2066mergedfeat(session-host): canonicalize runtime observations
ohah/maru#2065mergeddesign(editor): 열/블록 선택 원본을 Selections 안에 둔다 (§3.2a 뒤집기)
ohah/maru#2064mergedfix(chrome): 컬러 글리프 UV sentinel을 u0뿐 아니라 u1에도 싣는다
ohah/maru#2063mergedfeat(session-host): add process seal prerequisite
ohah/maru#2062mergedfeat(status-bar): 에이전트 개수를 누르면 그 에이전트로 간다
ohah/maru#2061mergedfeat(session-host): 모든 이벤트 ordering correlation을 고정한다
ohah/zntc#4631openfix(bundler): #4598 es5(RN) 의 TLA 소비자를 promise 체이닝으로 — Hermes 앱 부팅 복구
ohah/maru#2060mergeddocs(status-bar): 에이전트 항목을 누르면 그 에이전트로 가게 정한다
ohah/zntc#4627mergedfix(bundler): #4598 다운레벨 ESM 의 top-level await — 타겟 준수와 값 정확성 양립
ohah/maru#2059mergedfix(editor): 이모지·기호 표시 폭을 편집기 규칙으로 확정한다 (§4.2)
ohah/maru#2058mergeddocs(session-host): define C3-3b settlement contract
ohah/maru#2057mergedfeat(ssh): OSC 7 authority를 보관해 원격 cwd를 로컬과 가른다
ohah/maru#2056mergeddocs(app-session): 알림 배지 기하를 chrome으로 올리지 않는 이유를 남긴다
ohah/maru#2055mergedfeat(status-bar): 앱 자신을 합계에 넣고 팝오버에 "모든 창 공유" 행으로 낸다
ohah/maru#2054mergedrefactor(app-session): 호출 그래프로 소유를 확인한 46개를 각 그룹으로 옮긴다
ohah/maru#2053mergeddocs(app-session): 그룹 파일 17개의 결합을 실측해 남긴다