Skip to content

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

Draft
owjs3901 wants to merge 13 commits into
mainfrom
feat/napi-binding
Draft

owjs3901 wants to merge 13 commits into
mainfrom
feat/napi-binding

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Refs #686 (napi binding). 이 Draft는 #794를 포함하고 base는 main입니다. 제품 head는 ba0ce49837b5a5468a7a2e9ca304963f68e0b7a7, tree는 85c4a495d09632b25942f1f4e9ddd61b340a6965이며 MAIN SETTLED 24a59576을 포함합니다. #794 선행 검토·병합과 Draft 해제는 유지보수자가 결정합니다.

요약

  • 공통 libs/binding, thin WASM 위임, 실제 N-API 백엔드와 원시 바이트 비교 위에 인자 검증·결정론·native 고정 비용 개선을 전달합니다. 두 엔진은 18개 함수의 45개 인자 위치에서 같은 진짜 TypeError를 반환합니다.
  • 실제 production addon을 LLVM 계측해 진짜 Node에서 실행하고 기존 root tarpaulin --objects에 전달합니다. 표준 보고서는 XML/stdout만 사용하고 CI --fail-under 100을 유지합니다. 제외, crate 제거, 보고서 병합, coverage cfg 우회나 임계값 완화는 없습니다.
  • 공개 로더/types·8개 플랫폼 패키지·9개 pack/clean consumer는 아직 후속 단계입니다. 공통 옵션의 최종 계약은 engine?: 'wasm' | 'native', 기본 native, WASM은 선택 모드 유지입니다. 플러그인 변경은 fix(plugin-core): align bundler resolution, roots and WASM diagnostics #755 merged 발표 이후입니다.

동작

  • JS 값을 JSON으로 사전 변환하지 않고 기존 Rust Deserialize로 읽습니다. wasm32 인덱스 범위, Map/Set/struct 구분, 원래 getter/iterator/resolver 호출 순서·예외·receiver·arity와 reset 소유권을 유지합니다.
  • preflight aliases는 schema 실패 또는 String 변환이 성공한 caught iterator 실패만 기본 처리합니다. raw access 및 변환 실패는 원래 identity로 core/resolver 전에 중단하며 재진입 전에 pending failure를 소비합니다. 추출·예약은 strict합니다.
  • WASM FileMap은 untrusted length hint로 speculative reserve하지 않고 실제 pair를 읽습니다. seedFileMap은 마지막 length가 검증·복사한 prefix보다 커지면 진짜 TypeError로 거절하며 원래 읽기 순서와 정상 shrinking을 유지합니다.
  • 비동기 풀, WASI, 자동 WASM fallback, 설치 시 컴파일, dependency pin과 클라이언트 스타일링 런타임은 추가하지 않았습니다. private createBinding(raw)의 29개 이름은 공개 npm 로더 완성 증거가 아닙니다.

고정 비용 개선

  1. resolver 없는 경로는 decode 이후 동일 지점에서 action(None)으로 분기해 사용하지 않을 failure Rc를 만들지 않습니다. 기존 최적화 Windows 코드의 0x48-byte allocation은 disassembly와 W74m-map-proof-02로 확인했습니다. resolver 활성 경로의 snapshot·수명·오류 replay는 그대로입니다.
  2. 기존 16개 private numeric operation이 owned operation 이름과 JS UTF-8 control string 변환을 대체합니다. 현재 ba0는 별도 MapStart16 통합도 포함합니다. metadata packet과 원래 사용자 값·키의 읽기 순서는 유지합니다. source-level 변환 제거이며 실제 JS allocation 수나 비용 우세를 주장하지 않습니다.
  3. private runner가 target을 직접 bare-call하여 호출마다 만드는 captured thunk 표현식을 제거합니다. callback 수·receiver·인자·큐·재진입·AsyncLocalStorage 관측은 유지합니다. JIT의 실제 closure heap allocation 제거를 측정했다고 주장하지 않습니다.
  4. callback 결과를 직접 반환하고 두 개의 불투명 lexical class-constructor identity로 Schema/Access를 구분해 바깥 status envelope를 제거합니다. 원래 entries/field/pair/next metadata는 유지하며, 다른 실제 함수 결과도 동일한 성공 변환으로 통과시킵니다. FnArgs Vec와 공개 Output 소유권은 바꾸지 않았습니다. 추가 handle/type/equality 작업까지 포함한 전체 호출 성능의 실제 측정과 남은 손실은 아래 최신 ba0 판정에 기록했습니다.

