2026-04-25
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 브라우저에서 번들러를 돌리는 작업을 하루 만에 Playground까지 끌고 갔습니다. 번들러가 std.fs를 직접 부르던 곳을 FileSystem 추상화로 감싸 graph·resolver·package.json 읽기를 옮기고(#1915, #1917, #1918, #1923), 해석 결과를 ResolvedModule union으로 통일했습니다(#1925, #1931 등). 이어 호스트 JS 콜백에 위임하는 VirtualFS(#1935), wasm-bundler 빌드 타깃(#1937), JS VirtualFileSystem과 COOP/COEP 설정(#1939), 실제 Bundler.bundle()을 부르는 WASM build()(#1946)를 병합했고, 크기 측정 결과에 따라 transpile 전용과 번들러 바이너리를 나누기로 문서화했습니다(#1947). Playground에는 여러 파일을 입력하는 bundler 페이지(#1948)가 생겨 format·platform·minify 옵션, 청크 뷰어와 코드 분할, external과 preset, UMD/AMD, Share 버튼, transpile 옵션 전체가 차례로 붙었습니다(#1951, #1953, #1954, #1957, #1958). 옵션 조합 회귀 검증 스크립트를 CI에 넣고(#1966), WASM 번들러 에러를 표준 진단 형식으로 맞췄습니다(#1967).
번들러 기능으로는 inlineDynamicImports의 런타임 registry(#1861), external 모듈을 그래프의 phantom 모듈로 등록하는 Rollup parity(#1863, #1865), manualChunks meta의 hasModuleSideEffects·code 등 Rollup ModuleInfo 필드 확장(#1867, #1876, #1879)이 들어왔습니다. iOS 26.4 Hermes 부팅 실패에 대응해 RN 프리셋에 엔트리 에러 가드를 넣고 콘솔 에러 무시 패턴을 별도 옵션으로 나눴으며(#1864, #1878), 번들 성능 회귀 가드를 CI에 붙였습니다(#1873, #1875).
ES5 async 다운레벨링에서는 if 안 await가 상태 기계에서 자기 자신으로 도는 문제(#1888), 복합 대입과 for-await-of var 호이스팅(#1904), async 함수의 this 바인딩과 yield* iterable 래핑(#1914), async generator의 __asyncGenerator 변환(#1919)을 고치고 번들러 통합·Hermes 런타임 회귀 테스트를 더했습니다(#1916). export * as ns 재수출이 자기 재귀하던 문제의 namespace 변수 호이스팅(#1936)과 fallback disabled 결과 무시(#1945)도 수정했습니다.
bungae는 ZTS의 엔트리 에러 가드와 Expo 전용 콘솔 에러 패턴을 연결하고, withExpo() 래퍼와 무설정 감지, bungae init을 추가했습니다. 위 async 수정들을 따라 서브모듈을 여러 번 올렸고, Astro Starlight 문서 사이트와 GitHub Pages CI를 새로 만들었습니다. ohah.github.io에는 4월 24·25일 오늘의 커밋 요약이 올라왔습니다.
공개 커밋 105개, 해당일 생성 또는 병합된 PR 69개를 정리했습니다. PR 생성 69개·병합 69개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- fix(docs): scope root .gitignore "reference/" to root only
- ci(docs): pin Node 22 — Astro requires >=22.12, ubuntu default is 20
- docs(site): add Astro Starlight site + GitHub Pages CI
- feat(bungae): add withExpo + zero-config detection + bungae init
- chore: bump zts submodule (#1909/#1910/#1911 bundler-integration + hermes runtime regression)
- chore: bump zts submodule (async this + yield* iterable #1914)
- chore: bump zts submodule (async fix helpers refactor #1908)
- chore: bump zts submodule (e2eFull strict parser errors #1906)
- chore: bump zts submodule (if-await follow-up #1890)
- chore: bump zts submodule (fix if-await self-loop #1887)
- feat: inject expo-specific silentConsoleErrorPatterns when expo detected
- feat: align napi-build with entry_error_guard for iOS 26.4 boot fix
ohah/ohah.github.io
- feat(today-commit): add 2026-04-24 commit summary with PR list
- docs(today-commit): add 2026-04-24 commit activity summary
- docs: add AI summary for 2026-04-25
- cron: mark all zts files as checked (complete)
- cron: mark all mdx files as checked (zts batch complete)
- cron: mark docs/monthly-opensource/zts/background.mdx as checked (no changes)
- cron: mark docs/monthly-opensource/index.mdx as checked (no changes)
- cron: mark remaining hwpjs files as checked
- cron: mark all hwpjs files as checked
- cron: mark all electron-mcp-server files as checked
- cron: mark electron-mcp-server/background.mdx as checked
ohah/zntc
- fix(wasm bundler): 에러 메시지를 ZTS 표준 진단 형식으로 통일 (#1965)
- chore(bundler): 옵션 매트릭스 회귀 검증 스크립트 + CI step 추가 (#1885)
- fix(playground): bundler preset 변경 시 사용자 옵션 보존 (#1885)
- feat(playground): bundler 에 transpile 옵션 전체 노출 (#1885 follow-up)
- feat(playground): bundler Share 버튼 — multi-file VFS + opts URL 공유 (#1885)
- feat(playground): bundler UMD/AMD format + 에러 메시지 노출 (#1885 follow-up)
- fix(playground): preset 선택 시 즉시 rebuild + bundler CJS/IIFE preset (#1885 follow-up)
- feat(playground): bundler external 옵션 UI + dynamic-import / external preset (#1885 PR 10)
- feat(playground): bundler chunk viewer + code-splitting / preserve-modules 옵션 (#1885 PR 9-4)
- feat(wasm): bundler ABI build_chunks — multi-output 노출 (#1885 PR 9-2)
- feat(playground): bundler 옵션 패널 — format/platform/minify (#1885 PR 9-3)
- feat(wasm): bundler ABI 옵션 JSON 확장 — format/platform/external/minify (#1885 PR 9-1)
- fix(playground): bundler 페이지 실 동작 + Transpile 페이지에 진입 링크 (#1885)
- feat(playground): bundler 페이지 + multi-file 입력 UI (#1885 Phase 3 PR 8)
- feat(wasm): WASM 빌드 사이즈 측정 + 분리 전략 문서화 (#1899, #1885 PR 7)
- feat(wasm): bundler build() 가 bundler.Bundler.bundle() 실 호출 (#1885 PR 6-2c-2c)
- fix(bundler): resolve_cache 가 fallback disabled 결과 무시 (#1885)
- fix(bundler): page_allocator → self.allocator (wasm-bundler 호환, #1885 PR 6-2c-2b)
- feat(bundler): wasm-bundler 빌드 호환성 — fs.realpath + listDir + u5 shift (#1885 PR 6-2c-2a)
- chore(wasm): WASI shim 의 EBADF 반환 의도 명시 (#1885 PR 6-2c-1)
- ci: WASM job 에 zig build wasm-bundler step 추가 (#1885 PR 6-2c-1)
- feat(wasm): bundler build() minimal export + JS bridge round-trip 검증 (#1885 PR 6-2c-1)
- chore: zig fmt — src/bundler/linker.zig 빈 줄 1개 제거
- feat(wasm): JS VirtualFileSystem + zts_fs imports + Astro COOP/COEP (#1885 PR 6-2b)
- feat(build): wasm-bundler 빌드 target 추가 (#1885 Phase 2 PR 6-2a)
- fix(linker, tree_shaker): hoist re_export_namespace ns_var + recover tree-shake (#1928)
- chore(bundler): host ABI 매직 넘버 주석 추가 (#1885 PR 6-1)
- feat(bundler): VirtualFS host JS callback 위임 구현 (#1885 PR 6-1)
- refactor(bundler): resolveAsModule → resolve rename cleanup (#1885)
- chore(bundler): plugin.zig dead import 제거 + napi alias 정리 (#1885 PR 5-1)
- feat(bundler): plugin runner resolveId hook union 직접 반환 (#1885 PR 5-1)
- test(integration): runtime regression suite for ns shadow self-recursion (#1928)
- chore(bundler): 변경 narration 주석 정리 (#1885 PR 4d)
- feat(bundler): resolve_cache 가 ResolvedModule 직접 반환 + 변환 layer 제거 (#1885 PR 4d)
- feat(bundler): graph.zig 의 ResolveResult → ResolvedModule 마이그레이션 (#1885 PR 4c-2)
- chore(bundler): freeResolvedPath else 의도 명시 (#1885 PR 4c-1)
- feat(bundler): resolve_cache 에 resolveAsModule API 추가 (#1885 PR 4c-1)
- chore(bundler): cachedPath comment 명확화 — Phase 1 cache 불변식 강조 (#1885 PR 4b)
- feat(bundler): resolve_cache 의 ResolveResult → ResolvedModule 마이그레이션 (#1885 PR 4b)
- refactor(transformer): async generator cleanup — simplify findings applied
- feat(bundler): ResolvedModule union(enum) 도입 (#1885 Phase 1 PR 4a)
- test(bundler): pnpm/bun farm symlink 검증 — node_modules/foo → .pnpm/foo@x/node_modules/foo (#1921)
- test(bundler): pkg_json path-based 의 회귀 방지 — symlink-dir + OOM (#1921)
- refactor(bundler): pkg_json.parsePackageJson path-based 시그니처 — fs 추상화 완성 (#1921)
- test(hermes): polyfill Symbol.asyncIterator for vanilla Hermes runs
- feat(bundler): resolver.zig fs 호출을 fs.* 추상화 통과로 마이그레이션 (#1885 Phase 1 PR 3)
- fix(transformer): async generator (async function*) → __asyncGenerator (#1911)
- feat(bundler): graph.zig fs 호출을 fs.* 추상화 통과로 마이그레이션 (#1885 Phase 1 PR 2)
- test: bundler integration + Hermes runtime regression for #1887/#1896/#1901/#1909/#1910
- fix(transformer): async this binding (#1909) + yield* iterable wrap (#1910)
- feat(bundler): FileSystem 추상화 + RealFS (#1885 Phase 1 PR 1)
- refactor(transformer): extract makeAssignExpr/Stmt + Parser.hasErrors
- test(infra): e2eFull errors on parser diagnostics (#1906)
- chore(tools): NAPI callback hot-path bench 추가 (#1891)
- fix(transformer): async edge cases — compound +=, for-await-of var hoist
- refactor(transformer): if-await fix follow-up — simplify findings applied
- fix(transformer): if-await self-loop in ES5 generator state machine (#1887)
- refactor(types): ModuleInfo 의 ExportBinding 타입 leak 제거 (#1883)
- docs: manualChunks epic 동기화 — ROADMAP + Astro 가이드
- chore(types): Phase A placeholder docstring 에 #1880 issue link 명시
- feat(napi): manualChunks meta Phase A — 5 필드 추가 (Rollup 호환률 64% → 93%)
- feat(bundler): split silent_console_error_patterns from entry_error_guard
- fix(bench): p95 선형 보간 — n=20 에서 max 와 동일 안 되도록
- feat(napi): manualChunks meta 에 code 필드 추가 (Rollup parity)
- ci: bundle-perf.ts 통합 + CLI 플래그 보강
- docs(bundler): correct entry_error_guard root-cause attribution
- feat(bench): bundle perf 회귀 가드 인프라 + baseline
- perf(bundler): pass *const EmitOptions throughout (sweep)
- perf(bundler): pass *const EmitOptions to guard helpers
- test(manualChunks): hasModuleSideEffects 누락 테스트 3개 보강
- refactor(bundler): use WrapKind.isWrapped() in shouldGuard for consistency
- refactor(bundler): extract writeChainPiece helper for esm_wrap
- refactor(bundler): pass EmitOptions instead of bool to guard helpers
- refactor(bundler): unify TLA gate via Module.shouldGuard() + propagate OOM
- chore(test): drop unused writeFileSync import (/simplify 후속)
- test(manualChunks): 회귀 가드 + 스모크 테스트 12개 추가 (external + 런타임)
- feat(napi): manualChunks meta 에 hasModuleSideEffects 추가 (Rollup parity)
- fix(chunk): external phantom 이 chunk 배정 받지 못하도록 가드 + 회귀 테스트
- feat(bundler): add entry_error_guard for RN preset (iOS 26.4 boot fix)
- feat(bundler): external 모듈을 phantom Module 로 graph 에 등록 (Rollup parity)
- refactor(chunk): generateChunks 8 positional → GenerateOptions struct
- feat(bundler): inlineDynamicImports B 범위 — 런타임 registry (__esm/CJS)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.