- Run cargo fmt across entire workspace
- Create README.md files for all 9 EXO-AI crates
- Convert path dependencies to crates.io version dependencies for publishing
- Add [patch.crates-io] to exo workspace for local development
Co-Authored-By: claude-flow <ruv@ruv.net>
MultiHeadAttention::new() and RuvectorLayer::new() used assert!() for input
validation which caused fatal abort() when called from NAPI-RS/WASM bindings —
unrecoverable by JavaScript callers. Both now return Result<Self, GnnError>,
and all WASM/NAPI wrappers propagate errors as catchable JS exceptions.
Also fixes pre-existing mmap.rs test compilation error (grad_offset returns
Option<usize>, not usize).
Closes#216
Co-Authored-By: claude-flow <ruv@ruv.net>