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

ohah/zntc

PR (해당일 생성/머지)

상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.

저장소PR해당일 활동상태대상 브랜치제목
ohah/zntc#3143생성 · 병합mergedmainrefactor(bundler): module stats 를 ZNTC_DEBUG 카테고리로 통합 (ZNTC_MODULE_STATS env 제거)
ohah/zntc#3141생성mergedmainfix(react-native): zntc 번들 디버깅 이슈 정리
ohah/zntc#3140생성 · 병합mergedmainperf(bundler): has_local_export 를 Module 캐시로 (is_wrapper_barrel 패턴)
ohah/zntc#3139생성 · 병합mergedmainchore(bundler): /simplify 후속 — lazy-barrel gate 정리 (no behavior change)
ohah/zntc#3138생성 · 병합mergedmainfix(bundler): 순수 re-export barrel 만 import 를 lazy-defer (deferred record raw require 잔존 완전 해결)
ohah/zntc#3137생성 · 병합mergedmainfix(bundler): export * source 는 namespace 전체를 요청 (deferred record raw require 잔존 수정)
ohah/zntc#3135생성 · 병합mergedmainfix(bundler): helper-downleveled 모듈의 import 를 lazy-defer 하지 않기
ohah/zntc#3134생성 · 병합mergedmainfix(bundler): use getEnvVarOwned for ZNTC_MODULE_STATS (Windows build)
ohah/zntc#3133생성 · 병합mergedmainchore(bundler): ZNTC_MODULE_STATS — module classification histogram (PoC)
ohah/zntc#3132생성 · 병합mergedmainperf(resolver): probe candidate extensions via dir cache, not full-path allocs
ohah/zntc#3131생성 · 병합mergedmainperf(resolver): shard the resolve-result cache (16-way) to cut mutex contention
ohah/zntc#3130생성 · 병합mergedmainperf(resolver): cache parsed package.json per directory
ohah/zntc#3128생성 · 병합mergedmainfix(profile): WASM 빌드에서 64-bit atomic counter 컴파일 실패 수정
ohah/zntc#3127생성 · 병합mergedmainchore(profile): break down resolve.resolver into pkg.json / exports
ohah/zntc#3126생성 · 병합mergedmainfix(react-native): handle RN Hermes downlevel edge cases
ohah/zntc#3125생성 · 병합mergedmainchore(profile): break down metadata phase into sub-phases
ohah/zntc#3124생성 · 병합mergedmainperf(bundler): skip transformer pre-pass for plain node_modules modules
ohah/zntc#3123생성 · 병합mergedmainfix(resolver): guard browser_overrides_cache with its own mutex
ohah/zntc#3122생성 · 병합mergedmainrefactor(resolver): DirEntryCache — readdir outside the lock, pointer-stable entries
ohah/zntc#3121생성 · 병합mergedmainfix(profile): make timer aggregation thread-safe
ohah/zntc#3120생성 · 병합mergedmainperf(minify): single-use identifier-alias inline — const x = foo → use(foo) (#3112)
ohah/zntc#3119생성 · 병합mergedmaintest(integration): manualChunks 스모크 타임아웃 회귀 — 루트 스크립트 위임 + per-test 10s
ohah/zntc#3118생성 · 병합mergedmainperf(codegen): minify_syntax 시 if-return + 후속 return → return c?A:B (#3110)
ohah/zntc#3117생성 · 병합mergedmainfix(react-native): preserve RuntimeKind in RN bundles
ohah/zntc#3116생성 · 병합mergedmainperf(codegen): #3094 후속 — do-while 본문 / if(true)·if(false) DCE 분기 의 single-statement {} 제거 (#3111)
ohah/zntc#3115생성 · 병합mergedmainperf(codegen): if-else-return ternary 의 else-if 체인 완전 변환 (#3109)
ohah/zntc#3114생성 · 병합mergedmainperf(codegen): minify_syntax 시 if → 논리/삼항 식 변환 (#3107)
ohah/zntc#3113생성 · 병합mergedmaindocs: 런타임 폴리필 (core-js) 전용 가이드 추가 + 사이드바 노출
ohah/zntc#3108생성 · 병합mergedmainfix(bundler): minify 시 entry export 후행 newline 유지 — line-limit + sourcemap 회귀 (#3096 후속)
ohah/zntc#3106생성 · 병합mergedmainperf(codegen): minify_syntax 시 if-else-return → return ternary (#3095)
ohah/zntc#3105생성 · 병합mergedmainperf(codegen): minify 시 single-statement block 의 불필요한 {} 제거 (#3094)
ohah/zntc#3104생성 · 병합mergedmainfix(semantic,bundler): synthetic 이름이 string_table 슬라이스로 dangling — RN 번들에 0xaa garbage
ohah/zntc#3103생성 · 병합mergedmainperf(codegen): single-param arrow 괄호 제거 + bundle entry export brace 공백 (#3096)
ohah/zntc#3102생성 · 병합mergedmainperf(codegen): minify_syntax 시 const → let 다운그레이드 (#3098)
ohah/zntc#3101생성 · 병합mergedmainperf(codegen): minify 시 binary +/- 연산자 공백 제거 (#3097)
ohah/zntc#3099생성 · 병합mergedmainfix(bundler,test): dev 빌드 에러 후 overlay 가 잘못 사라지는 버그 + watch-stress warmup false positive
ohah/zntc#3093생성 · 병합mergedmaindocs: PUBLISH.md 절차 보강 (release.yml 흐름 + e2e + 롤백 + 체크리스트)
ohah/zntc#3092생성 · 병합mergedmainfeat(transformer): @jsx / @jsxFrag pragma 가 automatic runtime 에서 무시될 때 warning
ohah/zntc#3091생성 · 병합mergedmaindocs: per-file JSX pragma 주석 문서화 (@jsx / @jsxFrag / @jsxRuntime / @jsxImportSource)
ohah/zntc#3090생성 · 병합mergedmainfeat(transformer): per-file JSX pragma 주석 지원 (@jsx / @jsxFrag / @jsxRuntime / @jsxImportSource)
ohah/zntc#3089생성 · 병합mergedmainfix(transformer): classic JSX factory 가 named import 일 때 elision 되지 않게
ohah/zntc#3088생성 · 병합mergedmainfeat(app): zntc build / dev 가 JSX runtime 설정을 app 빌드에 전달