Skip to content

feat(plugins): add native-default engine selection infrastructure - #884

Open
owjs3901 wants to merge 10 commits into
feat/napi-bindingfrom
feat/native-plugin-engine
Open

owjs3901 wants to merge 10 commits into
feat/napi-bindingfrom
feat/native-plugin-engine

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

G 최종 통합 검증 — 2026-11-03

현재 head는 3b30b7d690de57e09b38e0757b87de3c3f077f76, base는 feat/napi-binding의 51c89930cf1db5a28da0e95bb850b30ff0be61d2입니다. main 675f7e20을 반영한 parent와 D/Vite → E/Bun → F/Next를 통합했습니다. Webpack·Rsbuild·Vite·Bun·Next의 기본 엔진은 native이며, 명시적인 engine: 'wasm' 선택과 오류 시 자동 대체하지 않는 계약을 유지합니다. 스타일 처리는 빌드 시점에 수행됩니다.

G에서 새로 작성한 제품 소스는 0줄입니다. 기존 child 변경은 원래 parent 86931b4c 대비 111개 경로, 추가 10,460줄·삭제 628줄·총 변경 11,088줄로 유지됩니다. parent를 통해 들어온 main의 65개 경로는 이 수치와 별도로 기록했으며 child의 111개 경로와 겹치지 않습니다. 기존 staged D와 m-theme 캐시 회귀 테스트를 포함한 소스를 유지했습니다.

현재 트리에서 다시 실행한 검증

G에서 native·WASM·전체 패키지를 새로 빌드하고 배포 entry 검사를 통과한 뒤, 실제 packed consumer와 브라우저 검증을 다시 실행했습니다. 과거 D/E/F의 성공을 현재 트리의 실행 결과로 대신하지 않았습니다.

검증 G의 실제 결과 비교 범위
Webpack 102개 runtime cell, 60개 전체 비교 PASS 제외 필드 없음
Rsbuild 122개 cell, 기존 한정 비교 80개 PASS 기존 승인 범위대로 compilationProofs, generations[*].outputs[*].css만 제외; 원본 차이는 보존
Vite packed matrix 66개 cell, 전체 비교 32개 + 기존 한정 비교 4개 PASS 4개는 Node/Bun × native/wasm의 opposite-import-single; phases[*].outputs[*].css만 제외
Vite G5-S Node 일정 16개, 상태 snapshot 40개, 전체 벡터 비교 12개 PASS HMR 8개는 C0/C1/C2/final, 기본 엔진 대조 8개는 final만 검증; 필드 제외 없음
Bun 45개 cell, 같은 시나리오 전체 비교 35개 + 기존 한정 CSS 비교 6개 PASS 기존 6개 비교에서 phases[0].outputs[*].css만 제외; 원본 차이 보존
Next packed publication CLI 32개·Chromium 32개, 기존 한정 비교 28개 PASS Webpack/Turbopack × 형식 × 엔진 × CSS 모드 × 반복 실행; 변경 대조 184개 PASS
Next direct 자식 프로세스 52개, 전체 비교 42개 PASS 일반 입력 40개·작성된 portable error 입력 8개·module guard 4개; 변경 대조 240개 PASS
RSC CSS 기본/native/wasm × CSS 모드 2개, 각 29개 = 174개 PASS 매 빌드 산출물을 따로 보존; 브라우저 전후 포트 3187이 비어 있음을 확인

G5-S의 8개 HMR 실행 모두 최초 CSS URL /df/devup-ui/devup-ui.css?devup-revision=0과 같은 Accept: text/css 요청을 재사용해 200 응답, CSS 17px → 29px, 변경된 ETag, 디스크와 응답 바이트 일치를 확인했습니다. Bun의 Vite dev/default/HMR 또는 독립적인 동시 빌드 검증을 주장하지 않습니다.

Next packed 실행은 Next 16.4.4, Webpack 5.112.2, React 19.3.1, Node 26.12.0, Bun 1.4.4에서 수행했습니다. 32개 실행의 실제 raw 파일 4,920개가 종료 전 기록의 크기·해시와 모두 일치했고, 정적 JS/CSS 응답 176개도 디스크 바이트와 일치했습니다. 정상 root hook에서 실행한 workspace Next 16.4.3의 production/development 테스트와는 별도 결과입니다.

