2026-05-01
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 소스 타입 정리로 하루를 시작했습니다. JS 계열 source type을 ModuleType으로 통일하고(#2321), 파서의 is_ts와 reject_ts_syntax_in_js를 SourceMode enum으로 합쳤으며(#2322), es2017 대상에서 for-await-of를 다운레벨하도록 고쳤습니다(#2323). 이어 CLI 옵션을 차례로 붙여 --packages=external(#2344), --drop-labels(#2345), pure call DCE 힌트(#2346), 소스맵 매핑 보정과 함께 --line-limit 줄바꿈(#2347), allow-overwrite(#2349), --tsconfig-raw(#2350)를 지원했습니다. tsconfig는 raw 값과 jsx 병합을 Zig 한 곳에서 처리하도록 옮기고(#2356) NAPI transpile의 자동 탐색을 연결했으며, NAPI에 잘못된 jsx 옵션을 주면 조용히 classic으로 떨어지지 않고 오류를 던지게 바꿨습니다(#2370). 플러그인 closeBundle을 watch()에 연결하는 watch lifecycle hook(#2326)과 현재 CLI·config 기준의 문서 정합성 보정(#2328)도 들어갔습니다.
같은 날 zntc에는 React Native 컴포넌트 codegen이 새로 쌓였습니다. 스키마 자료구조(#2357), 타입 별칭·인터페이스 인덱서(#2361), ComponentShape를 만드는 schema_builder(#2372)와 이를 JS 문자열로 내는 view_config_emitter(#2374), 검증기와 ZTS 오류 코드 1400-1499(#2376)를 거쳐 codegen 플러그인을 파이프라인과 RN preset에 연결했습니다(#2377). 이후 codegenTransform NAPI 옵션을 노출하고(#2378) WithDefault, Array·ReadonlyArray, Flow nullable, UnsafeMixed, union, DirectEventHandler·BubblingEventHandler 인식을 하나씩 더했으며, 파일명 접미사 대신 AST 수준 감지로 대상을 고르게 했습니다(#2391). 파서는 TS property signature와 Flow 객체 본문 멤버를 보존하게 됐고(#2365, #2369), 타입 전용 export 선언이 프로그램에서 빠져 codegen 타입 인덱스가 놓치던 문제를 고쳤습니다(#2384). 저녁에는 Flow enum 문법 인식과 변환(#2405, #2406)이 들어왔습니다.
그 밖에 zntc는 binding-lite semantic 경로(#2389), module_specifier_map cherry-pick 분할과 moduleSpecifierMap NAPI 옵션(#2394, #2395)을 추가했습니다. build/watch deinit에서 typed entries·alias·fallback·loader_overrides를 해제하지 않던 문제(#2399, #2400, #2408), es2015 generator 변환의 switch 문 접근 UB(#2404), fs.watch 오류로 dev 서버가 멈추던 문제(#2387)도 고쳤고, dev 서버 테스트는 빈 포트를 동적으로 잡도록 바꿨습니다(#2373).
bungae는 BUNGAE_CODEGEN_NATIVE 토글로 네이티브 codegen 플러그인을 켜는 경로를 만든 뒤 하이브리드 모드로 바꾸고 BUNGAE_CODEGEN_FALLBACK=js 탈출구를 두었습니다(#74, #75, #76). babel decorators와 root-import 플러그인을 ZTS 네이티브로 매핑하고(#77) BUNGAE_BABEL_NATIVE·BUNGAE_BABEL_FALLBACK 토글(#82)과 공용 parseToggleEnv 헬퍼(#83)로 정리했으며, CI의 서브모듈 체크아웃 수정, 예제 앱의 lodash-es 전환, zts 서브모듈 갱신도 병합했습니다. suji는 Electron과 같은 형태의 session.cookies set/get/remove API를 추가했습니다. 외부 저장소 warpdotdev/warp에는 한국어 IME에서 마지막 음절이 사라지는 문제를 고치는 PR #9713을 열었지만 병합되지 않고 닫혔습니다. 블로그 저장소 ohah.github.io의 커밋 18개는 크론이 CRON_CRD_WRITE.md 점검 완료를 표시한 커밋 17개와 요약 갱신 커밋 1개입니다.
공개 커밋 106개, 해당일 생성 또는 병합된 PR 70개를 정리했습니다. PR 생성 70개·병합 68개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- chore(zts): extract parseToggleEnv helper for codegen/babel toggles
- feat(zts): BUNGAE_BABEL_NATIVE / FALLBACK toggles (#2393 § 5)
- chore: bump zts submodule to main HEAD
- chore(example): migrate ExampleApp to lodash-es (ohah/zts#2398 fixture)
- chore(zts): tidy babel plugin mapping helpers (#77 simplify)
- fix(ci): checkout submodules so @zts/core resolves
- feat(zts): map babel decorators + root-import to ZTS native (#2393 1+2단계)
- feat(zts): add BUNGAE_CODEGEN_FALLBACK=js escape hatch
- feat(zts): switch BUNGAE_CODEGEN_NATIVE to hybrid mode
- feat(zts): add BUNGAE_CODEGEN_NATIVE toggle for native codegen plugin
ohah/ohah.github.io
- docs: CRON_CRD_WRITE.md final status - all mdx files checked (2026-05-02 08:30 KST)
- docs: mark CRON_CRD_WRITE.md task completed (2026-05-02 08:00 KST)
- chore: cron-crd-write — mark all mdx files complete
- cron: mark all mdx files checked (2026-05-02 07:00 KST)
- cron: mark CRON_CRD_WRITE.md final - all mdx files checked (2026-05-02 04:30 KST)
- cron: Mark all .mdx files checked (2026-05-02 04:00 KST)
- docs: mark CRON_CRD_WRITE.md as checked (2026-05-02 01:30 KST)
- docs: update 2026-05-01 summary with AI-written paragraph
- docs: mark cron task as complete for 2026-05-01 20:30 KST — no unchecked .mdx files remaining
- cron: mark CRON_CRD_WRITE.md task completed (2026-05-01 20:00 KST)
- docs: mark CRON_CRD_WRITE.md tasks as completed (2026-05-01 22:30 KST)
- Cron: mark CRON_CRD_WRITE.md completed at 2026-05-01 18:30 KST
- CRON_CRD_WRITE.md: Mark all mdx files checked (2026-05-01 18:00 KST)
- CRON_CRD_WRITE.md: Mark task complete (2026-05-01 15:30 KST)
- chore: CRON_CRD_WRITE.md - task completed (2026-05-01 14:00 KST)
- CRON: Mark all .mdx files as checked (2026-05-01 11:00 KST)
- docs: mark CRON_CRD_WRITE.md complete (2026-05-01 10:00 KST)
- cron: mark 2026-05-01 09:00 check complete
ohah/suji
ohah/zntc
- fix(napi): free fallback/loader_overrides in build/watch deinit (#2396)
- chore(codegen): use FlowEnumBaseType enum for Flow enum default value (#2406 simplify)
- feat(transformer/codegen): Flow enum transformer (#2401 part 2)
- feat(parser): Flow enum syntax recognition (#2401 part 1)
- fix(transformer/es2015_generator): switch_statement access via .extra (UB fix)
- chore(napi): extract freeOptionsTypedSlices helper (#2400 simplify)
- fix(napi): also free options.alias in build/watch deinit (#2396)
- fix(napi): free typed entries arrays in build/watch deinit (#2396)
- refactor(transpile): tighten binding-lite path after /simplify review
- feat(transpile): add binding-lite semantic path
- fix(napi): rename msm entries to avoid shadow in ReleaseFast
- feat(napi): expose moduleSpecifierMap option (#2393 3c)
- feat(transformer): module_specifier_map cherry-pick split (#2393 3a/3b)
- fix(dev): handle fs.watch error to keep dev server alive
- fix(napi): codegenTransform 사용자 명시값 우선
- refactor(codegen): drop filename suffix gating, rely on AST-level detection
- chore(codegen): unify wrapper / event handler dispatch via StaticStringMap
- feat(codegen): recognize DirectEventHandler<T> / BubblingEventHandler<T>
- feat(codegen): map union types to string_enum or mixed
- feat(codegen): unwrap UnsafeMixed<T> identity wrapper
- fix(parser): keep type-only export decl in program (root-cause for codegen type_index miss)
- fix(napi): hydrate codegen_transform from JS options
- feat(codegen): unwrap Flow nullable type (?T) in schema_builder
- test(config): allowlist codegenTransform build option
- feat(codegen): support Array<T> / ReadonlyArray<T> in schema_builder
- feat(codegen): recognize WithDefault<T, D> wrapper in schema_builder
- feat(napi): expose codegenTransform option
- test(skip): strictPort occupied-port test pending hostname alignment
- fix(test): dynamic free port allocation for dev server tests
- feat(codegen): integrate codegen plugin — pipeline + RN preset wiring
- feat(codegen): add validator + ZTS error codes (1400-1499)
- feat(codegen): add view_config_emitter — ComponentShape → JS string
- feat(codegen): add schema_builder for ComponentShape construction
- refactor(compat): extract hasAny helper for packed-struct bitmaps
- feat(parser): preserve Flow object body members
- fix(napi)!: strict throw on invalid 'jsx' option (was silent classic fallback)
- docs(cli): clarify ExplicitFlags truthy-only conversion limit
- refactor(cli): consolidate manual tsconfig merge into tsconfig_merge + wire --tsconfig-raw
- feat(parser): preserve TS property signature key/type/flags
- refactor(config): extract autodiscoverFromEntry helper
- fix(cli): drop tsconfig vocab from --jsx CLI arg parser
- docs(transpile): clarify entry_path semantics + drop redundant WASM call-site comment
- refactor(tsconfig): wire NAPI transpile autodiscovery + drop JS-side helper
- feat(codegen): add type alias / interface indexer
- refactor(shared): extract isPlainObject helper from 3 inline guards
- refactor(config): extract applyJsonBool helper for tsconfig boolean fields
- refactor(tsconfig): tighten jsx fallback + centralize raw validation
- feat(tsconfig): expose tsconfigRaw on JS API + drop JS-side parsing
- feat(tsconfig): wire raw + jsx merge in transpile/napi entries
- feat(tsconfig): extend merge with jsx + add parseFromString
- feat(codegen): add schema data structures
- refactor(cli): drop dead JS-API tsconfigRaw surface
- refactor(cli): tighten tsconfig-raw parsing after review
- feat(cli): support tsconfig raw
- refactor(cli): consolidate allow-overwrite check after review
- feat(cli): expose allow-overwrite safely
- perf(emitter): two-pointer scan in adjustMappingsForLineWraps
- refactor(emitter): stream wrapLineLimit output to avoid O(N²) inserts
- feat(cli): support line-limit wrapping
- refactor(bundler): tighten pure-call DCE wiring after review
- feat(cli): support pure call dce hints
- feat(cli): support drop labels option
- test(cli): wrap packages-external tests in try/finally
- feat(cli): support packages external flag
- docs: align references with current CLI and config
- docs(core): tighten resolveDispatcher / watch lifecycle comments
- docs(core): tighten resolveDispatcher / watch lifecycle comments
- feat(core): wire plugin closeBundle into watch() + array alias support
- refactor(tests): add runFixture helper to dedupe fixture+runZts boilerplate
- refactor(transformer): extract makeAwaitExpression / makeYieldExpression helpers
- docs(transformer): clarify needsForAwaitOfDownlevel rationale
- fix(transformer): downlevel for-await-of for es2017
- docs(parser): tighten SourceMode docs
- refactor(parser): unify is_ts + reject_ts_syntax_in_js into SourceMode enum
- refactor(parser): drop bundler/types.zig dependency from parser
- refactor(parser): delegate source-type classification to ModuleType
- refactor(bundler): split js source module types
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.