별도 확인·수정한 네 가지 parity 버그

  1. private index와 schema-slot이 교체 가능한 전역 Number를 호출하던 문제를 수정했습니다. index/slot은 typed u32, declared-field key는 static str로 전달하며 replaced/Proxy/throwing Number 회귀 검증을 유지합니다.
  2. primitive BigInt 변환이 WASM과 달리 전역 String을 호출하던 문제를 template 변환으로 수정했습니다. wasm32 경계 양쪽 입력과 기존 오류를 검증했습니다.
  3. byte 진단 운반이 추가로 Array.from을 관찰하던 문제를 수정했습니다. 기존 Uint8Array copy를 Rust에서 안전하게 decode하며 length/copy/set 관측은 유지합니다.
  4. Symbol.iterator property 접근 오류를 caught Reflect.get 영역에서 잘못 변환하던 문제를 수정했습니다. Symbol lookup을 앞에 두어 raw 오류 identity와 Symbol → Reflect 접근 순서를 WASM과 맞췄습니다.

Number 사용자 데이터 변환

전역을 바꾸지 않은 입력의 결과와 오류는 두 엔진이 동일해야 합니다. WASM이 사용자 데이터를 Number로 변환하는 위치에서 native는 같은 내장 ToNumber 의미를 사용하며 교체 가능한 전역 Number를 호출하도록 바꾸지 않습니다. 따라서 전역 Number를 교체했을 때만 알려진 엔진 차이가 남습니다. 별도 recording test의 실제 importFileMap({ probe: 8 })에서 native는 전역 호출 0회/값 8을 유지하고, WASM은 교체 함수를 1회 호출해 99를 가져오거나 원래 던진 객체를 전달합니다. Node/Bun 각각 두 엔진 3회씩 검증했으며 byte-equality corpus를 정규화하거나 이 차이를 숨기지 않았습니다. private key의 불필요한 Number 호출을 제거한 회귀 검증 및 Object.entries/Reflect 등의 관찰 계약은 그대로입니다.

결정론과 Native100

  • demanded local name과 namespace barrel exported-name 참조는 양쪽 엔진에서 사전순으로 평가합니다. 첫 일치 short circuit과 export * 소스 순서는 유지합니다. 실제 RED 그래프의 WASM resolver 방문은 ./right 대신 ./left로 바뀝니다.
  • nested Changed 상수는 가장 작은 객체 키를 선택합니다. 실제 두 변경 그래프의 WASM beta/4행 진단이 alpha/3행으로 바뀌고 두 엔진의 전체 진단 바이트가 같습니다.
  • 기존 171개 ID·순서·literal record prefix를 유지하고 두 회귀 사례를 추가한 173개 × 12 fresh process의 전체 Buffer가 독립 W74l 기준과 같습니다. 관측 순서 정렬, CSS 포맷 변경 또는 record 제거는 없습니다.
  • native-coverage는 integration target에만 필요한 test feature입니다. plain Cargo test는 Node 준비 없이 통과하며 feature만 켜고 준비하지 않으면 안내 오류로 실패하고 skip하지 않습니다. ignored-any는 nullish 검증 후 동일한 unit 방문 본문으로만 위임합니다.
  • 이전 run 40543120018의 네 선언부 miss는 zero-sized Visitor의 module-scope 이동과 동일한 explicit thin NAPI shim 전개로 수정했습니다. 이번 고정 비용 단위까지 실제 새 Linux report로 다시 100%를 확인했습니다.
#794 대비 범위 경로 수 Gross 추가+삭제 줄
현재 전체 71 8364
승인 상한 71 8832

두 generated Cargo.lock만 제외한 실제 diff입니다. 이전 4fd 단위의 13개 파일 stage 증거는 이력으로 보존합니다. 현재 ba0의 71경로/8364 gross와 실제 source·hook·표준 CI 증거를 확인했으며, 아래 이전 검증 절은 현재 ba0 수치로 전용하지 않습니다.

