2026-03-22

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

요약 (AI 작성)

zntc 번들러는 오전에 트리 셰이킹을 진행했습니다. 쓰이지 않는 export를 모듈 단위로 지우는 1단계(#238)에 이어, 호출·new 노드의 플래그를 extra_data로 옮겨 @__PURE__ 주석을 담고(#239), package.json의 sideEffects와 순수성 분석을 적용했으며(#240), esbuild·rolldown처럼 순수 모듈을 자동 판정하게 했습니다(#241). @__NO_SIDE_EFFECTS__는 @__PURE__와 분리해 호출 지점에 반영하고 모듈 간으로 전파했습니다(#242, #243, #245). JSX 자기 닫는 태그가 >를 먼저 소비해 형제 요소를 깨뜨리던 렉서 버그도 고쳤습니다(#244).

오후에는 CJS 모듈 감지와 require() 스캔, __commonJS 래핑, __toESM 브리지로 CJS 상호 운용을 넣고(#248부터 #250까지) Top-Level Await 감지와 전파를 추가했습니다(#251). 이어 코드 분할을 청크 그래프 타입, 청크 간 의존성 추적, 다중 파일 emitter와 CLI --splitting, 심볼 단위 청크 간 import·export와 동적 import 경로 재작성, 청크별 scope hoisting, content hash와 import 중복 제거 순으로 구현했습니다(#252부터 #258까지).

저녁부터는 Bun 모노레포와 통합·E2E 테스트 환경, oxlint·oxfmt 설정(#259)을 갖추고 개발 서버와 HMR을 만들었습니다. 정적 파일 서버, 실시간 번들 서빙, WebSocket HMR 채널, 파일 감시와 전체 새로고침, 모듈 그래프 전체 감시, 에러 오버레이까지 6단계(#260부터 #267까지)와 SPA 폴백(#269)을 병합했고, TS non-null 단언 체이닝 파싱도 고쳤습니다(#265). 이후 import.meta.hot용 모듈 래핑 dev 번들과 HMR 런타임(#270), 바뀐 모듈만 보내는 업데이트(#271), dev 번들 소스맵 서빙(#272), React Fast Refresh의 $RefreshReg$·$RefreshSig$ 주입과 런타임 통합(#273, #274, #276), 새로고침 없는 CSS 핫 리로드(#275)가 들어왔습니다. esbuild·SWC·oxc·webpack·rspack·rolldown과 비교하는 벤치마크 스위트 #277은 이날 PR이 열렸습니다.

cheolsu-proxy는 네트워크 테이블을 TanStack Table로 옮기면서 요청 시각 컬럼, 디바이스 종류와 로컬·원격 클라이언트 표시, 쿼리 필터 편집기 개선, 트래픽 분석의 Invalid Date와 다른 형식으로 복사 버그 수정, pre-commit 훅을 함께 넣었습니다(#318). 컨텍스트 메뉴의 규칙 추가 옵션 확장과 다이얼로그 패턴 통일(#319), Quick Settings의 Block QUIC(Alt-Svc 제거) 옵션(#320)도 병합됐습니다. 블로그 저장소에는 맞춤법 크론의 상태 갱신 커밋(hwpjs 개발기 5편 확인 포함)과 3월 22일 오늘의 커밋 요약 작성이 올라왔습니다.

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

커밋

ohah/cheolsu-proxy

ohah/ohah.github.io

ohah/zntc

PR (해당일 생성/머지)

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

저장소PR해당일 활동상태대상 브랜치제목
ohah/cheolsu-proxy#320생성 · 병합mergedmainfeat: Quick Settings에 Block QUIC(Alt-Svc Strip) 옵션 추가
ohah/cheolsu-proxy#319생성 · 병합mergedmainfeat: 컨텍스트 메뉴 규칙 추가 확장 및 다이얼로그 패턴 통일
ohah/cheolsu-proxy#318생성 · 병합mergedmainfeat: 네트워크 테이블 개선 및 TanStack Table 마이그레이션
ohah/zntc#277생성mergedmainfeat: 벤치마크 스위트 — esbuild/SWC/oxc/webpack/rspack/rolldown 비교
ohah/zntc#276생성 · 병합mergedmainfeat(transformer): $RefreshSig$ Hook 시그니처 주입
ohah/zntc#275생성 · 병합mergedmainfeat(server): CSS 핫 리로드 — link tag swap (페이지 새로고침 없이)
ohah/zntc#274생성 · 병합mergedmainfeat(server): React Fast Refresh 런타임 통합 — 글로벌 바인딩 + hot.accept
ohah/zntc#273생성 · 병합mergedmainfeat(transformer): React Fast Refresh — $RefreshReg$ 컴포넌트 등록 주입
ohah/zntc#272생성 · 병합mergedmainfeat(server): 소스맵 서빙 — dev 번들 V3 소스맵 + /bundle.js.map
ohah/zntc#271생성 · 병합mergedmainfeat(server): HMR 모듈 단위 업데이트 — 변경 모듈만 WS 전송
ohah/zntc#270생성 · 병합mergedmainfeat(server): import.meta.hot dev 번들 — 모듈 래핑 + HMR 런타임 (D060)
ohah/zntc#269생성 · 병합mergedmainfeat(server): SPA 폴백 (historyApiFallback)
ohah/zntc#268생성 · 병합mergedmaintest(e2e): 에러 오버레이 E2E 테스트 추가
ohah/zntc#267생성 · 병합mergedmainfeat(server): 에러 오버레이 (HMR 6단계)
ohah/zntc#266생성 · 병합mergedmainfeat(server): 모듈 그래프 전체 파일 감시 (HMR 5/6단계)
ohah/zntc#265생성 · 병합mergedmainfix(parser): TS non-null assertion 체이닝 수정 (foo()!.bar)
ohah/zntc#264생성 · 병합mergedmaintest(e2e): E2E 테스트 활성화 — dev server 검증
ohah/zntc#263생성 · 병합mergedmainfeat(server): thread-per-connection + watch → full-reload (HMR 4/6단계)
ohah/zntc#262생성 · 병합mergedmainfeat(server): WebSocket HMR 채널 (HMR 3/6단계)
ohah/zntc#261생성 · 병합mergedmainfeat(server): on-the-fly 번들 서빙 (HMR 2/6단계)
ohah/zntc#260생성 · 병합mergedmainfeat(server): HTTP 정적 파일 서버 (HMR 1/6단계)
ohah/zntc#259생성 · 병합mergedmainfeat: Bun 모노레포 셋업 + 통합/E2E 테스트 환경
ohah/zntc#258생성 · 병합mergedmainfeat(bundler): chunk optimizations — content hash + import dedup
ohah/zntc#257생성 · 병합mergedmainfeat(bundler): per-chunk scope hoisting + cross-chunk export alias
ohah/zntc#256생성 · 병합mergedmainfeat(bundler): symbol-level cross-chunk import/export
ohah/zntc#255생성 · 병합mergedmainfix(bundler): /simplify — entry module을 항상 엔트리 청크에 배정
ohah/zntc#254생성 · 병합mergedmainfeat(bundler): code splitting PR4 — multi-file emitter + pipeline integration
ohah/zntc#253생성 · 병합mergedmainfeat(bundler): computeCrossChunkLinks — cross-chunk dependency tracking
ohah/zntc#252생성 · 병합mergedmainfeat(bundler): BitSet + Chunk + ChunkGraph types for code splitting
ohah/zntc#251생성 · 병합mergedmainfeat(bundler): Top-Level Await detection, propagation, and validation
ohah/zntc#250생성 · 병합mergedmainfeat(bundler): __toESM bridge + ExportsKind promotion
ohah/zntc#249생성 · 병합mergedmainfeat(bundler): CJS wrapping with __commonJS runtime helper
ohah/zntc#248생성 · 병합mergedmainfeat(bundler): CJS module detection + require() scanning
ohah/zntc#247생성 · 병합mergedmaindocs: update CLAUDE.md with Phase B2 roadmap
ohah/zntc#246생성 · 병합mergedmaintest(bundler): add 8 real-world integration tests
ohah/zntc#245생성 · 병합mergedmainfeat(bundler): cross-module @NO_SIDE_EFFECTS propagation
ohah/zntc#244생성 · 병합mergedmainfix(lexer): JSX self-closing /> consuming > prematurely — broke sibling elements
ohah/zntc#243생성 · 병합mergedmainfeat(semantic): @NO_SIDE_EFFECTS consumer — auto is_pure on calls
ohah/zntc#242생성 · 병합mergedmainfeat(lexer): separate @NO_SIDE_EFFECTS from @PURE
ohah/zntc#241생성 · 병합mergedmainfeat(tree-shaker): activate auto-pure module detection
ohah/zntc#240생성 · 병합mergedmainfeat(bundler): tree-shaking phase 2 — package.json sideEffects + @PURE analysis
ohah/zntc#239생성 · 병합mergedmainfeat(ast): @PURE support + extra_data node extensibility (D082)
ohah/zntc#238생성 · 병합mergedmainfeat(bundler): tree-shaking phase 1 — module-level unused export removal