Next의 기존 비교 한정은 그대로 유지합니다. 명시된 JSON 시계 5개, 실제 mtime을 반영한 stat/ETag/Last-Modified, setup 소유 토큰·PID·시간·selector 메타데이터, 알려진 캐시 버전/관리 필드만 기존 승인 범위에서 다룹니다. Turbopack 전체 호출 순서는 엄격하게 비교하며 Webpack은 기존 승인된 입력 간 관리 호출 순서만 한정합니다. binary cache/serialized setup parity와 일반 cross-runtime Error descriptor parity는 검증 완료로 주장하지 않습니다. 작성된 portable error 입력과 원본 오류 identity/cause/state 검사는 유지합니다. 알 수 없는 JSON/JS/selector/wrapper/suffix는 허용 대상으로 확장하지 않았습니다.

일반 commit hook을 한 번 실행해 strict lint, Rust fmt/clippy, root 테스트를 통과했습니다. hook 소스나 적용 범위, 경고·커버리지 기준, snapshot을 변경하거나 hook을 우회하지 않았습니다.

정상 local hook 결과
Root Bun 6,886 PASS / 0 FAIL / 0 SKIP; 89 snapshot, 24,537 expect
Root 커버리지 lines 10,887/10,887, functions 1,039/1,039 — 100%
Vite 879 PASS / 0 FAIL / 0 SKIP; 2,635 expect
Vite 커버리지 lines 1,462/1,462, functions 165/165 — 100%
Node 117 PASS / 0 FAIL / 0 SKIP
Local Rust 97.80%, 33,139/33,886; extractor 10,406 PASS

Local Rust 수치는 Linux CI의 100% 확인과 구분합니다. CI 환경 변수를 local hook에 강제로 적용하지 않았으며 실제 instrumented native 이미지와 테스트 원본을 보존했습니다. 일반 commit과 일반 push를 각각 한 번 완료했습니다.

현재 head의 CI — SUCCESS

자동 pull_request run 41552308801, attempt 1의 head는 3b30b7d6입니다. 완료된 실제 checkout 로그에서 synthetic merge ce3cc5b54d9a0d83447093f8fac4063ce34548ce를 확인했습니다. 부모는 51c89930 + 3b30b7d6, tree는 검토·commit·push한 44a68b8f02e3a3cde583108779da62048e7a312a와 같습니다.

전체 paginated jobs 27개가 종료되어 25 SUCCESS / 2 조건부 SKIP / 0 FAIL, workflow 결론은 SUCCESS입니다. native build 8개·pack 1개·consumer 8개가 모두 성공했습니다. 조건부 skip은 main push에서만 실행하는 release, deploy-pages입니다. 성공한 25개 job의 전체 원본 로그 각각에서 실제 synthetic merge checkout SHA를 확인했습니다. 별도 codecov/patch도 SUCCESS이며 PR의 28개 check가 모두 성공 또는 조건부 skip으로 종료됐습니다.

현재 Linux CI 실제 결과
Rust 100.00%, 23,274/23,274 lines
Root Bun 6,886 PASS / 0 FAIL / 0 SKIP; 89 snapshot, 24,535 expect; functions/lines 모두 100%
Vite 878 PASS / 0 FAIL / 기존 Windows 전용 held-directory 테스트 1 SKIP, 총 879개; functions/lines 모두 100%
Node 117 PASS / 0 FAIL / 0 SKIP
빌드된 Bun preload 회귀 10 PASS / 0 FAIL
기본 landing E2E default 196 + development navigation 13 + singleCss 196 PASS
Next landing E2E default 196 + development navigation 13 + singleCss 196 PASS
RSC CSS CI per-file 29 + singleCss 29 PASS

일반 Linux host job 7개의 실제 devup.host-native-build start/finish event에서 아래 비용을 측정했습니다. 모두 이 run의 Node 26.13.0, x86_64-unknown-linux-gnu 빌드입니다. 값은 초 단위로 소수점 셋째 자리까지 반올림했습니다.

