v3.5.14

ruvnet/ruflov3.5.14Mar 6, 2026by ruvnet

AI Summary

This release (v3.5.14) focuses on critical security hardening and Windows cross-platform compatibility. It implements 5 security fixes (ADR-061) including replacing execSync with execFileSync, adding buffer size limits, and input validation for plugin names and IPFS CIDs. Additionally, it addresses Windows hook stability issues (ADR-062) by using `node script subcommand` patterns and adding 500ms stdin timeouts.

Key Highlights

  • Security hardening: replaced execSync with execFileSync and added 10MB MAX_BUFFER to prevent command injection and unbounded stdout
  • Added input validation for plugin names (validatePackageName()) and IPFS CID format before network requests
  • Windows compatibility fix: hook commands now use `node script subcommand` pattern with `cmd /c` prefix to prevent stdin pipe hanging
  • Fixed 7 correctness issues including CFP magic-number check, MCP partial-JSON buffering, and GCS credential loading
  • Test coverage expanded to 1600 tests across 23 suites with 10 new deep test suites

New Features

  • Security: execFileSync replaces execSync for GCS storage to prevent command injection
  • Security: 10MB MAX_BUFFER constant prevents unbounded stdout capture
  • Security: validatePackageName() sanitizes plugin names before shell use
  • Security: IPFS CID format validation before network requests
  • Security: Buffer size limits added to all execSync calls
  • Windows: Hook commands use `node script subcommand` to avoid shell quoting issues
  • Windows: `cmd /c` prefix bypasses PowerShell stdin pipe hanging
  • Windows: 500ms stdin timeout prevents hanging
  • Windows: process.exitCode = 0 guaranteed in all hook scripts
  • Fix: SubagentEnd → SubagentStop hook event name corrected
  • Restore: Valid SubagentStart hook event restored

Full Release Notes

## v3.5.14 (2026-03-06)

### Security Fixes (ADR-061)
- **S-1**: Replace `execSync` with `execFileSync` to prevent command injection in GCS storage
- **S-2**: Add `MAX_BUFFER` constant (10MB) to prevent unbounded stdout capture
- **S-3**: Add `validatePackageName()` to sanitize plugin names before shell use
- **S-4**: Add IPFS CID format validation before network requests
- **S-5**: Add buffer size limits to all `execSync` calls

### Correctness Fixes (ADR-061)
- **D-1**: Fix CFP magic-number check (use `subarray`, not `slice`)
- **D-2**: Fix unsupported format error (throw instead of silent fallback)
- **D-3**: Fix MCP partial-JSON accumulator (per-session buffering)
- **D-4**: Fix duplicate provider registration guard
- **D-5**: Fix memory namespace parameter passthrough
- **D-6**: Fix process command error handler (use `err.message`)
- **D-7**: Fix GCS credential loading (resolve path, validate fields)

### Cross-Platform Windows Hooks (ADR-062)
- Hook commands use `node script subcommand` (no shell quoting issues)
- `cmd /c` prefix on Windows bypasses PowerShell stdin pipe hanging
- StatusLine uses plain `node` (no `cmd /c`) for proper stdin forwarding
- 500ms stdin timeout prevents Windows hanging
- `process.exitCode = 0` guaranteed in all hook scripts
- Fix invalid `SubagentEnd` → `SubagentStop` hook event name
- Restore valid `SubagentStart` hook event

### Testing
- 1600 tests passed across 23 test suites
- 10 new deep test suites covering security, plugins, MCP tools, memory, CLI parsing

### Packages
| Package | Version | Install |
|---------|---------|---------|
| `@claude-flow/cli` | 3.5.14 | `npx @claude-flow/cli@latest` |
| `claude-flow` | 3.5.14 | `npx claude-flow@latest` |
| `ruflo` | 3.5.14 | `npx ruflo@latest` |

### Upgrade
```bash
npx ruflo@latest init
# or
npx claude-flow@latest init
```

This regenerates `.claude/settings.json` with cross-platform hook commands.