새로 생기는 오류

잘못된 binding 인자는 함수·인자·기대 타입을 표시하는 동일한 진짜 TypeError입니다. 예: setPrefix(false) → setPrefix(): argument prefix must be a string, null or undefined. 정상 string/null/undefined는 유지합니다. 새 위치 기반 source build error나 새로 거절하는 source는 없으며 기존 nested Change 진단 선택만 위 사전순 규칙으로 결정론화했습니다.

test feature를 수동으로 켜고 준비 환경을 누락하면 native coverage preparation is missing; run bun run test from the repository root 안내로 실패합니다. 일반 Cargo test나 제품 API에 이 준비 조건을 추가하지 않았습니다.

이전 4fd 검증 (이력)

  • 이번 단위 ONE normal hooked commit / ONE push: 4fd7d942. hook 감시 실행 1100.009s, 정상 exit 0, 남은 owned process 0입니다. commit tree가 테스트한 01deef24와 일치하며 worktree는 clean입니다.
  • 최신 로컬 Node 26.12.0 / Bun 1.4.4, jobs 2/default Rust stack에서 root build, 전체 lint(fmt/Clippy all-target·all-feature -D warnings/ESLint), plain Rust 9446개·25 suites가 통과했습니다.
  • Windows Bun 6252 + 868 pass / 0 fail, 두 All files row 모두 functions/lines 100.00/100.00입니다. 267개 invalid-input × 두 host, 73개 exception, seed-copy, 25-scenario identity와 private protocol 검증이 통과했습니다.
  • 현재 source의 실제 root LLVM 실행은 Windows 29163/29731(98.09%), native 438/447입니다. 아홉 Windows zero statement는 모두 정확한 5aa37ee source에 이미 존재하고 당시에도 zero였음을 이전 hook과 대조했습니다. 이것을 Linux 100% 대신 사용하지 않습니다. JS/JSON LSP 미설치와 Rust daemon timeout 때문에 clean LSP라고 주장하지 않습니다.

이전 4fd 표준 CI (이력)

40598951226, head 4fd7d942, attempt 1: COMPLETED / FAILURE이나 실패는 사용자 허용 wasm-size뿐입니다. publish / benchmark / release-compat / react-18 / vinext-rsc-css-e2e / webpack-extends-theme / landing-next-e2e는 모두 SUCCESS이며 job rerun은 없었습니다. PR은 Draft / MERGEABLE입니다.

실제 Linux Rust는 100.00% (20381/20381), production native 350/350, WASM boundary 18/18입니다. 이전 20347/20347 대비 +34 mapped denominator는 전부 native 316 → 350 증가분입니다. 같은 wide formatter 아래 numeric operation·scoped frame·분기 및 Visitor 이동이 반영된 실제 source mapping이며 native 밖의 denominator는 20031로 같습니다. 제외, source/report 대체 또는 분모 조작은 없습니다.

Native source Covered/Total
access.rs 65/65
de.rs 62/62
host.rs 69/69
lib.rs 60/60
output.rs 20/20
value.rs 74/74

Linux authored Bun은 6252 pass + Vite 867 pass / 기존 Windows-only skip 1개(868 discovered), 0 fail이며 두 All files row 모두 functions/lines 100.00/100.00입니다. skip은 #794와 동일한 serve-coherence-teardown-boundary.test.ts:9의 platform 조건이며 추가·완화하지 않았습니다. preload race regression 10개도 통과했습니다.

Metric Base bytes Candidate bytes Limit bytes 결과
wasm/raw 6396932 6414805 6461440 PASS
wasm/gzip 2292036 2298788 2315264 PASS
glue/raw 43165 49216 44032 FAIL (크기 면제)
glue/gzip 7327 9025 8192 FAIL (크기 면제)

사용자 결정으로 크기 RED만 허용하며 size-budget을 수정하거나 shrink하지 않았습니다. 이 문장은 당시 크기 면제의 범위를 설명한 이력입니다. 최신 성능 판정은 아래 별도 조정자 결정에 따릅니다.

최신 ba0 검증 및 성능 판정

