2026-06-02

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

요약 (AI 작성)

zntc는 깊게 중첩된 입력에서 나던 스택 오버플로우를 정리했습니다. 깊은 좌결합 이항 체인을 트랜스포머·코드젠·시맨틱에서 반복 변환하고, flag-gated walker 4곳과 private-field mangler, 남은 재귀 AST walker 6개를 명시 스택 순회로 바꿨으며(이슈 #4123), 새 재귀 walker가 다시 들어오지 않도록 CI 감사를 추가했습니다. keyof keyof …처럼 접두 타입 연산자가 수만 번 겹친 입력도 반복 파싱으로 처리합니다. 번들러에서는 production 코드 분할 시 서로 다른 모듈의 같은 export 이름이 한 청크에서 뭉개지던 문제와 namespace re-export 충돌을 청크 간 전역 이름으로 풀었고(이슈 #4101), CJS default·named를 청크 경계 너머로 re-export할 때 interop 바인딩이 엉뚱한 청크에 놓이던 문제(이슈 #4120)도 고쳤습니다. 값 없는 key 속성이 dev·automatic 런타임 인자를 밀어내던 JSX 버그, NAPI watch stop()의 use-after-free도 수정했습니다.

성능과 벤치마크 작업도 많았습니다. Zig 0.16 이전 뒤 생긴 번들 시간 회귀를 fan-out 그래프 discovery를 batch-drain으로 묶어 줄였고, CLI --watch-delay와 NAPI watchDelay 옵션으로 하드코딩된 폴링 간격과 디바운스를 조절할 수 있게 했습니다. esbuild·rolldown과 비교하는 incremental rebuild·cold build 벤치를 추가해 측정 대상과 방식을 몇 차례 바로잡고 100·1000모듈 fixture를 넣었으며, GitHub Pages 벤치 페이지에 두 차트를 올렸습니다. 벤치마크 CI는 ubuntu 수치를 기준으로 삼고 esbuild·Bun 대비 비율로 회귀를 경고하는 게이트를 갖췄습니다. 실수로 추적된 빌드 캐시도 추적 해제했습니다. 밤에는 코드젠을 precedence 기반 괄호 재유도로 바꾸는 작업(이슈 #4042)의 1~4단계로 Level enum과 연산자 표, emitExpr 진입점, 의미 동등성 회귀 하네스, emitNode와의 통합이 들어왔습니다.

suji는 os-info·autostart 플러그인과 창 생명주기 SDK 정렬, store의 values·entries를 추가했고, suji.config.ts에 빌드 훅과 플랫폼별 빌드, dev.env를 넣었습니다.

이날 PR은 34개입니다. zntc 32개 가운데 31개가 main에 병합됐고, 깊은 이항 체인 walker 수정의 첫 시도 #4128은 병합 없이 닫힌 뒤 같은 내용이 #4136으로 병합됐습니다. suji는 #66과 #67이 병합됐습니다.

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

커밋

ohah/suji

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/suji#67생성 · 병합mergedmainfeat(config): suji.config.ts 빌드 훅 + 플랫폼별 빌드 + dev.env (mode/command 스레딩)
ohah/suji#66생성 · 병합mergedmainfeat: os-info·autostart 플러그인 + 창 생명주기 SDK 패리티 + store values/entries (설계 조율)
ohah/zntc#4151생성 · 병합mergedmainrefactor(codegen): emitNode↔emitExpr 통합 — 단일 expression 진입점 (#4042 PR4)
ohah/zntc#4150생성 · 병합mergedmaintest(codegen): load-bearing 괄호 회귀 하네스 + semantic-equiv oracle (#4042 PR3)
ohah/zntc#4149생성 · 병합mergedmainfeat(codegen): emitExpr(level,flags) 스캐폴드 + statement-start 필드 (#4042 PR2)
ohah/zntc#4148생성 · 병합mergedmainfeat(codegen): precedence Level enum + 연산자 테이블 추가 (#4042 PR1)
ohah/zntc#4147생성 · 병합mergedmainfix(napi): watch stop() use-after-free — async_data refcount 으로 free 레이스 제거
ohah/zntc#4145생성 · 병합mergedmainfix(parser): #4142 깊은 prefix 타입연산자(keyof keyof…) 반복 파싱
ohah/zntc#4144생성 · 병합mergedmaintest(bench): cold/incremental 비교에 100/1000-module fixture 추가
ohah/zntc#4143생성 · 병합mergedmainfix(bench): 증분 rebuild 변동 안정화 — iteration 50 + 파일크기 일정(in-place)
ohah/zntc#4141생성 · 병합mergedmainfix(transpile): #4123 마지막 6개 재귀 AST walker 반복화 (PR-2c)
ohah/zntc#4140생성 · 병합mergedmaindocs(benchmarks): 증분 차트 설명에 median-of-runs 횟수 명시
ohah/zntc#4139생성 · 병합mergedmaindocs(benchmarks): cold/증분 차트 수치를 최신 실측으로 갱신
ohah/zntc#4138생성 · 병합mergedmaindocs(benchmarks): GitHub Pages 벤치에 cold build·증분 rebuild 차트 추가
ohah/zntc#4137생성 · 병합mergedmainfeat(bench): in-process cold build 비교 추가 (zntc vs esbuild vs rolldown)
ohah/zntc#4136생성 · 병합mergedmainfix(ast-walk): flag-gated 재귀 walker 4곳 반복 순회 — 깊은 이항 체인 (#4123 PR-2a, ex-#4128)
ohah/zntc#4135생성 · 병합mergedmainfix(bench): inprocess 를 순수 incremental rebuild 비교로 재설계 (디바운스 제외)
ohah/zntc#4134생성 · 병합mergedmainfeat(napi): watch 디바운스를 watchDelay 옵션으로 노출 (하드코딩 50ms 제거)
ohah/zntc#4133생성 · 병합mergedmainci(audit): 신규 재귀 AST walker 재유입 차단 — durability tripwire (#4123)
ohah/zntc#4132생성 · 병합mergedmainfix(bench): inprocess 가 esbuild 도 watch 경로로 측정하도록 공정화
ohah/zntc#4131생성 · 병합mergedmainfix(private-mangler): collectPrivateNames/applyRenames 반복 순회 — 깊은 이항 체인 (#4123 PR-2b)
ohah/zntc#4130생성 · 병합mergedmainfeat(cli): watch 폴링 간격을 --watch-delay 로 조절 (하드코딩 500ms 제거)
ohah/zntc#4129생성 · 병합mergedmainfix(bench): incremental-rebuild 가 실제 사용자 CLI(JS)를 측정하도록 수정
ohah/zntc#4128생성closed기능 브랜치: fix/deep-binary-stack-overflow-4123fix(ast-walk): flag-gated 재귀 walker 4곳 반복 순회 — 깊은 이항 체인 (#4123 PR-2a)
ohah/zntc#4127생성 · 병합mergedmainchore(bench): incremental/watch rebuild 벤치 추가 (ZNTC vs esbuild vs rolldown)
ohah/zntc#4126생성 · 병합mergedmainchore: untrack stray .zig-cache-napi-win/ 빌드 캐시 + WIP benchmark 스크립트
ohah/zntc#4125생성 · 병합mergedmainfix(bundler): CJS default/named 를 cross-chunk·동적 re-export 시 interop 바인딩 정합 materialize (#4120)
ohah/zntc#4124생성 · 병합mergedmainfix(transformer,codegen,semantic): 깊은 좌결합 이항 체인 스택 오버플로우 반복 변환 (#4123 PR-1)
ohah/zntc#4122생성 · 병합mergedmainci(benchmark): ubuntu 권위화 + esbuild/Bun 비율 기반 소프트 회귀 게이트
ohah/zntc#4121생성 · 병합mergedmainperf(bundler): fan-out discovery dispatch 를 batch-drain 으로 — #4003 (Zig 0.16) bundle 회귀 회복
ohah/zntc#4119생성 · 병합mergedmainfix(bundler): namespace re-export collision — ns getter/멤버재작성을 cross-chunk 전역명으로 해석 (#4101)
ohah/zntc#4118생성 · 병합mergedmainrefactor(bundler): cross-chunk export emit 을 owner-iterating 단일 루프로 통합 (#4101 follow-up)
ohah/zntc#4117생성 · 병합mergedmainfix(bundler): production cross-chunk 전역 네이밍으로 동명 export collapse·divergence 해결 (#4101)
ohah/zntc#4116생성 · 병합mergedmainfix(jsx): 값없는 key 속성(<div key>)이 dev/automatic 런타임 positional 인자 시프트 수정