CI job native host 빌드 실측 시간(초)
webpack-extends-theme 299.561
react-18 306.686
vinext-rsc-css-e2e 328.201
release-compat 175.606
landing-next-e2e 130.624
benchmark 130.784
publish 300.079

실측 elapsed 합계는 1,671.540초입니다. 병렬 job별 helper 시간의 합이며 CPU 시간, 전체 CI wall time, critical path 또는 통제된 성능 비교 결과가 아닙니다. 캐시 변경은 하지 않았고 캐시 적용 여부는 이후 결정 사항으로 남깁니다.

현재 G run의 wasm-size는 4개 항목 모두 PASS, parent 대비 바이트 변화 0입니다. wasm/raw 6,681,036 / 상한 6,748,160, wasm/gzip 2,410,880 / 상한 2,435,072, glue/raw 49,816 / 상한 51,200, glue/gzip 9,049 / 상한 9,216입니다. 이번 PR884 run에는 size 예외가 필요하지 않습니다. parent #796의 과거 size 실패와 승인된 예외는 별도의 역사적 결과로 유지하며, 현재 G의 실패로 표시하지 않습니다. CI rerun·cache 삭제·수동 workflow 실행·버전 고정·budget 변경을 하지 않았습니다.

상대 경로 df 경고, 상속된 resolver HTTP 오류 identity 손실, 성능 결론 OPEN 및 NumberToNumber의 한계, 기존 main 후속 항목은 해결했다고 주장하지 않습니다. 아래 F까지의 기록은 원문 그대로 보존한 이력입니다. 수치·head·CI는 해당 단계에 한정하며 위 G 결과를 대신하지 않습니다. 특히 (j)의 Playwright 수집 문제는 별도 main 기반 변경이며 #796/#884가 고쳤다고 주장하지 않습니다.


F까지의 원문 이력 — 현재 G의 실행 증거와 구분

Refs #686. #796 (feat/napi-binding) 위에 쌓인 draft PR입니다. 공통 기반과 Webpack/Rsbuild/Vite/Bun/Next 전환을 포함하며, 이후 parent의 최신 main 통합과 G 최종 교차 검증을 별도 단위로 진행합니다. #796이 먼저 병합되어야 합니다.

변경 내용

  • 공통 engine?: 'wasm' | 'native'의 기본값은 native입니다. Webpack, Rsbuild, Vite, Bun, Next가 설정·reservation·추출·CSS 공급·지연 callback에서 같은 선택 compiler를 사용합니다. engine: 'wasm'을 유지하며 자동 fallback은 없습니다.
  • Vite의 native 기본값과 명시적 WASM 선택을 실제 설치한 CJS/ESM 소비자에서 검증합니다. 잘못된 shorthand는 compiler 선택 전에 거절하고, native 로드 실패는 정확한 플랫폼 패키지명과 원래 cause를 보존합니다.
  • Vite singleCss의 theme 변경은 현재 compiler CSS를 디스크에 발행하고 관련 CSS query/cache 변형을 무효화합니다. 원래 CSS URL과 Accept: text/css를 그대로 사용해 17px → 29px 및 변경된 ETag를 검증합니다. main에서 발견한 (m)의 수정입니다.
  • Webpack/Rsbuild의 실제 번호 stylesheet bucket 발행과 Rsbuild 첫 수정의 JS/CSS 일관성 수정도 포함합니다. Rsbuild는 첫 unflagged publication의 새 JS와 CSS를 함께 검증하며 suppressed pass는 자산을 발행하지 않습니다.
  • Bun은 factory마다 선택한 물리적 compiler를 setup·theme·state·추출·reservation·CSS·지연 callback·Tailwind watcher까지 유지합니다. 실제 Bun.build와 runtime 등록, CJS/ESM의 ./register, awaited ESM root preload를 검증합니다. 등록 API는 await register(options)로 완료를 기다립니다.
  • Next는 config를 만들 때 선택한 engine을 Turbopack setup key와 source/CSS loader, 지연된 Webpack delegate까지 유지합니다. source/CSS fallback은 실제 선택한 compiler의 초기화 성공 뒤에만 완료 상태로 기록하고 원래 compiler 선택·초기화 오류를 callback으로 전파합니다. 클라이언트 스타일링 runtime은 추가하지 않습니다.
  • 같은 changepack에 plugin-utils/Webpack/Rsbuild/Vite/Bun/Next의 Patch key가 있습니다. 중복 WASM peer를 제거하되 명시적 WASM 선택을 위한 일반 dependency는 유지합니다. native ABI/8개 플랫폼 패키지와 WASM size budget은 변경하지 않습니다.

