2026-04-15

날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.

요약 (AI 작성)

zntc는 전날 시작한 번들러 심볼 리팩터링을 끝까지 밀었습니다. 합성 default와 래핑 모듈의 init/exports 심볼을 시맨틱 심볼 공간에 등록하고(#1339, #1341), 번들러 전용 SymbolTable을 별칭만 담는 AliasTable로 줄였습니다(#1342~#1344). 이어 import·export 바인딩이 문자열 이름 대신 심볼 참조를 쓰도록 바꾸고, linker의 canonical_names 문자열 맵을 없애 Symbol.canonical_name 필드로 옮겼으며, local_name 조회 사이트를 여러 묶음으로 나눠 이전했습니다. 이 과정이 PR 30여 개(#1345부터 #1374까지)로 병합됐고, 아키텍처 문서도 갱신했습니다(#1378). barrel의 export { default as X } from 재수출에서 소스 모듈 래핑이 빠지던 버그(#1375)도 함께 고쳤습니다.

ES5 다운레벨링에서 Hermes 실패 패턴을 계속 잡았습니다. for-await-of의 var 초기화와 ES5 미만 lowering(#1380, #1390), for-of 본문 구조 분해(#1391), 객체 메서드 shorthand(#1392), for-in let/const의 TDZ 초기화(#1393), top-level await를 async IIFE로 감싸기(#1394), 정규식 dotAll·named capture(#1395), 중괄호 유니코드 이스케이프의 surrogate pair 변환(#1396)입니다. 이후 공유 타깃 비트 레이아웃을 compat.zig와 맞췄고(#1400), 합성 노드 span을 소스에서 직접 읽어 범위를 벗어나던 문제를 transformer·codegen·semantic·번들러 전반에서 getText로 바꿔 막았습니다(#1405, #1412). panic이 나면 신고 안내를 띄우는 Bun 스타일 crash report도 추가했습니다(#1409).

Metro 호환 기능으로는 그래프 밖 경로를 감시하는 watchFolders(#1414), 일반 해석이 실패할 때만 쓰는 resolve fallback(#1416), RN 전용 AssetRegistry 출력과 @2x/@3x 변형 자동 감지(#1417, #1418), resolver blockList(#1419)를 넣었고, TS 타입에 빠져 있던 strictExecutionOrder 등 BuildOptions 세 개를 채웠습니다(#1415).

bungae는 Hermes에서 실패하던 ES5 패턴 11종을 담은 스트레스 케이스를 예제 앱에 넣었다가 async 함수와 계산된 객체 키로 좁혔고(#57), Rozenite를 위한 server.enhanceMiddleware, rewriteRequestUrl, symbolicator.customizeFrame 등 Metro 설정 hook과 watchFolders 전달을 연결했습니다. 설정 스키마와 dev 서버 문서도 실제 구현에 맞춰 다시 썼습니다. ohah.github.io에는 4월 8일부터 15일까지의 오늘의 커밋 페이지가 추가됐습니다.

공개 커밋 90개, 해당일 생성 또는 병합된 PR 64개를 정리했습니다. PR 생성 63개·병합 64개는 같은 PR이 양쪽에 포함될 수 있습니다.

커밋

ohah/bungae

ohah/ohah.github.io

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/bungae#57생성 · 병합mergedmaintest(example-app): ES5 다운레벨 스트레스 케이스 추가
ohah/zntc#1419생성 · 병합mergedmainfeat(resolver): blockList — Metro 호환 해석 차단
ohah/zntc#1418생성 · 병합mergedmainfeat(asset): @2x/@3x scale variant 자동 감지
ohah/zntc#1417생성 · 병합mergedmainfeat(asset): Metro AssetRegistry 호환 출력 (RN 전용 레이어)
ohah/zntc#1416생성 · 병합mergedmainfeat(resolve): fallback 옵션 (webpack/Metro 호환)
ohah/zntc#1415생성 · 병합mergedmainfix(core): BuildOptions에 누락 옵션 3개 추가
ohah/zntc#1414생성 · 병합mergedmainfeat(watch): watchFolders 옵션 지원
ohah/zntc#1413생성 · 병합mergedmainfix(cli): realpathAlloc leak + bundler 합성 노드 회귀 가드
ohah/zntc#1412생성 · 병합mergedmainfix: broad source deref audit — getText 일괄 전환 (#1407)
ohah/zntc#1411생성 · 병합mergedmainchore(crash-handler): URL 을 깃헙 레포 링크로 단순화
ohah/zntc#1409생성 · 병합mergedmainfeat(diagnostics): Bun 스타일 crash report — panic handler + 신고 안내
ohah/zntc#1406생성 · 병합mergedmainchore(transformer): /simplify #1404 후속 — 누락 사이트 + 매직 넘버 + 회귀 테스트
ohah/zntc#1405생성 · 병합mergedmainfix(transformer): 합성 노드 span 의 STRING_TABLE_BIT 처리 — getText 일괄 사용 (#1404)
ohah/zntc#1403생성 · 병합mergedmainchore(transformer): unicode brace escape 유틸 재사용
ohah/zntc#1402생성 · 병합mergedmainchore(transformer): for-of/for-await loop var assign helper 통합
ohah/zntc#1401생성 · 병합mergedmainchore(fixtures): RN snapshot 재생성 (PR #1400 후속)
ohah/zntc#1400생성 · 병합mergedmainfix(shared): ES_TARGET_BITS / FEATURES 를 compat.zig 28-bit 레이아웃으로 동기화
ohah/zntc#1396생성 · 병합mergedmainfix(transformer): unicode brace escape \u{X} → surrogate pair lowering (#1388)
ohah/zntc#1395생성 · 병합mergedmainfix(transformer): regex dotAll/named capture 다운레벨 (#1387)
ohah/zntc#1394생성 · 병합mergedmainfix(transformer): top-level await 를 async IIFE 로 감싸 bare yield leak 방지 (#1384)
ohah/zntc#1393생성 · 병합mergedmainfix(transformer): for-in let/const 바인딩의 TDZ void 0 init 생략 (#1386)
ohah/zntc#1392생성 · 병합mergedmainfix(transformer): object literal method shorthand 를 key:function 으로 lowering (#1385)
ohah/zntc#1391생성 · 병합mergedmainfix(transformer): for-of body array/object destructure 를 var+인덱스 접근으로 lowering (#1383)
ohah/zntc#1390생성 · 병합mergedmainfix(transformer): for-await-of ES5 미만 타겟에서 iterator+await 루프로 lowering (#1381)
ohah/zntc#1380생성 · 병합mergedmainfix(codegen): for-await-of var init hoist/skip 누락 수정 (#1379)
ohah/zntc#1378생성 · 병합mergedmaindocs(architecture): symbol table + AST 정규화 최신화
ohah/zntc#1377생성 · 병합mergedmainrefactor(transformer): visitExtraList 시그니처를 NodeList로 통일 (#1325)
ohah/zntc#1376생성 · 병합mergedmainchore(bundler): /simplify #1340 후속 — helper 추출 + regex 정밀화
ohah/zntc#1375생성 · 병합mergedmainfix(bundler): #1340 export { default as X } from re-export 시 source wrap 누락
ohah/zntc#1374생성 · 병합mergedmainchore(bundler): /simplify Phase 4c-4e 후속 — SymbolRef.makeSemantic + 주석
ohah/zntc#1373생성 · 병합mergedmainrefactor(bundler): Phase 4c-4e — eb.symbol fill-in을 scan 시점으로 이전
ohah/zntc#1372생성 · 병합mergedmainchore(bundler): /simplify Phase 4c-4d 후속 — SymbolRef.semanticIndex 헬퍼
ohah/zntc#1371생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (batch 6) — module_scope.get(ib.local_name) → ib.local_symbol
ohah/zntc#1370생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (batch 5) — preamble fallback ib.local_name 마이그레이션
ohah/zntc#1369생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (batch 4) — linker.zig eb.local_name 마이그레이션
ohah/zntc#1368생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (batch 3) — chunks/tree_shaker eb.local_name 마이그레이션
ohah/zntc#1367생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (batch 2) — eb.local_name 마이그레이션
ohah/zntc#1366생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (batch 1) — m.exportBindingLocalName 마이그레이션
ohah/zntc#1365생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d — Module name 헬퍼 (esbuild 패턴)
ohah/zntc#1364생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d — emitter/chunks의 eb.local_name → eb.symbol 단축
ohah/zntc#1363생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d — populateImportSymbols가 .local export 심볼도 채우게
ohah/zntc#1362생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d — ib.local_name → ib.local_symbol 직접 사용
ohah/zntc#1361생성 · 병합mergedmainrefactor(bundler): Phase 4c-4d (start) — buildImportRenames의 imported_name 조회 SymbolRef화
ohah/zntc#1360생성 · 병합mergedmainrefactor(bundler): Phase 4c-4c — ImportBinding.importsDefault() helper
ohah/zntc#1359생성 · 병합mergedmainrefactor(bundler): Phase 4c-4b — chunks.zig RevKind 분리 + sentinel 제거
ohah/zntc#1358생성 · 병합mergedmainrefactor(bundler): Phase 4c-4a — ExportBinding.Kind 분리 (re_export_star/re_export_namespace)
ohah/zntc#1357생성 · 병합mergedmainchore(bundler): /simplify Phase 4c-3c 후속 — 회귀 복구·중복 제거
ohah/zntc#1356생성 · 병합mergedmainrefactor(bundler): Phase 4c-3c-4b — canonical_names string map 제거
ohah/zntc#1355생성 · 병합mergedmainrefactor(bundler): Phase 4c-3c-4a — synthetic 심볼 canonical_name mirror 보강
ohah/zntc#1354생성 · 병합mergedmainrefactor(bundler): Phase 4c-3c-3 — reader가 Symbol.canonical_name 우선
ohah/zntc#1353생성 · 병합mergedmainrefactor(bundler): Phase 4c-3c-2 — canonical_names writer mirror to Symbol
ohah/zntc#1352생성 · 병합mergedmainrefactor(semantic): Phase 4c-3c-1 — Symbol.canonical_name 필드 추가
ohah/zntc#1351생성 · 병합mergedmainchore(bundler): /simplify Phase 4c-3b 후속 — 융합·helper·주석 정리
ohah/zntc#1350생성 · 병합mergedmainrefactor(bundler): Phase 4c-3b-γ — export binding 6곳 getCanonicalByRef 전환
ohah/zntc#1349생성 · 병합mergedmainrefactor(bundler): Phase 4c-3b-β — import preamble 5곳 getCanonicalByRef 전환
ohah/zntc#1348생성 · 병합mergedmainrefactor(bundler): Phase 4c-3b-α — ImportBinding.local_symbol 필드 추가
ohah/zntc#1347생성 · 병합mergedmainrefactor(bundler): Phase 4c-3 — getCanonicalByRef facade 도입
ohah/zntc#1346생성 · 병합mergedmainrefactor(bundler): Phase 4c-2 — populateImportSymbols + ib.symbol 첫 소비
ohah/zntc#1345생성 · 병합mergedmainrefactor(bundler): Phase 4c-1 — Export Registry 헬퍼 도입
ohah/zntc#1344생성 · 병합mergedmainrefactor(bundler): Phase 4e-2d-c — SymbolRef.bundler → .alias rename (#1338 마지막)
ohah/zntc#1343생성 · 병합mergedmainrefactor(bundler): Phase 4e-2d-b — SymbolTable → AliasTable 축소
ohah/zntc#1342생성 · 병합mergedmainrefactor(bundler): Phase 4e-2d-a — dead SymbolKind variants 제거
ohah/zntc#1341생성 · 병합mergedmainrefactor(bundler): Phase 4e-2c — synthetic wrapper 심볼 semantic 통합
ohah/zntc#1339병합mergedmainrefactor(bundler): Phase 4e-2b PoC — synthetic_default를 semantic 공간으로 이전