Skip to content

test(binding): validate native addon coverage on Linux (spike) - #796

Draft
owjs3901 wants to merge 4 commits into
fix/portable-binding-statefrom
feat/napi-binding
Draft

owjs3901 wants to merge 4 commits into
fix/portable-binding-statefrom
feat/napi-binding

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Refs #686 (napi phase 1). 이 Draft는 #794 (fix/portable-binding-state) 위에 쌓입니다. #794는 #752에 기존 디스크 상태 및 allocator-only 체크포인트 admission guard가 포함되기 전에 병합하면 안 됩니다. 두 PR 모두 Draft를 유지합니다.

요약

  • 현재는 승인된 중간 커밋 A입니다. 공통 libs/binding, WASM의 기계적 위임, 실제 N-API 백엔드, 25개 시나리오 원시 바이트 비교 하네스를 추가했습니다. 플러그인, plugin-utils 및 엔진 선택 옵션은 변경하지 않았습니다.
  • 공개 로더, 플랫폼 패키지 8개, 실제 제품 Rust/Bun 100%, 플랫폼 matrix, 패킹·릴리스 및 최적화 성능 검증은 아직 완료하지 않았습니다. 완료된 제품 배포 단계로 표시하지 않습니다.
  • 엄격한 native/WASM identity는 아직 RED입니다. 기존 396개 레코드 중 390·392의 setPrefix(false) / setPrefix(true)에서 WASM의 메모리 접근 RuntimeError와 native의 Error가 다릅니다. 이 두 실패를 제외하거나 정규화하지 않습니다. 승인된 별도 커밋 B에서 모든 인자 위치의 RED 테스트를 먼저 작성한 뒤 두 엔진에 동일한 TypeError 검증을 적용할 예정입니다.

동작

  • 공통 코어가 단일 stylesheet, 추출 결과, 예약 scratch 상태, 네 가지 결정론적 원시 export/import 및 두 종류의 reset을 소유합니다. JS 값과 resolver 핸들은 각 호스트 어댑터에 남습니다.
  • 네이티브 디코더는 원래 JS 값을 대상으로 기존 Rust Deserialize 구현을 호출합니다. Map/Set/struct 구분과 wasm32 인덱스 범위를 보존하며 JSON 변환으로 입력을 정규화하지 않습니다. JSON.stringify는 기존 WASM 형식의 오류 진단에만 사용합니다.
  • 비동기 풀, WASI, WASM 자동 폴백, 설치 시 컴파일, 스타일링 런타임은 추가하지 않았습니다. 현재의 private createBinding(raw)는 29개 이름과 추출 함수 인자 8개를 유지하지만 공개 패키지 로더의 대체 증거는 아닙니다.

새로 생기는 오류

중간 커밋 A는 기존 WASM의 동작을 변경하지 않습니다. 현재 native의 잘못된 prefix 인자 오류는 위의 알려진 RED이며 최종 정책이 아닙니다. 커밋 B에서는 잘못된 JS 타입에 대해 함수·인자·기대 타입을 명시한 동일한 TypeError를 두 엔진에서 상태 변경 전에 발생시키며, WASM의 잘못된 타입 메모리 trap이 TypeError로 바뀌는 변경을 명시적으로 검증합니다. 실제 extractor 위치 오류, 사용자 getter/iterator 예외 및 resolver callback 정책은 그대로 유지해야 합니다.

