2026-05-12
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 JSX 설정 처리부터 손봤습니다. zntc build·dev가 JSX 런타임 설정을 app 빌드에 넘기게 하고(#3088), classic JSX factory를 named import로 가져올 때 import가 지워지던 문제를 고쳤으며(#3089), 파일별 @jsx·@jsxFrag·@jsxRuntime·@jsxImportSource pragma 주석을 지원하고 문서화했습니다(#3090, #3091). automatic 런타임에서 @jsx pragma가 무시될 때는 경고를 내도록 했습니다(#3092). PUBLISH.md에 release.yml 흐름·롤백·체크리스트를 보강했고(#3093), core-js 런타임 폴리필 가이드도 추가했습니다(#3113).
낮에는 minify 출력 크기를 줄이는 codegen 개선이 이어졌습니다. 이항 +·- 주변 공백 제거, const를 let으로 낮추기, 매개변수 하나인 화살표 함수 괄호 제거, 문장 하나뿐인 블록의 중괄호 제거, if-else-return과 else-if 체인을 삼항 return으로 바꾸기, if를 논리·삼항 식으로 바꾸기, 한 번만 쓰는 식별자 별칭 인라인(#3101–#3120) 등이 하나씩 병합됐고, 그 과정에서 생긴 entry export 뒤 줄바꿈 누락 회귀도 바로 고쳤습니다(#3108). RN 번들에 0xaa 쓰레기 값이 섞이던 synthetic 이름 dangling 문제(#3104), RN 번들의 RuntimeKind 보존과 Hermes 다운레벨 경계 사례(#3117, #3126), dev 빌드 오류 뒤 증분 재빌드가 overlay를 잘못 지우던 문제(#3099)도 수정했습니다.
저녁에는 resolver와 번들러 성능을 다뤘습니다. 프로파일 타이머 집계를 스레드 안전하게 고치고 metadata·resolve.resolver 단계를 세분했으며, 잠금 밖에서 readdir하는 DirEntryCache(#3122), 디렉터리별 package.json 파싱 캐시(#3130), 16개로 샤딩한 resolve 결과 캐시(#3131), 디렉터리 캐시로 확장자 후보 탐색(#3132), 평범한 node_modules 모듈의 transformer pre-pass 생략(#3124)이 들어갔습니다. 모듈 분류 히스토그램은 ZNTC_MODULE_STATS로 시작했다가 ZNTC_DEBUG 카테고리로 합쳤습니다(#3143). lazy-barrel 판정은 헬퍼로 다운레벨된 모듈을 제외하고 export * 원본에는 namespace 전체를 요청하며 순수 re-export barrel만 지연하도록 좁혀, deferred record에 raw require가 남던 문제를 해결했습니다(#3135, #3137, #3138). RN 번들 디버깅 이슈를 정리하는 #3141은 이날 열렸습니다.
블로그 저장소 ohah.github.io의 커밋 6개는 크론의 맞춤법 점검 표시와 development-3.mdx 띄어쓰기 수정, 요약 갱신입니다.
공개 커밋 50개, 해당일 생성 또는 병합된 PR 42개를 정리했습니다. PR 생성 42개·병합 41개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- CRON: complete CRD verification task for hwpjs development docs (2026-05-12 19:00 KST)
- docs: summarize 2026-05-12 activity (zntc performance work + cron automation)
- fix: correct spacing in development-3.mdx (napi-rs 2일 때)
- chore(cron): verify one mdx file for spelling (2026-05-12 19:00 KST)
- docs: update CRON_CRD_WRITE.md with latest verification (2026-05-12 15:00 KST)
- docs: CRON task completed - verified development-1.mdx for spelling
ohah/zntc
- refactor(bundler): fold module stats into ZNTC_DEBUG (was ZNTC_MODULE_STATS)
- perf(bundler): cache has_local_export on Module like is_wrapper_barrel
- chore(bundler): tidy lazy-barrel gate after /simplify review
- fix(bundler): only lazy-defer imports of pure re-export barrels
- fix(bundler): request all exports from
export *sources, not just the name - fix(bundler): don't lazy-defer imports of helper-downleveled modules
- fix(bundler): use getEnvVarOwned for ZNTC_MODULE_STATS (Windows build)
- chore(bundler): ZNTC_MODULE_STATS — module classification histogram (PoC)
- perf(resolver): probe candidate extensions via dir cache, not full-path allocs
- perf(resolver): shard the resolve-result cache (16-way) to cut mutex contention
- perf(resolver): cache parsed package.json per directory
- refactor(transformer): /simplify 정리 — generator yield 추출 dedup, object-method gate
- fix(react-native): handle RN Hermes downlevel edge cases
- fix(profile): WASM 빌드에서 64-bit atomic counter 컴파일 실패 수정
- chore(profile): break down
resolve.resolverinto pkg.json / exports - chore(profile): break down
metadataphase into sub-phases - perf(bundler): skip transformer pre-pass for plain node_modules modules
- fix(resolver): guard browser_overrides_cache with its own mutex
- refactor(resolver): DirEntryCache — readdir outside the lock, pointer-stable entries
- fix(profile): make timer aggregation thread-safe
- perf(minify): single-use identifier-alias inline — const x = foo → use(foo) (#3112)
- refactor(bundler,semantic): dedupe export-name 추출 분기 (function/class/enum 통합)
- fix(react-native): preserve RuntimeKind in RN bundles
- test(integration): root test:integration 가 패키지 test 스크립트로 위임
- test(integration): bump real-library manualChunks smoke timeout to 10s
- perf(codegen): minify_syntax 시 if-return + 후속 return → return c?A:B (#3110)
- perf(codegen): #3094 후속 — do-while 본문 / if(true)·if(false) DCE 분기 의 single-statement {} 제거 (#3111)
- perf(codegen): if-else-return ternary 의 else-if 체인 완전 변환 (#3109)
- perf(codegen): minify_syntax 시 if → 논리/삼항 식 변환 (#3107)
- docs: 런타임 폴리필 (core-js) 전용 가이드 추가 + 사이드바 노출
- fix(bundler): minify 시 entry export 후행 newline 유지 — line-limit + sourcemap 회귀 (#3096 후속)
- perf(codegen): minify_syntax 시 if-else-return → return ternary (#3095)
- perf(codegen): minify 시 single-statement block 의 불필요한
{}제거 (#3094) - fix(semantic,bundler): synthetic 이름이 string_table 슬라이스로 dangling — RN 번들에 0xaa garbage (#3100)
- perf(codegen): single-param arrow 괄호 제거 + bundle entry export brace 공백 (#3096)
- perf(codegen): minify_syntax 시 const → let 다운그레이드 (#3098)
- perf(codegen): minify 시 binary +/- 연산자 공백 제거 (#3097)
- fix(bundler,test): dev 빌드 에러 후 incremental rebuild 가 overlay 를 잘못 clear / watch-stress warmup false positive
- docs: PUBLISH.md 절차 보강 — release.yml 흐름 + e2e + 롤백 + 체크리스트
- feat(transformer): @jsx / @jsxFrag pragma 가 automatic runtime 에서 무시될 때 warning (D026 후속)
- docs: per-file JSX pragma 주석 (@jsx / @jsxFrag / @jsxRuntime / @jsxImportSource) 문서화
- feat(transformer): per-file JSX pragma 주석 지원 — @jsx / @jsxFrag / @jsxRuntime / @jsxImportSource (D026)
- fix(transformer): classic JSX factory(named import) 가 elision 되지 않게 (#3063)
- feat(app): zntc build / dev 가 JSX runtime 설정을 app 빌드에 전달 (#3087)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.