v3.10.2

ruvnet/ruflov3.10.2May 25, 2026by ruvnet

AI Summary

This release adds native Windows support for plugin hooks without requiring WSL or Git Bash, addressing exit 126 errors on Windows. It introduces a Node.js-based shim that replaces bash scripts on Windows, along with init-time platform detection and comprehensive CI validation across Windows, macOS, and Ubuntu.

Key Highlights

  • Windows plugin hooks now work natively without WSL or Git Bash, fixing exit 126 errors
  • New Node.js shim (ruflo-hook.cjs) provides cross-platform plugin hook execution
  • Init-time platform detection generates Windows-specific settings to override bash hooks
  • New CI smoke tests across ubuntu + macos + windows-latest matrix
  • Static audit script enforces cross-platform standards in plugin hooks

New Features

  • Node.js shim (plugins/ruflo-core/scripts/ruflo-hook.cjs) - reads stdin JSON via Node, dispatches via child_process.spawn, exits 0
  • Windows init-time platform detection that writes .claude/settings.json with node-based hook overrides
  • Static audit script (scripts/audit-plugin-hooks-cross-platform.mjs) - enforces no /bin/bash, no POSIX-only pipelines, no .sh references
  • 3 new CI smoke jobs on ubuntu + macos + windows-latest matrix for shim invocation, init-generated settings, and end-to-end hook execution

Full Release Notes

## Highlights

**Windows plugin hooks** now work natively without WSL / Git Bash (#2132).

Reporter @marioja documented every offending plugin hooks.json file: `/bin/bash -c` invocations, POSIX-only pipelines (jq, xargs -0, tr), and .sh shim scripts that crashed on native Windows with exit 126 ("cannot execute binary file").

### What shipped
- **Node shim**: new `plugins/ruflo-core/scripts/ruflo-hook.cjs` (and copies in `.claude-plugin/scripts/` and `plugin/scripts/`) — cross-platform port of the bash shim, reads stdin JSON via Node, dispatches via child_process.spawn, always exits 0
- **Init-time platform detection**: `ruflo init` on Windows now writes a `.claude/settings.json` that overrides plugin bash hooks with node-based equivalents
- **Mac/Linux unchanged**: existing `ruflo-hook.sh` and plugin `hooks.json` byte-identical — Windows path is purely additive

### CI validation
- Static audit: `scripts/audit-plugin-hooks-cross-platform.mjs` enforces no `/bin/bash`, no POSIX-only pipelines, no `.sh` references in plugin hooks
- 3 new smoke jobs on **ubuntu + macos + windows-latest** matrix: shim invocation, init-generated settings, end-to-end hook execution (proves no exit-126)
- Test baseline preserved: 1999 passing | 46 skipped throughout

### Versions
- `@claude-flow/cli@3.10.1`
- `claude-flow@3.10.1`
- `ruflo@3.10.2`

All dist-tags (latest + alpha + v3alpha) updated.

šŸ¤– Generated with [RuFlo](https://github.com/ruvnet/ruflo)