ba0는 일반 map 시작을 MapStart16으로 통합하고, 진단 origin 선택과 별개의 순수 has_change 존재 검사를 세 boolean 소비자에 사용합니다. iterator/entries/length/오류·큐·ALS와 결정론적 진단 선택을 유지합니다. 새 위치 기반 source build error와 스타일링 런타임은 없습니다.

표준 CI 40639257898, head ba0ce49, attempt1: 실제 7개 job SUCCESS, 사용자 허용 wasm-size만 FAILURE입니다. Linux Rust 20399/20399, native 361/361(access75/de62/host69/lib60/output20/value75), boundary18/18입니다. 변경 없는 coverage route의 기존 negative control을 다시 실행하거나 새 source 증거로 바꿔 부르지 않았습니다.

최신 timing-only 40649575150, attempt1, 임시 hosting13aeeede: A fe04a70 / B ba0ce49. 3개 전체 artifact를 독립 검증했고 source/blob·분리 target·Compiling log·native/WASM 양쪽 image·원래173 및 별도6 queue Buffer·freeze·96process/518400관측/519936event·산술이 모두 유효합니다. CI와 원래 strict collector 판정은 FAILURE/accepted=false이며 임계값이나 데이터를 수정하지 않았습니다.

조정자 결정(2026-10-28): 위 유효 측정으로 #796 성능 단위를 문서화한 예외와 함께 종료합니다. #796에서 native transport 재설계를 하지 않습니다. 모든 nonempty cell 및 모든 host/replica corpus에서 native가 WASM보다 빠른 큰 순이익을 확인했습니다. 아래 empty-source 전체 호출 차이와 WASM B/A는 알려진 OPEN 항목으로 남기며, 모든 cell 합격이나 개별 연산 비용 귀속을 주장하지 않습니다.

Empty-source 고정 비용: 알려진 OPEN 항목

12개 전체 비교 중 10개가 NativeB/WASMB<=1을 실패합니다. 아래 값은 microseconds/call이며 delta는 native-WASM 전체 호출 차이입니다. Node 최대 약3.589us, Bun 최대 약0.697us로, request/access/Output 각 연산의 분리 측정은 아닙니다.

Replica Host Method Native B WASM B Delta Native/WASM
1 node codeExtract/empty/0 10.833156250001252 8.06781249997357 2.7653437500276823 1.3427625208241691
1 node codeExtractWithoutSourceMap/empty/0 10.714812499941218 8.261593750120255 2.4532187498209623 1.2969425541875927
1 bun codeExtract/empty/0 8.504843750003488 8.769906250023496 -0.265062500020008 0.9697759026763487
1 bun codeExtractWithoutSourceMap/empty/0 8.666531250000276 8.436156249842952 0.23037500015732348 1.0273080527831158
2 node codeExtract/empty/0 8.510687500006497 7.142406249897704 1.3682812501087938 1.19157146796689
2 node codeExtractWithoutSourceMap/empty/0 8.974250000022721 7.443218749983771 1.53103125003895 1.2056947809094403
2 bun codeExtract/empty/0 7.013562500063131 6.316875000010214 0.6966875000529171 1.110289898098631
2 bun codeExtractWithoutSourceMap/empty/0 6.857312499960244 6.8710937500782165 -0.013781250117972377 0.9979943149345305
3 node codeExtract/empty/0 11.941468750165996 8.352499999972451 3.588968750193544 1.4296879676989382
3 node codeExtractWithoutSourceMap/empty/0 11.499187500078278 8.80674999999087 2.692437500087408 1.3057243023919378
3 bun codeExtract/empty/0 8.7754687500734 8.229468750002411 0.5460000000709897 1.0663469315769416
3 bun codeExtractWithoutSourceMap/empty/0 8.808718750032085 8.117375000068705 0.6913437499633801 1.085168388790407

Corpus 절대값과 WASM B/A: 알려진 OPEN 항목

