2026-05-10
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 npm 배포 구조를 크게 손봤습니다. NAPI 바이너리를 플랫폼별 하위 패키지로 나누는 뼈대를 만들고(#2935), release.yml에 매트릭스 NAPI 빌드와 npm publish job을 더했으며(#2936), 빌드 스크립트와 플랫폼 목록을 한 곳으로 모았습니다(#2937). 플랫폼은 musl과 win32-arm64·ia32를 포함한 9개로 늘었고, 로더는 linux libc를 구분해 musl 하위 패키지를 고르게 됐습니다(#2942). @zntc/core는 ESM·CJS 이중 exports를 갖추고 rspack-loader가 퍼블리시 대상에 등록됐으며(#2938), vite-plugin-zntc는 @zntc/vite-plugin으로 이름을 바꿨습니다(#2940). smoke test는 작업 공간 대신 tarball을 import하도록 고치고 win32-ia32 검증과 --deep·--minify-all 단계를 추가했습니다(#2943, #2962, #2980). CI 쪽은 --frozen-lockfile 일괄 적용과 bun-cache composite action으로 캐시 키를 하나로 묶었습니다(#2933, #2934).
변환 기능으로는 Hermes용 named capture group 정규식 다운레벨(#2930)과 transpile 경로의 react-refresh 지원이 들어왔습니다. TranspileOptions에 reactRefresh를 노출하면서 화살표 함수를 대입한 컴포넌트도 등록되게 했고(#2939), 훅 서명 $RefreshSig$는 reactRefreshHookSignatures로 선택해 켜도록 했습니다(#2941).
오후부터는 번들러·minify 결함 수정이 이어졌습니다. default re-export 체인에서 _default 대입이 사라지던 문제(#2944), wrapper-barrel 모듈 감지와 tree-shake 시드(#2946, #2950), linker의 namespace import 이름 충돌(#2954), minify한 ESM external import에서 식별자와 키워드 사이 공백이 빠지던 문제(#2963)를 고쳤습니다. mangler는 모듈 간 이름이 중첩 바인딩을 가리던 문제와 import 바인딩·한 글자 최상위 바인딩을 예약 이름에 넣지 않던 문제를 고쳤습니다(#2966, #2973, #2974). codegen은 템플릿 리터럴, 빈 else 분기, {로 시작하는 화살표 함수 본문, new 호출 괄호 제거, 구조 분해 단축 속성 rename 회귀를 바로잡았고, 함수 매개변수와 같은 이름의 var를 같은 바인딩으로 묶었습니다(#2978). 소스맵은 static member property 매핑 누락을 고친 뒤 매핑을 명시적으로 발행하는 방식으로 통일하고, 누락을 잡는 정적 감사를 CI에 넣었습니다(#2984, #2986). bundler deep-dive·Flow 지원 가이드 문서도 추가됐고(#2985), 가이드 보강·HMR API 문서·소스맵 names 발행 PR(#2987, #2988, #2989)은 이날 열렸습니다. 블로그 저장소 ohah.github.io에는 크론의 점검 표시 커밋 2개가 있습니다.
공개 커밋 58개, 해당일 생성 또는 병합된 PR 45개를 정리했습니다. PR 생성 45개·병합 42개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- docs: mark CRON_CRD_WRITE.md task as completed
- chore: CRD document check completed - index.mdx verified
ohah/zntc
- chore(ci): codegen emitter 의 addSourceMapping 누락 정적 audit
- feat(docs): bundler-deep-dive + flow-support 가이드 페이지 추가
- refactor(codegen): sourcemap mapping 을 oxc-style 명시 발행으로 통일
- fix(codegen): static member property sourcemap mapping 누락 회귀
- test(tsc): codegen fix 후속 스냅샷 갱신 (CI 회생)
- chore(ci): smoke job 에 --deep --minify-all step 추가 (회귀 보호)
- fix(codegen): destructuring shorthand 의 implicit RHS rename 시 longhand expand (#2977)
- fix(binder): 함수 매개변수 + 같은 이름 var 를 동일 binding 으로 처리 (#2976)
- fix(codegen): new callee paren stripping 이 비-MemberExpression 결합을 깨는 회귀
- fix(mangler): 1-char top-level binding 도 reserved 등록 (#2965 three, #2958 jotai)
- fix(mangler): import binding local name 을 Phase A reserved 에 등록 (#2971, #2959 svelte)
- fix(codegen): static member property 슬롯에서 peephole identifier 치환 차단
- fix(codegen): arrow function expression body 의 leftmost { 토큰 paren wrap (#2964)
- fix(codegen/dce): empty/dead else 분기에서 else 키워드 자체 elide
- fix(codegen): template literal 의 list.start=0 가 raw span 분기로 잘못 진입
- fix(mangler): cross-module Phase A 이름이 nested binding 과 충돌하는 shadow 차단
- test(bundler/emitter): emitOneImport token boundary 회귀 테스트 7개
- fix(bundler/emitter): minify ESM external import 식별자↔키워드 토큰 경계 공백 누락
- chore(smoke): deep entry 검증 + --deep / --minify-all / --format-cjs flag
- fix(bundler): linker collectModuleNames namespace import collision detection
- refactor(bundler): wrapper-barrel detection helper + Module cache
- refactor(bundler): isLazyBarrelCandidate / isWrapperBarrel 의미 분리
- fix(bundler): tree_shake wrapper-barrel module body seeding
- chore(lint): oxfmt — single-line import 6개로 축소 (readdirSync 제거 후)
- chore(lint): oxlint 23 → 0 — unused imports / 무의미 fallback / control regex
- fix(integ-tests): direct spawn zntc — sh -c wrapper leak 회피
- chore(simplify): isLazyBarrelCandidate 의 negation guard 를 De Morgan 으로 평탄화
- fix(bundler): graph wrapper-barrel pattern detection in isLazyBarrelCandidate
- feat(ci): win32-ia32 smoke 추가 (Node 22 LTS)
- test(bundler): simplify lodash-es default import 회귀 테스트
- fix(bundler): preserve
_default = <imported_id>emit for default re-export chain - fix(core): detectLinuxLibc 타입 narrowing 복원
- refactor(core,ci): simplify v3 후속 — typing 정리 + 중복 빌드 제거
- fix(core): loader 가 linux libc 분기해 musl sub-package 매칭
- fix(ci): smoke 에 host dogfood NAPI 분리 + ia32 매트릭스 제외
- fix(ci): smoke test 가 dev workspace 가 아닌 tarball 을 import 하도록
- feat(napi): expand platform matrix to 9 (musl + win32-arm64/ia32)
- refactor(vite-plugin): vite-plugin-zntc → @zntc/vite-plugin (scoped 통일)
- feat(refresh): $RefreshSig$ (hook signature) opt-in — reactRefreshHookSignatures
- fix(refresh): const Foo = () => ... 형태 컴포넌트 등록 — visitVariableDeclarator post-hook
- feat(transpile): TranspileOptions 에 reactRefresh 노출 — loader 경로 react-refresh
- fix(build): NAPI install dir 통일 — windows 도 zig-out/lib/zntc.node
- fix(core): @zntc/core dual ESM/CJS exports + rspack-loader publish 등록
- refactor(release): build script 분리 + PLATFORMS 단일 source + publish-smoke sub-package cover
- ci(release): release.yml 매트릭스 NAPI 빌드 + npm publish job + scripts/release.ts 갱신
- fix(ci): napi-package-smoke 를 신규 sub-package 모델로 갱신
- feat(core): NAPI platform sub-package 분기 (5 platform skeleton)
- ci: bun-cache 적용 범위 확장 — docs.yml + documents/bun.lock + benchmark path 보강
- fix(ci): bun-cache action description 의 matrix.platform 이중 평가 회피
- ci: bun-cache composite action 으로 캐시 hashFiles 단일화
- ci: bun install --frozen-lockfile 일괄 적용 + emotion-v10 fixture install step 추가
- refactor: split es2015 generator scan helpers
- fix(linker): 회귀 fix 겸 nested_name_sets cache 제거
- test(es5): babel wrapRegExp parity case 4개 추가 + heap alloc 회피
- chore(simplify): 코드 주석의 이슈번호 표기 정리 (feedback_no_reference_comments)
- feat(es5): Hermes named capture group regex 다운레벨 (#1063)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.