diff --git a/CHANGELOG.md b/CHANGELOG.md index 796bbc1f..dbc2dd78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **The prefetch lane meter is labelled `Utilization` and shows its history** ([#355](https://github.com/samsoir/xearthlayer/issues/355)): The Prefetch System pane's meter shows how much of the prefetch lane is in use, from 0% at rest to 100% with every slot busy. It was labelled `Capacity`, which names the fixed size rather than the share in use; it now reads `Utilization`, aligned with the `Prefetch` row above it. Beside the meter a sparkline shows the lane's utilization over the last twelve seconds, one cell per second, each the average of that second, scaled against a full lane so a half-busy lane always draws at half height. The other panes' sparklines show the last twelve draws, 1.2 seconds at the dashboard's refresh rate, which is too short to read a trend from. +#### FUSE + +- **fuse3 is updated to 0.10.0** ([#155](https://github.com/samsoir/xearthlayer/issues/155)): XEarthLayer's fork of the fuse3 crate now follows the upstream 0.10.0 release, which includes the configurable FUSE kernel limits XEarthLayer contributed earlier this year. The fork is down to three macOS fixes that upstream has not taken yet. Nothing changes in how scenery is mounted or served. + ### Fixed #### Dashboard diff --git a/CLAUDE.md b/CLAUDE.md index 3d5e2050..2ade88f4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -604,7 +604,7 @@ matrix jobs are renamed. ## Platform Support - **Linux**: ✅ Fully working (native FUSE) -- **macOS**: ✅ Working (requires [macFUSE](https://macfuse.io); Apple Silicon tested; fuse3 pinned to `samsoir/fuse3` `master` (upstream + `configurable-background` plus the macOS reply-resilience patch — upstream PR [Sherlock-Holo/fuse3#137](https://github.com/Sherlock-Holo/fuse3/pull/137) — comma-joined mount options, and reply-drop log demotion); install/approval guide in `docs/macos.md`) +- **macOS**: ✅ Working (requires [macFUSE](https://macfuse.io); Apple Silicon tested; fuse3 pinned to `samsoir/fuse3` `master`: upstream master at 0.10.0, which already has the configurable `max_background`/`congestion_threshold`, plus three macOS-only commits (the reply-resilience patch, upstream PR [Sherlock-Holo/fuse3#137](https://github.com/Sherlock-Holo/fuse3/pull/137); comma-joined mount options; reply-drop log demotion). The fork is synced by merging upstream, never by rebasing: released `Cargo.lock` files pin its commits (tag `xel-0.5.0` marks the one v0.5.0 pins); install/approval guide in `docs/macos.md`) - **Windows**: ⏳ Planned (requires Dokan/WinFSP) ## References diff --git a/Cargo.lock b/Cargo.lock index a2258958..7da174be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1145,8 +1145,8 @@ dependencies = [ [[package]] name = "fuse3" -version = "0.9.0" -source = "git+https://github.com/samsoir/fuse3?branch=master#8b3e390eec32466837f688ac6d39f801f3750c89" +version = "0.10.0" +source = "git+https://github.com/samsoir/fuse3?branch=master#a7314f9c5df248d7fcded5dd3d62634069be94d9" dependencies = [ "async-notify", "bytes", diff --git a/xearthlayer/Cargo.toml b/xearthlayer/Cargo.toml index 7685e01d..137c986b 100644 --- a/xearthlayer/Cargo.toml +++ b/xearthlayer/Cargo.toml @@ -24,10 +24,12 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "local- time = { version = "0.3", features = ["formatting", "local-offset"] } tracing-appender = "0.2" # FUSE library - fuse3 is the active implementation (async multi-threaded) -# Temporary fork: samsoir/fuse3 `master` = upstream + configurable-background -# (max_background/congestion_threshold) plus macOS reply-resilience and mount-option -# fixes. Required for 0.5.x (macOS support) until these patches ship on crates.io; +# Temporary fork: samsoir/fuse3 `master` = upstream master (0.10.0, which carries +# our configurable max_background/congestion_threshold) plus three macOS fixes: +# reply resilience (upstream PR #137), comma-joined mount options, and reply drops +# logged at debug. Required for 0.5.x (macOS support) until these ship on crates.io; # revert to the published fuse3 release then. See #155. +# Never rewrite that branch's history: released Cargo.lock files pin its commits. fuse3 = { git = "https://github.com/samsoir/fuse3", branch = "master", features = ["tokio-runtime", "unprivileged"] } libc = "0.2" regex.workspace = true diff --git a/xearthlayer/tests/macfuse_smoke.rs b/xearthlayer/tests/macfuse_smoke.rs index 60ce767f..c95ec02d 100644 --- a/xearthlayer/tests/macfuse_smoke.rs +++ b/xearthlayer/tests/macfuse_smoke.rs @@ -14,6 +14,15 @@ //! //! Ignored by default because it needs macFUSE installed and the kext loaded. //! Run with: `cargo test --test macfuse_smoke -- --ignored --nocapture` +//! +//! Run it in a terminal on the Mac itself, not over SSH. macOS treats a +//! macFUSE mount as a network volume and attributes an SSH session to +//! `/usr/libexec/sshd-keygen-wrapper`, which has no permission to open files +//! on one: the mount succeeds and the first read through it fails with +//! `Operation not permitted` (EPERM). The filesystem never returns EPERM +//! itself, so that error always means macOS refused the caller. To run over +//! SSH anyway, give `sshd-keygen-wrapper` Full Disk Access under System +//! Settings > Privacy & Security. #![cfg(target_os = "macos")]