2026-04-21
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 bungae 실측에서 드러난 HMR 재빌드 문제를 먼저 고쳤습니다. 캐시된 모듈의 alias table 소유권을 넘기며 double-free와 use-after-free를 막고(#1682), 재파싱되지 않은 React 내부 모듈이 HMR 업데이트에 끼던 문제, 재빌드 때 캐시된 참조 횟수와 canonical 이름이 오염되던 문제, 가상 모듈 경로의 mtime 조회를 바로잡은 뒤 회귀 테스트를 붙였습니다(#1683). 디버그·안전 빌드용 -Dnapi-optimize와 카테고리별로 켜는 디버그 로그(#1685)도 추가했습니다.
transformer 재설계 epic은 바뀌지 않은 모듈의 emit 결과를 재사용하는 compiled output cache(#1674)를 NAPI watch와 첫 빌드에도 연결했고(#1686, #1687), 바뀌지 않은 노드는 복제하지 않고 그대로 돌려주게 했습니다(#1689). AST 수명 디버그 인프라를 깔고 transformer가 파서 AST를 제자리에서 바꾸는 단계(#1690~#1695)를 병합했지만, 같은 AST로 두 번째 HMR 재빌드를 할 때 범위를 벗어나는 문제가 생겨 in-place 변경 부분은 되돌렸습니다(#1700). HMR은 dev 모드에서 minify 패스를 건너뛰고 감지 debounce를 25ms로 줄였습니다(#1698, #1701).
후반에는 profile·benchmark 인프라를 설계 문서(#1702)대로 하루 만에 올렸습니다. 기반 모듈과 CLI·NAPI·환경 변수 진입점 통합(기존 --timing 제거), parse·semantic·graph·transform·codegen·metadata 단계 타이머, --stop-after=<phase> 조기 종료, 통계를 내는 zts bench 서브커맨드와 NAPI benchmark(), HMR 세부 단계 시간, 문서와 CLI·NAPI parity 테스트까지 이어졌습니다(#1703, #1704, #1706~#1713). 이 밖에 한 번만 읽히는 상수 인라인(#1696), oxc식 엄격한 순수 빌트인 생성자 목록(#1697), ESM 래핑 모듈이 CJS에서 가져온 named import를 이름 충돌 대상에서 빼는 수정(#1699)이 들어갔습니다.
ohah.github.io에는 맞춤법 크론이 월간 오픈소스 문서 여러 편(craby, react-native-mcp, react-wasm-table 등)의 오탈자를 고치고 검사 완료를 표시한 커밋, 4월 20일 오늘의 커밋 요약이 올라왔습니다.
공개 커밋 89개, 해당일 생성 또는 병합된 PR 32개를 정리했습니다. PR 생성 30개·병합 30개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- chore(cron): mark docs/monthly-opensource/cheolsu-proxy/development-2.mdx as checked
- crd: check cheolsu-proxy/development-1.mdx - no spelling errors found
- docs: mark development.mdx as checked (no spelling errors)
- docs: cron-crd-write - check cheolsu-proxy/background.mdx
- cron: mark react-wasm-table/tech-stack.mdx as checked
- chore(crd): mark react-wasm-table/development.mdx as checked
- chore: fix typos in react-wasm-table/background.mdx
- fix: 맞춤법 수정 — react-native-mcp/tech-stack.mdx (Babel, 지수 백오프, 기타 도구)
- crd-write: fix spelling in hwpjs/tech-stack.mdx
- chore: mark docs/monthly-opensource/react-native-mcp/development-3.mdx as checked
- chore: mark docs/monthly-opensource/hwpjs/development-5.mdx as checked
- chore: mark docs/monthly-opensource/hwpjs/development-1.mdx as checked
- chore: mark docs/monthly-opensource/electron-mcp-server/development-3.mdx as checked
- chore: mark docs/monthly-opensource/electron-mcp-server/development-2.mdx as checked
- chore: mark docs/monthly-opensource/electron-mcp-server/development-1.mdx as checked
- docs: cron-crd-write — checked docs/monthly-opensource/electron-mcp-server/development.mdx (no issues)
- cron: mark electron-mcp-server/background.mdx as checked
- crd: mark all crd files complete (dev-6 through tech-stack)
- cron: mark development-5.mdx spelling check complete
- docs: add 2026-04-20 summary with AI-written content
- docs: mark development-4.mdx as checked in CRON_CRD_WRITE.md
- cron: mark docs/monthly-opensource/crd/development-2.mdx as checked
- cron: mark docs/monthly-opensource/crd/development-1.mdx as checked
- docs(crd): fix typos in development.mdx
- docs(monthly-opensource/crd): correct background.mdx spelling
- chore(cron): mark chromium/setup.mdx as checked
- docs/cron: mark chromium/merge.mdx as checked
- docs/cron: mark chromium/first-contribution.mdx as checked
- docs/cron: mark chromium/code-review.mdx as checked
- chore(cron): check docs/monthly-opensource/craby/development-3.mdx
- cron-crd-write: mark docs/monthly-opensource/crd/development-3.mdx as complete
- cron: mark docs/monthly-opensource/craby/development-2.mdx checked
- crd-write: check docs/monthly-opensource/craby/development-1.mdx
- docs: correct spelling in docs/monthly-opensource/craby/development.mdx
- docs(monthly-opensource/craby/background): correct typos in Korean
- chore: mark docs/monthly-opensource/index.mdx as checked
- chore: mark docs/monthly-opensource/index.mdx as checked in CRON_CRD_WRITE.md
- cron: mark docs/index.mdx as checked
- fix: update CRON_CRD_WRITE.md with full mdx list (58 files)
- cron-crd-write: mark all .mdx files complete and finalize checklist
- crond: mark docs/index.mdx as checked
- chore(cron): update CRON_CRD_WRITE.md - all mdx files checked
- docs: complete all mdx spelling check (2026-04-21)
- cron: crd-write - 모든 mdx 파일 맞춤법 검사 완료 (2026-04-21)
- crd: mark all mdx files checked (all [x])
ohah/zntc
- docs(profile): 문서 + CLI↔NAPI parity 테스트 — profile epic 마무리 (#1672 D2 PR 10+11)
- feat(profile): HMR phaseDurations 에 sub-phase 확장 + rebuild 간 counters reset (#1672 D2 PR 9)
- feat(profile): Linker metadata timer 삽입 (#1672 D2 PR 8)
- feat(profile): Transformer/Codegen timer 삽입 (#1672 D2 PR 7)
- feat(profile): Semantic/Graph/Bundler timer 삽입 (#1672 D2 PR 6)
- feat(profile): zts bench 서브커맨드 + NAPI benchmark() API (#1672 D2 PR 5)
- feat(profile): --stop-after=<phase> 파이프라인 조기 종료 (#1672 D2 PR 4)
- feat(profile): Parser
.parsephase timer 삽입 (#1672 D2 PR 3) - feat(profile): CLI/NAPI/env 진입점 통합 + --timing 제거 (#1672 D2 PR 2)
- feat(profile): profile/benchmark 인프라 모듈 (#1672 D2 기반)
- docs(design): profile & benchmark infrastructure design
- perf(hmr): detect debounce 25ms + emit dev-mode skip
- test(transformer): HMR rebuild 2회차 regression guard (#1672 D2 선행)
- revert(transformer): #1672 D1b-2/D1c + initInPlace tests — HMR OOB regression
- fix(linker): exclude CJS-in-ESM named imports from name-collision owners
- perf(bundler): dev_mode 에서 minify pass skip — HMR rebuild -14%
- perf(bundler): #1567 refine — oxc-style strict whitelist + Error Symbol safety
- perf(minifier): #1666 Phase 2+3 — single-use constant inline
- test(transformer): initInPlace 4종 유닛 테스트 추가 (RFC #1672 D1b-2/D1c 검증)
- refactor(bundler): #1672 Phase D1c — splitting 경로도 in-place + AstHandling enum 정리
- feat(transformer): #1672 Phase D1b-2 — single-bundle in-place mutation
- refactor(transformer): #1672 Phase D1b-1 — Transformer.ast 를 *Ast 포인터로 전환
- feat(transformer): #1672 Phase D1a — boundary/root fields 활성화 (clone 경로)
- feat(debug): AST lifetime 디버그 인프라 — D1 재개 준비
- perf(transformer): #1672 Phase C2c — visitListNode + visitExtraList identity
- perf(transformer): #1672 Phase C2b — visitUnary/Binary 자식-unchanged identity
- perf(transformer): #1672 Phase C2a — copyNodeDirect identity 반환
- style(napi): drop task reference from inline comment
- refactor(bundler): stable compiled_cache key via resolved module path
- perf(bundler): #1672 Phase B3 — first-build compiled_cache reuse
- refactor(bundler): factor CompiledOutputCache stats log into method
- perf(napi): wire compiled_cache into NAPI watch worker
- feat(log): category-toggleable debug log infrastructure
- debug(b2): compiled_cache hit/miss counter for 번개 실측 (WILL REVERT)
- perf(bundler): #1672 Phase B2 — compiled output cache
- test(bundler): expand HMR regression coverage (canonical_name strict + reparsed_paths + NAPI phantom)
- test(bundler): regression coverage for HMR fixes
- fix(linker): bounds-guard populateSymbolRefCounts alias branch
- fix(hmr): filter phantom updates to only reparsed modules
- fix(minify): avoid mutating cached Symbol.reference_count on rebuild
- fix(bundler): clear stale Symbol.canonical_name on cache hit
- build(napi): add -Dnapi-optimize option for debug/safety builds
- fix(graph): guard getMtime against null-byte / overlong paths
- fix(bundler): HMR alias_table ownership transfer (double-free + UAF)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.