2026-05-28
요약 (AI 작성)
오늘 ohah는 주요 라이브러리 프로젝트에서 계속해서 기능 개선과 아키텍처 리팩터링을 진행했습니다. ohah/zntc에서는 RFC #3940(라이프사이클 스코프 재설계)를 중심으로 번들러 아키텍처와 프로파일링 시스템을 대폭 개선했습니다. Transformer ownership transfer를 통해 복사 연산 회피와 peak RSS -33% 목표를 달성하기 위한 여러 Sub-PR(PR-13, L.0aL.5c)들이 머지되었으며, rename_table 단일 출처 전환, SymbolID 타입 도입, ProfileSnapshot API 등이 구현되었습니다. 또한 개발 서버 HMR 개선(SSE listener, phase별 분석)과 incremental build 프로파일링, 메모리 계측 등 성능 개선 작업도 함께 이루어졌습니다.
ohah/suji에서는 Electron 마이그레이션 관련 문서화와 플러그인 시스템 개선에 집중했습니다. libnode 바인딩, rich notification actions, mobile HTTPS CA bundle injection, Lua 백엔드 런타임 추가 등 다양한 플러그인과 C ABI 노출 작업이 이루어졌으며, shared state 관리 완료와 create-suji 툴체인 행렬 추가로 SDK 출시 준비를 강화했습니다. 마지막으로 ohah/ohah.github.io에서는 크론(CRON) 작업을 통해 MDX 파일 맞춤법 교정 검증이 수행되었습니다.
총 35개 커밋과 23개 PR이 머지되었으며, 특히 zntc 프로젝트는 라이프사이클 재설계를 위한 중장기 이커스텀과 개발 서버 성능 개선이 큰 축이었습니다. PR #3940(emit incremental CLOSED)과 #3938~3937(graph persistence CLOSED) 등 차기 레버 후보를 위한 문서화 작업도 이어졌습니다.
커밋
ohah/ohah.github.io
ohah/suji
- Document Electron migration path
- Clarify SDK publish readiness
- Bundle libnode with Unix release artifacts
- Expose window API through SujiCore
- Add public C backend ABI header
- Add macOS and Linux rich notification actions
- Mark shared state management complete
- Add mobile HTTPS CA bundle injection
- Fix log plugin clock API
- Add create-suji toolchain matrix
- Refactor CLI config loading
- Sync plugin plan checklist
- Add plugin source specs and permissions
- Document isolated world blocker
- Add optional Lua backend runtime
ohah/zntc
- feat(dev-server): SSE bundle_build_done 에 profile snapshot 포함 (RFC #3940 Sub-PR-L.0c)
- feat(incremental): doBuild 가 ProfileSnapshot 캡처 (RFC #3940 Sub-PR-L.0b)
- fix(bench): devserver-hmr WS filter + warmup + SSE teardown 정리
- chore(profile): @setEvalBranchQuota 를 num_categories 기반 derived 표현으로
- review(transformer): code-review max findings + cleanup
- feat(transformer): Transformer.initFromOwnedAst API 추가 (RFC #3940 PR-1)
- feat(bundler): SymbolID 타입 정의 (RFC #3940 Sub-PR-L.2)
- feat(napi): WatchHandle phaseDurations 에 link sub-phase 추가 (RFC #3940 Sub-PR-L.0e)
- fix(profile-harness): dev_server watchLoop break + incremental fatal reset
- docs(rfc): RFC #3940 의 다음 레버 후보를 추적 이슈 #3957 로 링크
- feat(bundler): transform_prepass carry-over rename_table 동기화 (RFC #3940 Sub-PR-L.4a)
- perf(transpile): phase 메모리 계측 (ZNTC_MEM_PROFILE) + RFC 분포 분석 (RFC #3940 PR-3)
- feat(bundler): RenameTable 병행 작성 (RFC #3940 Sub-PR-L.3)
- bench(devserver-hmr): SSE listener + iteration 별 phase breakdown (RFC #3940 Sub-PR-L.0d)
- docs(rfc): transformer ownership transfer — clone 회피 RFC
- review(transpile): code-review max findings — 측정 정확성 + comment rot
- feat(transpile): cloneForTransformer 회피 — initFromOwnedAst 사용 (RFC #3940 PR-2)
- docs(rfc): Sub-PR-L.1 cross-build memory ownership audit (RFC #3940 Phase 1)
- feat(bundler): ChunkEmitCache API skeleton (RFC_EMIT_INCREMENTAL Sub-PR-C.1)
- docs(rfc): emit incremental CLOSED — Sub-PR-C 모든 PoC noise/회귀, 진짜 fix 는 lifecycle redesign
- docs(rfc): lifecycle scope redesign — cross-build memory ownership 명확화 (mid-term epic)
- feat(bundler): emitter canonical read 를 rename_table lookup 으로 전환 (RFC #3940 Sub-PR-L.4b)
- fix(bundler): carry-over capture 를 !code_splitting 게이트 — dangling 방지 (RFC #3940 L.5a review)
- feat(bundler): carry-over 를 rename_table 기반으로 재설계, syncRenameTableFromCanonical 폐기 (RFC #3940 Sub-PR-L.5a)
- docs(bundler): cjs_wrap 의 stale 주석 정정 (L.5b review)
- feat(bundler): syntheticName rt 필수화 (canonical 이중경로 제거) + single-file dynamic import rt 전파 (RFC #3940 Sub-PR-L.5b)
- test: make test262 suite deterministic
- feat(bundler): computeMangling dedup key 를 rename_table lookup 으로 전환 (RFC #3940 Sub-PR-L.4c-1)
- test(bundler): cross-build cache-hit 충돌 rename 회귀 테스트 (RFC #3940 Sub-PR-L.5c)
- feat(bundler): Symbol.canonical_name field 제거 — rename_table 단일 출처 (RFC #3940 Sub-PR-L.5c)
- docs(rfc): graph persistence CLOSED (Sub-PR-B.3 PoC NO-GO) + emit incremental RFC
- feat(transpile): arena 분리 (parser_arena + transformer_arena, Step 1)
- feat(profile): ProfileSnapshot API + RFC_RELEASE_PROFILING_HARNESS (RFC #3940 Sub-PR-L.0a)
- feat(bundler): syntheticName 의 canonical read 를 rename_table 로 — non-esm_wrap (RFC #3940 Sub-PR-L.4c-2a-i)