비교와 오류 계약

  • 선택하지 않은 backend를 로드하지 않으며, public entry와 지연 callback은 설치 위치의 같은 물리적 compiler를 사용합니다. Windows native realpath는 EISDIR에만 ordinary realpath를 사용합니다.
  • Vite standalone은 C0 초기, C1 완료된 supplier 변경, C2 완료된 theme 변경, 최종 publication의 모든 명시적 transform 반환/map, HTTP 원본 header/body/ETag, 전체 생성 디스크와 9개 compiler 상태를 통째로 엄격 비교합니다. 필드 제외나 정규화가 없습니다. 각 실행 안에서도 HTTP/디스크/live compiler CSS와 CSS-as-JS의 내장 CSS가 일치해야 합니다.
  • standalone entry는 A/B dependency를 명시적으로 HMR accept하고 최신 A/B class를 각각 보존해 부분 notification에서도 DOM class를 갱신합니다. A/B의 no-op self-accept는 사용하지 않습니다. 실제 client CSS HMR은 유지하며 generated event를 무시하거나 지연하지 않습니다. 이 제어된 fixture topology의 검증이며, 임의의 미수락 entry graph에서 raw HMR timestamp가 결정적이라고 주장하지 않습니다.
  • Vite production의 모든 발행 asset/map/state/disk/call 및 추출 출력은 비교합니다. 시간 순서 observation은 원본 sidecar에 보존하고 실행 간 순서 비교에 넣지 않습니다. opposite singleCss만 중간 추출 반환 outputs[*].css를 비교에서 제외하며 raw에는 유지합니다. 나머지 출력 필드는 모두 비교합니다. 각 A/B의 실제 class와 매핑된 CSS asset에서 shorthand 규칙을 별도로 검사합니다.
  • Rsbuild만 기존 승인 목록 compilationProofs, generations[*].outputs[*].css를 실행 간 equality에서 제외합니다. 원본은 보존하고 필드 누락·목록 밖 변화·raw 불변성을 control로 검사합니다. 발행 CSS/HTTP/디스크는 제외하지 않습니다.
  • Bun의 같은 순서 35개 비교는 모든 필드를 비교합니다. 별도 opposite publication 6개만 phases[0].outputs[*].css를 비교에서 제외하며 원본과 전체 차이 sidecar 6개를 유지하고 필드 존재를 검사합니다. Output::new는 그 순간의 전체 sheet를 반환하지만 Bun 발행은 getCss를 사용합니다. 나머지 code/map/metadata·발행 asset·df/dist·9개 상태·call은 모두 엄격 비교합니다. 41개 전체 비교라고 주장하지 않습니다.
  • 동일 runtime/진입형식의 constructor/prototype, 모든 string/symbol own key, 비열거 descriptor/value와 cause를 비교합니다. stack 원문은 보존하고 형식과 prefix를 검사합니다. Bun이 부가하는 originalLine/originalColumn의 존재 차이만 허용하며, 존재하는 값의 숫자 형식과 descriptor를 검사합니다.
  • A의 InvalidEngineError, NativePlatformError, NativeCompilerLoadError, HostBuildTargetError를 사용하며 D는 새 public 오류 종류나 source 문법 제한을 추가하지 않습니다. 기존 resolver callback 예외가 메시지로 변환되어 identity/cause를 잃는 동작은 별도 main 후속이며 이 PR에서 바꾸지 않습니다.

