2026-03-23
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 전날 연 벤치마크 스위트(#277)를 병합하며 단계별 파이프라인 프로파일링과 Bun을 포함한 7개 도구 비교를 넣었고, .ts 같은 파일을 자동으로 ESM 모듈 모드로 처리해 트랜스파일을 18배 빠르게 했습니다(#278). 변수 이름을 줄이는 identifier mangling을 단일 파일과 번들 모드에 넣은 뒤(#279, #280), lodash-es·preact·date-fns·uuid·zod 다섯 패키지를 번들링하는 실제 프로젝트 스모크 테스트를 시작했습니다(#281).
이후 하루 대부분은 스모크 테스트가 드러낸 문제를 고치는 데 쓰였습니다. namespace import를 esbuild 방식으로 ns.prop 직접 치환하고 export * as ns를 지원해 zod를 통과시켰고(#288, #290), contextual keyword를 식별자로 허용하는 파서 수정(#291), sideEffects 글롭 패턴(#293), CJS 내부 require() 번들링과 JSON 모듈, node_modules의 .js를 CJS로 간주하는 처리 등 CJS 상호 운용 개선(#295)이 이어졌습니다. axios·Redux Toolkit·express·superjson·zustand·effect·yargs에서 나온 버그를 고치고(#296, #297, #300), 2단계 선언 방식으로 전방 참조를 해결했으며(#301), 스모크 테스트 결과를 PR 댓글로 남기는 CI(#303)와 scope hoisting 충돌 회피의 전역 이름 자동 수집(#304)을 넣었습니다. 스모크 테스트는 vue·svelte·solid·three·react-dom·d3·hono 등을 더해 47개로 늘었습니다(#305, #311).
밤에는 --platform=node에서 package.json exports의 node 조건 사용(#307), barrel re-export의 export 체인 추적(#308), TS contextual keyword 30개를 식별자로 통합한 렉서 정리(#309)를 병합했습니다. export default 함수 이름의 contextual keyword 인식을 고치려던 #306은 병합 없이 닫혔습니다. CLI --define:KEY=VALUE(#312), CJS 트리 셰이킹과 메모리 누수 수정(#313), CJS 모듈의 export * 지원과 esbuild·rolldown 호환 __toESM(#314)이 들어왔고, Playwright 브라우저 E2E를 31개까지 늘렸습니다(#315, #316). 발견한 문제는 ISSUES.md로 정리하기 시작했습니다. 브라우저 호환성을 위한 import.meta polyfill 등의 #317은 이날 PR이 열렸습니다.
cheolsu-proxy는 Store 로직을 OpsStore로 합쳐 CLI와 MCP 사이 중복을 없앴습니다(#321). 블로그 저장소에는 맞춤법 크론의 상태 갱신 커밋과 3월 23일 오늘의 커밋 요약 작성이 올라왔습니다.
공개 커밋 156개, 해당일 생성 또는 병합된 PR 37개를 정리했습니다. PR 생성 36개·병합 35개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/cheolsu-proxy
- refactor: bounded_push 헬퍼 추출, Default impl 추가, 테스트 이동
- refactor: OpsStore에 Store 로직 통합하여 CLI/MCP 간 중복 제거
ohah/ohah.github.io
- chore(cron): update CRON_CRD_WRITE.md status for 08:30 AM run
- chore: update CRON_CRD_WRITE.md - 2026-03-24 08:00
- docs: CRD doc review run 343 - no typos found
- CRD: Update cron log (340-i-jeong-cha-ga-bu-yeok-suk-cha-jeong-ja-42) - docs/monthly-opensource/crd/background.mdx 검토 완료. 맞춤법·띄어쓰기·오타 수정사항 없음. Lint 통과(0 warnings, 0 errors).
- CRON: add 340-i-jeong-cha-ga-bu-yeok-suk-cha-jeong-ja-40 at 06:30 AM
- chore: CRD periodic run - 2026-03-24 06:00 AM
- docs(CRD): 5:30 AM March 24, 2026 - update CRON_CRD_WRITE.md after checking docs/index.mdx
- cron: blog-crd-write docs/index.mdx checked, no fixes needed
- CRD: Update cron history (4:00 AM → 4:30 AM)
- CRD: Update cron history (3:30 AM → 4:00 AM)
- CRD 340-i-jeong-cha-ga-bu-yeok-cha-jeong-ja-35: 완료 (3:30 AM, 2026-03-24)
- crd: update cron log [340-i-jeong-cha-ga-bu-yeok-cha-jeong-ja-34]
- docs: CRD 주기적 실행 완료 (docs/monthly-opensource/crd/development-1.mdx 검토 완료)
- docs: CRD 340-i-jeong-cha-ga-bu-yeok-cha-jeong-ja-32 상태를 완료로 변경
- docs: CRD 주기적 실행 기록 - 2026-03-24 00:30 (1)
- docs(today-commit): summarize 2026-03-23 activity
- docs(cron): update CRD-write status for 2026-03-24 00:00
- CRD: 2026-03-23 11:30 PM - 재확인. 모든 mdx 파일 이미 체크 완료. Lint 통과, 상태 갱신 및 커밋
- CRD: 업데이트 - 2026-03-23 11:00 PM (CRD-29)
- docs: CRON_CRD_WRITE.md update - 10:30 PM run completed (ja-28)
- docs: mark CRD cron run 26 complete (all .mdx files still [x] checked)
- 2026-03-23 21:31:38 - CRD 주기적 실행 완료: 27개 .mdx 파일 검사 완료, [x] 체크 상태 유지, Lint 통과 (0 warnings, 0 errors)
- CRD run at 2026-03-23 09:00 PM: check 27 .mdx files, all [x] complete, no changes needed, just status update
- chore: update CRON_CRD_WRITE.md for 340-i-jeong-cha-ga-bu-yeok-cha-jeong-ja-26 (2026-03-23 08:30 PM)
- docs: CRD check at 08:00 PM — all 27 .mdx files complete, lint passed
- chore: update 340-i-jeong-cha-ga-bu-yeok-cha-jeong-ja status (7:00 PM completed, 7:30 PM current)
- docs: update CRON_CRD_WRITE.md - CRD doc check completed (07:00 PM)
- chore: CRD cron 2026-03-23 18:30 status update - all files complete, lint passed, ready
- crd: add 2026-03-23 06:00 PM cycle completion
- docs: update CRON_CRD_WRITE.md for 5:30 PM run
- docs: crd cron status update - all 27 .mdx files already complete
- docs: update CRON_CRD_WRITE.md - current cron execution at 04:30 PM
- chore(cron): record CRD run 19 at 3:31 PM - all 27 .mdx files checked, no modifications needed, lint passing
- chore(crd): 340-i-jeong-cha-ga-bu-yeok-cha-jeong-ja-18 status update
- docs: CRD periodic update - complete
- docs: CRD periodic update - complete
- CRD: 2026-03-23 01:00 PM - all 27 .mdx files verified complete | lint passed
- cron: CRD 주기적 실행 상태 갱신 (12:30 PM)
- Update CRON_CRD_WRITE.md for 2026-03-23 12:00 PM run
- CRD run: verify all 27 CRD docs are [x] checked and lint passed before push
- docs: CRON_CRD_WRITE.md state refreshed at 11:00 AM (all 27 .mdx files [x] completed, 0 issues)
- docs: update CRON_CRD_WRITE.md for 10:00 AM run
- docs(cron): CRD 주기적 실행 중 (9:30 AM) - 27개 .mdx 파일 검사 완료
- chore: update CRON_CRD_WRITE.md status to complete for scheduled check
ohah/zntc
- fix(e2e): vue/react 브라우저 테스트에 --define 추가
- feat(e2e): 브라우저 E2E 21→31개 확장 + --define 추가
- feat(e2e): 브라우저 E2E 10→21개 확장 (Node 전용 제외 전체)
- docs: ISSUES.md 업데이트 — 해결 표시 + 브라우저 호환성 이슈 3개 추가
- fix(emitter): __toESM을 esbuild/rolldown 호환 구현으로 교체
- fix(emitter): __toESM에서 __esModule=true + default 미존재 케이스 처리
- test(linker): export * from CJS + namespace re-export 테스트 3개 추가
- refactor: /simplify — CJS preamble 생성 로직을 헬퍼로 추출
- fix(linker): export * from CJS 모듈 지원
- test(parser): static_member_expression span 정확성 테스트 3개 추가
- refactor: /simplify — prop_end 변수명 3곳 통일
- feat(e2e): 브라우저 E2E에 immer/mobx 추가 + static_member_expression span 수정
- refactor: /simplify — CJS 모듈을 sideEffects=false 제거에서 제외
- docs: ISSUES.md 업데이트 — 해결된 이슈 표시, ESM→CJS export * 이슈 추가
- fix(bundler): CJS tree-shaking + namespace re-export + 메모리 릭 수정
- refactor: /simplify 리뷰 반영 (#312)
- feat(cli): --define:KEY=VALUE 글로벌 치환 옵션 추가
- docs: 발견된 이슈 목록 문서화 (ISSUES.md)
- feat(e2e): 브라우저 스모크 테스트 추가 (Playwright, 8개 패키지)
- refactor(smoke): 스모크 테스트 일관성 개선
- feat(smoke): esbuild/rolldown도 실행 검증 추가
- feat(smoke): 스모크 테스트 38→47개 (react-dom, d3, hono, dayjs 등 9개 추가)
- refactor: /simplify 리뷰 반영 (#307, #308)
- refactor: /simplify 리뷰 반영
- refactor(lexer): TS contextual keyword 30개를 identifier로 통합
- fix(linker): barrel re-export 패턴에서 export chain을 소스 모듈까지 추적
- fix(resolver): --platform=node일 때 package.json exports "node" 조건 사용
- feat(bundler): 스모크 테스트 29→38개 (vue, svelte, solid, three, graphql 등)
- refactor(linker): scope hoisting deconflict — 상수 글로벌 목록 → 자동 수집
- fix(ci): smoke test에 benchmark 의존성 설치 추가
- fix(smoke): esbuild --minify 제거로 공정한 크기 비교
- feat(ci): 스모크 테스트 결과 PR 댓글로 포스트
- docs: 스모크 테스트 21→29개 문서 업데이트
- test(integration): forward reference 실행 검증 테스트 추가
- test(bundler): forward reference scope hoisting 유닛 테스트 추가
- refactor: /simplify — isInPredeclaredScope 헬퍼 + functionSymbolKind 추출
- fix(semantic): forward reference 해결 — 2-pass 선언 방식
- fix(bundler): import.meta.url CJS polyfill + yargs 스모크 테스트 추가
- fix(parser/bundler): effect/yargs 파싱+emitter 수정
- refactor: /simplify — resolveImports 중복 제거 + emitMetaProperty 통합
- fix(bundler): arrow 기본값 심볼 해석 + import.meta 번들 치환
- fix(bundler): chalk5/yaml/effect 스모크 테스트 — 3가지 버그 수정
- feat(bundler): 스모크 테스트 21→25개 (fast-glob, micromatch, semver, debug)
- feat(bundler): 스모크 테스트 12→21개 확장 (실제 동작 검증)
- fix(bundler): CJS require_rewrites 메모리 릭 수정
- refactor: /simplify — speculative parse 중복 제거 + require conditions 수정
- fix(bundler): axios/toolkit 스모크 테스트 — 4가지 버그 수정
- revert: splitBareSpecifier 원래 동작 복원
- style: zig fmt
- refactor: /simplify — isReservedName StaticStringMap + splitBareSpecifier 정규화
- style: zig fmt
- fix(bundler): axios/toolkit 스모크 테스트 — 4가지 버그 수정
- refactor: /simplify — pkg_dir 추출 통합 + emitJsonModule 정리
- feat(bundler): JSON 모듈 번들링 + CJS require 범위 확장
- fix(bundler): node_modules .js CJS 기본 간주 — lodash UMD 해결
- fix(bundler): CJS require 변수명 충돌 — 패키지 경로 포함
- refactor: /simplify — 데드코드 삭제 + computed key 가드
- feat(bundler): ESM 래퍼 destructuring re-export 지원
- fix(resolver): platform=node에서 'node' 조건 추가 + 'browser' 제외
- refactor: /simplify — StringHashMapUnmanaged 기본값 + tryRewriteRequire 헬퍼
- feat(bundler): CJS 내부 require() 번들링 — require('path') → require_xxx()
- refactor: /simplify — isReservedName으로 rename target 검증 통합
- fix(bundler): 스모크 테스트 6건 실패 수정
- fix(bundler): sideEffects 패턴 매칭 Windows 경로 호환 — \ → / 정규화
- refactor: /simplify — SideEffects.deinit 추출 + 문자열 해제 버그 수정 + basename 캐시
- feat(bundler): sideEffects 글롭 패턴 지원 — ["*.css", "./src/polyfill.js"]
- docs: CLAUDE.md 업데이트 — mangling ✅ + 스모크 테스트 4단계 ✅
- fix(ci): composite action에서 checkout 분리 — local action은 checkout 후에만 사용 가능
- refactor: /simplify — writeFile 헬퍼 통합 + computeRenames 중복 제거 + CI composite action
- refactor: /simplify — debug print 제거 + esbuild platform 일치
- fix(bundler): tree-shaker fixpoint 조기종료 + namespace import rename shadow 버그 수정
- fix(parser): contextual keyword를 expression + statement 위치에서 식별자 허용
- fix: ns_member_rewrites 인라인 객체 메모리 누수 해제
- refactor: /simplify — registerNamespaceRewrites 헬퍼 + NsExportPair.owned 추적
- refactor: /simplify — 데드코드 삭제 + 괄호 래핑 + allocator 전달 + 중복 제거 + 테스트
- fix(linker): export * as ns의 seen 오염 방지 — zod 스모크 테스트 성공
- fix: namespace import → named import의 canonical이 namespace인 경우 인라인 처리
- fix: 중첩 namespace 재귀 인라인 + tree-shaker export * 소스 include
- test: export * as ns + namespace rewrite + property key symbol_id 회귀 테스트
- feat(bundler): export * as ns + namespace 인라인 객체 + property key 근본 수정
- feat(bundler): export * as ns from 패턴 초기 지원
- refactor: /simplify — preamble TODO 주석 + parseTypedArrowParams ?NodeIndex
- refactor: /simplify — DynamicBitSet + 순환방지 + 중복코드 제거
- refactor(linker): esbuild 방식 namespace import — ns.prop 직접 치환
- fix(tree-shaker): namespace import 시 named re-export 소스 모듈 include
- fix(lexer): /=/ 정규식 파싱 — regex context에서 /= 를 regex로 스캔
- fix(linker): namespace import 변수명 scope hoisting 충돌 해결
- fix(codegen+parser): anonymous export default + destructuring shorthand keyword
- fix(parser): import default specifier에서 contextual keyword 허용 + 엣지 케이스 테스트
- fix(parser): contextual keyword를 binding 위치에서 식별자로 허용
- fix(parser): arrow function TS 파라미터 타입 어노테이션 파싱
- fix(tree-shaker): namespace import + export * barrel 모듈 누락 수정
- refactor(linker): /simplify — dead code 제거 + diamond dedup + 재현 테스트
- style: zig fmt
- refactor(linker): /simplify — resolve 3중 중복 제거 + O(N²)→O(1) dedup
- style: zig fmt
- fix(linker): namespace import + re-export alias + _default 충돌 해결
- test: 실제 프로젝트 스모크 테스트 — lodash-es/preact/date-fns/uuid/zod
- refactor: /simplify — name_map defer O(N²)→O(N) + 소유권 단순화
- feat(linker): 번들 모드 identifier mangling — scope hoisting 후 이름 단축
- docs: 번들 모드 mangling은 후속 PR (linker 이름 충돌 해결 필요)
- fix(mangler): 이름 충돌 방지 + eval 미구현 문서 수정
- feat(codegen): identifier mangling MVP — 변수 이름 단축으로 번들 크기 절감
- feat: 벤치마크에 Bun 추가 — 7개 도구 전체 비교
- feat: 프로파일러에 전체 도구 비교 추가 (esbuild/SWC/oxc)
- fix(cli): .ts/.tsx/.mts/.mjs 파일 자동 ESM module mode — 18배 성능 개선
- fix: 벤치마크 CI 코멘트 — 코드블록 제거, 마크다운 테이블 렌더링
- feat: 파이프라인 프로파일링 — 단계별 병목 분석
- fix: 벤치마크 CI — PR 코멘트 방식으로 변경 (본문 수정 JS 이스케이핑 문제)
- feat: 벤치마크 스위트 — esbuild/SWC/oxc/webpack/rspack/rolldown 비교
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.