2026-08-21
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru의 훅 모드가 실제로 화면을 채우기 시작한 날입니다. 훅 모드 판정과 상태 전이를 순수 층으로 만든 뒤 훅 payload로 배지·대화·알림을 채웠고(AH3+AH4+AH5, #2510), 배지가 거짓말하던 열넷을 자동 검증 아홉·실사용 다섯으로 닫으면서 statusLine 훅 제거, 유령 자식 수거, 로그 회전을 함께 했습니다(#2526). Notification으로 「입력 대기」를 판정하고 AH6 비용을 다시 재는 #2530은 이날 PR이 열렸습니다. 폰은 컨트롤 wire를 프레임으로 읽고(S10d-1, #2512) 세션 목록을 받아 그리며(S10d-2, #2514) 두 host가 컨트롤 채널을 실제로 굴리게 했습니다(S10d-3, #2518). 중계는 신호·half-close·쓰기 실패에서 옳게 끝나게 고쳤고(#2511), S10e가 막힌 자리와 폰에서 실서버까지의 실측을 문서에 남겼습니다(#2521).
편집기는 전날 열린 #2507이 병합돼 네이티브 편집기에서 화면 좌표를 문서 위치로 옮기고, 클릭·드래그 선택과 더블·트리플 클릭, pane 밖 드래그 스크롤, 복사가 가능해졌습니다. 이어 비교 뷰에서도 코드를 고르고 복사하게 했고(#2515), 상태바에 커서 위치를 세우며 비교 뷰가 잡은 단어를 뒤로 끌면 잃던 결함을 닫았습니다(#2534). 비교 뷰 복사가 CRLF를 LF로 뭉개던 것을 고치는 #2541은 이날 열렸습니다. 터미널은 수식자 붙은 특수 키를 xterm legacy 형식으로 보내 Ctrl+화살표 단어 이동이 되게 했고(#2536), 그 베이스는 terminfo가 정답이라는 실측을 적었습니다.
Windows는 번들 폰트를 열고(#2528) 다리가 이름으로만 찾기 때문에 컬렉션에 담아(#2531) macOS와 같은 폰트로 그리게 했으며, 앱 수준 config(테마 색·팔레트·스크롤백·커서 모양)를 코어에 걸고(#2540), 창을 닫을 때까지 도는 터미널과 드래그 선택 렌더를 고쳤습니다(#2535). #2528이 첫 커밋만 머지된 것은 #2529로 보충했고, 셰이핑 다리의 실측과 결정은 §2m.12·13에 적되 §2e가 이미 정한 것을 결함으로 적은 부분을 바로잡았습니다. session-host는 shared client terminal failure 처리, two-window reconnect 봉인과 CR5 two-window abandon(#2523), CR6 recovery projection owner(#2527)를 붙였습니다. i18n은 전날 열린 언어 박은 문자열 게이트 #2491을 병합하고, 확인 버튼 기본 라벨이 comptime에 한국어로 얼어붙어 있던 것을 고쳤습니다(#2525). 소스 컨트롤 도크의 겹침 둘과 파일 탭 연속 ⌘W 문제도 고쳤습니다(#2533).
공개 커밋 78개, 해당일 생성 또는 병합된 PR 35개를 정리했습니다. PR 생성 33개·병합 33개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- feat(windows): 앱 수준 config 를 코어에 건다 — 테마 색·팔레트·스크롤백·커서 모양
- fix(chrome): quad gradient 선언을 lowering 이 실제로 전달한다 + 층 서술을 바로잡는다
- docs(terminal): 수식자 키 인코딩의 베이스를 실측으로 적는다 — terminfo 가 정답이다
- fix(terminal): 적대적 검증 — 범위 밖 기능키와 F3 만 형식이 튀던 것
- feat(terminal): 수식자 붙은 특수 키를 xterm legacy 형식으로 보낸다
- feat(windows): 창을 닫을 때까지 도는 터미널 — 그리고 드래그 선택이 안 그려지던 것을 고친다
- style(editor): DSEL4를 넣으며 빈 줄이 하나 남았다 — zig fmt
- test(editor): 상태바 커서 위치를 헤드리스로 찍을 길이 없었다 — caret 픽스처 (§2.2)
- fix(editor): 비교 뷰가 잡은 단어를 뒤로 끌면 잃었다 — selection 모델을 §3.2로 올린다 (§4.1g)
- feat(editor): 상태바가 커서 위치를 말한다 — 화면 위치가 아니라 몇 번째 글자인가 (§2.2)
- feat(windows): 창을 닫을 때까지 도는 터미널 — 그리고 드래그 선택이 안 그려지던 것을 고친다
- test(scm-dock): Lab 시나리오와 골든으로 두 겹침을 픽셀로 고정한다
- fix(file-panel): 파일 탭을 연달아 ⌘W 로 닫을 수 있게 publish barrier 를 연다
- fix(scm-dock): 목록이 고정 chrome 위로 새고 호버 아이콘이 브랜치 위에 겹치던 것을 고친다
- fix(windows): 적대적 검증 — 검증을 주 폰트와 폴백으로 가르고 시스템도 본다
- feat(windows): 번들 폰트를 컬렉션에 담는다 — 다리가 이름으로만 찾기 때문이다
- fix(windows): 적대적 검증 3 라운드 — 버퍼 밖 쓰기, 안 걸리는 방어, 틀린 셀 크기
- fix(windows): 번들 폰트를 찾는 범위를 좁힌다 — 제품은 exe 옆만 본다
- fix(windows): 적대적 검증이 낸 지적 둘을 반영한다 — 반쪽 face 와 UNC
- docs(i18n): 계획이 "미착수" 라고 적은 단계가 이미 끝나 있었다
- fix(i18n): 확인 버튼 기본 라벨이 comptime 에 한국어로 얼어붙어 있었다
- feat(agent-hooks): 종료를 놓친 유령 자식을 background_tasks 로 거둔다
- fix(agent-hooks): 자식 자리를 해시로 바꿔 상한을 8 → 128 로 올린다
- feat(agent-hooks): statusLine 훅을 제거한다 — 그리고 테스트가 git worker 를 띄우던 누수를 막는다
- feat(agent-hooks): 배지가 거짓말하는 세 부류를 닫고 진행 중 세부를 채운다
- feat(agent-hooks): 로그를 회전하고 종료할 때 치운다
- feat(windows): 번들 폰트를 Windows 에서도 연다 — macOS 와 같은 폰트로 그린다
- feat(session-host): add CR6 recovery projection owner
- fix(windows): win32_process 단독 테스트가 컴파일조차 안 되던 것을 고친다
- feat(session-host): wire CR5 two-window abandon
- docs(windows): §2m.13 이 §2e 가 이미 정한 것을 "결함" 으로 적었다 — 바로잡는다
- docs: 폰에서 실서버까지 손으로 확인한 결과를 적는다
- docs(plan): S10e 가 무엇에 막혀 있는지 코드로 확인해 적는다
- docs(windows): 적대적 검증이 낸 지적 셋을 §2m.13 에 반영한다
- docs(windows): 셰이핑 다리가 한 층 위임을 실측으로 적는다 (§2m.13)
- feat(mobile): maru 경로를 서버 설정에서 받아 인용해 싣는다
- docs: 중계를 손으로 왕복시킨 결과를 검증 행렬에 적는다
- feat(mobile): 두 host 가 컨트롤 채널을 실제로 굴린다 (S10d-3)
- chore(i18n): DSEL3 진단 출력의 한국어 원장을 올린다 (§7)
- test(editor): 비교 뷰 선택을 캡처로 굳힌다 — 한 열에만 서는 것은 픽셀로만 보인다
- test(editor): 비교 뷰 판정자가 랩도 잰다 — 그 축은 결함의 그림자였다 (§4.1g)
- fix(editor): 비교 뷰 선택의 결함 여섯 — 스크롤 100% 오답, 짧아지면 패닉 (§4.1g)
- feat(editor): 비교 뷰에서 코드를 고르고 복사한다 — 한 열에 머물고 빈 행은 뺀다 (§4.1g)
- feat(editor): 비교 뷰 좌표계 — 문서가 둘이면 offset 하나로 못 적는다 (§4.1g)
- fix(file-panel): 스냅샷 검증이 축을 섞지 않는다 — 탐색기 안내가 끊이지 않아 조작이 막혔다
- docs: S10d 를 검증 행렬에 적고 UX 의 낡은 서술을 고친다
- fix(mobile): 고정 언어 원장을 실측 값으로 적는다 (38 → 37)
- fix(mobile): 고정 언어 원장을 목록 문구만큼 올린다
- fix(mobile): 목록 둘째 줄에서 조용한 catch 를 없앤다
- feat(mobile): 세션 목록을 화면에 그린다 (S10d-2)
- feat(mobile): 컨트롤 축을 ABI 로 잇는다 (S10d-2)
- feat(mobile): 세션 목록을 할당 없이 읽는다 (S10d-2 첫 조각)
- docs(windows): 셰이핑 다리의 실측과 결정을 남긴다 (§2m.12)
- feat(session-host): seal two-window reconnect actions
- test(agent-hooks): 배타 규칙과 알림 배선을 실제 seam 에서 검증한다
- feat(agent-hooks): 훅 payload 로 알림을 만든다 (AH5)
- feat(agent-hooks): 훅 payload 로 배지와 대화를 채운다 (AH3-2·AH4)
- feat(agent-hooks): 훅 모드 판정과 상태 전이를 순수 층으로 만든다 (AH3-1)
- fix(mobile): 프로토콜 이름을 서버 것과 한 벌로 들고, 서버가 만든 hello 로 잰다
- feat(mobile): 폰이 컨트롤 wire 를 프레임으로 읽는다 (S10d-1)
- test(i18n): 컴파일러가 절반만 막는다 — 언어를 박은 문자열에 게이트를 세운다
- fix(cli): 중계가 신호·half-close·쓰기 실패에서 옳게 끝난다
- feat(session-host): close shared client terminal failure
- chore(editor): lab 픽스처 주석의 뒤 공백 — zig fmt
- chore(i18n): Lab 캡처 픽스처의 한국어 원장을 올린다 (§7)
- fix(editor): 선택 배선의 결함 다섯 — 죽은 Term, 빈 줄 패닉, 접힘에서 거짓말하는 띠 (§4.1g)
- feat(editor): 선택 드래그가 pane 밖에 머물면 굴러간다 — 화면보다 긴 범위를 고를 수 있다 (§4.1g)
- feat(editor): 더블클릭이 단어를, 트리플클릭이 줄을 잡는다 — anchor가 범위인 이유가 여기서 쓰인다 (§4.1g)
- fix(editor): test-chrome-ui가 12차 커밋 이후 컴파일조차 안 됐다 — 캡처가 그것을 드러냈다
- feat(editor): 선택이 화면에 서고 복사된다 — 네이티브 편집기에서 코드를 뜰 수 있다 (§4.1g)
- feat(editor): 본문 클릭·드래그가 선택을 만든다 — hitTestBody에 첫 제품 호출자가 생겼다 (§4.1g)
- fix(editor): 판정한다고 소스에 적고 판정하지 않았다 — 축을 세운 게 아니라 가렸다 (§4.1f, 16차)
- fix(editor): 탭 폭 세터가 접힘을 푸는 세 번째 경로인데 앵커 계약 밖에 있었다 (§4.1f, 15차)
- fix(editor): 탭 폭 세터가 접힘 배열 넷 중 하나만 놓아 셋을 흘렸다 (§4.1f, 14차)
- fix(editor): 탭 폭 단일 출처가 반쪽이었다 — 가로 막대 상한이 29% 모자랐다 (§4.1g, 12차)
- fix(editor): 굳힌 프레임과 live 상태를 한 답 안에서 섞지 않는다 — 11차 (§4.1g)
- fix(editor): 걸친 것을 렌더가 하는 대로 되짚는다 — 적대적 검증 다섯 번 더 (§4.1g ②b)
- feat(editor): 화면 좌표를 문서 위치로 옮긴다 — 적대적 검증 둘이 결함 열하나를 잡았다 (§4.1g ②b)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.