D 검증

  • 최종 commit tree 40beb3890307de08a8374b75f86f4e7e6340d3bc: 47개 whole-file path, 1898 gross / 2032 churn입니다. standalone은 포맷 후 650행이며 전체 누적 예약은 8369 / 10282 / 96 path로 승인된 한도 안입니다.
  • frozen install, 새 native/WASM 및 전체 package dist build, dist 검증, strict cargo fmt/clippy와 전체 ESLint를 통과했습니다. 같은 제품 빌드에서 test-only fixture를 보정한 뒤 전체 ESLint와 fresh packed 검증을 다시 완료했습니다.
  • root 6864/0, 89 snapshots/24077 expectations, Vite 879/0이며 functions/lines 100%입니다. Node와 Bun의 focused control은 각각 117/0입니다. threshold나 coverage 제외 목록은 완화하지 않았습니다.
  • 새 packed 소비자에서 Node/Bun × default/native/wasm × CJS/ESM × per-file/single의 production/map 및 retained error/late/guard를 포함해 66 실행 / 36 비교가 통과했습니다. 두 CSS mode의 Node cut은 native/native/WASM/WASM 8 실행 / 6 전체 비교, 별도 Node defaults-on 초기·최종 control도 8 실행 / 6 비교를 통과했습니다.
  • 실제 RSC build/browser는 engine unset/native/wasm × singleCss 0/1의 여섯 조합 모두 29/29, 합계 174개가 통과했습니다. skip/flaky/unexpected는 0이며 각 foreground Job 종료 뒤 남은 프로세스는 0입니다.
  • D commit 207749ea의 정상 exact-tree hook이 1148.357초에 통과했고 push를 완료했습니다. hook에서도 root 6864/0·Vite 879/0 및 functions/lines 100%를 유지했습니다. 최종 Job active process는 0, limit/watchdog 실패는 없습니다. 이 commit의 exact-head hosted CI 41441251927는 성공으로 완료되었습니다. 전체 페이지의 27개 job을 확인했으며 기능 job 25개 모두 성공, deploy-pages/release 2개는 기존 조건에 따라 skip입니다.

E 검증

  • E는 13개 whole-file path, 645 gross / 733 churn이며 누적 예약은 9014 / 11015 / 105 path입니다. factory 기본 native 선택의 실제 코드와 native/WASM CSS를 assertion 전에 기록해 이전 D 제품에서 실패하고 E에서 성공하는 회귀 검증을 포함합니다.
  • frozen install, 새 native/WASM와 전체 dist build, dist 검증, strict fmt/clippy/ESLint를 통과했습니다. root 6869/0, 89 snapshots/24088 expectations와 Vite 879/0/2635 expectations 모두 functions/lines 100%입니다. Node/Bun engine control은 각각 117/0, built Bun regression은 10/0입니다.
  • 새 설치·이동한 packed Bun 소비자에서 45 실행, 35개 같은 순서 전체 비교 + 6개 opposite publication 비교가 통과했습니다. 실제 Bun.build 36회와 runtime/awaited preload source 실행 13회를 포함합니다. 두 source의 실제 class에 대응하는 left/right 19px, theme/supplier, 외부 map, 미사용 eligible source의 magenta 부재, residual 0, 오류/cause identity와 지연 callback의 미선택 backend 9개 상태 불변을 검사합니다.
  • 테스트 격리는 native와 WASM 상태·debug·resolver를 함께 복원합니다. 기존 snapshot·threshold·coverage 제외 설정은 바꾸지 않았습니다. packed fixture는 기존 지원 filter에 맞는 .ts를 사용하며 plain .js 지원 범위를 확대하지 않았습니다. 모든 완료 Job의 최종 active process는 0입니다.
  • E commit 340167b8, tree 71cdabf0e527cd1b8ab013827a416cfc4c2dd994의 정상 exact-tree hook이 1174.827초에 통과했고 push를 완료했습니다. hook에서도 root 6869/0·89 snapshots/24090 expectations, Vite 879/0 및 양쪽 functions/lines 100%를 유지했습니다. 최종 Job active process는 0, limit/watchdog 실패는 없습니다. 이 commit의 exact-head hosted CI 41456985109 attempt 2는 완료되었으며 25개 job 모두 성공했습니다. 첫 실행의 publish job은 제품 install/build/test 전에 Cargo cache 복원 중 runner 디스크 부족으로 실패했고, GitHub annotation은 runner _diag/Worker log 기록의 No space left on device를 명시했습니다. 해당 PR의 실패한 Cargo cache 한 개를 제거한 뒤 실패 job만 한 번 재실행했으며 source·workflow·threshold 변경이나 native producer 재실행은 없었습니다. 위 D CI와 아래 F CI는 각각 해당 commit에서 별도로 검증한 결과입니다.

