2026-04-18
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 클래스 다운레벨링의 남은 구멍을 메웠습니다. ES5 클래스의 계산된 getter/setter 키 평가와 private getter/setter lowering(#1525, #1526), private·계산된 키 accessor의 ES5 구현과 static private accessor·복합 대입(#1527, #1528), Stage 3 데코레이터와 accessor의 ES5 처리(#1539, #1540), @decorator export default class 보존(#1541)이 병합됐습니다. 번들러는 axios 스모크 실패를 계기로 package.json browser 필드의 문자열 remap, bare module 키와 순환 감지를 지원하고(#1529, #1531), ESM 래퍼 함수 호이스팅의 중복 var 선언을 없앴습니다(#1532).
tsconfig 지원을 크게 넓혔습니다. verbatimModuleSyntax(#1544), NAPI/WASM의 tsconfigPath(#1545), CLI --tsconfig-path(#1547), paths/baseUrl과 --alias 병합(#1548)을 넣은 뒤 paths를 TS 공식 스펙대로 어디에나 오는 wildcard와 다중 후보로 다시 설계했고(#1549), 상위 디렉터리 자동 발견을 붙였습니다(#1550).
번들 크기 쪽에서는 tree shaker가 가짜 used_exports로 코드를 남기던 누수를 고치고(#1555), reference_count 신호를 없애고 BFS를 fixpoint 안으로 합치는 재설계를 마쳤으며(#1559~#1563), globalThis.process?.env 같은 방어적 접근도 define에 매칭되게 했습니다(#1556). 상수 폴딩과 dead branch 제거는 --minify 없이도 돌게 했고(#1565), !0/!1, void 0 같은 peephole 축약(#1557, #1566), ES2015 이상에서 화살표 IIFE 래퍼(#1583), mangling 제외 범위를 공개 API 경계로 줄이기(#1584), 합성 _default의 mangling(#1590), 참조되지 않는 클래스 식 이름 익명화(#1594)가 이어졌습니다. 이 과정에서 드러난 !!x 축약의 타입 가드 누락(#1578), for 초기화절 중복 세미콜론(#1568), 단일 모듈 번들에 _default$1이 붙던 문제(#1599)도 고쳤고, AST의 매직 오프셋과 플래그 비트를 상수와 구조체로 바꾸는 정리가 여러 PR로 들어갔습니다(#1534, #1570, #1573 등).
bungae는 예제 앱을 RN 0.85.1로 올리고 표시 이름을 Bungae로 바꿨으며, Expo SDK 55 Router 예제 BungaeExpo를 추가했습니다. @react-native/babel-plugin-codegen으로 네이티브 view config를 인라인하고, RN 0.85 업그레이드 뒤 드러난 Rozenite monkey-patch 누락과 .ts codegen 파서 불일치를 고쳤으며, 예제 앱을 iPhone·iPad 유니버설로 만들어 iPadOS 26 창 모드 실행 문제를 해결했습니다. ohah.github.io에는 맞춤법 크론의 상태 갱신 커밋이 이어졌습니다.
공개 커밋 76개, 해당일 생성 또는 병합된 PR 52개를 정리했습니다. PR 생성 52개·병합 52개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- chore(example): align ExampleApp iOS setup with BungaeExpo
- fix(bungae): Rozenite monkey-patch miss + .ts codegen parser mismatch
- fix(ios): make ExampleApp universal (iPhone+iPad) — fixes iPadOS 26 windowed launch
- chore(example): bump ExpoApp worklets 0.7.2 → 0.8.1 + reanimated 4.2.1 → 4.3.0
- feat(example): add BungaeExpo — Expo SDK 55 Router example app
- chore(example): upgrade ExampleApp to RN 0.85.1, rename display to Bungae
- feat(zts-bundler): inline native view config via @react-native/babel-plugin-codegen
ohah/ohah.github.io
- docs: mark all mdx files checked (CRD step complete)
- docs: mark all mdx files checked for spelling
- docs: mark docs/today-commit/_meta.json as checked in CRON_CRD_WRITE.md
- CRON: mark docs/today-commit/_meta.json as checked
- cron: mark all mdx files checked in CRON_CRD_WRITE.md
- cron: mark non-existent mdx file as completed
- crd-write: check next mdx (docs/posts/2024/09/kdt-frontend-internship-2024-intro/index.mdx)
- crd-write: update heartbeat for 2026-04-18 20:00 UTC
- chore(cron): mark all mdx files as completed
ohah/zntc
- fix(bundler): `_default` 합성 심볼 중복 등록 제거 (#1598)
- test(integration): TLA IIFE 기대값을 arrow 래퍼로 갱신 (#1580 후속)
- perf(transformer): 미참조 class expression name 익명화 (#1587)
- fix(semantic): ClassExpression name을 class body scope에 lexical binding 등록 (#1592)
- perf(codegen): minify_syntax 시
new (expr)()의 잉여 parens 제거 (#1586) - perf(bundler): 합성
_default심볼을 mangler 후보에 포함 (#1585) - perf(bundler): mangling 제외 범위를 public API 경계로 축소 (#1581)
- perf(bundler): arrow IIFE 래퍼로 전환 (ES2015+, #1580)
- fix(minify): !!x 축약에 boolean 타입 가드 추가 (#1577)
- refactor(bundler): ModuleIndex.toU32() 헬퍼로 @intFromEnum 패턴 제거 (#1553)
- refactor(tree_shaker): "*" sentinel → ALL_EXPORTS_SENTINEL 상수화 (#1553)
- refactor(ast): MethodFlags 잔여 매직넘버 일소 (parser/semantic/transformer/codegen)
- refactor(ast): PropertyFlags struct 신설 + property_definition 매직넘버 치환
- refactor(codegen): FunctionFlags/ArrowFlags 매직넘버 제거
- refactor(ast): UnaryFlags.postfix 매직넘버 0x100 제거
- refactor(ast): MethodFlags 매직넘버 일소
- refactor(ast): method→function flags 매핑을 ast.methodFlagsToFunctionFlags 헬퍼로 통일
- test(codegen): #1564 엣지케이스 회귀 가드 확장
- fix(codegen): #1564 for-init 중복 세미콜론 + generator private method 다운레벨
- feat(codegen): minify_syntax 시 undefined → (void 0) peephole (#1552)
- fix(minify): foldStringConcat 양쪽 quote 일치 조건 추가 + 회귀 가드 (#1565)
- feat(bundler): constant folding + dead branch DCE를 --minify 없이도 상시 실행 (#1552)
- test(tree_shake): 번들 내용 정밀도 회귀 가드 추가 (negative assertion)
- test(tree_shaker): #1558 Phase 5 불변식 회귀 가드 7건 추가
- refactor(tree_shaker): reference_count 신호 완전 제거 (#1558 Phase 5)
- refactor(tree_shaker): BFS를 fixpoint 내부로 통합 + pruneUnreachable 삭제 (#1558 Step 3+4)
- refactor(tree_shaker): StmtInfo 구축을 fixpoint 전으로 이동 (#1558 Step 2)
- fix(tree_shaker): namespace import target에 "*" sentinel 마킹으로 E2E dangling 복구 (#1558)
- feat(codegen): minify_syntax로 boolean 리터럴 !0/!1 축약 (#1552)
- feat(define): optional chaining + globalThis root 자동 매칭 + auto-define 확장 (#1552)
- fix(tree_shaker): 가짜 used_exports 정정으로 tree-shake 누수 해결 (#1551)
- docs(roadmap): tsconfig paths 선형 스캔 벤치 결과 기록
- feat(tsconfig): 자동 발견 + paths wildcard 경고
- feat(tsconfig): paths를 TS 공식 스펙에 맞게 재설계 — wildcard anywhere + 다중 후보
- refactor(tsconfig): /simplify 반영 — 상수 추출, 경로 정규화, helper 재사용
- test(cli): tsconfig paths 엣지케이스 7건 추가 커버
- feat(tsconfig): paths/baseUrl + CLI --alias 병합 지원
- feat(cli): --tsconfig-path 플래그 + -p 에 파일 경로 지원
- refactor(tsconfig): 머지 규칙 공용 helper (src/tsconfig_merge.zig) 추출
- fix(wasm): tsconfig 로드 경로를 freestanding/wasi 빌드에서 배제
- style: oxfmt
- feat(napi/wasm): tsconfigPath 옵션으로 tsconfig.json 자동 로드
- feat(tsconfig): verbatimModuleSyntax 지원 (TS 5.0+)
- fix(wasm): 빈 출력에서 RangeError (
Start offset -1) 방지 - fix(bundler): TLA non-ESM 경고 중복 emit 제거 + ZTS0002 코드 부여
- fix(parser, transformer): @decorator export [default] class 보존 (#1538)
- fix(transformer): Stage 3 accessor+decorator × ES5 private backing WeakMap lowering (#1537)
- fix(transformer): Stage 3 decorator + --target=es5 재방문 활성화
- refactor(ast): formal_parameter + class_declaration extras 상수화 3/N (#1513)
- refactor(codegen, semantic): method/property extras 매직 offset 상수화 2/N (#1513)
- refactor(ast): method_definition / property_definition extras 매직 offset 상수화 (#1513)
- refactor(bundler): /simplify 후속 — 중복 제거 + 타입 통합 (#1529/#1531/#1532)
- fix(bundler): ESM wrapper 함수 호이스팅 중복 var 선언 제거 (axios@node smoke FAIL 회복)
- feat(bundler): package.json browser 필드 bare module 키 + cycle 감지 (#1530)
- fix(bundler): package.json browser 필드 string remap 지원 — axios runtime 정상화
- fix(transformer): #1511 static private accessor + compound assign + Babel parity 테스트
- feat(transformer): private/computed accessor ES5 완전 구현 (#1511)
- fix(transformer): ES5 target 의 private getter/setter lowering (#1523)
- fix(transformer): ES5 class computed getter/setter key expression 평가 (#1524)
- refactor(transformer): Object.defineProperty descriptor 공용 helper 추출 (#1510 item4)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.