2026-04-27
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 소형 패키지 번들 크기에서 esbuild·rolldown·rspack과의 격차를 좁히는 데 집중했습니다. 스모크 비교 기준을 세 번들러 중 가장 작은 값으로 바꾸고 production NODE_ENV를 맞춘 뒤(#2056, #2067), export * 도달성과 직접 재수출 평가 범위를 좁히고(#2044, #2045), 객체 리터럴 메서드를 순수로 보아 쓰이지 않는 Svelte custom element 연쇄를 걷어 냈습니다(#2047, #2049). CJS 쪽은 named import 헬퍼 비용을 줄이고(#2061), 정적 CJS named export와 module.exports 객체 형태의 미사용 프로퍼티를 tree shaking하며(#2063, #2068), linker 상수를 tree shaking 전에 전파하고 production 환경 문자열 비교를 접습니다(#2058, #2059). minify 출력의 블록 경계 세미콜론도 줄였습니다(#2048).
이 최적화 사이사이 생긴 회귀도 고쳤습니다. 변환 뒤 분석 재생성이 ESM을 CJS로 강등하고 tree shaking된 대상의 preamble을 남기던 문제(#2053), 전이적 CJS default 재수출의 __toESM 누락(#2064), CJS 래핑 모듈에 transformer가 넣은 헬퍼 import가 지워지던 문제(#2075)입니다. Expo RN dev 변환과 rename된 new callee의 괄호, node 해석에서 module 필드 우선(#2054, #2055), HMR 재빌드 메모리 소유권(#2050)도 바로잡았습니다. 정리 작업으로 oxlint 경고를 0으로 만들고(#2062), __toESM 판정을 linker와 emitter가 공유하게 했으며(#2066), 정적 키 이름 추출과 문장 정보 빌더를 공용화했습니다(#2071~#2074).
bungae는 codegen Babel 래퍼를 직접 RN codegen 호출로 바꾸고, tsconfig path alias를 NAPI 번들러에 넘기도록 고쳤으며, Expo 예제의 HMR 파일 갱신을 확인했습니다. ohah.github.io에는 ZTS 개발기 13·14편 맞춤법 검사와 4월 27일 오늘의 커밋 요약이 올라왔습니다.
공개 커밋 67개, 해당일 생성 또는 병합된 PR 28개를 정리했습니다. PR 생성 28개·병합 28개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- chore: ignore current bundle comparison output
- chore(expo): verify hmr file updates
- fix(zts): pass tsconfig path aliases to napi bundler
- Replace codegen Babel wrapper with direct RN codegen
ohah/ohah.github.io
- chore(cron): mark all crd-write tasks complete
- docs: mark all CRD docs as completed
- chore: mark all CRD docs as completed
- docs: mark CRD-write task as complete (no files remaining)
- cron-crd: mark all CRD docs as completed
- cron: update _meta.json to mark completion
- docs: update today-commit summary for 2026-04-27
- docs: mark CRON_CRD_WRITE.md checklist complete
- docs: mark all CRD tasks completed
- docs: mark all CRD docs completed
- chore: mark CRON_CRD_WRITE.md as fully completed
- docs(cron): mark all mdx files completed
- docs: mark development-13 and development-14 as checked (no spelling changes needed)
- docs: mark all mdx files as completed
- cron: mark docs/today-commit/2026-04-29.md as checked in CRON_CRD_WRITE.md
- docs: mark zts/development-14.mdx as checked (no changes)
- docs: spellcheck development-13.mdx
- docs: mark last .mdx file as checked in CRON_CRD_WRITE.md
- cron: mark 2026-04-28.md as completed
- cron: mark cheolsu-proxy/development-11.mdx as reviewed (no typos)
ohah/zntc
- fix(tree_shaker): cjs-wrap 모듈의 transformer-injected helper import 보존
- refactor(stmt_info): share Phase 1 between two builders
- refactor(ast): host objectPropertyValue helper alongside staticKeyName
- refactor(ast): centralize static-key-name extraction
- refactor(stmt_info): encapsulate sym -> stmt list lookups
- refactor(emitter): drop redundant skip_nodes.capacity guards
- chore(simplify): /simplify followup — cjs object-shape DCE 정리
- fix: tree-shake CJS module.exports object shape
- feat(benchmark): smoke.ts --filter 콤마 분리 다중 패턴 지원
- refactor(bundler): share __toESM predicate between linker and emitter
- chore(simplify): /simplify followup — chunk path runtime split + early-exit
- fix: tree-shake static CJS named exports
- fix(bundler): emit __toESM for transitive CJS default re-export (#812 회귀)
- chore(lint): drive oxlint warnings to zero
- chore(fmt): apply oxfmt to benchmark scripts
- chore(simplify): /simplify followup — graph.getModule + 주석 통일
- Reduce CJS named import helper overhead
- chore(simplify): /simplify followup — pr2054 carry-over + pr2059 review
- fix: propagate linker constants before tree shaking
- fix(minify): fold production env string checks
- test(bundler): cover helper-free namespace preamble
- fix(benchmark): align smoke NODE_ENV with production rspack
- fix(bundler): prefer module field for node resolves
- test(bundler): accept direct CJS access in Flow rename check
- test(bundler): cover ts paths CJS re-export require rewrite
- test(bundler): cover Expo alias HMR require rewrite
- chore(simplify): /simplify followup — resolved_deps 를 ArrayListUnmanaged 로
- test(bundler): cover renamed new callee variants
- fix(codegen): parenthesize renamed new callees
- fix(bundler): stabilize Expo RN dev rewrites
- chore(simplify): /simplify followup — ExportsKind.isEsm 헬퍼 추가
- fix(bundler): preserve ESM kind + drop tree-shaken targets in CJS preamble
- fix(bundler): drop transformer-elided import bindings on post-transform refresh
- chore(smoke): compare ZTS size against smallest of esbuild/rolldown/rspack
- fix(bundler): preserve post-declaration assignments in tree-shaker
- fix(bundler): treat object literal methods as pure
- fix(watch): repair HMR memory ownership
- chore(simplify): /simplify followup — emitStaticBlock 조건 평탄화
- perf(codegen): trim minified block boundary semicolons
- chore(simplify): /simplify followup — initOfDecl 중복 제거 및 테스트 간결화
- fix(bundler): prune unused custom element fanout
- fix(bundler): narrow direct re-export evaluation fanout
- Refine re-export star reachability
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.