Replica Host Native B us/call WASM A us/call WASM B us/call WASM B/A Native B/WASM B
1 node 229.2771081081125 617.5743783783756 622.0127297297424 1.0071867478748406 0.36860517019921896
1 bun 233.88566216216702 566.6472432432486 566.3179459459468 0.999418867203135 0.41299355571629837
2 node 230.0509459459392 600.9810675675668 589.846121621621 0.9814720520381552 0.3900185785972058
2 bun 236.36663513513122 532.4825675675697 541.9153513513462 1.0177147278771328 0.436168922961337
3 node 236.93371621621782 620.7626486486636 643.0004864864821 1.035823414772503 0.3684813949533441
3 bun 235.99329729729806 561.4674729729682 568.4556891891854 1.0124463420458083 0.41514809647504136

Node WASM B/A median=1.0071867478748406은 <=1.01을 통과하지만 replica3=1.035823414772503은 <=1.03을 실패합니다. Bun의 각 replica는 <=1.03을 통과하지만 median=1.0124463420458083은 <=1.01을 실패합니다. 조정자는 필수 결정론적 순서 수정과 이 replica 분포를 감안해 이 PR의 순성능 이익을 수용했습니다. 이것은 strict rule 합격 또는 미확인 원인의 해결 주장이 아니라 명시적 예외입니다.

남는 한계 및 다음 단계

  • 위 empty-source 비용과 WASM B/A 항목은 OPEN이며, 이후 native-transport fixed-cost PR은 제안만 작성해 사용자 결정에 올립니다. #796에는 추가 transport 재설계나 측정 기반 tuning을 넣지 않습니다.

  • 다음 단위는 공개 @devup-ui/binding loader/types, 8 sibling package, 9 pack/clean consumer, release 순서와 최신 8 target provenance입니다. spike는 진짜 replacement가 입증된 뒤에만 제거합니다.

  • plugin 기본 native와 engine 선택은 fix(plugin-core): align bundler resolution, roots and WASM diagnostics #755 merged 발표 이후입니다. WASM 선택 모드는 유지합니다.

  • 두 엔진의 기존 전역 Number 교체 시 알려진 차이와 동시 독립 build 격리 한계는 그대로입니다. 새 위치 기반 source 오류0, 스타일링 런타임0이며 Draft 해제/merge/close/approve는 하지 않았습니다.

owjs3901 and others added 8 commits October 20, 2026 18:44
Refs #694

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>
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>
Refs #694

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>
@owjs3901
owjs3901 changed the base branch from fix/portable-binding-state to main October 27, 2026 05:04
owjs3901 and others added 3 commits October 27, 2026 21:51
Refs #686. Native performance: all 17 historical native-slower losses remain OPEN; the prescribed isolated Linux hosting measurement comes next.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Native100 coverage increment: +8 paths / +930 gross over 61 / 6432; total 69 paths / 7362 gross, excluding only the two generated Cargo.lock files.

Run the actual instrumented production addon in real Node through a test-only required feature and the existing tarpaulin --objects report. Plain Cargo tests need no preparation; the CI 100 percent gate is unchanged. Standard reports remain XML and stdout.

Sort namespace barrel exported-name references lexically, preserving first-match short circuit and star source order. Select the lowest object key containing a nested Change. WASM now visits ./left rather than ./right in the regression graph and reports alpha at line 3 instead of beta at line 4. Keep all original 171 raw cases unchanged and append two cross-engine regressions.

All 17 native-slower cells remain OPEN and unmeasured. This coverage build is not an optimized performance claim.

Refs #686

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Repair the four declaration-only Linux misses from run40543120018 (20329/20333). Hoist the existing zero-sized IndexVisitor and FileMapVisitor without changing their trait bodies, and expand five import/four export macros into explicit identical thin NAPI functions.

Preserve JS names/signatures, original argument reads and diagnostic slots, error identity and byte outputs. No exclusion, product cfg, threshold, report or workflow change. Current Native100 source envelope is69files/7374gross, a separate+8paths/+942gross over61/6432, excluding only the two generated Cargo.lock files.

Plain Cargo, root coverage, full lint and173x12real Node/Bun/native/WASM literal parity passed before this normal hook; all original171 and pre-repair173 record bytes remain unchanged. Linux100 remains the acceptance of the new standard CI.

