- Fix WASM glue: detect Node.js properly instead of relying on fetch()
(fetch on file:// URLs fails in Node.js 18-21)
- Support both CJS require() and ESM import via exports map
- Add .mjs ESM wrapper for dual-format support
- Remove "type": "module" for CJS compatibility
- Bump rvf-wasm to 0.1.5
- Add build-rvf-node.yml CI workflow for cross-platform NAPI builds
(linux-x64-gnu, linux-arm64-gnu, darwin-x64, darwin-arm64, win32-x64-msvc)
- Fix wasm-dedup-check CI: use --ignore-scripts --omit=optional to avoid
EBADPLATFORM errors from platform-specific workspace packages
Co-Authored-By: claude-flow <ruv@ruv.net>
- Fix WASM glue: detect Node.js properly instead of relying on fetch()
(fetch on file:// URLs fails in Node.js 18-21)
- Support both CJS require() and ESM import via exports map
- Add .mjs ESM wrapper for dual-format support
- Remove "type": "module" for CJS compatibility
- Bump rvf-wasm to 0.1.5
- Add build-rvf-node.yml CI workflow for cross-platform NAPI builds
(linux-x64-gnu, linux-arm64-gnu, darwin-x64, darwin-arm64, win32-x64-msvc)
- Fix wasm-dedup-check CI: use --ignore-scripts --omit=optional to avoid
EBADPLATFORM errors from platform-specific workspace packages
Co-Authored-By: claude-flow <ruv@ruv.net>
- Build NAPI native addon (linux-x64-gnu, 1.3MB) and WASM binary (42KB)
- Fix NodeBackend to use RvfDatabase class instance methods instead of module-level functions
- Fix WasmBackend to use C-ABI store functions with integer handles
- Add platform loader (index.js) and TypeScript declarations (index.d.ts)
- Create JS glue and type declarations for WASM package
- Set up platform-specific npm packages for all 5 targets
- Bump rvf-node/rvf-wasm to 0.1.4, SDK to 0.1.6
- Fix version pins from 0.1.0 to ^0.1.4
Resolves: rvf-node and rvf-wasm published as empty stubs with no binaries
Verified: E2E test passes (create -> ingest -> query -> status -> close)
Co-Authored-By: claude-flow <ruv@ruv.net>
- Build NAPI native addon (linux-x64-gnu, 1.3MB) and WASM binary (42KB)
- Fix NodeBackend to use RvfDatabase class instance methods instead of module-level functions
- Fix WasmBackend to use C-ABI store functions with integer handles
- Add platform loader (index.js) and TypeScript declarations (index.d.ts)
- Create JS glue and type declarations for WASM package
- Set up platform-specific npm packages for all 5 targets
- Bump rvf-node/rvf-wasm to 0.1.4, SDK to 0.1.6
- Fix version pins from 0.1.0 to ^0.1.4
Resolves: rvf-node and rvf-wasm published as empty stubs with no binaries
Verified: E2E test passes (create -> ingest -> query -> status -> close)
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add introductory paragraph explaining RVF's structural security model
- Expand Security & Trust tables with TEE attestation, KernelBinding,
adversarial hardening details
- Upgrade Security Hardening from bullet list to defense table
- Add live_boot_proof as example #45, update counts to 46
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add introductory paragraph explaining RVF's structural security model
- Expand Security & Trust tables with TEE attestation, KernelBinding,
adversarial hardening details
- Upgrade Security Hardening from bullet list to defense table
- Add live_boot_proof as example #45, update counts to 46
Co-Authored-By: claude-flow <ruv@ruv.net>
- rvf-launch: add missing retrieval_quality field to SearchResult
- rvf-node: add match arms for new Security/QualityBelowThreshold error variants
- rvf-node: use struct update syntax for new QueryOptions fields
- rvf-runtime: add missing domain_expansion_present field in tests
Co-Authored-By: claude-flow <ruv@ruv.net>
- rvf-launch: add missing retrieval_quality field to SearchResult
- rvf-node: add match arms for new Security/QualityBelowThreshold error variants
- rvf-node: use struct update syntax for new QueryOptions fields
- rvf-runtime: add missing domain_expansion_present field in tests
Co-Authored-By: claude-flow <ruv@ruv.net>
Plans the integration path for .rvf acceptance test verification into
the npm ecosystem:
- npx ruvector rvf verify-witness <file.rvf> (N-API + WASM fallback)
- npx rvlite verify-witness <file.rvf> (WASM via cli-rvf.ts)
- rvlite SDK verifyWitnessChain() for browser-side verification
- MCP tool rvf_verify_witness for Claude Code agents
- 5-phase implementation plan, each independently shippable
Bridges the rvf_witness_verify WASM export (ADR-037) to end users
without requiring the Rust toolchain.
https://claude.ai/code/session_01RnwD4x5cbpB7FPvoyYQz8G
Plans the integration path for .rvf acceptance test verification into
the npm ecosystem:
- npx ruvector rvf verify-witness <file.rvf> (N-API + WASM fallback)
- npx rvlite verify-witness <file.rvf> (WASM via cli-rvf.ts)
- rvlite SDK verifyWitnessChain() for browser-side verification
- MCP tool rvf_verify_witness for Claude Code agents
- 5-phase implementation plan, each independently shippable
Bridges the rvf_witness_verify WASM export (ADR-037) to end users
without requiring the Rust toolchain.
https://claude.ai/code/session_01RnwD4x5cbpB7FPvoyYQz8G
Add self-contained acceptance test artifact that external developers can
run offline and reproduce identical graded outcomes:
- SHA-256-linked witness chain: every puzzle decision (skip_mode,
context_bucket, steps, correct) hashed into a tamper-evident chain.
Changing any single bit invalidates everything downstream.
- Deterministic replay: frozen seeds → identical puzzles → identical
solve paths → identical chain_root_hash. Two runs with the same
config produce the same hash, proven by test.
- JSON manifest: config, per-mode scorecards (A/B/C), all six ablation
assertions with measured values, full witness chain, chain root hash.
- Verifier: re-runs with same config, recomputes chain, compares root
hash. Mismatch means non-identical outcomes.
- CLI binary: `acceptance-rvf generate -o manifest.json` to produce,
`acceptance-rvf verify -i manifest.json` to verify.
66 lib tests + 20 integration tests pass.
https://claude.ai/code/session_01RnwD4x5cbpB7FPvoyYQz8G
Add self-contained acceptance test artifact that external developers can
run offline and reproduce identical graded outcomes:
- SHA-256-linked witness chain: every puzzle decision (skip_mode,
context_bucket, steps, correct) hashed into a tamper-evident chain.
Changing any single bit invalidates everything downstream.
- Deterministic replay: frozen seeds → identical puzzles → identical
solve paths → identical chain_root_hash. Two runs with the same
config produce the same hash, proven by test.
- JSON manifest: config, per-mode scorecards (A/B/C), all six ablation
assertions with measured values, full witness chain, chain root hash.
- Verifier: re-runs with same config, recomputes chain, compares root
hash. Mismatch means non-identical outcomes.
- CLI binary: `acceptance-rvf generate -o manifest.json` to produce,
`acceptance-rvf verify -i manifest.json` to verify.
66 lib tests + 20 integration tests pass.
https://claude.ai/code/session_01RnwD4x5cbpB7FPvoyYQz8G
Fixed policy sign flip (Mode A):
risk_score = R - 30*D (was R + 30*D)
Distractors now reduce effective range, making Mode A conservative
under distractors. This is the defensible control arm: a rational
fixed agent should be more cautious when distractors are present.
Mode C must learn to outperform this baseline.
EarlyCommitPenalty wired into bandit reward:
SkipModeStats now tracks early_commit_penalty_sum per arm.
reward() includes robustness_penalty = 0.2 * avg_penalty.
This means Mode C can actually learn to avoid early wrong commits
in distractor-heavy contexts. Previously the penalty was only
printed, not optimized.
Context buckets expanded to 18:
3 range (small/medium/large) × 3 distractor (clean/some/heavy)
× 2 noise (clean/noisy) = 18 buckets.
Previous: 4 range × 2 distractor = 8 (too coarse for bandit).
Noise flag now flows through AdaptiveSolver.noisy_hint.
New ablation assertion:
c_penalty_better_than_b: Mode C EarlyCommitPenalty must be ≤90%
of Mode B penalty. Proves robustness improvement is explicit,
not just noise_accuracy-based.
Acceptance test noise plumbing:
solver.noisy_hint set to true for noisy puzzles in both training
and holdout evaluation. Context buckets now correctly distinguish
clean vs noisy conditions.
81 tests passing (61 lib + 20 integration).
https://claude.ai/code/session_01RnwD4x5cbpB7FPvoyYQz8G
Fixed policy sign flip (Mode A):
risk_score = R - 30*D (was R + 30*D)
Distractors now reduce effective range, making Mode A conservative
under distractors. This is the defensible control arm: a rational
fixed agent should be more cautious when distractors are present.
Mode C must learn to outperform this baseline.
EarlyCommitPenalty wired into bandit reward:
SkipModeStats now tracks early_commit_penalty_sum per arm.
reward() includes robustness_penalty = 0.2 * avg_penalty.
This means Mode C can actually learn to avoid early wrong commits
in distractor-heavy contexts. Previously the penalty was only
printed, not optimized.
Context buckets expanded to 18:
3 range (small/medium/large) × 3 distractor (clean/some/heavy)
× 2 noise (clean/noisy) = 18 buckets.
Previous: 4 range × 2 distractor = 8 (too coarse for bandit).
Noise flag now flows through AdaptiveSolver.noisy_hint.
New ablation assertion:
c_penalty_better_than_b: Mode C EarlyCommitPenalty must be ≤90%
of Mode B penalty. Proves robustness improvement is explicit,
not just noise_accuracy-based.
Acceptance test noise plumbing:
solver.noisy_hint set to true for noisy puzzles in both training
and holdout evaluation. Context buckets now correctly distinguish
clean vs noisy conditions.
81 tests passing (61 lib + 20 integration).
https://claude.ai/code/session_01RnwD4x5cbpB7FPvoyYQz8G