F 검증

  • F의 전체 변경은 12개 whole-file path, 2316 gross / 2457 churn입니다. 누적 계획 예약은 11330 / 13472 / 111 path이며 G의 650 gross를 남겨도 11980입니다. 이 F commit까지 실제 parent 86931b4c 대비 전체 diff는 10460 / 11088 / 111 path입니다. 추가 path 한 개는 기존 genuine Next 테스트 observer의 compiler 선택 한 줄 수정이며 제품 범위를 넓히지 않습니다.
  • 새 native/WASM와 전체 JS package build 및 verify:dist를 완료했습니다. 실제 새 빌드의 생성 파일 477개를 기록했고, 공통 dependency 264개와 Next dist 30개가 해당 packed 검증에 사용한 payload와 크기·SHA 모두 같음을 확인했습니다. 테스트 observer만 바꾼 뒤에도 이 477개 payload는 같습니다. 과거 빌드를 새 빌드라고 계산하지 않습니다.
  • 실제 Turbopack 기본 선택 회귀는 이전 E 제품에서 WASM의 teal로 실패하고 F의 native에서 성공했습니다. 선택 compiler는 config 이후 options가 바뀌어도 유지됩니다. focused 회귀와 전체 Next source unit 검증을 통과했으며 최종 정상 hook 결과는 아래에 별도로 기록합니다.
  • 직접 loader 검증은 새 Node/Bun 자식 52개 / 전체 비교 42개입니다. 원래 일반 fixture 40개, 공통 형태로 작성한 실제 Error 입력 8개, 실제 설치 native 모듈 거부 guard 4개를 구분합니다. 비교는 같은 runtime/형식 36개와 작성된 오류 입력의 portable 비교 6개이며, 원래 오류/cause identity와 실패 전후 상태 불변 96개 source/CSS 전파를 검사합니다. 받은 오류의 own key·descriptor를 삭제해 맞추지 않습니다. 일반 Node/Bun Error의 runtime별 own property/descriptor 전체가 서로 같다는 주장은 하지 않습니다.
  • 실제 설치한 소비자의 각 반복 묶음에서 물리 경로와 browser port를 유지하고 Webpack 16개와 Turbopack 16개의 실제 CLI 및 Chromium publication을 수행했습니다. 두 bundler × per-file/single × default/native/WASM × CJS/ESM와 명시적 imported native/WASM 반복을 포함합니다. 실제 class의 left/right 19px, theme 17px, navy/teal, padding, 외부 map, HTTP 자산과 원본 디스크, compiler 상태·getters를 검증합니다.
  • publication 검증은 실제 CLI 32회 / 실제 browser 32회 / 전체 비교 28개 / mutation-control set 4개입니다. 최초 실행 중 드러난 fixture의 unused-CSS 판정과 Next 관리 metadata·JS mirror 경계를 보정한 뒤, 같은 원본 기록을 다시 비교해 통과했습니다. 정리 전 전체 inventory와 크기·SHA·mtime 검사 기록은 Webpack 1972개 / Turbopack 3104개이며, 정리 후 실제로 보존된 raw 파일은 각각 1912개 / 3008개입니다. inventory·전체 report와 원래 nonzero report도 보존하며 정리 전 파일이 모두 현재 남아 있다고 주장하지 않습니다. 저장 원본 재비교는 새 CLI나 browser 실행으로 세지 않습니다.
  • Next의 비교 경계는 검사된 정확한 관리 필드만 허용합니다. 5개 JSON metadata와 literal self.__SERVER_FILES_MANIFEST= JS twin, 검증된 HTTP Date·stat 기반 ETag/Last-Modified, 실제 owner/time/token과 선택 engine 경로가 확인된 Turbopack setup metadata를 다룹니다. JS twin은 sibling JSON 원본과 byte 단위로 정확히 같은 literal일 때만 같은 selector 경계를 적용하며 추가 문장·다른 wrapper·unknown JSON·세 번째 selector를 거부하는 control을 포함합니다. 원본 bytes/SHA는 유지합니다.
  • Turbopack의 해당 버전 20개 DB와 Webpack의 알려진 cache/trace는 원본을 보존한 관리 inventory이며 serialized binary cache의 byte parity를 주장하지 않습니다. 나머지 생성 자산·CSS·map·getters·state를 통째로 비교하고 unknown 차이는 실패합니다. global CSS에 예약된 unused magenta는 유지하며 실제 미사용 source의 per-file 발행과 정확한 served-CSS 규칙을 따로 검사합니다.
  • 첫 정상 hook은 기존 genuine Next fixture가 WASM singleton만 관찰하여 2개 실패했습니다. 이를 숨기거나 engine: 'wasm'으로 돌리지 않고 observer 한 줄을 기본 loadCompiler() 선택으로 고쳤습니다. default/native/물리적 binding/Webpack compiler identity를 확인한 뒤 원래 Next 16.4.3 production·development 2/0을 통과했습니다. production reservation 3개·extract 88개, development reservation 23개·extract 12개, 양쪽 3개 역할과 residual 0, 실제 A/B revision·기존 class/file slot 유지·HTTP assertion을 모두 그대로 실행했습니다. 이 결과는 publication matrix의 Next 16.4.4와 구분하며 상대 df dependency 경고를 해결했다고 주장하지 않습니다.
  • F commit b011b6d9, tree af2bd8b373dc792389767f9524d06e312156335c의 정상 exact-tree hook이 1259.913초에 통과했습니다. Windows 로컬 hook은 root 6874/0·89 snapshots/24105 expectations, Vite 879/0/2635 expectations, Node 117/0이며 skip은 0입니다. LCOV에서 root 10647/10647 lines·959/959 functions, Vite 1462/1462 lines·165/165 functions로 양쪽 100%를 확인했습니다. 로컬 Rust native coverage는 97.78%인 32407/33142 lines이며 아래 Linux 결과와 구분합니다. 종료 시 Job active process와 owned process는 0이고 memory limit·watchdog 실패는 없습니다. commit의 parent는 E 340167b8이며 정상 hook 후 source 12개와 생성 payload 477개·기검증 payload 294개가 모두 그대로임을 확인했습니다. 정상 push 뒤 remote HEAD도 이 commit과 일치합니다.
  • 이 commit의 exact-head hosted CI 41518806705 attempt 1는 성공으로 완료되었습니다. 전체 페이지의 27개 job 중 기능 job 25개가 모두 성공했으며 native 8-target build·pack collector·8 consumer도 포함합니다. deploy-pages와 release 2개는 기존 조건에 따라 skip입니다. Linux publish 원본 log에서 Rust coverage 100.00%인 22726/22726 lines를 확인했습니다. root 6874/0·89 snapshots/24102 expectations, Vite 878 pass·기존 Windows 전용 held-directory 테스트 1 skip·0 fail/2635 expectations이며 양쪽 functions/lines 100%입니다. Node 117/0·skip 0, built Bun regression 10/0도 확인했습니다. F CI에는 재실행·cache 제거·waiver가 없었습니다.
  • 실제 CI log의 devup.host-native-build start/success-finish event로 측정한 host native build 시간은 webpack-extends-theme 131.259초, react-18 169.070초, vinext-rsc-css-e2e 177.810초, release-compat 180.622초, landing-next-e2e 186.511초, benchmark 174.805초, publish 123.856초로 총 1143.933초입니다. 각 job 전체 시간이나 별도 native 17-job pipeline 시간과 구분합니다. G 이후 최종 head에서도 다시 측정하며 cache 정책은 변경하지 않았습니다. G와 최신 main 통합은 아직 완료하지 않았으므로 PR은 draft로 유지합니다.

