2026-05-29

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

요약 (AI 작성)

zntc는 오전에 이슈 단위 버그 수정을 연달아 병합했습니다. 문자열 리터럴의 \u{} 이스케이프 범위 초과 검사(#3988), es5 다운레벨에서 기본값이 있는 중첩 구조 분해(#3989), exports·imports 와일드카드를 가장 긴 접두사로 고르는 해석과 명시적 null 대상 차단(#3993, #3994), 플러그인 실패 진단 문자열의 데이터 경쟁(#3995)을 고쳤습니다. 진단은 Expected X but found Y 형식으로 렌더하고 해석되지 않은 import 제안을 중립적인 hint로 바꿨습니다(#3991, #3992). 모듈 쪽에서는 순수 CJS star를 가진 ESM의 namespace import를 __toESM(require())로 처리하고(#3996) export*-from-CJS 멤버를 런타임에 구성하며 dev HMR에서도 빠지지 않게 했고(#4001, #4002), 실제로 없는 export만 missing_export로 보고하고(#3997) 모호한 export * 충돌을 명세대로 거부하거나 undefined로 처리했습니다(#3998).

저녁에는 Zig 0.15.2에서 0.16.0으로 옮기는 대형 마이그레이션(#4003)이 병합됐습니다. 빌드 시스템과 panic 경로부터 CLI, 번들러, dev 서버, NAPI, WASM, 테스트까지 파일 시스템·시간·스레딩 호출을 새 std.Io 기반으로 바꾸는 커밋 77개가 한꺼번에 main에 들어왔고, Thread.Pool은 Io.Group으로, mutex는 Io.Mutex나 io 없는 스핀락으로 바꿨습니다. 멀티스레드 wasm을 std 0.16이 지원하지 않아 wasm 번들러는 단일 스레드로 돌렸고, upstream 회귀를 피해 arm64-windows는 x64 호스트에서 교차 빌드하며 windows-msvc에는 advapi32를 명시적으로 링크했습니다. 후속으로 --jobs를 io async_limit에 연결하고(#4005) graph·emit 작업을 범위 단위로 묶어 0.16의 작업당 오버헤드를 줄였으며(#4008), MpscChannel 전송 OOM 시 멈춤이나 해제 후 사용 없이 실패하게 했습니다(#4010).

밤에는 export * as ns의 내부 이름이 일반 export *와 잘못 모호 판정되어 zod의 z.string이 undefined가 되던 회귀를 고치고(#4012), member-rewrite된 namespace의 없는 멤버 접근과 optional chain 멤버 접근이 끊어진 참조를 남기지 않게 했습니다(#4014, #4018). WASM 최적화 모드를 덮어쓰는 -Dwasm-optimize와 배포용 LTO를 켜는 -Denable-lto 옵션도 추가했습니다(#4016).

suji는 IPC 지연 응답의 해제 후 사용, 슬롯 고갈, 종류 혼동, TTL 문제를 고치고(#57) 리뷰 후속으로 eviction 경쟁과 타이머 누수를 없앴습니다(#59). Windows ReleaseSafe의 translate-c 미사용 지역 변수 오류(#58)와 패키징된 앱의 scheme handler가 해제된 메모리를 써서 죽던 문제를 요청별 참조 카운트로 고쳤습니다(#61). 블로그 저장소 ohah.github.io에는 5월 29일 요약 추가 커밋 1개가 있었습니다.

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

커밋

ohah/ohah.github.io

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/suji#61생성 · 병합mergedmainfix(cef): packaged scheme-handler UAF crash — per-request refcount
ohah/suji#59생성 · 병합mergedmainfix(ipc): code-review max followup — eviction race + timer leak + harness robustness
ohah/suji#58생성 · 병합mergedmainfix(build): Windows ReleaseSafe translate-c unused-local (closes #14)
ohah/suji#57생성 · 병합mergedmainfix(ipc): deferred-response criticals — UAF, slot exhaustion, cross-kind, TTL
ohah/zntc#4018생성 · 병합mergedmainfix(bundler): optional-chain namespace 멤버(ns?.x)도 member-rewrite (dangling 제거)
ohah/zntc#4016생성 · 병합mergedmainfeat(build): WASM 최적화 모드 오버라이드(-Dwasm-optimize) + 배포 LTO opt-in(-Denable-lto)
ohah/zntc#4015생성 · 병합mergedmainfix(bundler): MpscChannel inline-async 안전성 불변식 명문화 + 단일 소비자 assert
ohah/zntc#4014생성 · 병합mergedmainfix(bundler): member-rewrite 된 namespace 의 미존재 멤버 접근을 (void 0) 로 (dangling 참조 제거)
ohah/zntc#4012생성 · 병합mergedmainfix(bundler): export*-as-ns inner 이름이 plain export* 와 false-ambiguous 충돌하던 회귀 수정 (zod z.string===undefined)
ohah/zntc#4010생성 · 병합mergedmainfix(bundler): MpscChannel send OOM 시 graceful 실패 (hang/UAF 제거) (#4009)
ohah/zntc#4008생성 · 병합mergedmainperf(bundler): graph/emit dispatch 를 range-task 로 배치 — 0.16 Io.Group per-task 오버헤드 amortize (#4007)
ohah/zntc#4006생성 · 병합mergedmaintest(browser-field): disabled 모듈 namespace 기대값을 esbuild-parity 로 교정
ohah/zntc#4005생성 · 병합mergedmainfeat(bundler): --jobs(max_threads) 를 io async_limit 에 연결 (#4004)
ohah/zntc#4003생성 · 병합mergedmainrefactor(build): Zig 0.15.2 → 0.16.0 마이그레이션 (std.Io 오버홀)
ohah/zntc#4002생성 · 병합mergedmainfix(bundler): dev HMR 의 export*-from-CJS namespace 멤버 누락 수정 (#3975)
ohah/zntc#4001생성 · 병합mergedmainfix(bundler): namespace import 의 export*-from-CJS 멤버를 런타임 구성 (#3975)
ohah/zntc#4000생성 · 병합mergedmainfix(test): 범위초과 \u{} 이스케이프 통합 테스트를 expectError 로 교정 (#3980)
ohah/zntc#3999생성 · 병합mergedmaintest(bundler): ambiguous export* 게이트 차원별 회귀 보강 (#3982)
ohah/zntc#3998생성 · 병합mergedmainfix(bundler): ambiguous export* 충돌을 spec 대로 거부/undefined 처리 (#3982)
ohah/zntc#3997생성 · 병합mergedmainfix(bundler): 진짜 누락 export 만 missing_export 진단으로 surface (#3978)
ohah/zntc#3996생성 · 병합mergedmainfix(bundler): namespace import of pure-CJS-star ESM → __toESM(require()) (#3975)
ohah/zntc#3995생성 · 병합mergedmainfix(bundler): plugin-failure 진단의 owned_diagnostic_strings data race 수정 (#3977)
ohah/zntc#3994생성 · 병합mergedmainfix(resolver): 조건부 exports/imports 의 명시적 null target 차단 (#3981)
ohah/zntc#3993생성 · 병합mergedmainfix(resolver): exports/imports 와일드카드를 longest-prefix 로 선택 (#3976)
ohah/zntc#3992생성 · 병합mergedmainfix(cli): unresolved-import suggestion 을 'did you mean' 대신 hint 로 렌더 (#3986)
ohah/zntc#3991생성 · 병합mergedmainfix(diagnostic): expect()/jsx 진단을 'Expected X but found Y' 로 렌더 (#3985)
ohah/zntc#3990생성 · 병합mergedmainfix(bundler): CompiledModule.dupe shared_ns_decls 부분-채움 누수 가드 (#3983)
ohah/zntc#3989생성 · 병합mergedmainfix(transformer): es5 다운레벨에서 default 있는 중첩 destructuring lowering (#3979)
ohah/zntc#3988생성 · 병합mergedmainfix(lexer): string literal \u{} 이스케이프 범위초과 검사 추가 (#3980)
ohah/zntc#3987생성 · 병합mergedmainfix(bundler): non-literal dynamic import 진단을 reason 메시지로 통일 + #3973 회귀 수정 (#3984)