2026-04-28
요약 (AI 작성)
suji는 Electron 호환 API 표면을 넓히는 작업이 하루 종일 집중적으로 진행되었습니다. window의 Phase 5 라이프사이클 이벤트(minimize/maximize/fullscreen, ready-to-show, page-title-updated, show/hide, 취소 가능한 will-resize, quitOnAllWindowsClosed 정책)가 구현되었고, maximize 직접 emit과 fullscreen collectionBehavior 등 후속 fix가 이어졌습니다. 시스템 영역에서는 macOS 기반으로 app.getPath, shell.trashItem, safeStorage(Keychain), powerMonitor, app.requestUserAttention(dock bounce), screen.getAllDisplays/dock badge/powerSaveBlocker 등이 추가되었고, webRequest는 URL glob blocklist와 before-request/completed 이벤트, dynamic listener(RV_CONTINUE_ASYNC) 지원으로 확장되었습니다. 이 네이티브 기능들은 @suji/api와 zig-sdk를 통해 노출되었고 Rust/Go/Node SDK에도 screen/powerSaveBlocker/safeStorage/dock/attention이 반영되었으며, TypeScript type-safe invoke(SujiHandlers module augmentation)와 clipboard HTML, app.getName/getVersion 등도 함께 들어갔습니다. 아울러 zig-sdk에 process.run, http.fetch 백엔드 wrap이 추가되고 e2e 테스트가 다수 정비되었으며(13 pass / 4 skip / 0 fail 등), Phase 17-B CEF Views API 마이그레이션(Option F) 계획 문서가 작성되었습니다.
zts에서는 config 시스템이 크게 확충되었습니다. zts.config.{ts,mjs,js,cjs,json} 자동 탐색과 self-compile loader(#2113, #2114), 함수형 config와 --config/--mode 플래그(#2119, #2128), .env 자동 로드 및 import.meta.env 정적 치환(#2120), extends 상속과 순환 참조 감지(#2129), Levenshtein 기반 "did you mean?" typo 검출(#2130), 그리고 zts.workspace.ts 모노레포(#2134)가 머지되었습니다. CLI/schema 측면에서는 누락 BuildOptions 키 5개 노출(#2138), --banner/--footer 정식 형태(#2137), outdir/outfile silent drop 수정(#2135), TS BuildOptions ↔ Zig DTO 양방향 schema sync(#2132) 등이 반영되었습니다. innerGraph 계열 dead-store/DCE 작업도 entry pure local DCE(#2121), overwritten declaration/dead write 제거(#2125, #2127), block/function body dead store 제거(#2131) 등으로 꾸준히 진행되었고, Reference 기반 dead-store 판정 전환(#2133)은 open 상태입니다. CJS interop과 codegen 쪽에서는 module.exports object member value DCE(#2093), defineProperty getter/value export DCE(#2076, #2082, #2084, #2085), staticKeyName API 통합(#2083, #2086), string escape decoder 공유(#2078, #2081), internName UAF 방지(#2089) 등 다수가 머지되었고, TypeScript 6.0.3 업그레이드(#2117)도 포함되었습니다.
ohah.github.io에서는 블로그 운영성 작업이 이루어졌습니다. CRON_CRD_WRITE.md 체크리스트에서 CRD 문서들을 완료 처리하고 모든 .mdx 파일을 checked로 표시했으며, today-commit index에 2026-04-24, 2026-04-26 항목을 추가하고 development-2.mdx를 CRD-checked로 정리했습니다.
커밋
ohah/ohah.github.io
- cron: mark CRON_CRD_WRITE.md as completed in checklist
- CRON: Mark all CRD docs as completed
- chore: mark CRON_CRD_WRITE.md as completed
- docs(today-commit): list 2026-04-24, 2026-04-26 in index
- chore(cron): mark all .mdx files as checked in CRON_CRD_WRITE.md
- cron: mark all CRD files checked (2026-04-28)
- docs: mark docs/monthly-opensource/crd/development-2.mdx as CRD-checked (2026-04-28)
ohah/suji
- feat(window): Phase 5 라이프사이클 이벤트 — minimize/maximize/fullscreen
- feat(app): app.getPath (Electron 표준 7 키)
- feat(shell): trashItem (macOS NSFileManager
trashItemAtURL:) - test(splash): 스플래시 스크린 패턴 e2e — windows.create + isLoading polling
- refactor(sdk): simplify 후속 — Rust json! 매크로 / e2e 구조화 / Go attention 정렬
- feat(zig-sdk): process.run — std.process.run wrap (백엔드 only)
- refactor(b+c): simplify 후속 — buildAppCachePath 중복 제거 + destroy_window IPC + SDK round-trip e2e
- feat(web-request): URL glob blocklist + before-request/completed 이벤트 (Electron
webRequest) - test(e2e): Phase 5 lifecycle e2e 실측 — will-resize 가정 정정 + 5 fail 마커
- fix(window): maximize 직접 emit + fullscreen collectionBehavior + lifecycle 디버그
- fix(e2e): 환경 의존 테스트 skip + trace 제거 — 13 pass / 4 skip / 0 fail
- feat(zig-sdk): http.fetch — std.http.Client.fetch wrap (백엔드 only)
- feat(power): powerMonitor — NSWorkspace 옵저버로 4 이벤트 자동 발신 (macOS)
- feat(system): safeStorage (macOS Keychain) — set/get/delete IPC + e2e 4 케이스
- refactor(safe-storage): SecItemUpdate fallback + kCFBooleanTrue + msgSendVoid2 헬퍼
- feat(system): app.requestUserAttention — dock bounce (NSApp request/cancel)
- feat(api): @suji/api에 screen/powerSaveBlocker/safeStorage/app SDK 추가
- feat(zig-sdk): screen / powerSaveBlocker / safeStorage / dock / requestUserAttention 노출
- refactor(web-request): simplify 후속 + e2e 갭 보완
- feat(api): TypeScript type-safe invoke — SujiHandlers module augmentation
- feat(api): app.getName/getVersion + screen.getDisplayNearestPoint — 3 API
- feat(api): clipboard HTML + powerMonitor.getSystemIdleTime — Electron API 2개
- refactor(cef): simplify 후속 — nsFileUrlIfExists + clipboard Type 헬퍼 + NSPoint 재사용
- feat(api): clipboard.has/availableFormats + app.isReady/focus/hide — 5 API
- feat(window): Phase 5-2 ready-to-show + page-title-updated 이벤트
- feat(window): Phase 5-3 show / hide 이벤트
- feat(window): Phase 5-4 will-resize 취소 가능 이벤트 (macOS)
- feat(window): Phase 5-5 quitOnAllWindowsClosed 정책 옵션
- docs(plan): Phase 17-B plan — CEF Views API architecture migration (Option F)
- fix(window): Phase 17-A C 마무리 — wrapper NSView + dynamic destroy known limitation
- docs(plan): 17-B Option F를 단일 길로 못박기 — Hybrid 후퇴 X
- refactor(window): Phase 5 holistic review fix + SDK 호환성 테스트
- refactor(system): dock_set_badge 16KB→256B + nsStringFromCstr 명명 정리
- fix(cef): 새 창 빈 URL fallback to about:blank — ready-to-show / page-title-updated 발화
- fix(e2e): startCollect helper로 listener 등록 race 회피 — 13/17 pass
- refactor(attention): cmd
_ 컨벤션 + e2e 강화 + void-return 비대칭 문서화 - feat(system): screen.getAllDisplays / dock badge / powerSaveBlocker / find-result 이벤트
- refactor(window): Phase 5 디버그 잔재 정리 + 미커버 케이스 문서화
- docs(plan): Phase 5 완료 + globalShortcut 체크박스 stale 정정
- feat(sdk): Rust/Go/Node에 screen/powerSaveBlocker/safeStorage/dock/attention 노출
- fix(web-request): dynamic listener round-trip e2e 통과 — typeof 페이로드 처리
- feat(web-request): dynamic listener (RV_CONTINUE_ASYNC + pending callback)
- refactor(web-request): UrlGlobPool 추출 + Go deprecated 제거 + drop counter