musefs v1.1.0 — a feature and hardening release on top of v1.0.0. No breaking
changes; the read-only, byte-identical-audio invariant is unchanged.
Full detail in the CHANGELOG
and the documentation changelog.
Added
-v/--verboseflag onscanandmount(-vinfo,-vvdebug,-vvv
trace; defaultwarn) so diagnosing a run no longer requires knowingRUST_LOG
(an explicitRUST_LOGstill wins).mount --dry-runvalidates the--templateand configuration and prints a
sample of the paths the mount would expose (with file/dir counts), then exits
without mounting.- Runtime telemetry (
.musefs-metrics) — opt-in--expose-metrics
(envMUSEFS_EXPOSE_METRICS) surfaces a synthetic Prometheus-format metrics
file at the mount root: getattr/read/open activity, read-ahead behavior, and
(with jemalloc) allocator stats. Off by default
(docs, #394). - Scan progress indicator —
scan/scan --revalidaterender a live progress
bar on a terminal, falling back to periodicingested N/M (P%)log lines when
non-interactive; new--quiet/-qsuppresses it (#406). --skip-on-missingtemplate flag (envMUSEFS_SKIP_ON_MISSING) drops a
track from the mount when a top-level template field stays unresolved, instead
of substituting--default-fallback— e.g.--template '$!{beets_path}' --skip-on-missinghides tracks beets left without abeets_path(#408).--read-ahead-prefetchflag — opt-in background prefetch threads layered on
read amplification, default off (amplification alone captures the win; the
threads add ~10% overhead with no measured benefit) (#255).- riscv64 release platform — prebuilt
riscv64gc-unknown-linux-{gnu,musl}
binaries andlinux/riscv64Docker images now ship with each release. statfsreply — the mount reports a synthetic non-zero capacity sodfno
longer shows a 0-byte filesystem and capacity-checking importers (Lidarr et al.)
don't balk (#368).- Per-extension skip breakdown at end of scan (e.g.
skipped 42: jpg=20, cue=10, log=8, <none>=4), logged atwarn(#341). musefs vacuumcommand — compact the SQLite store (VACUUM+ WAL
checkpoint), reclaiming free pages left by prunes, orphan-art GC, and the schema
migration; run while unmounted (#566).
Changed
- Declared MSRV (
rust-version = "1.95") — a too-old toolchain now fails with
a clear cargo message; best-effort, not CI-gated. - Supply-chain license gate — a
deny.toml+cargo denyCI job enforces a
permissive-license allow-list, closing the gap left by advisory-only
cargo audit. - Strict template validation — an unclosed
[ … ]section or unterminated
${/$!{field is rejected at mount time with a message naming the problem,
instead of silently folding the rest of the template into the open construct.
Fixed
- Clearer mount errors — a missing or non-directory mountpoint is reported
with an actionable message before FUSE setup (previously a bareos error 2, or
a misleading "Permission denied" for a regular-file path); I/O errors no longer
print their OS string twice. - Silent mp4 oversize drops — oversized embedded
covrart and binary
freeform (----) values in.m4a/.m4bare skipped in the format layer and
now emit awarnline each, matching the other formats (#343). - xattr log noise —
getxattr/listxattr/setxattr/removexattrnow reply
ENOTSUPexplicitly instead of logging a[Not Implemented]warn on every
xattr probe (ls -l, indexers, backup tools); caller-visible result unchanged
(#364).
Prebuilt binaries for v1.1.0. Verify with: sha256sum -c <file>.sha256