2026-04-20
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 minify 최적화를 본격적으로 키웠습니다. 함수·블록 안에서 쓰이지 않는 선언을 지우는 dead store 제거(#1645)와 결과값이 쓰이지 않는 식을 줄이는 unused expression simplify를 oxc 방식으로 이식했고(#1649, #1662, #1663), 패스를 고정점까지 반복하는 루프(#1651), 템플릿 리터럴 부분 rewrite(#1664), scope hoisting된 최상위 const/let의 var 다운그레이드(#1667), 클래스별 #private 이름 축약(#1668)을 더했습니다. 그 과정에서 for 루프 바인딩을 지우던 회귀(#1647), "use client" 같은 directive가 쓰이지 않는 식으로 지워지던 회귀를 directive 노드 파싱으로 막은 수정(#1653), 버려진 선언 노드를 dead store 대상으로 훑던 문제(#1677)를 고쳤습니다.
시맨틱 분석은 참조 종류를 bitset 플래그로 바꾸고 복합 대입·증감을 읽기와 쓰기로 정확히 나눴으며(#1641~#1643), 스코프 단위 선언 참조와 문장 인덱스를 들였습니다(#1670, #1671). private 메서드·accessor의 읽기/쓰기 오진 제거(#1655), 객체 리터럴의 private 메서드 early error(#1657), async 화살표 함수 안 중첩 화살표 매개변수의 await 검사(#1659), 블록·switch·모듈의 var와 lexical 재선언 검출(#1661)로 스펙 준수도 보강했습니다. 블록 안 let/const/class와 화살표 함수 본문 안 var/function 호이스팅, Flow component 래퍼의 ref 해석도 고쳤습니다(#1679, #1680, #1681).
번들러는 transformer 재설계의 첫 단계로 emit 결과를 CompiledModule 값 타입으로 분리했고(#1673), 그 결과를 캐시하는 #1674와 HMR alias table 소유권 수정 #1682는 이날 PR이 열렸습니다. bungae 실측에서 나온 HMR changed_modules use-after-free(#1675)와 bundle+ES5에서 var _this를 깨뜨리던 고아 함수 선언(#1676)도 고쳤습니다.
ohah.github.io에는 4월 7일부터 20일까지의 오늘의 커밋 요약과 _meta.json 날짜 정렬 수정이 올라갔고, 나머지는 맞춤법 크론의 상태 갱신 커밋입니다.
공개 커밋 55개, 해당일 생성 또는 병합된 PR 30개를 정리했습니다. PR 생성 30개·병합 28개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- chore: 마지막 턴 완료 - 체크할 파일 없음으로 CRON_CRD_WRITE.md 업데이트
- cron: mark CRON_CRD_WRITE.md checklist complete and update next schedule
- cron: update completion timestamp to 2026-04-20 23:30 UTC
- docs: fix _meta.json date sorting (descending)
- docs: update 2026-04-20 summary with AI-written content
- chore: mark all mdx files as checked (CRON_CRD_WRITE.md)
- docs: mark CRON_CRD_WRITE.md complete (all .mdx files checked)
- cron: update CRON_CRD_WRITE.md final status (2026-04-20 10:30 UTC)
- docs: _meta.json에 2026-04-16 추가 및 날짜 정렬 개선
- docs: _meta.json에 2026-04-08~14 추가
- docs: 2026-04-17 ~ 2026-04-18 오늘의 커밋 요약 추가 및 _meta.json 갱신
- docs: 2026-04-15 오늘의 커밋 요약 및 _meta.json 갱신
- docs: 2026-04-15 ~ 2026-04-16 오늘의 커밋 요약 추가
- cron: mark all mdx files as checked (2026-04-20 09:00 UTC)
- docs: 2026-04-07 ~ 2026-04-14 커밋 요약 추가
- docs: update 2026-04-19 summary with AI-written content
- docs: Add 2026-04-19 summary to today's activity
- chore: mark all mdx files as checked in CRON_CRD_WRITE.md
- chore: mark CRD write cron complete (all mdx files checked)
- chore(crd): mark CRON_CRD_WRITE.md checklist complete
ohah/zntc
- fix(semantic): hoist var/function inside arrow function body
- fix(semantic): visit Flow component wrapper const_decl for React ref resolution
- style(tests): fix oxfmt format in es5-class-super-shared-node.test.ts
- fix(semantic): hoist let/const/class in block scope for static resolution
- refactor(minify): require scratch allocator as explicit parameter
- fix(minify): skip orphan var_decls in dead-store elimination
- fix(class): avoid orphan function_decl breaking var _this in bundle+es5
- fix(bundler): HMR changed_modules use-after-free (#번개 실측)
- style(bundler): fix emitter.zig trailing blank line (zig fmt)
- refactor(bundler): #1672 Phase B1 — CompiledModule 타입 도입
- refactor(semantic): #1669 follow-up — drop NodeIndex-based Symbol fields
- refactor(semantic): #1669 scope-wide declare ref + per-scope stmt index
- perf(minify): #1632 Phase 1 — private field name mangle
- perf(minify): #1630 top-level const/let → var 다운그레이드
- fix(minify): #1664 E2E 회귀 — statement-lead 모호성 재귀 판정으로 근본 수정
- feat(minify): #1650 TemplateLiteral 부분 rewrite (oxc 방식)
- feat(minify): #1650 unused simplify 확장 — Array / Call / New / Object
- fix(minify): #1662 회귀 — conditional rewrite 시 logical operand 에 paren 자동 삽입
- feat(minify): #1650 step 2 — unused expression simplify (c/d)
- refactor(parser): #1656 simplify — helper doc 압축
- fix(parser): #1656 object literal 의 private method/accessor 모두 early error
- refactor(parser): #1658 simplify — nested arrow 주석 압축
- fix(parser): #1658 async arrow 의 중첩 arrow 파라미터에서 'await' 누락 검사
- refactor(semantic): #1660 simplify — enum 직접 비교 + 주석 압축
- fix(semantic): #1660 block/switch/module 의 var↔lexical 재선언 조기검출 보강
- fix(semantic): #1654 private method/accessor read-write 오진 제거 (ZTS1102/1103/1104)
- fix(parser): #1652 directive prologue 를 .directive 노드로 파싱 — #1649 회귀 해결
- feat(minify): #1650 fixed-point loop 도입 (step 1 — wrapper)
- feat(minify): #1644 PR1.5 — unused expression simplify (a + b)
- refactor(ast): #1646 공통 child walker 추출 — 5곳 중복 순회 일소
- fix(minify): #1647 dead store 가 for-loop binding 을 제거하던 회귀
- feat(minify): #1644 PR1 — unused declaration 제거 (dead store elimination)
- refactor(semantic): #1640 compound assign / update 를 {read, write} 로 정확 분류 (PR C)
- refactor(semantic): #1640 stmt_declared 중간 캐시 제거 — references.declare flag 로 통합 (PR B)
- refactor(semantic): #1640 ReferenceKind enum 을 ReferenceFlags bitset 으로 교체 (PR A)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.