2026-05-02
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 React Native 빌드에서 lodash-es를 하나만 가져와도 모든 모듈이 번들에 들어가던 회귀를 먼저 고쳤습니다. --platform=react-native가 ESM 모듈을 .esm으로 감싸는 방식과 tree-shaker의 부수 효과 판단이 엉켜 sideEffects: false barrel이 지워지지 않던 문제로, 회귀 테스트와 함께 병합됐습니다(#2409). 이어 tree-shaking 구현 가이드와 한·영 문서 페이지를 추가했고(#2411), tsconfig 자동 탐색을 프로세스 단위로 캐시하는 TsconfigCache를 NAPI와 vite 플러그인에 넣었습니다(#2412).
transpile의 binding-lite 경로는 하루 내내 다듬었습니다. import 생략 안전성을 보강한 뒤(#2410) 파라미터, 함수 안 var, 함수 표현식 이름이 import를 가리는 경우를 차례로 처리해 shadow 때문에 일반 경로로 넘어가는 횟수를 줄였고(#2414, #2419, #2423, #2424, #2429), TransformPlan 적중률 보고(#2421)와 comptime visitor로 묶은 함수 var 탐색기(#2427)가 들어갔습니다. 번들러는 할 일이 없는 graph 변환 사전 패스를 건너뛰고 AST의 문법 플래그로 사전 패스 진입을 O(1)에 판정하도록 바꿨으며(#2432, #2433, #2436), 같은 PR에서 TS export =를 module.exports =로 내리고 minify 대상에서 보호했습니다. 메모리 결함도 여럿 잡았습니다. Flow 패턴을 막던 미초기화 메모리 두 건과 slice 재할당 뒤 옛 포인터를 쓰던 형제 지점들(#2425, #2428), var 호이스팅 rename slice의 use-after-free(#2434), import_record specifier의 use-after-free로 require() 호출이 그대로 남던 문제(#2435)입니다. graph 탐색의 read/stat 비용 개선 #2440은 이날 열려 5월 3일에 병합됐습니다.
RN codegen은 상속 합성과 파일 간 참조 허용(#2415), Flow 패턴과 cast 래퍼 해제(#2420), Pick·Omit 유틸리티 타입과 마지막 prop 우선 중복 제거(#2431), CT.X 같은 namespace 한정 타입 참조(#2441), T[] 배열 표기와 중첩 객체 리터럴 prop 타입(#2444, #2446)을 지원하게 됐습니다. 플러그인 이름은 rn_codegen으로 바꿨고(#2442), @react-native/codegen 결과와 비교하는 스냅샷 기반을 만들어 4개 스펙 기준선을 두고 바이트 비교에서 의미 비교로 옮겼습니다(#2443, #2448, #2449). 파서는 prop 위치의 Flow exact object 문법을 처리하게 됐습니다(#2450).
bungae는 Bun이 CJS 산출물에 넣는 import.meta.require 폴리필 때문에 Node에서 bungae build가 실패하던 문제를 후처리로 고쳤고, codegen은 ZTS RN preset 기본값을 믿도록 해 _NATIVE 토글을 없앴으며, zts 서브모듈과 lockfile을 갱신했습니다. 블로그 저장소 ohah.github.io의 커밋 15개는 크론이 CRON_CRD_WRITE.md 점검 상태를 기록한 커밋 14개와 요약 추가 커밋 1개입니다.
공개 커밋 78개, 해당일 생성 또는 병합된 PR 34개를 정리했습니다. PR 생성 34개·병합 32개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- refactor(zts): trust ZTS RN preset default for codegen, drop _NATIVE toggle
- chore: bump zts submodule to main HEAD
- fix(cli): patch Bun's import.meta.require polyfill in CJS dist
- chore: bump zts submodule and refresh lockfile
- chore: bump zts submodule to main HEAD
ohah/ohah.github.io
- Cron: CRON_CRD_WRITE.md updated - All mdx files completed (2026-05-03 06:00 KST)
- Cron: Mark all .mdx files checked as complete (2026-05-03 04:00 KST)
- chore: update CRON_CRD_WRITE.md with current completion status (2026-05-03)
- docs(cron): Update CRON_CRD_WRITE.md final status - all .mdx files completed (2026-05-03 01:30 KST)
- docs: add AI summary for 2026-05-02
- cron: CRON_CRD_WRITE.md - zts/tech-stack.mdx checked (no errors)
- cron: update checklist for zts/tech-stack.mdx check
- 2026-05-02 18:01:24 - cron: Final status confirmed - all mdx files checked
- cron: mark all .mdx files checked (2026-05-02 13:30 KST)
- docs: mark CRON_CRD_WRITE.md complete (2026-05-02 12:30 KST)
- docs: mark all .mdx files as checked in CRON_CRD_WRITE.md
- cron: update final status (2026-05-02 12:00 KST)
- [cron:a1b2c3d4-0002-4002-8003-000000000002] Cron task completed - all mdx files checked (2026-05-02 11:01 KST)
- CRON_CRD_WRITE.md: Cron task completed - all mdx files checked (2026-05-02 10:30 KST)
- chore: mark all mdx files as checked (2026-05-02 09:00 KST)
ohah/zntc
- test(parser): expand Flow exact object edge cases for #2447
- fix(parser): Flow exact object {| ... |} at prop position (#2447)
- refactor(codegen): semantic-diff snapshot test, drop env-var gate (#2348)
- test(codegen): byte-diff snapshot infra vs @react-native/codegen reference (#2348)
- feat(codegen): inline / nested object literal prop type → mixed (#2348)
- feat(codegen): T[] postfix array type support (#2348)
- feat(codegen): RN codegen reference snapshot infra + 4-spec baseline (#2348)
- refactor(plugins): rename codegen → rn_codegen for clarity
- refactor(codegen): /simplify follow-up — drop redundant lastSegment call-site comments
- fix(codegen): support namespace-qualified type refs (CT.X) in schema_builder
- test(bundler): cover runtime helper skip name suppress
- refactor(ast): introduce FunctionExtra / ArrowExtra typed offset structs
- refactor(transformer): /simplify follow-up — reuse requiresPrivateDownlevel + drop spread destructuring coupling
- perf(bundler): gate graph pre-pass by AST features
- fix(bundler): move specifier dupe to graph.zig (CI leak fix)
- fix(bundler): import_record specifier UAF causing raw require() leak (#raw-require)
- fix(semantic): mark TS export = identifier as exported to protect from minify
- feat(transformer): TS export = expr → module.exports = expr (CJS interop)
- perf(parser): O(1) graph pre-pass gate via Ast unlowered-syntax flags
- refactor(bundler): /simplify follow-up — putOwnedRename helper + isValidIdentStartByte
- fix(bundler): rename slice use-after-free corruption (0xAA) in var hoisting
- refactor(bundler): /simplify follow-up — drop dead JSX arms + redundant ast param
- perf(bundler): skip no-op graph transformer pre-pass
- refactor(codegen): /simplify v2 — iterateExtraList consistency + nth→index
- refactor(codegen): /simplify follow-up — TS-aligned dedup + O(n) HashMap
- feat(codegen): Pick/Omit utility types + last-wins prop dedup (#2417, #2418)
- docs(transpile): replace stale line ref in scope_depth truth-table comment
- refactor(transpile): /simplify follow-up — share function/arrow scope scan helper
- perf(transpile): thread fn-scope shadow counter through binding-lite scan
- fix(transformer): apply slice-realloc fix to 7 sites in 3 sibling files (#2426)
- chore: oxfmt format flow-parse.ts
- refactor(es2015_class): iterateExtraList helper + parseObjectType benchmark
- fix(es2015_class): apply slice-realloc fix to 5 sibling sites (#2422)
- fix(parser,transformer): root-cause two uninit memory bugs blocking Flow patterns
- refactor(transpile): unify binding-lite function-var walker via comptime visitor
- refactor: /simplify follow-up — dedupe function expression name helpers
- perf(transpile): handle function expression import shadows
- feat(codegen): Flow patterns + cast wrapper unwrap (#2348 후속)
- refactor(transpile): /simplify follow-up — drop dup helpers and dead arm
- perf(transpile): handle function var import shadows
- refactor(transpile): /simplify follow-up — align WHY comments around plan checks
- perf(transpile): report TransformPlan hit rates
- refactor(transpile): /simplify follow-up to BindingLite scope-aware shadow scan
- perf(transpile): reduce BindingLite shadow fallbacks
- feat(codegen): schema_builder inheritance composition + permissive cross-file (#2348)
- refactor(ast_walk): unify binding-pattern identifier walkers
- refactor(transpile): /simplify follow-up to BindingLite param-shadow walker
- perf(transpile): handle parameter shadows in binding-lite
- perf(vite-plugin): TsconfigCache 통합 — 다수 파일 transform 시 walk 회수 절감 (#2367)
- perf(napi): TsconfigCache — autodiscover walk per-process 캐시 (#2367)
- docs(site): add tree-shaking guide page (ko + en)
- docs(bundler): add tree-shaking implementation guide
- refactor(parser): name SPEC_FLAG_TYPE_ONLY for inline type modifier flag
- refactor(transpile): tighten BindingLite shadow scan after /simplify review
- fix(transpile): harden binding-lite import elision
- fix(emitter): tree_shaker_active 가드 누락 — dev_mode dangling init 회피 (#2398)
- test(tree-shake): add #2398 RN .esm wrap regression suite
- fix(tree-shake): RN .esm wrap 환경에서 sideEffects:false barrel DCE (#2398)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.