2026-06-08

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

요약 (AI 작성)

maru는 오전에 frame loop smoke 계약(#129)과 live PTY frame loop smoke(#130)를 만들고 Metal smoke를 이 경로로 옮겼습니다. live PTY 세션 소유권을 한곳으로 모은 뒤(#134) 닫기를 detach 경계, 앱 호스트, 레지스트리를 거치도록 정리했고(#135, #137, #138), 대화형 shell smoke(#140, #141)와 닫기 시점의 자식 프로세스 회수(#142), Metal 창에서의 PTY 닫기와 keyDown 캡처 테스트를 더했습니다. 오후에는 macOS Swift 앱 호스트 경계(#148)와 dev shell, dev session 런타임 연결과 이벤트 라우팅(#149부터 #151까지)을 세웠고, 리뷰에서 나온 세션 종료 신호와 이벤트별 치명적 종료 문제를 고쳤습니다(#152). 저녁에는 dev session이 실제 CoreText glyph frame을 그리고(#155) 이를 Metal frame ABI로 노출한 뒤(#156), 셀 셰이더를 공유하는 제품 Metal 렌더러(#158)와 Swift Metal 터미널 뷰(#159)까지 연결했습니다. 이어서 렌더러 경계 보강과 idle 호출 생략(#160, #161), 고정 픽셀 크기 셀 배치(#162), SGR·커서·지우기 VT escape 해석(#163), resize 때 화면 내용 보존(#164)이 들어왔습니다.

suji는 Electron 패리티 항목을 카테고리별로 마무리했습니다. 전날 열린 Menu.sendActionToFirstResponder #114를 병합하고 MenuItem 아이콘·Menu.insert·메뉴 열림/닫힘 이벤트(#115)로 Menu를 닫았습니다. nativeTheme·nativeImage getter, globalShortcut registerAll과 일시 중지, ipc handleOnce·removeAllListeners, clipboard 북마크·찾기 텍스트·다중 쓰기, tray getBounds, notification 그룹과 Notification 클래스, powerMonitor 종료·배터리 이벤트, screen 디스플레이 변경 이벤트(#117부터 #124까지)가 들어왔습니다. 이어 WebContentsView 클래스(#125), webContents stop·insertCSS(#126), 다운로드 경로와 will-download(#127), webRequest 응답 헤더와 요청 헤더 설정(#128, #131), before-quit 이벤트(#129), 기본 프로토콜 클라이언트 등록(#130), setWindowOpenHandler(#132)를 추가했습니다. SDK wire 계약 테스트와 before-quit e2e를 보강했고, 리뷰에서 before-quit 때 메인 창이 닫히지 않던 문제 등 5건을 고쳤습니다(#135).

zntc는 0.1.2 퍼블리시 뒤 생긴 bun.lock 차이를 맞추고, 배포되는 7개 패키지에 영어 기본 README와 한국어 링크를 넣었습니다(#4197). 블로그 저장소에는 이날 오늘의 커밋 요약 커밋이 올라갔습니다.

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

커밋

ohah/maru

ohah/ohah.github.io

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/maru#164생성 · 병합mergedmainfeat(terminal): preserve screen content across resize
ohah/maru#163생성 · 병합mergedmainfeat(terminal): interpret VT escape sequences (SGR, cursor, erase)
ohah/maru#162생성 · 병합mergedmainfeat(platform): lay out terminal cells at fixed pixel size
ohah/maru#161생성 · 병합mergedmainperf(platform): fill vertex buffer in place and skip idle metal-frame calls
ohah/maru#160생성 · 병합mergedmainfix(platform): harden metal renderer bounds, drawable, and surface repaint
ohah/maru#159생성 · 병합mergedmainfeat(platform): draw the dev session in a Swift Metal terminal view
ohah/maru#158생성 · 병합mergedmainfeat(platform): add a lean product Metal renderer and share the cell shader
ohah/maru#157생성 · 병합mergedmainfix(platform): correct metal-frame retention lifecycle and dirty-gate it
ohah/maru#156생성 · 병합mergedmainfeat(platform): expose the dev session RenderFrame as a Metal-frame ABI
ohah/maru#155생성 · 병합mergedmainfeat(platform): render real CoreText glyph frames in the dev session
ohah/maru#154생성 · 병합mergedmainrefactor(app): share smoke termination and artifact-write helpers
ohah/maru#153생성 · 병합mergedmainrefactor(platform): unify shell resolution and key codepoint conversion
ohah/maru#152생성 · 병합mergedmainfix(platform): signal session end and stop fatal per-event app exits
ohah/maru#151생성 · 병합mergedmainfeat(platform): route Swift app dev events
ohah/maru#150생성 · 병합mergedmainfeat(platform): attach Swift app dev session runtime
ohah/maru#149생성 · 병합mergedmainfeat(platform): add macOS app dev shell
ohah/maru#148생성 · 병합mergedmainfeat(platform): define macOS Swift app host boundary
ohah/maru#147생성 · 병합mergedmaintest(platform): capture keyDown on Metal terminal window
ohah/maru#146생성 · 병합mergedmaintest(platform): close live PTY from Metal window
ohah/maru#145생성 · 병합mergedmaintest(app): pin repeated frame builder loop contract
ohah/maru#144생성 · 병합mergedmaintest(platform): add visible interactive shell PTY Metal smoke
ohah/maru#143생성 · 병합mergedmaintest(app): bound PTY smoke drain waits
ohah/maru#142생성 · 병합mergedmainfix(app): reap live PTY child at close boundary and pin lifecycle invariants
ohah/maru#141생성 · 병합mergedmaintest(app): add interactive shell frame-loop smoke
ohah/maru#140생성 · 병합mergedmaintest(pty): add interactive shell smoke
ohah/maru#139생성 · 병합mergedmainfeat(platform): route native close smoke through app host
ohah/maru#138생성 · 병합mergedmainfeat(app): add live PTY registry close boundary
ohah/maru#137생성 · 병합mergedmainfeat(app): route live PTY close through app host
ohah/maru#136생성 · 병합mergedmainfeat(platform): gate app PTY Metal close lifecycle
ohah/maru#135생성 · 병합mergedmainfeat(app): add live PTY close detach boundary
ohah/maru#134생성 · 병합mergedmainrefactor(app): centralize live PTY session ownership
ohah/maru#133생성 · 병합mergedmainrefactor(platform): extract CoreText frame builder
ohah/maru#132생성 · 병합mergedmainrefactor(app): live PTY Metal smoke를 FrameLoop 경로로 연결
ohah/maru#131생성 · 병합mergedmainrefactor(platform): RenderFrame에서 Metal smoke fixture 투영
ohah/maru#130생성 · 병합mergedmainfeat(app): add live PTY frame loop smoke
ohah/maru#129생성 · 병합mergedmainfeat(app): add frame loop smoke contract
ohah/suji#135생성 · 병합mergedmainfix(review): code-review max 후속 — before-quit 창닫기 누락 외 5건
ohah/suji#134생성 · 병합mergedmaintest(app): before-quit behavioral e2e — 백엔드 마커로 종료 전 발화 검증
ohah/suji#133생성 · 병합mergedmaintest(sdk): 백엔드 SDK wire-contract 보강 — Node behavioral + cross-SDK drift 가드
ohah/suji#132생성 · 병합mergedmainfeat(webContents): setWindowOpenHandler — popup 정책 + new-window 이벤트 (전 5 SDK)
ohah/suji#131생성 · 병합mergedmainfeat(webRequest): setRequestHeaders (declarative onBeforeSendHeaders) — 전 5 SDK
ohah/suji#130생성 · 병합mergedmainfeat(app): setAsDefaultProtocolClient 트리오 — 전 5 SDK (macOS LS)
ohah/suji#129생성 · 병합mergedmainfeat(app): before-quit 이벤트 — quit chokepoint 훅
ohah/suji#128생성 · 병합mergedmainfeat(webRequest): responseHeaders + statusText in completed (onHeadersReceived)
ohah/suji#127생성 · 병합mergedmainfeat(session): setDownloadPath + will-download 이벤트 — 전 5 SDK
ohah/suji#126생성 · 병합mergedmainfeat(webContents): stop + insertCSS + removeInsertedCSS — 전 5 SDK
ohah/suji#125생성 · 병합mergedmainfeat(WebContentsView): View.getBounds + setBackgroundColor + WebContentsView 클래스
ohah/suji#124생성 · 병합mergedmainfeat(screen): display-added/removed/metrics-changed events
ohah/suji#123생성 · 병합mergedmainfeat(powerMonitor): shutdown + on-battery/on-ac events
ohah/suji#122생성 · 병합mergedmainfeat(notification): caller id + groupId/removeGroup + Notification class
ohah/suji#121생성 · 병합mergedmainfeat(tray): setToolTip alias + getBounds — 전 5 SDK
ohah/suji#120생성 · 병합mergedmainfeat(clipboard): writeBookmark + writeFindText + write(multi) — 전 5 SDK
ohah/suji#119생성 · 병합mergedmainfeat(ipc,powerSaveBlocker): removeAllListeners + handleOnce + isStarted (+Zig SDK catch-up)
ohah/suji#118생성 · 병합mergedmainfeat(globalShortcut): registerAll + setSuspended/isSuspended
ohah/suji#117생성 · 병합mergedmainfeat(nativeTheme,nativeImage): high-contrast/reduced-transparency + isEmpty/isTemplateImage
ohah/suji#116생성 · 병합mergedmaindocs(site): menu.mdx 전체 Menu API 표면 동기화 (배치 누락 catch-up)
ohah/suji#115생성 · 병합mergedmainfeat(menu): MenuItem.icon + Menu.insert + menu:will-show/will-close (Menu tail)
ohah/suji#114병합mergedmainfeat(menu): Menu.sendActionToFirstResponder
ohah/zntc#4197생성 · 병합mergedmaindocs: 배포 패키지 release README (영어 기본 + 한국어 링크)