2026-06-06
요약 (AI 작성)
maru의 macOS 렌더링 스모크 테스트를 촘촘히 쌓은 날입니다(46커밋). Metal 스모크와 CoreText 셰이핑 스모크, glyph texture·glyph text 스모크를 추가하고, appearance 색 해석·glyph frame 계약·프레임 probe·스크린샷 캡처로 렌더 파이프라인을 실측 검증했습니다.
suji는 Electron API 패리티를 대거 확장해 BrowserWindow의 bounds/size/position·content bounds·focus, screen.getDisplayMatching(멀티모니터), powerMonitor·nativeTheme·Notification, go/rust SDK의 창 생명주기 메서드를 맞췄고, init 스캐폴딩에 lua·python 백엔드를 추가했습니다.
커밋
ohah/maru
- feat(platform): add macOS CoreText shaping smoke
- fix(platform): require all sampled readback pixels non-clear
- fix(platform): require Metal readback for terminal grid smoke
- fix(platform): assert window visibility and apply window-smoke review fixes
- feat(platform): add macOS Metal smoke
- fix(platform): harden macOS Metal smoke guards
- fix(platform): harden Metal smoke vertex ABI, buffer, and layer hosting
- feat(platform): draw placeholder cells in Metal smoke
- ci(pr-metadata): collapse redundant runs to unblock required check
- fix(platform): clarify glyph texture smoke diagnostics
- fix(platform): apply glyph texture smoke review fixes
- feat(renderer): add macOS glyph texture smoke
- docs(platform): expose fake shaper in glyph text probe
- docs(profiling): add runtime/external profiler strategy
- fix(platform): generalize glyph visibility check and harden color tests
- feat(platform): apply resolved appearance colors in glyph text smoke
- refactor(renderer): share glyph frame consistency check across host and smoke
- feat(platform): report renderer frame probe in glyph text smoke
- test(renderer): cover render frame consistency failures
- fix(renderer): clamp device_scale upper bound symmetric with font size
- feat(renderer): capture glyph text smoke screenshot
- refactor(platform): single-pass glyph text readback counting
- test(renderer): pin glyph frame stat passthrough and upload index
- feat(renderer): prepare glyph frame contract
- fix(platform): exclude CoreText glyph-buffer overflow from shape signal
- feat(renderer): add CoreText glyph raster smoke
- docs(platform): clarify Swift app host timing
- feat(renderer): feed CoreText smoke glyphs into atlas keys
- fix(config): harden appearance resolver whitespace, surface, and tests
- feat(config): resolve appearance settings
- test(platform): feed resolved font config into CoreText smoke
- refactor(config): consume shared color.Rgb in appearance resolver
- fix(platform): avoid double-free in coretext glyph frame probe
- test(platform): route CoreText smoke through glyph frame
- refactor(color): extract shared Rgb into backend-neutral module
- fix(platform): use premultiplied over-blend in glyph text smoke
- feat(renderer): add macOS glyph text smoke
- fix(renderer): clamp text config device scale
- fix(renderer): clamp textConfigFromFontSize against ReleaseFast UB
- feat(renderer): prepare app host glyph frames
- refactor(platform): harden device scale conversion from review
- fix(platform): prepare glyph text probe at the window backing scale
- refactor(app): emit app host frame stats via shared renderer serializer
- refactor(renderer): own RenderFrame probe stats in a single source
- refactor(platform): align metal smoke frame probe with glyph text smoke
- feat(platform): feed Metal smoke from glyph frame
ohah/suji
- fix(power-monitor): Linux 빌드 깨짐 수정 — std.posix.openZ → extern c open
- refactor(screen): getDisplayMatching 을 코어 cmd 로 — 6개 언어 전부 지원
- feat: powerMonitor.isOnBatteryPower + nativeTheme.themeSource(getter) + Notification.removeAll
- feat(screen): screen.getDisplayMatching(rect) — 듀얼/멀티모니터 (Electron 패리티)
- feat(go-sdk): windows 생명주기/상태 메서드 (JS @suji/api 패리티)
- feat(init): multi 스캐폴딩에 lua + python 백엔드 추가
- docs: init 백엔드 목록에 python 누락 보정 (doc drift)
- test(init): @suji/cli python 백엔드 스캐폴딩 e2e 추가 (lua 동형 갭 메움)
- feat(window): BrowserWindow.focus() + isNormal() (Electron 패리티)
- fix(screen): getDisplayMatching index 정합 가드 (/code-review max --fix)
- feat(window): BrowserWindow.getContentBounds/setContentBounds/getContentSize (Electron 패리티)
- docs: 모바일 python CI 자동 커버리지 반영 + run.sh 하니스 65→68/68 동기화
- feat(rust-sdk): windows 생명주기/상태 메서드 (JS @suji/api 패리티)
- feat(window): BrowserWindow.getBounds()/getSize()/getPosition() (Electron 패리티)
- feat(window): BrowserWindow isVisible/isFocused/blur/setAlwaysOnTop/isAlwaysOnTop
- feat(window): BrowserWindow.getAllWindows() + getFocusedWindow() (Electron 패리티)
- test(rust-sdk): window 리네임 트랩 cmd 가드 (restore_window/destroy_window)
ohah/zntc
- fix(hooks): pre-commit 안전성 — 공백 파일명/포매터 실패/부분 stage (#4188 후속)
- perf(graph): renumber identity fast-path — 위상 보존-hit 시 realloc/remap skip (#4175)
- perf(rn): dev HMR watch 디바운스 기본 50→16ms + --watch-delay 플러밍
- chore(hooks): repo-tracked .githooks (자동 포매팅 pre-commit) — CI fmt 깨짐 방지
- perf(linker): computeRenames hasNestedBinding 모듈당 union set 캐시 — cold lRen 절감
- perf(linker): lImp/lReExp 를 변경∪importer 한정 partial-skip (#4189)
- fix(test): hmr-wait.ts oxfmt 포매팅 (CI fmt:check 복구)