2026-04-24
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 require.context 마무리부터 했습니다. 매칭 결과를 그래프 의존성이자 tree shaking 루트로 등록하고(#1786), ExpoApp 실행에서 드러난 IIFE 안 raw require와 ctx(req)가 모듈 exports를 돌려주지 않던 문제를 고쳤습니다(#1788, #1840). 전날 SegmentedList로 바꾼 모듈 저장소에서 worker 읽기와 main 추가가 겹치는 경합이 CI에서 드러나 StableSegmentedList로 근본 해결했습니다(#1789, #1790). type-only import 제거는 참조 횟수 기반 첫 구현이 회귀를 내 되돌림 PR까지 열었다가, 참조별 type-context 플래그를 기록하는 방식으로 다시 구현했습니다(#1793, #1796). IIFE 포맷의 해석되지 않은 import는 빌드 에러로 보고합니다(#1792).
ES5 for-of에서 let을 클로저로 잡을 때 본문을 _loop 함수로 빼는 수정과 그 후속(#1798, #1799, #1809, #1813)을 거치며, AST 노드의 태그와 데이터 variant가 어긋나는 문제를 근본적으로 막기로 했습니다. variant 타입 addNode 헬퍼와 debug assertion(#1801), 정적 감사 스크립트와 CI 통합(#1803)을 넣고, 감사에서 나온 불일치를 범주별로 정리해 0으로 만든 뒤 --strict-cosmetic 게이트를 걸었습니다(#1810~#1820). 문서 사이트는 Tauri 톤과 Biome식 정보 구조로 리뉴얼하고(#1800) 랜딩 레이아웃과 Starlight·Tailwind 레이어 충돌을 여러 번 손봤습니다.
후반에는 Rollup 호환 manualChunks를 구현했습니다. 문자열 매칭(#1844), 함수 resolver와 NAPI 브리지(#1845, #1846), dynamic entry 제외 정책(#1851), rolldown과 같은 OutputFile.imports 메타(#1852), meta.getModuleInfo와 동적 import 정보(#1853, #1857, #1858), inlineDynamicImports의 청크 구조 일부(#1859)까지 병합하고 React·RxJS·date-fns 등 실제 라이브러리 스모크를 붙였습니다. 이 밖에 IIFE의 external과 globals 매핑(#1828), import attributes 라운드트립(#1836, #1838), 래핑 모듈 간 init/exports 변수 이름 중복 제거(#1835), JSX에서 spread 뒤 key가 올 때의 react import 주입(#1841), 소문자 JSX 멤버 태그 <ns.Comp/> 해석(#1831)이 들어갔습니다.
bungae는 HMR 때 Metro 스타일 "Refreshing..." 배너와 CLI 출력을 도입하고, 초기 HMR 업데이트 시퀀스를 보내 "Downloading..." 바가 남던 문제를 고쳤으며, EXPO_ROUTER_APP_ROOT를 절대 경로로 넘겼습니다. Expo 폴리필 경고 패치는 넣었다 되돌리기를 반복한 끝에 ZTS 쪽 수정으로 대체해 지웠습니다. cheolsu-proxy는 데스크톱 앱의 프론트엔드 의존성을 최신으로 올리고 Monaco 에디터 테마를 공통화했으며(#334), Tauri mock, CI bun 버전, zustand persist rehydrate 경합 등으로 깨진 테스트를 복구했습니다(#335~#338). ohah.github.io에는 ZTS 개발기 11편부터 14편까지와 4월 1일부터 7일 등의 오늘의 커밋 재작성이 올라왔습니다.
공개 커밋 110개, 해당일 생성 또는 병합된 PR 68개를 정리했습니다. PR 생성 68개·병합 64개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- chore: remove polyfill patches in favor of zts-side error guard fix
- diag(expo-metro-runtime): wrap Location.install with try/catch + descriptor logging
- Reapply "fix(expo): silent-skip polyfill warning for native placeholder descriptors"
- Revert "fix(expo): silent-skip polyfill warning for native placeholder descriptors"
- fix(expo): silent-skip polyfill warning for native placeholder descriptors
- chore: bump zts submodule to inject react import for JSX key-after-spread
- fix(zts-bundler): pass absolute path for EXPO_ROUTER_APP_ROOT
- fix(zts-bundler): send initial HMR update sequence to dismiss "Downloading..." bar
- Revert "fix(zts-bundler): retry DevLoadingView.hide() to clear stuck "Downloading 100%" bar"
- fix(zts-bundler): retry DevLoadingView.hide() to clear stuck "Downloading 100%" bar
- feat(zts-bundler): adopt Metro-style CLI output
- feat(zts-bundler): surface Metro-style "Refreshing..." banner on HMR
- refactor(zts-bundler): extract require-context and metro-resolve-request plugins
ohah/cheolsu-proxy
- fix(desktop): rule 스토어 테스트에서 ruleGetters를 명시적으로 격리
- fix(desktop): rule 스토어 테스트에서 zustand persist rehydrate race condition 수정
- fix(config): CI bun 버전을 1.3.11로 업데이트
- fix(desktop): Tauri core mock에 Resource/Channel 추가
- chore(desktop): 프론트엔드 의존성 최신 버전 업데이트 및 마이그레이션
- feat(desktop): Monaco 에디터 커스텀 테마 공통화 및 전체 적용
ohah/ohah.github.io
- Mark docs/monthly-opensource/development.mdx as processed
- docs(zts): add development-11~14 and update background with 4/8~4/23 timeline
- docs(today-commit): rebuild April 1-7, 21, 23 from GitHub (KST-accurate)
ohah/zntc
- chore(types): manualChunks stale 주석 정리 (/simplify 후속)
- feat(bundler): inlineDynamicImports — chunk 구조 부분 구현 (A 범위)
- feat(bundler): manualChunks meta 에 dynamicImporters / dynamicallyImportedIds 추가
- test(manualChunks): meta API 경계값 / 토폴로지 / 패턴 테스트 7개 추가
- chore(napi): /simplify 후속 — ManualChunksMeta 타입 노출 + 테스트 정리
- feat(napi): manualChunks meta.getModuleInfo JS 브리지
- feat(bundler): manualChunks(id, meta) Zig 인프라
- test(manualChunks): OutputFile.imports 전용 스모크 4개 추가
- feat(napi): OutputFile.imports 메타 완성 — rolldown chunk.imports 완전 호환
- feat(napi): OutputFile 에 moduleIds/exports 메타 노출 (rolldown 호환)
- test(manualChunks): 인기 실 라이브러리 스모크 6개 — React, Preact, Immer, date-fns, RxJS
- test(manualChunks): 실 라이브러리 스모크 5개 추가
- feat+test(manualChunks): NAPI exception 처리 + 실 라이브러리 스모크
- feat+test(manualChunks): multi-group BFS 버그 수정 + 스모크 3개 추가
- test(manualChunks): 엣지 케이스 검증 강화
- feat(bundler): manualChunks dynamic entry 제외 정책 — Rollup/rolldown 일치 (#1848 #1849 회피)
- test(napi): manualChunks 스모크 테스트 — 실제 번들 + 청크 구조 검증
- feat(napi): manualChunks JS function bridge (#1027 Phase 2 NAPI)
- feat(bundler): manualChunks Phase 2 — function resolver 콜백 (#1027)
- feat(bundler): manualChunks Phase 1 — substring 매칭 기반 사용자 정의 청크 분할 (#1027)
- docs: import attributes loader override 미지원 정책 기록 (D102)
- test(bundler): add .js source regression for _createElement injection
- fix(bundler): inject react synthetic import for JSX key-after-spread
- fix(ci): zig fmt — lowering_rename_leak.zig slice expression 공백
- refactor(transformer): simplify review 반영 (#1596)
- test(codegen): class expression anonymize 유닛 테스트 추가 (#1587, #1596)
- perf(transformer): non-fast-path 에서도 class expression name 익명화 (#1596)
- fix(codegen): require.context ctx(req) returns module exports
- docs: import attributes 라운드트립 + class expression anonymize 반영
- refactor: simplify tryRenameIdentifierLike helper + tighten test fixtures
- fix(transformer): apply block-scoping rename to assignment_target_identifier
- feat(parser): export * from 'x' with {...} 라운드트립 — layout 전환
- feat(parser): import attributes 라운드트립 — dynamic import + export named
- fix(graph): deduplicate init/exports var names across wrapped modules
- fix(linker): skip ns_member_rewrites when importer scope shadows export
- docs(migration): 표 너비/내용 채우기 + 실구현 동기화
- fix(semantic): resolve lowercase root of JSX member tag (
<ns.Comp/>) - test(downlevel): #1829 회귀 가드 — const/try-finally/color@4.2.3 패턴
- feat(bundler): IIFE + external + globals 매핑 지원 (#1824)
- chore(audit): reader 위치 추적 + 문자열 strip 버그 fix + AST layout snapshot 테스트
- chore(audit): 구조적 dispatcher 자동 검출 — reads over-attribution 대폭 축소 (#1823)
- refactor(ast): flow_match_expression arm 을 flow_match_arm tag 로 분리 (#1822)
- chore(audit): reader 위치 추적 + 문자열 strip 버그 fix + AST layout snapshot 테스트
- chore(ci): #1802 최종 close — --strict-cosmetic CI fail-gate
- refactor(ast): cosmetic 카테고리 special — layout/parser 세부 정리 (6/1) (#1802)
- refactor(ast): cosmetic 카테고리 C — list 정규화 (11/17)
- chore(audit): data reader scan — codegen 외 transformer/semantic 까지 확장
- refactor(ast): cosmetic 카테고리 B2 — TS/Flow strip-target empty extras (#1802)
- fix(docs): PR #1812 layer 예약선언 revert + 랜딩 섹션 margin utility
- fix(docs): layer 선언을 nested 패턴으로 수정 — header/tab 복원 + mx-auto 유지
- fix(test): CSS library smoke 3건 — --format=esm 명시로 IIFE auto-promote 회피
- fix(transformer): for-of + let closure + unlabeled continue → SyntaxError (#1807 후속)
- fix(docs): Starlight 레이어 선언을 tailwind.css 맨 위로 옮겨 utilities 승리
- refactor(ast): cosmetic 카테고리 B — codegen-read aligned layout (#1802)
- refactor(ast): cosmetic 카테고리 A — leaf 통일 (27/74) (#1802)
- fix(transformer): for-of + let closure body 가 단일 statement 일 때 block wrapping (#1807)
- fix(docs): 랜딩 전폭 레이아웃 — head 주입 + PageTitle override 로 교체
- fix(docs): splash 랜딩 레이아웃 제약 해제 + 기본 PageTitle 숨김
- fix(docs): 라이트 테마 dark-bg 누수 + 히어로 모바일 센터 정렬
- chore(ci): AST Tag↔variant static audit script + CI 통합 (#1797)
- fix(docs): /simplify 후속 — tailwind.css 미import 수정 · 팔레트 중복 제거 · 컴포넌트 추출
- feat(docs): Inter + JetBrains Mono 폰트 + 타이포 polish
- refactor(docs): Playground 인라인 스타일 전부 Tailwind 로 이전 + Tauri 톤 다크 배경
- chore(docs): vite 7 직접 pin (Astro 6 요구사항)
- feat(docs): 랜딩 페이지 splash 레이아웃으로 전면 리뉴얼
- feat(docs): 사이드바를 도메인별 8 그룹으로 재편
- feat(docs): Zig 오렌지 accent 팔레트로 전환
- chore(docs): documents 의존성 최신으로 업데이트
- refactor(ast): variant-typed addNode helper + debug assertion (#1797 근본 보강)
- fix(transformer): #1797 follow-up — return/typeof sentinel 의 AST layout 수정
- fix(transformer): #1797 for-of + let closure capture — body 를 _loop 함수로 추출
- docs: 코드 주석에서 외부 번들러 참조 표기 제거
- refactor(semantic): Reference.isValueUse() helper 추출 — Phase D 판정 공통화
- test(#1791): Phase D 회귀 방지 테스트 강화 — positive + negative + verbatim + 경계
- fix(transformer,linker): #1791 Phase D — named specifier 한정 type-only elision
- feat(semantic): ts_type_reference 직접 resolve + export specifier value-ref 등록
- feat(semantic): TS type node 진입 시 type_context flag 기록
- refactor(semantic): ReferenceFlags 에 type_context / value_as_type bit 추가
- test(#1791): type-only import elision 회귀 방지 테스트 추가
- fix(transformer): #1791 type-only import binding elision
- fix(bundler): #1791 IIFE 포맷 unresolved import build-time 에러 보고
- refactor(bundler): StableSegmentedList race-safety 테스트 /simplify 반영
- test(bundler): StableSegmentedList 의 concurrent reader race-safety 테스트 추가
- fix(bundler): #1779 SegmentedList dynamic_segments race 근본 해결
- fix(bundler): #1579 Phase 4 follow-up — require.context IIFE 의 raw require 제거
- refactor(bundler): #1579 Phase 4 post-merge /simplify cleanup
- refactor(bundler): #1579 Phase 4 /simplify 반영
- feat(bundler): #1579 Phase 4 — require.context matches 를 graph dep + tree-shake root 로 등록
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.