2026-06-07
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru는 전날 열린 #96으로 render frame이 glyph quad를 소유하게 한 뒤, glyph 래스터 upload frame(#97)과 Metal의 제품 atlas 업로드 검증·샘플링(#99, #100)으로 넘어갔습니다. 이후 Metal smoke 판정을 atlas 샘플 기준으로 바꾸고(#102), shaped glyph record 어댑터(#103)와 renderer state의 shaped run 수용(#105), font identity 레지스트리(#108)를 거쳐 CoreText smoke가 renderer state와 font identity를 타게 했습니다. CoreText 쪽은 font 어댑터, shaper, rasterizer, probe 경계를 차례로 분리했고(#110, #112, #114, #115), 밤에는 CoreText glyph를 Metal smoke에서 그리고 DrawList를 CoreText로 shaping해 Metal로 렌더한 뒤 스크린샷 아티팩트를 남겼습니다(#116부터 #119까지). 새벽에는 실제 PTY를 붙인 앱 호스트 smoke와 Metal smoke(#120, #122), 스크립트 입력, 키 바인딩 입력 resolver(#124)와 그 라우팅, AppKit keyDown을 PTY smoke로 잇는 브리지와 수동 입력 모드(#126, #127)가 들어왔고, 리뷰에서 나온 C0 제어 문자 표와 키 인코딩 문제를 고쳤습니다(#128).
suji는 single-instance 락에 이어 두 번째 인스턴스의 argv를 primary로 넘기는 second-instance 이벤트를 Unix 소켓(#95)과 Windows named pipe(#96)로 구현했습니다. session.setProxy(#99), 강제 파괴용 BrowserWindow.destroy()(#101), CEF 권한 핸들러를 쓰는 setPermissionRequestHandler(#104)를 추가했고, setSSLConfig와 cookies.changed는 CEF 제약으로 보류한다고 문서에 적었습니다. 창 속성은 크기·위치와 최소·최대 크기(#106), resizable 등 capability 플래그(#107), movable·focusable·kiosk 등 모드 토글(#108)을 세 묶음으로 채웠고, 메뉴는 MenuItem의 id·visible, accelerator, role 필드(#109, #110, #111)와 Menu.getApplicationMenu·getMenuItemById(#112)를 더했습니다. Electron 패리티 감사 문서를 다시 맞추고, 실수로 커밋된 검증 산출물도 지웠습니다. Menu.sendActionToFirstResponder #114는 이날 PR이 열렸습니다.
zntc는 16개 패키지를 0.1.2로 올리는 릴리스 커밋(#4195)을 넣고, npm 퍼블리시가 실패하지 않도록 bun.lock을 동기화했습니다(#4196).
공개 커밋 71개, 해당일 생성 또는 병합된 PR 55개를 정리했습니다. PR 생성 54개·병합 54개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- fix(input): complete C0 table and harden key encoding from review
- feat(platform): add manual keydown smoke mode
- feat(platform): bridge AppKit keyDown into PTY smoke
- feat(app): route key events through resolver
- feat(config): add keybinding input resolver
- feat(platform): script input through live PTY Metal smoke
- feat(platform): add live PTY Metal smoke
- fix(platform): harden CoreText/Metal smoke from review findings
- feat(app): add live PTY app host smoke
- feat(platform): capture Metal smoke screenshot artifact
- feat(platform): render DrawList through Metal smoke
- feat(platform): shape DrawList with CoreText
- feat(platform): render CoreText glyphs in Metal smoke
- refactor(platform): extract CoreText probe boundary
- feat(platform): extract CoreText rasterizer boundary
- refactor(platform): drop redundant CoreText probe record copy
- fix(platform): keep CoreText probe font names stable
- refactor(platform): clarify CoreText smoke shaper probe
- feat(platform): add CoreText shaper boundary
- docs(platform): correct overclaim on required CoreText drawable field
- fix(platform): require explicit CoreText drawable intent
- refactor(platform): keep CoreText font intern policy private to the adapter
- feat(platform): extract CoreText font adapter boundary
- fix(platform): harden CoreText font identity bridge
- test(platform): lock font-id to PostScript-name lookup in CoreText probe
- feat(platform): route CoreText smoke through font identity
- test(renderer): cover font identity trim dedup and unknown-id lookup
- feat(renderer): add font identity registry
- fix(platform): thread rasterizer name and drop dead zero-ink branch in CoreText probe
- feat(platform): rasterize CoreText smoke glyph runs
- fix(platform): align CoreText probe surface bounds
- refactor(platform): reuse renderer frame stats in CoreText probe
- feat(platform): route CoreText smoke through renderer state
- refactor(renderer): drop unused RendererState method re-exports
- feat(renderer): accept shaped glyph runs in renderer state
- feat(renderer): preserve surface metadata for shaped records
- refactor(renderer): reuse rasterStyleFlags in shaped record adapter
- feat(renderer): add shaped glyph record adapter
- fix(platform): align native Metal smoke status gate with atlas-sample rule
- fix(renderer): gate Metal smoke on atlas samples
- fix(renderer): classify missing atlas samples
- fix(renderer): sample atlas ink texels in Metal smoke
- feat(renderer): sample product atlas in Metal smoke
- fix(platform): align Metal atlas readback row pitch to 256
- feat(renderer): verify Metal atlas raster upload
- fix(renderer): treat rasterizer-failed glyphs as not-ready and share slot bounds check
- Align glyph raster skips with atlas bounds
- refactor(renderer): drop redundant glyph raster buffer clear
- feat(renderer): add glyph raster upload frame
- feat(renderer): make render frame own glyph quads
ohah/suji
- chore: 스트레이 검증 바이너리 test_json_fmt 제거 + 루트 test_* gitignore
- feat(menu): Menu.getApplicationMenu + getMenuItemById (Menu batch)
- feat(menu): MenuItem role field (Menu batch Phase B-2)
- feat(menu): MenuItem accelerator field (Menu batch Phase B-1)
- feat(menu): MenuItem id + visible fields (Menu batch Phase A)
- feat(windows): setMovable/Focusable/Enabled/FullScreenable/Kiosk (mode toggles)
- feat(windows): setResizable/Minimizable/Maximizable/Closable (capability flags)
- feat(windows): setSize/setPosition + min/max size (Geometry batch)
- chore: 실수로 커밋된 빈 아티팩트 test_intcast 제거
- feat(session): setPermissionRequestHandler (CEF cef_permission_handler_t)
- docs: session.setSSLConfig / cookies.changed — CEF 본질적 제약으로 보류 명시
- docs(window): BrowserWindow.destroy() 문서화 + audit done 마킹 (#101)
- feat(window): BrowserWindow.destroy() — 강제 파괴 (window:close 스킵)
- docs(session): setProxy API 문서화 + audit done 마킹 (#99)
- feat(session): setProxy — Electron session.setProxy (Chromium proxy preference)
- docs(audit): electron-parity-audit 재동기화 — 구현 완료 25항목 done 마킹 + false 4건 정정
- docs(app): single-instance / second-instance API 문서화 (#94~96)
- feat(app): second-instance Windows named pipe (PR-B2)
- feat(app): second-instance 이벤트 — 두 번째 인스턴스 argv 를 primary 로 전달
ohah/zntc
- fix(release): bun.lock 동기화 — v0.1.2 platform/optionalDeps/root manual bump 반영
- chore(release): v0.1.2
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.