2026-06-10

날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.

요약 (AI 작성)

maru는 전날 열린 Cmd+클릭 URL 열기 #226을 병합하고, Cmd를 누른 채 올리면 URL에 밑줄과 손가락 커서를 보여 주는 기능(#227), 드래그 선택 중 뷰포트 끝에서의 자동 스크롤(#228), 30Hz tick으로 도는 커서 깜빡임과 그 통합 테스트(#230)를 더했습니다. 깜빡임 PR #229는 병합되지 않고 닫혔지만 같은 내용의 커밋은 main에 들어 있습니다. 누적 리뷰 반영(#231부터 #235까지)으로 행을 옮기는 모든 연산에서 선택을 무효화하고, 붙여넣기의 ESC 제거와 비차단 붙여넣기 큐를 넣었으며, OSC 8 명시적 하이퍼링크(#237)를 지원하게 했습니다.

이날 maru의 중심은 한글 입력이었습니다. NSTextInputClient 조합과 자판 배치와 무관한 단축키를 담은 IME 1단계(#238), 조합 중인 글자를 커서 위치에 그리는 2단계(#240)가 들어왔고, 라이브 제보를 따라 중복 전송, 한 칸만 움직이지 않던 백스페이스, 조합 중 커서 깜빡임과 이중 커서, 마지막 자모를 지우는 데 두 번 눌러야 하던 문제를 차례로 고쳤습니다(#239, #241, #242, #245, #246). IME 판정 로직은 Zig로 옮겨 테스트할 수 있게 했고(#243), 입력기 콜백 추적용 MARU_IME_DEBUG도 넣었습니다. 리뷰 반영으로 IME 트랜잭션 경계, OSC 8 링크 수명과 RIS 하드 리셋, PTY master fd 비차단화(#247부터 #250까지)를 다듬었고, SGR 4 밑줄 렌더링(#251), SIGKILL 뒤 자식 회수 대기의 상한(#252), 커서 셀 위치의 IME 후보창(#253), Control+Command+Space 이모지 피커(#254)가 이어졌습니다. 컬러 이모지 렌더링 #255는 이날 PR이 열렸습니다.

zntc는 정규식과 문자열 escape 처리의 정확성 수정에 집중했습니다. ES2025 중복 named capture group을 낮은 타깃으로 내릴 때의 잘못된 변환과 역참조(#4206), 이를 켜는 feature gate(#4224), __wrapRegExp의 .groups 유실과 크래시(#4208, #4209), inline modifier 그룹을 캡처로 세거나 그 안의 플래그를 무시하던 문제(#4212, #4226), escape를 디코드한 그룹 이름 비교(#4217), __proto__ 그룹명(#4219), u 플래그 전용 case fold와 비ASCII 리터럴 처리(#4238, #4239)를 고쳤습니다. 트랜스포머에서는 $<name> 치환 재작성(#4215, #4230, #4240), es5 템플릿의 CR·CRLF 정규화(#4227), const enum 문자열 인라인과 멤버 조회(#4233, #4234), 합성 temp 이름 충돌(#4235), 합성 key의 identifier escape(#4245)를 바로잡았고, bundle+minify에서 합성 temp 선언이 지워지던 시맨틱 문제(#4222)와 미해결 참조 키의 dangling(#4236)도 수정했습니다. numeric·bigint 프로퍼티 키 #4247은 이날 PR이 열렸습니다.

suji는 Node 백엔드 앱이 종료 때 멈추던 문제를 고치고, forkpty로 셸을 띄워 출력을 스트리밍하는 terminal 플러그인을 추가했으며, Node 백엔드 앱 번들에 libnode를 넣고 Contents/MacOS의 dylib도 서명하도록 했습니다. 블로그 저장소에는 오늘의 커밋 요약과 크론 커밋이 올라갔습니다.

공개 커밋 58개, 해당일 생성 또는 병합된 PR 52개를 정리했습니다. PR 생성 51개·병합 49개는 같은 PR이 양쪽에 포함될 수 있습니다.

커밋

ohah/maru

ohah/ohah.github.io

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#255생성mergedmainfeat(renderer): render color emoji with the atlas RGBA instead of a foreground silhouette
ohah/maru#254생성 · 병합mergedmainfeat(platform): open the system emoji & symbols picker on Control+Command+Space
ohah/maru#253생성 · 병합mergedmainfeat(platform): place the IME candidate window at the cursor cell (ABI v22)
ohah/maru#252생성 · 병합mergedmainfix(pty): bound the post-SIGKILL reap so close/deinit never hangs (was 22min wait4 hang)
ohah/maru#251생성 · 병합mergedmainfeat(platform): render SGR 4 underline text (reuse the partial-rect underline kind)
ohah/maru#250생성 · 병합mergedmainfix(platform): show preedit when scrolled, normalize committed newlines, stop autoscroll on bad coords, cover new ABI exports
ohah/maru#249생성 · 병합mergedmainfix(pty): make the master fd non-blocking so paste flush never blocks the UI tick
ohah/maru#248생성 · 병합mergedmainfix(terminal): reset OSC 8 pen_link on screen switch and RIS; add a real RIS hard reset
ohah/maru#247생성 · 병합mergedmainfix(platform): always close the IME transaction; replay arrows after candidate commit; fail closed on OOM
ohah/maru#246생성 · 병합mergedmainfix(terminal): hide the block cursor during IME composition (no double cursor)
ohah/maru#245생성 · 병합mergedmainfix(platform): cancel insertText+deleteBackward so last-jamo backspace deletes in one press (ABI v21)
ohah/maru#244생성 · 병합mergedmaindiag(platform): add MARU_IME_DEBUG callback trace for the macOS input method
ohah/maru#243생성 · 병합mergedmainrefactor(platform): move the IME decision logic into Zig (ABI v20); fix last-jamo backspace
ohah/maru#242생성 · 병합mergedmainfix(platform): freeze the cursor blink during composition; commit preedit on focus loss
ohah/maru#241생성 · 병합mergedmainfix(terminal,platform): BS moves exactly one column; IME-consumed keys stop reaching the PTY
ohah/maru#240생성 · 병합mergedmainfeat(terminal,platform): IME stage 2 — render the in-progress composition (preedit) at the cursor (ABI v19)
ohah/maru#239생성 · 병합mergedmainfix(platform): remove the IME fallback double-send and bypass the IME for Option chords
ohah/maru#238생성 · 병합mergedmainfeat(platform): IME stage 1 — NSTextInputClient composition + layout-independent shortcuts (ABI v18)
ohah/maru#237생성 · 병합mergedmainfeat(terminal): OSC 8 explicit hyperlinks (cell link ids + interned URI store)
ohah/maru#236생성 · 병합mergedmainfix(pty): add writeInputNonBlocking to the non-macOS stub (Linux CI build break)
ohah/maru#235생성 · 병합mergedmainfix(platform,pty): non-blocking paste queue, anchored-rewrap perf coverage, deflaked blink probe
ohah/maru#234생성 · 병합mergedmainfix(terminal,platform): drag autoscroll after word-select, no-rebuild cursor blink, pre-rewrap on selection start
ohah/maru#233생성 · 병합mergedmainfix(terminal,platform): strip ESC from pastes (injection), exact Cmd chord, valid hover coords on flagsChanged
ohah/maru#232생성 · 병합mergedmainfix(platform,terminal): crash-safe mouse coords, content-following hover underline, URL paren balance
ohah/maru#231생성 · 병합mergedmainfix(terminal): invalidate selection on every row-relocating op (single chokepoint)
ohah/maru#230생성 · 병합mergedmaintest(platform): headless integration probe for cursor blink
ohah/maru#229생성closedmainfeat(platform): cursor blink driven by the 30Hz tick, plus a Swift paste warning fix
ohah/maru#228생성 · 병합mergedmainfeat(platform): drag-selection autoscroll at the viewport edges
ohah/maru#227생성 · 병합mergedmainfeat(terminal,platform): Cmd+hover underlines URLs and switches to a pointing-hand cursor (ABI v17)
ohah/maru#226병합mergedmainfeat(terminal,platform): Cmd+click opens the URL under the cursor (ABI v16)
ohah/zntc#4247생성mergedmainfix(transformer): numeric/bigint 프로퍼티 키 합성을 노드 패스스루로
ohah/zntc#4246생성 · 병합mergedmainchore(transformer): const-enum concat 중간 문자열 소유권 수거 리스트
ohah/zntc#4245생성 · 병합mergedmainfix(transformer): 합성 quoted key/super prop 의 identifier escape 처리
ohah/zntc#4240생성 · 병합mergedmainfix(transformer): $<name> 재작성의 replacement-side 이름을 string-escape cook 으로 비교
ohah/zntc#4239생성 · 병합mergedmainfix(regexp): literal non-ASCII atom 을 UTF-8 코드포인트 단위 노드로 — transform 재인쇄 mojibake
ohah/zntc#4238생성 · 병합mergedmainfix(regexp): u-전용 fold 등가 atom 의 u-strip 게이트 — /k/iu Kelvin 매치 소실
ohah/zntc#4236생성 · 병합mergedmainfix(semantic): unresolved_references 키를 stable 사본으로 — string_table slice dangling
ohah/zntc#4235생성 · 병합mergedmainfix(transformer): 합성 temp 이름의 사용자 식별자 충돌 회피 + hoist shadow 일관성
ohah/zntc#4234생성 · 병합mergedmainfix(transformer): const-enum 멤버 lookup 을 cooked(escape 디코드) 비교로
ohah/zntc#4233생성 · 병합mergedmainfix(transformer): const-enum string 인라인의 escape-aware 재인용 + brace lowering
ohah/zntc#4230생성 · 병합mergedmainfix(transformer): replace 재작성 합성 string literal 의 \u{...} brace escape 다운레벨
ohah/zntc#4227생성 · 병합mergedmainfix(transformer): es5 template lowering 의 TV/TRV CR·CRLF→LF 정규화 + LineContinuation
ohah/zntc#4226생성 · 병합mergedmainfix(regexp): transform 이 inline modifier 영역의 유효 플래그 존중 — (?-s:) dot 오재작성 / (?-i:) iu fold 오확장
ohah/zntc#4224생성 · 병합mergedmainfeat(compat): ES2025 regex_duplicate_named_groups feature gate
ohah/zntc#4222생성 · 병합mergedmainfix(semantic): 식별자 이름 해석을 string_ref 정본으로 — bundle+minify 합성 temp 선언 오삭제/반쪽 rename
ohah/zntc#4219생성 · 병합mergedmainfix(transformer): proto 그룹명의 groups map 키를 computed key / JSON.parse 로 emit
ohah/zntc#4217생성 · 병합mergedmainfix(regexp): 그룹 이름 비교를 canonical (escape 디코드) 코드포인트 시퀀스로 통일
ohah/zntc#4215생성 · 병합mergedmainfix(transformer): replace template replacement 의 unsafe 문자 시 정적 재작성 bail
ohah/zntc#4212생성 · 병합mergedmainfix(regex_lower): extractNamedGroupMap 이 ES2025 inline modifier 그룹 (?i:...) 을 capturing 으로 오집계
ohah/zntc#4209생성 · 병합mergedmainfix(runtime): __wrapRegExp buildGroups 의 groups map 부재 가드 — cloneRegExp 패턴 크래시
ohah/zntc#4208생성 · 병합mergedmainfix(runtime): __wrapRegExp constructor-side prototype 설정 — matchAll/split species 우회로 .groups 유실
ohah/zntc#4206생성 · 병합mergedmainfix(transformer): ES2025 duplicate named capture group 다운레벨 silent miscompile