2026-04-29
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 이날 Vite식 앱 빌더와 styled-components 변환이라는 두 기능을 새로 들였습니다. 앱 빌더(#2200)는 HTML 진입점을 다루며 dev 모드 PostCSS CSS HMR(#2208, #2214), 남은 Vite parity 범위(#2218), CSS Modules와 Sass 파이프라인(#2225, #2226), HTTPS SPA fallback 미리보기 테스트(#2230)를 갖췄고, Playwright E2E와 증분 dev 파이프라인 정리가 함께 들어갔습니다. 웹 예제 앱과 compiler 설정 네임스페이스를 추가한 뒤(#2227) styled-components 변환을 1st-party로 구현해 displayName 주입, withConfig 표준 출력, SSR용 componentId 해시를 넣고, .attrs 체인·객체 프로퍼티·대입·조건식·논리식과 TS/Flow cast 안의 styled 호출까지 인식하며 사용자가 직접 쓴 .withConfig는 보존합니다(#2228~#2237). 클래스 필드 패턴을 다루는 #2238은 이날 PR이 열렸습니다.
번들러 옵션으로는 output.exports의 auto/named/default/none과 충돌 진단(#2177), lifecycle hook(#2179), 내장 로더 검증과 onLoad의 로더 override 전달, Uint8Array·Buffer 내용 지원(#2180, #2181), --inline-dynamic-imports 플래그와 zts.config.json의 manualChunks 매핑(#2185, #2186)이 들어왔고, 옵션 DTO 이름을 ConfigOptionsDto로 바꾸며 공용 필드 적용을 헬퍼로 묶었습니다(#2182~#2184). 문서에는 NAPI/JS API 레퍼런스와 @zts/core 아키텍처 다이어그램이 추가됐습니다(#2191).
버그 수정으로는 mime-types에서 드러난 CJS 동적 exports 접근 시 prune 비활성화(#2178), string enum의 reverse mapping 제거(#2199), 이름 있는 클래스 식의 내부 이름 보존과 JSX factory 식별자의 symbol_id 전파(#2201, #2204), 블록 스코프 let의 TDZ 보존(#2205), 순환 모듈의 const/let/class live binding(#2206), 단일 파일 출력의 dynamic import lazy 래핑(#2212, #2215, #2216), 소스맵 footer와 specifier·enum 매핑(#2219, #2220, #2221), 파생 클래스 parameter property의 super() 뒤 출력(#2222)이 있었습니다. 광역 fuzz 라운드에서 나온 fixture는 회귀 테스트로 남겼습니다(#2223).
ohah.github.io에는 4월 29일 요약과 맞춤법 크론의 상태 갱신 커밋이 올라왔습니다.
공개 커밋 92개, 해당일 생성 또는 병합된 PR 50개를 정리했습니다. PR 생성 50개·병합 49개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- docs: mark CRON_CRD_WRITE.md as completed (2026-04-30)
- cron: mark docs/index.mdx checked in CRON_CRD_WRITE.md
- cron: Reset mdx file checklist for next cycle
- chore: update CRON_CRD_WRITE.md - docs/index.mdx checked (no corrections needed)
- docs: mark cron task complete - all mdx files checked
- docs(cron): reset cron task list for next cycle (2026-04-30)
- cron: mark all .mdx files checked in CRON_CRD_WRITE.md
- docs: update CRON_CRD_WRITE.md checklist (all files checked)
- docs: update today-commit 2026-04-29 summary
- docs: mark all mdx files checked for CRON_CRD_WRITE.md
- chore: mark CRON_CRD_WRITE.md checklist complete (2026-04-29)
- cron: mark all mdx files as completed
- cron: mark all .mdx files as checked in CRON_CRD_WRITE.md
- docs: mark all .mdx files as completed (2026-04-29)
- cron-crd: mark chromium/background.mdx checked, fix blockquote spacing
- chore: mark all mdx files as checked in CRON_CRD_WRITE.md
- docs: update CRON_CRD_WRITE.md - docs/monthly-opensource/zts/development-14.mdx checked
- docs: mark CRON_CRD_WRITE.md as checked (2026-04-29)
ohah/zntc
- refactor(transformer): styled-components 논리/cast /simplify follow-ups
- feat(transformer): styled-components 논리 / TS cast / Flow cast 인식
- feat(transformer): styled-components 사용자 명시 .withConfig 보존
- refactor(transformer): styled-components 조건부 /simplify follow-ups
- feat(transformer): styled-components 조건부 / 괄호 expression 인식
- feat(transformer): styled-components assignment 패턴 인식
- test(app): cover HTTPS SPA fallback preview
- feat(transformer): styled-components object property 패턴 인식
- feat(transformer): styled-components chain detection (.attrs / 깊은 체인)
- refactor(transformer): styled-components componentId /simplify follow-ups
- feat(transformer): styled-components componentId hash + counter
- style: zig fmt transformer.zig
- refactor(transformer): styled-components withConfig /simplify follow-ups
- feat(transformer): styled-components withConfig({displayName}) 래핑
- style: oxfmt packages/core/index.ts
- style: zig fmt styled_components_test.zig
- refactor(transformer): styled-components /simplify follow-ups
- test(transformer): styled-components 회귀 테스트 8개 추가
- feat(transformer): styled-components displayName injection (Milestone C)
- chore: remove accidentally committed dist/main.js + ignore /dist/
- feat(transformer): styled-components import + declaration detection
- feat(transformer): styled-components transform scaffolding
- refactor(app): /simplify round 3 — cache pipeline state, helper extractions
- refactor(app): resolve BACKLOG #70/#71/#73 — incremental dev pipeline
- refactor(app): app CSS pipeline /simplify round 2
- test(dto): register "compiler" in ts_buildoptions_only_allowlist
- refactor(examples): /simplify follow-ups
- feat(examples): add web example app + compiler config namespace stub
- test(app): run JS CLI E2E with Bun
- feat(app): support Sass in app pipeline
- feat(app): support CSS Modules in app pipeline
- docs: README / STRUCTURE / TESTING 현재 구현 상태 동기화
- test(regression): 라운드 1/2/4 광역 회귀 테스트 영구 보존
- test(regression): 라운드 5/11 광역 회귀 테스트 영구 보존
- fix(transformer): derived class parameter property 가 super() 후에 emit 되도록
- fix(sourcemap): enum 멤버 + IIFE trailing 매핑 누락
- fix(sourcemap): import/export specifier identifier 매핑 누락
- feat(app): complete remaining Vite parity scope
- fix(sourcemap): footer 부착 + map.file 필드 spec 부합 + Hermes 의존성 추가 (#2217)
- fix(bundler): side-effect/script dynamic target 의 외부 sibling fallback 제거 (#2211 follow-up)
- fix(bundler): single-file dynamic import 재작성 + cycle×dynamic marking 확장 (#2211)
- docs(app): document CSS HMR app flow
- refactor(app): /simplify 후속 — dev HMR 정리 + stylesheet path root cause
- chore: ignore e2e test results
- feat(app): enable dev PostCSS CSS HMR
- fix(parser): yield-outside-generator 명확한 진단 (#2210)
- fix(bundler): single-file output 모드에서 dynamic import 자동 lazy-wrap (#2209)
- fix(transformer): const enum 멤버에 type wrapper cast 가 있어도 인라인 (#2193)
- fix(bundler): cycle 모듈의 const/let/class 를 var 강등으로 ESM live binding 보존 (#2198)
- test(app): Vite-style app builder Playwright E2E + 포맷 정리
- fix(app): CSS double-emit collision + dev postcss watcher correctness
- refactor(app): /simplify 후속 정리
- feat(app): add Vite-style app builder
- fix(minify): block-scoped let 의 TDZ 보존 — 모든 scope 에 forward-ref 검증 (#2195)
- fix(jsx,mangler): JSX factory head identifier 의 symbol_id 전파 (#2196)
- test(tsc): string enum reverse mapping 제거 후 stale snapshot 갱신 (#2192 follow-up)
- fix(transformer): legacy decorator helper 정의를 transpile-only 모드에서도 emit (#2194)
- fix(mangler): named class expression inner name 보존 (#2197)
- fix(codegen): string enum 멤버 reverse mapping 제거 (#2192)
- docs: NAPI / JS API reference + @zts/core 아키텍처 mermaid 다이어그램
- fix(docs): desktop 에서 표를 display:table 로 복원, 모바일만 가로 스크롤
- docs(astro): epic #2151 옵션 추가 — output.exports / sourcemapMode / inline-dynamic / lifecycle / loader override
- refactor(test): runConfigBundle HoF — zts-config-bundler 보일러플레이트 흡수
- feat(config): zts.config.json manualChunks (record form) 매핑 (#2099 P3)
- feat(cli): --inline-dynamic-imports flag 노출 (#2099 P3)
- refactor(dto): applyTranspileSharedFields 헬퍼 — optionsFromJson / applyZtsConfigJson 공유
- refactor(dto): TranspileOptionsDto → ConfigOptionsDto rename
- refactor(dto): AliasDto / ManualChunkDto 를 bundler/types entry 타입 alias 로 통합
- feat(plugin): onLoad contents 의 Uint8Array / Buffer 지원 (#2157 follow-up)
- feat(loader): builtin loader 검증 + onLoad plugin 의 loader override forward (#2157)
- feat(plugin): buildStart / buildEnd / closeBundle lifecycle hook (#2156)
- fix(bundler): CJS module 함수 body 내 dynamic exports access 시 fact prune 비활성화
- fix(emitter): output_exports_conflict 진단의 file_path borrowed 로 변경
- feat(bundle): output.exports 충돌을 graph diagnostic 로 emit (root cause)
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.