2026-04-17
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc는 진단과 옵션 전달 구조를 다듬는 것으로 시작했습니다. 재선언·참조 에러가 원래 선언이나 정의 위치를 보조 라벨로 가리키게 하고(#1439, #1440), 모든 진단에 수정 힌트와 문서 URL을 붙였습니다(#1441, #1442). WASM/NAPI 진입점이 옵션을 필드별 인자로 받던 구조를 JSON 페이로드로 바꾸고(#1445), comptime reflection으로 TranspileOptions JSON 스키마를 생성해 $schema 자동 완성이 되는 zts.config.json 자동 로드를 붙였으며(#1446, #1447), Zig와 TS 옵션 필드의 동기화를 테스트로 검증합니다(#1448). JS 플러그인 실행은 subprocess 경로를 없애고 NAPI로 단일화했습니다(#1450).
안정성 항목으로 Chrome DevTools 소스맵 E2E, watch/serve 150회 연속 재빌드 메모리 스트레스, vite-plugin-zts로 만든 Vite 앱의 브라우저 실행 E2E를 추가했습니다(#1451~#1453). 설계 문서는 docs/로 옮기고 README를 갱신했으며(#1449), ISSUES.md의 미해결 항목은 GitHub Issues로 넘겼습니다(#1458). ESM+Node 출력에 CJS 래퍼가 있으면 createRequire shim을 넣고(#1459), rest 파라미터를 함수 스코프에 등록하지 않던 버그(#1460)를 계기로 binding 위치의 rest를 rest_element 태그로 통일하고 walker들을 새 헬퍼로 옮겼습니다(#1461, #1463, #1466).
나머지는 다운레벨링 엣지 케이스 정리였습니다. 엣지 케이스 테스트 83건을 추가하면서 정규식 \k<name> 변환을 고쳤고(#1474), delete obj?.a?.b가 실제로 지우지 않던 문제(#1476), const enum 멤버 참조 인라인(#1477), named group 제거 시 String.replace의 $<name> 변환(#1478), ES5 클래스의 parameter property(#1479)를 바로잡았습니다. private field는 static 복합 대입, ??= 같은 논리 대입, **=, 대입식 반환값, 구조 분해 대상, optional chain 읽기, for-of/for-in 바인딩, 파생 클래스의 super() 뒤 초기화, new this.#priv.method()까지 연달아 고쳤습니다(#1482, #1484, #1487, #1489, #1490, #1493, #1494, #1496, #1518). generator의 yield* 대입과 레이블 없는 break/continue(#1498, #1499), 계산된 키 객체의 getter/setter 누락(#1501), ES5 타깃에서 Stage 3 데코레이터가 조용히 사라지던 문제와 MobX 회귀 테스트(#1503, #1504), 다른 모듈에서 import한 데코레이터가 tree shaking으로 빠지던 문제(#1505), ES5 클래스 멤버 주석 위치(#1515, #1517)도 이날 병합됐습니다.
ohah.github.io에는 맞춤법 크론이 수정 없이 상태 파일만 갱신한 커밋 25개가 남았습니다.
공개 커밋 94개, 해당일 생성 또는 병합된 PR 55개를 정리했습니다. PR 생성 55개·병합 55개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/ohah.github.io
- chore: cron-crd-write 295 - all .mdx files checked, no changes
- chore: cron-crd-write 294 - all 27 .mdx files already checked
- docs(cron): update CRON_CRD_WRITE.md - 293 completed run
- chore: update CRON_CRD_WRITE.md — no pending mdx files (all checked)
- crd-write: mark §7 checklist complete for 2026-04-18
- CRD 30분마다 실행 (현재): 모든 mdx 파일 맞춤법 검사 완료
- chore(cron): CRD 30분마다 실행 - 288번 체크 완료
- chore(cron): CRD 30분마다 실행 - 체크 완료된 파일 없음, 상태만 갱신
- chore: update CRON_CRD_WRITE.md timestamp (2026-04-17 17:30 UTC)
- CRD 30분마다 실행: 모든 mdx 파일 검사 완료 (0 warnings, 0 errors). CRON_CRD_WRITE.md 상태만 갱신 후 커밋 및 푸시。
- docs(cron-crd-write): update 287 run log for 2026-04-17 16:01 UTC
- docs(CRD write): 체크박스 갱신 - 2026-04-17 22:00
- 2026-04-17 22:31 CRON_CRD_WRITE.md: 체크 완료 상태 갱신
- docs: update CRON_CRD_WRITE.md - 2026-04-17 10:00 PM
- chore: update CRON_CRD_WRITE.md run 285 2026-04-17 09:00 PM
- chore(cron): update CRON_CRD_WRITE.md timestamp (2026-04-17 17:30 KST)
- crd: 2026-04-17 05:00 PM - 맞춤법 교정 완료 (CRON_CRD_WRITE.md만 갱신)
- CRD: update checklist (282) - no changes to mdx files
- cron: mark CRD write task complete - all .mdx files checked
- docs: update CRON_CRD_WRITE.md - no spellcheck needed (all .mdx files checked)
- CRON: update last-run timestamp
- CRD 30분마다 실행 (2026-04-17 01:30 PM): 모든 .mdx 파일 체크 완료, 수정 없음
- docs: CRON_CRD_WRITE.md marked complete (no unchecked files left)
- docs: update CRON_CRD_WRITE.md timestamp (2026-04-17 10:30)
- chore(crd): update CRON_CRD_WRITE.md timestamp for 2026-04-17 10:00
ohah/zntc
- refactor(transformer): buildSetterMethod 공용 추출 (#1510 item3)
- refactor(transformer): super(...args) constructor shell 빌더 공용 추출 (#1510 item2)
- refactor(transformer): class_decorator splice helpers 공용 추출 (#1510 item1)
- fix(transformer): new this.#priv.method() ES5 target private field lowering (#1507)
- fix(codegen): ES5 accessor/private method lowering 의 member 앞 주석 위치 이상 (#1516)
- fix(codegen): ES5 class lowering 시 멤버 주석이 X.prototype. 과 메서드명 사이에 잘못 삽입 (#1508)
- fix(transformer): Stage 3 accessor 확장의 this.#storage를 private_field_expression 으로 통일
- refactor: 간단한 noted 후속 정리 — MethodFlags 중앙화 + 긴 key name truncation 방지
- fix(transformer): Stage 3 decorator derived class 합성 constructor에 super() 누락 (#1505 follow-up)
- fix(semantic): cross-module decorator import가 tree-shake로 drop (#1504 follow-up)
- test(stage3): MobX 6 --target=es5 회귀 가드 2건 추가 (#1389 follow-up)
- docs(roadmap): #1389 로 ES5 decorator lowering 완료 + private/computed accessor 제약 명시
- fix(transformer): ES5 target에서 Stage 3 decorator가 silent drop (#1389)
- fix(transformer): classifyMembers에 accessor_property 처리 + 방어 코드 (#1398)
- fix(transformer): computed object lowering이 getter/setter를 drop (#1397)
- docs(roadmap): Stage 3 decorator 완료 표기에 ES2015+ 타겟 한정 명시 (#1399)
- fix(transformer): generator 내부 unlabeled break/continue state machine 변환 (#1480)
- fix(transformer): variable declarator의 yield* delegate op 5 누락 (#1470)
- fix(transformer): class expression mixin lowering이 corrupted identifier 출력 (#1481)
- fix(transformer): derived class constructor에서 private field init을 super() 이후에 삽입 (#1495)
- fix(transformer): for-of / for-in binding이 private field일 때 임시 binding + body prefix (#1491)
- fix(parser, transformer): optional chain private field read 근본 수정 (#1492)
- fix(transformer): destructuring assignment target에 private field 허용 (#1485)
- fix(transformer): private field assignment expression 반환값 spec 일치 (#1488)
- fix(transformer):
#x **= n에 Math.pow 경유 (#1486) - fix(transformer): private field ??=/||=/&&= lowering 및 dispatcher 선점 (#1483)
- fix(transformer): private static field compound assignment helper 경유 (#1468)
- chore: simplify 후속 정리 (#1473)
- fix(transformer): #1473 근본 수정 보강 — 변수 regex 추적 + template literal replacement
- fix(transformer): #1473 regex named group strip 시 String.replace의 $<name> 도 함께 변환
- chore: simplify 후속 정리 (#1471)
- fix(transformer): #1471 ES5 class lowering 시 parameter property
this.x = x삽입 - fix(transformer): #1472 const enum 근본 수정 — 표현식 평가기 + shadowing + computed key
- fix(transformer): #1472 const enum 멤버 참조를 literal로 인라인
- chore: zig fmt
- fix(transformer): #1469 delete obj?.a?.b 가 실제 삭제하도록 lowering 분리
- fix(transformer): regex named backreference \k<name> → \N + 다운레벨링 엣지케이스 83건
- fix(docs): TypeDoc이 packages/core의 Node.js 모듈 타입을 찾도록 설정
- refactor(codegen,checker): 잔여 binding walker가 nodeListSplitRest 경유
- refactor(transformer): binding-pattern walker가 nodeListSplitRest 경유
- refactor(semantic): binding-pattern walker가 nodeListSplitRest 경유
- refactor(ast): binding-pattern 컨테이너의 rest dispatch helper 추가
- refactor(parser): cover grammar reinterpret 시 spread_element를 rest_element로 정규화
- refactor(parser): 함수 파라미터 rest binding을 rest_element 태그로 emit
- fix(semantic): 함수 파라미터 rest binding(spread_element)을 함수 스코프에 등록
- fix(bundler): ESM+Node 출력에 CJS wrapper 포함 시 createRequire shim 주입 (#1456)
- docs: ISSUES.md 삭제 — 미해결 버그는 GitHub Issues로 이관
- docs: 롤리팝/번개 내부 레퍼런스 제거 — Rolldown 기준 표현으로 통일
- docs(roadmap): Next.js/Remix가 1단계 통합 테스트 범위 밖인 이유 명시
- test: Vite 앱 build + 브라우저 실행 E2E (vite-plugin-zts)
- test: watch/serve 메모리 스트레스 시뮬레이션 + ndjson 헬퍼 공통화
- test: source map Chrome DevTools E2E + Node.js 호환 edge case
- chore(fmt): oxfmt 적용
- chore(simplify): subprocess 제거 후속 정리
- refactor: @zts/plugin subprocess 경로 제거 — NAPI 단일화 (D101)
- docs: 최근 기능을 USAGE/ROADMAP/ARCHITECTURE/STRUCTURE/DECISIONS에 반영
- docs: CLAUDE.md에서 운영 정보를 docs/USAGE.md로 분리
- docs: 하위 문서의 CLAUDE.md 역참조 제거 (단방향 참조로 통일)
- docs: 루트 설계 문서를 docs/로 일괄 이동 + README 최신화
- test(transpile): verify Zig DTO ↔ TS TranspileOptions field sync
- feat(cli): auto-load zts.config.json with $schema autocomplete
- feat(build): auto-generate TranspileOptions JSON schema via comptime reflection
- chore: apply oxfmt
- refactor(transpile): migrate options from per-field args to JSON payload
- fix(transpile): wire es_target diagnostic + source_root through WASM/NAPI
- fix(diagnostic): docsUrl uses lowercase 'zts' segment to match deployed routes
- feat(diagnostic): help hints + docs URL per error code
- feat(diagnostic): reference-to-definition labels for 3 errors
- feat(diagnostic): previously-declared-here labels for 6 redeclaration errors
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.