Skip to content

v1.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Jun 22:27
· 1 commit to main since this release

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/--verbose flag on scan and mount (-v info, -vv debug, -vvv
    trace; default warn) so diagnosing a run no longer requires knowing RUST_LOG
    (an explicit RUST_LOG still wins).
  • mount --dry-run validates the --template and 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
    (env MUSEFS_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 indicatorscan/scan --revalidate render a live progress
    bar on a terminal, falling back to periodic ingested N/M (P%) log lines when
    non-interactive; new --quiet/-q suppresses it (#406).
  • --skip-on-missing template flag (env MUSEFS_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-missing hides tracks beets left without a beets_path (#408).
  • --read-ahead-prefetch flag — 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 and linux/riscv64 Docker images now ship with each release.
  • statfs reply — the mount reports a synthetic non-zero capacity so df no
    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 at warn (#341).
  • musefs vacuum command — 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 deny CI 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 bare os 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 covr art and binary
    freeform (----) values in .m4a/.m4b are skipped in the format layer and
    now emit a warn line each, matching the other formats (#343).
  • xattr log noisegetxattr/listxattr/setxattr/removexattr now reply
    ENOTSUP explicitly 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