2026-03-30
요약 (AI 작성)
ZTS에서 플러그인 API를 3단계로 구현하여 Zig 함수 포인터 기반 Plugin 인프라, Node.js subprocess JSON IPC, 그리고 @zts/core npm 패키지를 완성했습니다. Flow 파서를 새로 구축하여 기본 타입 파싱부터 opaque type, variance, declare/interface, import typeof, as expression까지 지원하고 Metro smoke 테스트 410개 @flow 파일을 통과시켰습니다. 또한 소스맵 정확도 개선, inotify 네이티브 파일 감시, 증분 빌드, zts.config 자동 감지, --watch 모드, dev server 프록시 등 개발 환경 기능을 대거 추가했습니다. Suji 프로젝트에서는 멀티 백엔드 데스크톱 프레임워크의 초기 커밋부터 CLI, Rust/Go/Zig SDK, 이벤트 시스템, Electron 스타일 API까지 Phase 1을 완성했습니다.
커밋
ohah/zts
- test: add Flow Metro smoke test — 410 @flow files pass, integrated pattern test
- feat(parser): add Flow as expression — flow_as_expression 독립 태그
- feat(parser): add Flow declare + interface — flow.zig 독립 구현
- fix: /simplify 리뷰 반영 — import typeof named 테스트 추가
- feat(parser): add Flow import typeof support + import/export type tests
- fix: /simplify 리뷰 반영 — export opaque type 테스트 추가, e2eFlowModule 헬퍼
- feat(parser): add Flow opaque type + variance support
- fix: /simplify 리뷰 반영 — AST rollback, parseObjectType brace counting, TS 키워드 가드
- feat(parser): add Flow basic type parsing — flow.zig, flow_ AST tags, type stripping
- fix: /simplify 리뷰 반영 — is_ts/is_flow 상호 배타, pragma false positive, .jsx.flow 지원
- feat(parser): add Flow infrastructure — is_flow flag, @flow pragma detection, --flow CLI
- fix: /simplify 리뷰 반영 — inotify 해시 이중 조회, absPath 중복, catch unreachable
- fix: inotify 디렉토리 감시로 전환 + E2E Linux skip 제거
- fix: inotify 재등록 메모리 누수 수정 + 삭제 테스트 Linux skip
- fix: inotify 재등록 실패 시 메모리 누수 — path_map에서도 제거 + free
- test: 테스트 커버리지 보강 — 16개 테스트 추가
- fix(ci): E2E watch 테스트 Linux CI skip + 증분 빌드 코드 diff 단순화
- fix: 증분 빌드 — 코드 diff만으로 변경 판단 (경로 매칭 제거)
- fix: inotify — CLOSE_WRITE 추가 + atomic write 후 watch 재등록
- fix: watchLoop use-after-free — result.paths가 inc_bundler 내부 메모리를 가리키는 문제
- fix: 증분 빌드에서 코드 diff 없을 때 full-reload 전송 (HMR 안전성)
- fix(ci): --serve --plugin 테스트 Ubuntu CI에서만 skip (subprocess spawn 타임아웃)
- fix: inotify addPath — 존재하지 않는 파일 스킵 (kqueue와 동일 동작)
- fix: oxlint unused import + oxfmt 적용
- style: zig fmt 적용
- feat: 소스맵 정확도 + 네이티브 파일 감시 + 증분 빌드
- fix: /simplify 리뷰 반영 — config 옵션
- feat: defineConfig에 Vite/esbuild 호환 빌드 옵션 지원
- feat: load 훅 loader 필드 지원 — text/css/json 자동 래핑
- fix: @zts/core 사용법 주석 수정 — CSS load 시 export default 래핑 필요
- refactor: @zts/core를 TypeScript로 변환
- feat: renderChunk/generateBundle subprocess 훅 + config watch 재시작
- test+fix: config 자동 감지 테스트 + /simplify 반영
- feat: zts.config.{ts,js,mts,mjs,cts,cjs} 자동 감지
- fix(ci): skip flaky --serve --plugin 테스트 on CI
- fix(ci): dev server --plugin 테스트 bun 타임아웃 15s 설정
- fix(ci): dev server --plugin 테스트 타임아웃 + retry
- test(server): dev server 통합 테스트 8개 + 프록시 헤더 전달 수정
- fix: /simplify 리뷰 반영 — dev server 프록시
- feat(server): --proxy 옵션 — API 프록시 지원
- feat(server): dev server 옵션 확장 — 기본포트 12300, host, open
- refactor: 플러그인 API를 Vite/Rollup 스타일로 변경
- test(bundler): 플러그인 테스트 커버리지 2차 확대
- feat: --serve + --plugin 연동 — dev server에서 플러그인 사용
- test(bundler): 플러그인 subprocess 통합 테스트 6개 추가
- fix: /simplify 리뷰 반영 — 미검토 PR 6개 통합
- fix: /simplify 리뷰 반영 — watch 모드
- feat: --bundle --watch 모드 + 플러그인 watch 재사용
- feat(bundler): 필터 매칭 확장 + virtual module 지원
- test(integration): 플러그인 subprocess 통합 테스트 6개
- feat(bundler): 플러그인 품질 개선 — 에러 상세, 다중 --plugin, 훅 최적화
- fix(bundler): 플러그인 load 훅이 비-JS 확장자에서도 동작하도록 수정
- docs: 플러그인 2단계 완료 반영 + shutdown 버그 수정
- feat: CLI --plugin 옵션 + Bundler 통합
- feat: @zts/core npm 패키지 — subprocess 플러그인 JS API
- fix: /simplify 리뷰 반영 — subprocess_plugin
- feat(bundler): subprocess 플러그인 — Node.js spawn + JSON IPC
- refactor(bundler): Plugin 인터페이스에 context 포인터 추가
- feat(bundler): 플러그인 인프라 1단계 — Zig 함수 포인터 기반 Plugin struct + 파이프라인 훅 삽입
- docs: 플러그인 API 3단계 전략 문서화
- docs: 배치 D 구현 완료 반영
- test(bundler): /simplify 수정 검증 테스트 5개 추가
- fix: /simplify 리뷰 반영 — 배치 D
- test(bundler): 배치 D 유닛 테스트 12개 추가
- feat(bundler): keepNames (배치 D 완료)
- feat(bundler): inject (배치 D 3/3)
- feat(bundler): legal comments (배치 D 2/3)
- feat(bundler): metafile + analyze (배치 D 1/3)
- fix: Windows [dir] 패턴 경로 구분자 정규화 (\ → /)
- docs: CLAUDE.md 리팩토링 — 상세 내용을 docs/ 문서로 분리
- feat(bundler): asset-names [dir]/[ext] 패턴 + tree-shaking 한계 문서화
- test(bundler): Asset 로더 유닛 테스트 12개 추가
- fix: /simplify 리뷰 반영
- feat(bundler): Batch C — Asset 로더 (file, dataurl, text, binary, copy)
ohah/suji
- Window 1024x768, events integration tests (63 total)
- Go On() now connects to EventBus via C bridge
- Simplify: Go backend_destroy cleanup, clarify On() limitation
- Implement on/off for all three SDKs
- Update PLAN.md: Phase 1 complete, Phase 2 clarify remaining items
- Fix Zig backend build: add util module dependency
- Extract util module, fix backlog from code review
- Simplify: fix issues from code review
- Refactor to Electron-style API: handle/invoke/on/send
- Zig cross-backend calls + okMulti for raw JSON responses
- Update docs: architecture diagram, multi-backend status, Zig dlopen
- Enhanced multi-backend demo with chaos stress test
- Add deployment section to PLAN.md
- Zig backend via dlopen + exportApp, fix backend naming, package export
- Sync docs, add Zig to suji init, update PLAN.md + CLAUDE.md
- Add Zig backend examples (single + multi)
- Switch to runtime req.ok() with arena allocator
- Add Zig built-in backend with comptime builder pattern
- Add event system (pub/sub) to Zig core + JS bridge
- Add Go SDK (suji-go) with struct binding pattern
- Add Rust SDK (suji crate) with #[suji::command] macro
- Add suji init command for project scaffolding
- Expand test coverage: 24 → 33 tests
- Switch to JSON-only config, remove TOML dependency
- Update docs: mark CLI dev/build/run as complete, update CLAUDE.md
- Fix config memory lifetime, Go build CC env, multi-backend JSON
- Add CLI (dev/build/run), config-based workflow, single backend examples
- Add config parser with TOML + JSON dual support
- Remove poc/, clean up module imports
- Initial commit: Suji multi-backend desktop framework