2026-04-14
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 호환성 기반을 넓히는 작업으로 시작했습니다. kangax compat-table 실측값으로 compat.zig를 검증·생성하는 스크립트(#1268), 번들의 __async 중복 주입 수정과 browserslist 지원(#1269, #1270), .d.ts 생성(#1271)을 병합했고, bungae처럼 로컬 경로로 쓰는 쪽에서 설치가 깨지지 않게 browserslist를 optional 의존성으로 돌렸습니다(#1273). private 클래스 다운레벨링은 constructor 중복 출력, standalone 메서드 함수 안 this.#field, class 보존 경로의 static #field와 static block 누락을 고치고(#1276~#1281), #x in obj brand check 다운레벨링을 추가했습니다(#1284).
React Native는 --platform=react-native가 Hermes 미지원 기능 표를 강제로 적용하게 한 뒤(#1285), 화살표 함수와 let/const 다운레벨을 차례로 더하고 결국 RN 프리셋을 ES5 매트릭스로 넓혔습니다(#1300, #1301, #1304). 그 과정에서 for-of/for-in 구조 분해에 void 0 초기화가 붙던 문제(#1303), __generator의 sent()가 throw를 다시 던지지 않아 rejected Promise가 값으로 풀리던 문제(#1307), re-export getter가 canonical 로컬 이름을 쓰지 않던 문제(#1313), __esm 안 호이스팅 함수의 소스맵 매핑(#1316), --minify CLI 크래시를 낸 arena 해제 순서(#1289)를 고쳤습니다. webpack UMD 번들의 복구 가능한 파서 에러로 모듈을 건너뛰던 문제도 바로잡고(#1293), 앞서 넣은 require 참조 보호는 중복 안전망이라 되돌렸습니다(#1294).
AST와 번들러 내부도 크게 손봤습니다. 화살표 함수 매개변수를 formal_parameters 노드로 정규화하고(#1287), 이를 함수·메서드 전체로 넓혀 매개변수 레이아웃과 헬퍼 시그니처를 NodeList로 통일했으며(#1324, #1326, #1327), 변수 선언 종류를 매직 넘버에서 enum으로 바꿨습니다(#1318). barrel 모듈의 default re-export가 같은 이름의 named export를 덮던 문제는 직접 커밋한 수정을 되돌린 뒤, 번들러 전용 심볼 테이블을 도입하는 단계적 리팩터링 안에서 다뤘습니다. 심볼 테이블 타입(#1329), 바인딩의 심볼 필드(#1330), 심볼 기반 _default getter(#1331), 문자열 기반 re-export 체인 해석 제거(#1332), CJS emit 분리(#1334), 심볼 참조 횟수 수집(#1336)까지 병합됐고, 합성 default를 시맨틱 공간으로 옮기는 PoC #1339는 이날 PR이 열렸습니다.
bungae는 Metro와 같은 transformer.babelTransformerPath 설정과 Babel 플러그인 자동 감지를 추가하고, 비동기 transformer 처리와 터미널 raw 모드 복구를 고쳤습니다.
공개 커밋 75개, 해당일 생성 또는 병합된 PR 48개를 정리했습니다. PR 생성 46개·병합 47개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- fix(bundler): async babelTransformerPath + terminal raw mode recovery
- feat(bundler): Metro-compatible babelTransformerPath + auto babel plugin detection
ohah/zntc
- chore(bundler): /simplify Phase 4d 후속 — populateSymbolRefCounts O(1) lookup
- refactor(bundler): Phase 4d — Symbol.ref_count 수집 시작 (#1328)
- chore(bundler): /simplify Phase 4a 후속 — dead code 제거 + points_to 주석 갱신
- refactor(bundler): Phase 4a-2 — _default 판정을 symbol table에 단일화 (#1328)
- refactor(bundler): Phase 4a-1 — CJS emit helpers를 cjs_wrap.zig로 분리 (#1328)
- chore(bundler): /simplify Phase 3b+3c 후속 — 헬퍼 중복 제거 + 문서 정정
- refactor(bundler): Phase 3c — esm_wrap이 symbol table 직접 참조 (#1328)
- refactor(bundler): Phase 3b — linker가 re_export_alias에 canonical_name 주입 (#1328)
- chore(bundler): /simplify Phase 3a 후속 — import 블록 복원 + 조건식 정리
- refactor(bundler): Phase 3a — symbol table 기반 _default getter (#1328)
- chore(bundler): /simplify Phase 2 후속 — 미사용 import 제거, 테스트 import 호이스팅
- refactor(bundler): Phase 2 — Import/ExportBinding.symbol 필드 추가 (#1328)
- refactor(bundler): Phase 1 — Module.symbol_table + binding_scanner 합성 심볼 등록 (#1328)
- refactor(bundler): Phase 1 — SymbolTable 타입 + getter API (#1328)
- Revert "fix(bundler): barrel default re-export가 named sibling을 덮어쓰는 문제 (#1321)"
- Revert "style: /simplify — 중복 주석 제거 + esm_wrap 설명 축약"
- fix(napi): FunctionInfo params NodeList 시그니처 반영
- style: /simplify — 중복 주석 제거 + esm_wrap 설명 축약
- fix(bundler): barrel default re-export가 named sibling을 덮어쓰는 문제 (#1321)
- refactor(class-decorator): Phase 3 배치 2 — decorator 경로 NodeList 시그니처 통일
- refactor(params): Phase 3 배치 1 — params (u32 start, u32 len) → NodeList 시그니처
- style: zig fmt
- fix(codegen): function_declaration 잘못된 6슬롯 슬라이스 + 오래된 주석 정리
- fix(bundler): purity.zig method slot offset Phase 2 layout 반영
- test(tsc): Phase 2 formal_parameters 통일로 arrow 파라미터 공백 포맷 스냅샷 업데이트
- refactor(transformer): formal_parameters 생성 사이트 전수
addFormalParameters로 교체 - refactor(transformer): /simplify — formal_parameters 생성 헬퍼 추출
- fix(transformer): Phase 2 — functionBodyOffset 새 layout 반영 + worklet function_declaration directive strip
- fix(transformer): Phase 2 params pass 2 공유 노드 mutation → 새 formal_parameters 노드 생성
- wip(transformer): Phase 2 — class/decorator/template creation 사이트 migration
- wip(transformer): Phase 2 — async/generator wrapper + worklet creation 사이트 migration
- wip(transformer): Phase 2 — function/method 생성 사이트 migration (batch 4)
- wip(transformer): Phase 2 consumer migration (batch 3)
- wip(transformer+codegen): Phase 2 consumer migration (batch 2)
- wip(semantic+transformer): Phase 2 consumer migration (batch 1)
- wip(ast): Phase 2 — parser + ast.zig atomic (consumer 회귀 있음)
- refactor(ast): function params 정규화 prep — Ast.functionParams 헬퍼 + TODO 마커
- refactor(ast): /simplify — variableDeclarationKind 헬퍼 inline + dead bound 제거
- refactor(ast): /simplify — variable kind enum 후속 정리
- refactor(ast): variable_declaration kind를 typed enum으로 추출
- refactor(ast): #1283 후 cover grammar 잔재 dead 분기 제거
- fix(bundler): #1315 hoisted function bodies in __esm factory keep sourcemap mappings
- chore: rename stale test name (#1267 closed)
- chore: update stale RN-preset comments after #1306/#1312 fixes
- fix(bundler): #1312 re-export getter resolves to canonical local name
- fix(semantic): arrow function parameter shadowing missed formal_parameters
- fix(bundler): #1306 __generator sent() re-throws on throw op
- refactor: /simplify — transformer destructuring 분기 통합 + 주석/오타 정리
- refactor(bundler): RN preset을 ES5 매트릭스로 확장 (필드별 명시 작성)
- fix(transformer): #1302 for-of/for-in destructuring + block_scoping void 0 init 추가 안 함
- fix(bundler): #1299 RN preset에 block_scoping (let/const → var) 추가
- fix(bundler): #1299 RN preset에 arrow → function 다운레벨 추가
- refactor: /simplify — arrow params wrap helper + codegen listSep
- Revert "fix(bundler): #1291 require()로 참조되는 모듈을 tree-shake에서 보호"
- fix(bundler): #1291 recoverable parser error는 모듈 스킵하지 않음
- fix(bundler): #1291 require()로 참조되는 모듈을 tree-shake에서 보호
- fix(transpile): arena-owned 리소스 defer-order segfault — CLI --minify 크래시
- fix(parser): #1283 arrow function params를 formal_parameters로 정규화
- refactor: /simplify — RN preset + #x in obj 중복 제거
- feat(bundler): --platform=react-native → Hermes unsupported matrix 강제 오버라이드
- feat(transformer): #x in obj Ergonomic Brand Check 다운레벨링
- refactor: /simplify — private var name + descriptor object literal 공용화
- fix(transformer): #1278-3 private member + static block 공존 시 static block 다운레벨 누락
- feat(transformer): #1278-2 static #field 다운레벨링 (class 보존 경로)
- fix(transformer): #1278-1 standalone _method_fn 내부의 this.#field 미변환
- fix(transformer): #1275 private class 다운레벨 시 constructor 중복 emit 수정
- fix(core): browserslist를 optional 의존성으로 전환 + 정적 resolve 회피
- refactor: /simplify #1271 — HookResult alias + lcss non-null 제거
- feat(core): TypeScript declaration 생성 + browserslist build API 엣지 테스트
- feat(build): BuildOptions.browserslist 실제 구현
- refactor: /simplify follow-up — FEATURE_MAP 보강 + BuildOptions 정리 + bench 커밋
- fix(bundle): __async 중복 주입 제거 + feat(compat): browserslist 지원
- feat(compat): kangax compat-table 기반 compat.zig 생성기 추가
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.