남는 범위와 후속

  • 기존 lifecycle/repeat/opposite matrix의 dev-server cold/warm, supplier/config 변경, closed/restart 요청 workload는 제거했습니다. production 두 빌드와 map, opposite 최종 상태, error/late/guard/focused control은 유지합니다. dev 중간 parity는 위 Node cut이 담당합니다.
  • Vite의 Bun dev-cut, Bun defaults-on, defaults-on HMR 변경 조합은 검증하지 않았습니다. Bun adapter의 production/runtime/preload 검증을 Vite dev 검증으로 대신 주장하지 않습니다. Node standalone은 실제 브라우저에서 entry HMR callback을 실행하는 테스트가 아니며, 여섯 RSC browser 조합은 실제 정적 build의 소비 검증입니다.
  • 동일 프로세스에서 독립 build 동시 격리는 지원하지 않습니다. Windows 로컬 결과가 다른 플랫폼 delivery나 Linux Rust coverage를 대신하지 않습니다. WASM 크기 예외는 build-time 성능/benchmark 실패에 적용하지 않습니다. native host build cache는 G 뒤 실제 CI job 비용을 측정한 후 별도로 결정합니다.
  • main 675f7e20의 CI 41424526678는 10개 job 모두 성공했습니다. 현재 branch는 이를 parent에 임의 병합하지 않았으며, 안전한 commit 경계 뒤 별도 조율로 feat(binding): add native compiler and public platform packages #796 → 이 branch 순서의 통합과 검증을 진행합니다.
  • 기존 main 후속 기록은 보존합니다: (a)/(b) resolver 중복 호출·원래 cause 유실, (g) Webpack/Rsbuild stylesheet sentinel, (h) CJS/ESM별 ShorthandConfigError 혼합 instanceof, (i) production bucket 완료 write, (k) Rsbuild 첫 수정 publication, (l) output directory self-watch입니다. (m) Vite theme CSS/cache는 이번 D에서 회귀 검증과 제품 수정을 포함했습니다. 별도 main 포팅 상태를 이 PR의 전환 완료와 혼동하지 않습니다.
  • (j) 지정된 원래 main 범위는 아래와 같으며 이 PR은 해당 수집 설정을 수정하지 않습니다:

