v3.38.9
ruvnet/ruflov3.38.9Aug 13, 2026by ruvnet
AI Summary
Fixes a critical bug in the `PathValidator` that rejected paths on macOS due to symlink handling differences, specifically breaking the `ruflo proxy install` command.
Key Highlights
- Fixed symlinked prefix rejection on macOS
- Resolved `proxy install` failures on macOS
- Implemented ENOENT-tolerant fallback for path resolution
Full Release Notes
## Fixes **#3010 — `PathValidator` rejected everything under a symlinked prefix, breaking `ruflo proxy install` on macOS.** `validate()` canonicalized the candidate path through `fs.realpath` but the constructor only ever `path.resolve()`d the allowed prefixes — so on macOS, where `os.tmpdir()` is reached through a symlink (`/var` → `/private/var`), the realpath'd candidate could never match the non-realpath'd prefix, and every path under it — including the prefix's own contents — was rejected as "outside allowed directories." Download and Ed25519 signature verification both succeeded during proxy install; it then failed on this defense-in-depth path check. Fixed by realpath-ing prefixes at construction time too, with the same ENOENT-tolerant fallback `validate()` already uses for candidates. ## Links - PR: [#3013](https://github.com/ruvnet/ruflo/pull/3013) (#3010) - Previous release: [v3.38.8](https://github.com/ruvnet/ruflo/releases/tag/v3.38.8) (#2962 — provider/model config propagation)