The two previously approved lexical-order fixes remain; their WASM callback/diagnostic behavior change is documented in the prior commit. All17native-slower cells remain OPEN and current-unmeasured.

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 Oct 27, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
bindings/devup-ui-binding/src/access.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/de.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/host.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/lib.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/output.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/value.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/boundary.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/lib.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/reservation.rs 100.00% <ø> (ø)
bindings/devup-ui-wasm/src/state.rs 100.00% <100.00%> (ø)
... and 9 more
🚀 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 2 commits October 28, 2026 07:41
Fixed cost 1: dispatch action(None) before allocating the unused failure Rc. W74m-map-proof-02.json and W74m-resolver-asm-01.log.stdout prove the baseline optimized Windows 0x48-byte allocation. Keep the enabled resolver snapshot, lifetime and error replay unchanged.

Fixed cost 2: sixteen private numeric operations replace owned operation names and JS UTF-8 control strings. Fixed cost 3: the direct private runner removes the captured thunk. Fixed cost 4: direct callback results and two opaque class-constructor identities remove outer status envelopes. Source and neutrality proofs: W74m-protocol-review-02.md, W74m-rust-fixed-costs-01.md and W74m fixed-cost authority; all metadata packets, original objects/access order, callbacks/receiver/arity, Schema/Access/Host, preflight conversion, queues/reentry/ALS and public Output ownership remain.

Parity bug 1: use typed u32 private index/schema-slot keys and static-str declared fields, never replaceable global Number for private controls. Parity bug 2: use primitive BigInt template conversion without global String. Parity bug 3: safely decode the existing copied typed bytes as Uint8Array without Array.from, retaining length/copy/set observations. Parity bug 4: read Symbol.iterator before the caught Reflect.get region so raw fault identity and access order match WASM.

Record the approved Number(USERDATA) engine difference independently of parity records: with unmodified globals both engines decode the same values/errors; native retains intrinsic ToNumber, while replaced global Number is observed only by WASM. Keep all other dynamic intrinsic observations. The recording, private-key regressions and public identity scenarios pass on real Node26.12.0/Bun1.4.4 and both engines x3.

Local gates: root build and full lint; 9446 Rust tests in25suites/default stack; root6252 and Vite868 Bun tests with both100percent functions/lines; original173x12 complete raw Buffers equal the independent W74l oracle;267validations per host plus73exception and seed-copy equality. Real root LLVM includes the production addon; the nine Windows native zeros are the same exact sites already zero at5aa37ee0 (W74n-windows-zero-audit-01), never exclusions or hidden lines. Standard Linux100 remains mandatory before acceptance.

Scope is69paths/8038gross against#794, excluding only the two generated Cargo.lock files. All17historical native-slower comparisons remain OPEN; no native-PC attribution, cost dominance or final optimized hosting acceptance is claimed. No client styling runtime, dependency, source/alias/fixture tuning, newly rejected source or new located source build error.

Refs #686

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Consolidate general pair-map startup through private MapStart16, preserving all previous numeric tags and the existing FnArgs Vec callback transport. Retain exact iterator/entries/length ordering, raw versus wrapped origins, strict tagged metadata Host errors, preflight conversion/reentry, resolver timing, public metadata and owned Output behavior. No empty-input or benchmark-selected fast path.

Use a pure change-presence predicate at three boolean consumers rather than computing/retaining the lexical diagnostic origin. Keep origin selection, lexical resolver order and every consuming diagnostic path unchanged. Limit the legacy imported-constants edit to wiring and those three substitutions.

Default-stack Rust9449/25suites, full lint/Clippy, rebuilt root and optimized native, genuine70protocol+4raw-resolver checks, Node/Bun267invalid full-buffer parity,25identity scenarios perhost and four seed children pass. Original173-case420555-byte Buffers retain the independent oracle in all12children; six extra queue/ALS cases use a separate post-primary recorder. Both Bun lanes6252+868 pass with functions/lines100.

Scope71paths/8364gross, excluding only the two inherited generated Cargo.lock files; at most two new authored paths, explicit narrow legacy exception, all other touched modules<=250pureLOC. No dependency, pin, unsafe/cfg, coverage exclusion, new rejected source or styling runtime. Old B coverage remains retained, not transferred: new-source standard CI and unchanged full corrected timing are required. No performance acceptance is claimed.

Refs #686

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