mirror of
https://github.com/ruvnet/RuView.git
synced 2026-10-21 14:12:34 -05:00
CI fixes (both failures on PR #2062 were in this branch): - harness/ruview: remove `2.11.0` literals from training remedies; the ADR-265 D3 version-literal gate rejects them. - ruview-kernel workflow: install wasm32 for the toolchain pinned by v2/rust-toolchain (the action only added it to `stable`); build.mjs now fails fast with the exact `rustup target add` remedy. Kernel optimization (ADR-368 amendment): - New `analyze_flat` / `session_push_flat` ops via `call_f64`: WASM `rvk_call_f64` (alignment-agnostic bytes) and napi `callF64(Float64Array)`. `analyze()`/`session.push()` pack uniform frames automatically; irregular input keeps the JSON path and its per-frame errors. `analyzeFlat()` is the zero-copy entry. Shared `Session::step` makes both paths byte-identical on identical f64 inputs (Rust test), and the binary path avoids serde_json's non-correctly-rounded float parsing. - MEASURED (`ruview-kernel bench --seconds 120`, one Linux x64 host): 2.82x (wasm) and 2.45x (napi) faster than the JSON transport. - Profiled remaining cost (examples/profile_stages.rs): heart-rate ACF in wifi-densepose-vitals dominates; left for a separate, output-reviewed change. Rejected WASM +simd128 and opt-level=s after three measured runs (bench/wasm-variants.mjs). Device e2e (ADR-373 amendment): - test/e2e/devices.e2e.mjs + `npm run test:e2e:devices` + new workflow ruview-device-e2e.yml: pty-emulated MR60BHA2 and RPLIDAR through real pyserial, a UDP ESP32 node, and the real iPhone relay, via the CLI. - mmWave auto-detect keeps probe frames and reads only the remainder; iPhone LiDAR gains max_frames and returns immediately when refused. Suite wall time 19.6 s -> 5.6 s (MEASURED, dev container). Co-Authored-By: claude-flow <ruv@ruv.net> Claude-Session: https://claude.ai/code/session_015H55jmprfz4oHWXSFbX5rf
133 lines
4.6 KiB
YAML
133 lines
4.6 KiB
YAML
# ADR-368 — @ruvnet/ruview-kernel: build the WASM and napi-rs transports from
|
|
# source on every OS, run the Rust ABI tests, the package unit/security/e2e
|
|
# tests with the native addon REQUIRED, the wasm↔napi parity check, artifact
|
|
# verification, and the cross-package e2e through the @ruvnet/ruview
|
|
# metaharness. No publish step: publication stays CI-only via the release
|
|
# workflow and requires explicit maintainer approval (ADR-265).
|
|
|
|
name: ruview-kernel npm
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- 'v2/crates/ruview-kernel/**'
|
|
- 'v2/crates/ruview-kernel-napi/**'
|
|
- 'v2/crates/wifi-densepose-vitals/**'
|
|
- 'harness/ruview-kernel/**'
|
|
- 'harness/ruview/src/kernel.js'
|
|
- 'harness/ruview/test/kernel.test.mjs'
|
|
- '.github/workflows/ruview-kernel-npm.yml'
|
|
pull_request:
|
|
paths:
|
|
- 'v2/crates/ruview-kernel/**'
|
|
- 'v2/crates/ruview-kernel-napi/**'
|
|
- 'v2/crates/wifi-densepose-vitals/**'
|
|
- 'harness/ruview-kernel/**'
|
|
- 'harness/ruview/src/kernel.js'
|
|
- 'harness/ruview/test/kernel.test.mjs'
|
|
- '.github/workflows/ruview-kernel-npm.yml'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ruview-kernel-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
kernel:
|
|
name: kernel (${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 45
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
persist-credentials: false
|
|
# The v2 workspace lists submodule crates as members; cargo must be
|
|
# able to load every member manifest.
|
|
submodules: recursive
|
|
|
|
- name: Install Rust + wasm32 target
|
|
uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4
|
|
with:
|
|
targets: wasm32-unknown-unknown
|
|
|
|
# v2/rust-toolchain pins its own channel; the target must be installed
|
|
# for that toolchain, not only for the action's default `stable`.
|
|
- name: Add wasm32 target to the pinned v2 toolchain
|
|
working-directory: v2
|
|
run: rustup target add wasm32-unknown-unknown
|
|
|
|
- name: Cache cargo
|
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32
|
|
with:
|
|
workspaces: |
|
|
v2 -> target
|
|
v2/crates/ruview-kernel-napi -> target
|
|
|
|
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
with:
|
|
node-version: '22'
|
|
|
|
- name: Rust ABI tests
|
|
run: cargo test --manifest-path v2/Cargo.toml -p ruview-kernel --locked
|
|
|
|
- name: Build WASM + napi-rs artifacts from source
|
|
working-directory: harness/ruview-kernel
|
|
run: npm run build
|
|
|
|
- name: Verify artifacts (checksums, zero WASM imports, ABI)
|
|
working-directory: harness/ruview-kernel
|
|
run: node scripts/verify-artifacts.mjs --require-wasm
|
|
|
|
- name: Package tests (napi required)
|
|
working-directory: harness/ruview-kernel
|
|
env:
|
|
RUVIEW_KERNEL_REQUIRE_NAPI: '1'
|
|
run: npm test
|
|
|
|
- name: Doctor, self-test, and wasm↔napi parity (SYNTHETIC)
|
|
working-directory: harness/ruview-kernel
|
|
run: |
|
|
node bin/cli.js doctor --strict-napi
|
|
node bin/cli.js selftest --backend wasm
|
|
node bin/cli.js selftest --backend napi
|
|
node bin/cli.js parity
|
|
|
|
- name: Pack
|
|
working-directory: harness/ruview-kernel
|
|
run: |
|
|
npm pack --dry-run
|
|
# Relative destination: Windows runner temp paths contain
|
|
# backslashes that bash globbing would mangle.
|
|
mkdir -p dist-pack
|
|
npm pack --pack-destination dist-pack
|
|
|
|
- name: Cross-package e2e through the @ruvnet/ruview metaharness
|
|
working-directory: harness/ruview
|
|
run: |
|
|
npm ci --ignore-scripts
|
|
npm install --no-save --ignore-scripts ../ruview-kernel/dist-pack/ruvnet-ruview-kernel-*.tgz
|
|
node --test test/kernel.test.mjs
|
|
node bin/cli.js kernel --backend auto
|
|
|
|
- name: Upload built artifacts
|
|
if: matrix.os == 'ubuntu-latest'
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: ruview-kernel-linux-x64
|
|
path: |
|
|
harness/ruview-kernel/wasm/ruview_kernel.wasm
|
|
harness/ruview-kernel/wasm/SHA256SUMS
|
|
harness/ruview-kernel/native/*.node
|
|
harness/ruview-kernel/native/SHA256SUMS
|
|
retention-days: 14
|