남는 한계

  • 실제 제품 소스의 Linux Node-host tarpaulin 100%와 Bun의 authored JS 100%는 미완료입니다. 기존 스파이크 19/19를 제품 커버리지로 대신하지 않습니다.
  • Linux Bun 1.4.3은 스파이크 애드온을 실제 실행하고 자연 종료했지만 Rust 애드온 프로파일을 남기지 않았습니다. 승인된 분리 정책에 따라 Rust 계측은 실제 Node 호스트로 검증하고, Bun은 동일 애드온 실행 및 JS 수준 동작·커버리지를 검증합니다. Bun 프로파일 수집 실험이나 Node 프로파일 재사용은 하지 않습니다.
  • 임시 스파이크 fixture/workflow는 실제 제품 커버리지 작업으로 교체한 뒤 함께 제거할 예정입니다. ci: fail the benchmark job on a Devup UI regression and keep a WASM size budget #746 WASM 크기 게이트와 모든 기존 임계값은 그대로 유지합니다.
  • npm 패키지 9개 이름 등록과 trusted publisher 설정은 유지보수자 사전 작업입니다. 이 작업에서는 게시나 공유 설정 변경을 하지 않습니다.
  • 프로세스 전역 native 상태는 독립 빌드의 병렬 격리를 보장하지 않습니다. 지원 대상 8개 플랫폼의 실제·에뮬레이션·cross-build 증거, libc/CPU 조건과 최신 Node musl 가용성은 아직 검증하지 않았습니다.

검증

  • 기존 스파이크 커밋 2b1b6b043의 Linux push 39476907124, PR 39476914451은 모두 SUCCESS입니다. Node 음성 대조군 16/19(의도한 임계값 실패), 동일 이미지 양성 19/19(100%), Bun 실제 실행은 자연 종료 0입니다. 이는 스파이크의 증거입니다.
  • 기존 현재 제품 트리 검증: workspace Rust 5,818/0, strict all-target/all-feature clippy, JS ESLint 및 fresh WASM 기계적 이동 회귀가 통과했습니다. full identity는 위의 두 실패 때문에 여전히 FAIL입니다.
  • 중간 커밋 A ddc9ea601decc4a84d715d255a2a613c1cb9c99b는 전체 31개 경로의 동일한 tree c30f21842fe66e9f0a17363d3fa2d05aff3a7dae를 한 번의 정상 훅으로 커밋하고 정상 push했습니다. 부분 스테이징, 훅 우회, amend, 강제 푸시는 없습니다. 훅의 Bun은 6,631개 통과·실패 0개·함수/줄 100%이며, Windows tarpaulin은 **96.66%(22,187/22,953줄)**입니다. 새 native 소스가 포함된 이 수치를 Linux 제품 100%로 주장하지 않습니다.
  • 훅은 기본 Rust stack, stable, jobs=2, CI unset, 12 GiB 소유 Job 하드 한도로 908.16초에 자연 종료 0이었습니다. 시작 여유 메모리 7.030 GiB, 샘플 peak RSS 5,476,687,872바이트, private 4,285,370,368바이트, 소유 프로세스 2,030개·잔여 0개·한도 초과 없음입니다.
  • 현재 DLL SHA256 101a803f634c564533bc4a594905d76686c79d545c261bbb786c6438c034e257를 실제 Node 26.12.0 / Bun 1.4.3에서 별도로 smoke 검증했습니다. 29개 ABI, arity 8, 인덱스 0/1/2147483648/4294967295 roundtrip, 실제 추출·스케일링, 의존성 배열 복사 및 해제 후 오류가 통과했습니다. 두 prefix RED도 그대로 기록했습니다.
  • 중간 커밋 A의 push CI 39527146351도 SUCCESS입니다. 아직 임시 scratch-controls 작업이므로 실제 제품 native Linux 100%, 전체 identity 또는 플랫폼 matrix의 통과를 뜻하지 않습니다.
  • LSP는 미설치 또는 기존 daemon 응답 제한으로 사용할 수 없어 LSP 무오류라고 주장하지 않습니다. 전체 제품의 최종 green, 플랫폼 패키징, Linux 100% 및 성능 완료를 주장하지 않습니다.

owjs3901 and others added 4 commits October 20, 2026 23:28
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

Approved intermediate baseline A. Strict identity remains RED only at records 390 and 392: false/true setPrefix throws a WASM memory-access RuntimeError but a native Error. The shared all-position TypeError validation fix follows in its own commit B; this baseline does not waive identity, actual Linux native coverage, JS coverage, packaging, release, matrix, WASM size or performance gates.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
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