On main 81d6d92, the root playwright.config.ts uses testDir ./e2e with testIgnore only for landing-dev.spec.ts and the default testMatch, so Playwright also loads the five e2e/release/*.test.mjs Node-test modules (guarded-process-surface, guarded-process, process-memory, process-ownership, windows-process) and their node:test cases run as a side effect inside the landing Playwright run (seen in main CI 41276479109, landing-next-e2e job 124764917582). #796 added its own e2e/binding/package tests to testIgnore so they are not loaded; the main fix (Playwright collecting only its *.spec.ts files, the release Node tests run only by their own runner) is a separate main-based PR. It is not changed by #796 or #884.

owjs3901 and others added 4 commits October 31, 2026 06:49
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@codecov

codecov Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
bun.setup.ts 100.00% <100.00%> (ø)
packages/bun-plugin/src/plugin.ts 100.00% <100.00%> (ø)
packages/next-plugin/src/css-loader.ts 100.00% <100.00%> (ø)
packages/next-plugin/src/loader.ts 100.00% <100.00%> (ø)
packages/next-plugin/src/plugin.ts 100.00% <100.00%> (ø)
packages/next-plugin/src/wasm.ts 100.00% <100.00%> (ø)
packages/plugin-utils/src/compiler.ts 100.00% <100.00%> (ø)
packages/plugin-utils/src/index.ts 100.00% <100.00%> (ø)
packages/plugin-utils/src/native-platform.ts 100.00% <100.00%> (ø)
packages/plugin-utils/src/shared.ts 100.00% <ø> (ø)
... and 11 more

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

owjs3901 and others added 5 commits November 2, 2026 05:22
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
Share the selected compiler across Vite configuration, reservation, transforms and delayed callbacks, and refresh published single CSS after theme changes.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Retain the selected compiler across Bun setup, reservation, source extraction, CSS publication and delayed callbacks, with explicit WASM selection and no fallback.

Refs #686
@owjs3901
owjs3901 marked this pull request as ready for review November 3, 2026 01:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant