2026-08-10
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru의 네이티브 편집기 selection 계약을 다른 편집기들과 전수 대조해 채운 날입니다. VSCode·CM6·Zed를 대조해 빈틈 셋을 메우고, 열/블록 선택 원본을 Selections 안에 두는 쪽으로 §3.2a를 뒤집었으며(#2065), 열 선택 원본이 단수인 근거와 무효화 규칙, 커서 상한·정렬 불변식·가로 이동 goal 규칙, 스크롤 추종의 시점을 명령이 정한다는 점을 각각 못 박았습니다. 접힌 영역 안의 커서는 접힘 머리로 옮기도록 정하고(#2072), 뷰가 여럿일 때의 selection 규칙 둘(#2073)과 undo 시 selection 복원 기준을 다듬었습니다. 랩 경계 커서 모호성은 미결로 등재하고 isReversed의 축을 바로잡았으며, 적대적 검증이 잡은 근거 없는 수치·미강제 불변식·부재 증명·계약 공백 넷을 고쳤습니다.
표시 폭과 적대적 입력 처리도 실측으로 확정했습니다. 이모지·기호의 표시 폭을 편집기 규칙으로 세우고 배치와 하나로 묶었으며(#2059), grapheme cluster 경계에 GB11·스킨톤·RI를 넣고 VS16이 낀 이모지 시퀀스 오탐과 ZWJ 문맥 구분을 고쳤습니다. 리거처가 셀 대응을 깨지 않음을 실측으로 확정하고, 한글 자간 문제의 원인이 격자가 아니라 fallback 폰트임을 밝혀 한글 폴백 기본값을 번들 Jetendard로 뒀습니다. 전날 열린 Trojan Source 방어 #2045가 병합돼 적대적 입력을 가시화했고, 그 판정은 레이어 무관 중립 위치로 옮겼습니다. 컬러 글리프 UV sentinel을 u1에도 싣는 수정(#2064)도 들어왔습니다.
SSH 원격 세션은 OSC 7 authority를 보관해 원격 cwd를 로컬과 가르게 했고(#2057), host만 바뀌는 cwd 전이가 관측 갱신을 건너뛰던 것과 원격 파일 링크, 적대적 검증에서 드러난 판정 결함 둘을 고친 뒤 §9.4 표를 전수로 채웠습니다. 상태바는 에이전트 개수를 누르면 그 에이전트로 가게 하고(#2062), 앱 자신을 합계에 넣어 팝오버에 "모든 창 공유" 행으로 냈습니다(#2055). app_session 분할의 후속으로 그룹 파일 17개의 결합을 실측해 남기고, 호출 그래프로 소유를 확인한 46개를 각 그룹으로 옮겼습니다(#2054). 언어 서버는 번들하지 않고 설치를 안내하기로 정했고(#2068), IME는 1차 실측 기준선만 기록하고 결정을 2차로 미뤘습니다(#2069). 구현 계획을 docs/plans/ 이니셔티브별 파일로 가르는 #2074, 컨트롤 플레인과 파일 패널 계약을 주제별로 가르는 #2076·#2077은 이날 PR이 열렸습니다.
session-host는 모든 이벤트의 ordering correlation을 고정하고(#2061) process seal 전제, runtime observation canonicalize, trusted preparation seal을 거쳐, 분류된 이벤트를 불변으로 준비하고(#2070) raw pending control을 격리하며 pending preparation 수명주기를 결속했습니다(#2071). zntc는 #4598 다운레벨 ESM의 top-level await를 붙들어 async cone을 계산하고 cone factory와 init 호출부를 게이트하는 wip 단계를 거쳐, async cone을 __esm 래퍼로 승격하는 방식으로 타겟 준수와 값 정확성을 양립시켰습니다(#4627). 4차 리뷰의 회귀 4건은 "기다려 줄 기계가 있는 위상"으로 한정해 고치고 await 판정 술어를 단일화했습니다. es5(RN)의 TLA 소비자를 promise 체이닝으로 바꾸는 #4631은 열린 채 남아 있습니다.
공개 커밋 71개, 해당일 생성 또는 병합된 PR 28개를 정리했습니다. PR 생성 27개·병합 23개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- docs(editor): undo selection 복원의 판정 기준을 포커스로 다듬는다
- docs(editor): 뷰가 여럿일 때의 selection 규칙 둘을 채운다
- docs(editor): 접힘의 selection 조정이 누구 것이고 언제 도는지 적는다
- docs(editor): 접힌 영역 안의 커서 규칙을 정한다 — 커서를 접힘 머리로 옮긴다
- fix(editor): 적대적 검증이 잡은 넷을 고친다 — 근거 없는 수치·미강제 불변식·부재 증명·계약 공백
- docs(ime): 조합 중 Backspace의 두 단계를 실측으로 정정한다
- docs(ime): 1차 IME 실측 기준선을 기록한다 — 결정은 2차로 미룬다
- feat(session-host): own immutable event preparation
- docs(session-host): bind pending preparation lifecycle
- refactor(session-host): isolate raw pending controls
- test(session-host): specify immutable preparation gate
- docs(session-host): close b2b3 preparation contract
- test(session-host): align metadata recipe boundary
- feat(session-host): prepare classified events immutably
- docs(session-host): expose resize recipe dependency
- test(session-host): specify event preparation recipes
- docs(session-host): specify pure event preparation recipes
- docs(lsp): 언어 서버 획득 경로를 정한다 — 번들하지 않고 설치를 안내한다
- docs(pr-checklist): lsp 라벨을 더하고 status-bar 누락을 채운다
- feat(ime): 질의 방향 콜백을 계측하고 marked range 위치를 실측 게이트로 등재한다
- docs(editor): 랩 경계 커서 모호성을 미결로 등재하고 isReversed의 축을 바로잡는다
- docs(editor): 스크롤 추종의 시점을 명령이 정하도록 못박는다
- docs(editor): 커서 상한·정렬 불변식·가로 이동 goal 규칙을 세운다
- docs(editor): 열 선택 원본이 단수인 근거와 무효화 규칙을 못박는다
- docs(editor): VSCode·CM6·Zed 전수 대조로 selection 계약의 빈틈 셋을 채운다
- design(editor): 열/블록 선택 원본을 Selections 안에 둔다 (§3.2a 뒤집기)
- feat(session-host): seal trusted event preparation
- docs(session-host): specify trusted preparation seals
- fix(chrome): 컬러 글리프 UV sentinel을 u0뿐 아니라 u1에도 싣는다
- feat(session-host): canonicalize runtime observations
- feat(session-host): add process seal prerequisite
- fix(status-bar): 에이전트 팝오버의 오른쪽 열을 한 줄로 맞춘다
- feat(status-bar): 에이전트 개수를 누르면 그 에이전트로 간다
- test(chrome): 표시 폭 골든이 이모지 그림 대신 막대만 보게 한다
- feat(font): 한글 폴백 기본값을 번들 Jetendard로 둔다
- docs(native-editor): 한글 자간의 원인을 격자가 아니라 fallback 폰트로 정정한다
- docs(native-editor): §4.2 표시 폭을 실측 근거와 함께 확정한다
- test(chrome): 표시 폭 시나리오를 캡처와 골든으로 잠근다
- feat(editor): 표시 폭을 편집기 규칙으로 세고 배치와 하나로 묶는다
- fix(grapheme): cluster 경계에 GB11·스킨톤·RI를 넣는다
- refactor(hazard): 적대적 입력 판정을 레이어 무관 중립으로 옮긴다
- docs(editor): 리거처가 셀 대응을 깨지 않음을 실측으로 확정한다
- fix(lab): 편집기 시나리오에 등폭 face를 넘기고 격자 효과를 실측한다
- fix(editor): VS16이 낀 이모지 시퀀스 오탐을 고친다
- feat(editor): ZWJ를 문맥으로 가르고 리거처 원인을 실측으로 좁힌다
- docs(editor): §3.8 가시화 구현을 문서에 반영한다
- feat(editor): 적대적 입력을 가시화한다 (§3.8 Trojan Source 방어)
- feat(session-host): correlate all-event ordering ownership
- docs(status-bar): 에이전트 항목을 누르면 그 에이전트로 가게 정한다
- test(ssh): 원격 cwd 쌍을 할당 실패·이상 authority로 흔들고 §9.4 표를 전수로 채운다
- docs(ssh): 락 제약과 host-backed 후속의 누락 지점을 명시한다
- docs(ssh): §9를 실제 구현과 맞춘다(파일 링크 스코프·host-backed 후속·검증 방식)
- fix(ssh): host만 바뀌는 cwd 전이가 관측 갱신을 건너뛰던 것과 원격 파일 링크를 고친다
- fix(ssh): 적대적 검증에서 드러난 원격 cwd 판정 결함 둘을 고친다
- feat(ssh): OSC 7 authority를 보관해 원격 cwd를 로컬과 가른다
- docs(session-host): define C3-3b settlement contract
- feat(status-bar): 앱 자신을 합계에 넣고 팝오버에 "모든 창 공유" 행으로 낸다
- docs(app-session): 알림 배지 기하를 chrome으로 올리지 않는 이유를 남긴다
- refactor(app-session): 호출 그래프로 소유를 확인한 46개를 각 그룹으로 옮긴다
- docs(app-session): 그룹 파일 17개의 결합을 실측해 남긴다
ohah/zntc
- fix(bundler): #4598 4차 리뷰 회귀 4건 수정 — 기다려 줄 기계가 있는 위상으로 한정
- fix(bundler): #4598 await 판정 술어 단일화 + 라이브러리 entry 값 소실 회귀 수정
- chore: #4598 다운레벨 ESM TLA changeset
- fix(bundler): #4598 다운레벨 ESM 의 TLA — 타겟 준수와 값 정확성 양립
- wip(#4598): async cone 을 __esm 래퍼로 승격 — 타겟 준수와 값 정확성 양립
- wip(#4598): export 선언 안의 TLA 를 async IIFE 로 (의존성 추적 + pending 배수)
- wip(#4598) 3b-4: require 소비 표현식 await (importer 담을 수 있을 때만)
- wip(#4598) 3b-3: star init 호출부도 양쪽 게이트
- wip(#4598) 3a·3b-1: cone factory async + init 호출 양쪽 게이트
- wip(#4598): async cone 계산 + init_X() 가 완료 promise 반환
- wip: async cone 진단 (진행중)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.