jdx/mise · error · ShimUnsupportedError

formula uses `# `, which mise's source-build shim does not…

Error message

formula uses `#{feature}`, which mise's source-build shim does not support

What it means

After confirming the remote task path stays inside the Git checkout, mise checks the file type: only regular files and directories are accepted. Anything else (symlink, socket, fifo, device) is rejected with this error.

Solutions

  1. Point the remote task URL at a regular file or directory in the repo.
  2. Remove dangling/special symlinks from the remote task repository and re-resolve.
  3. Clear mise's remote task cache and retry after fixing the repo.
Defensive patterns

Strategy: validation

Validate before calling

// Ensure the remote path is a regular file or directory in the repo
p=$(git rev-parse --show-toplevel)/tasks/build.sh
[ -f "$p" ] && [ ! -L "$p" ] || echo "path must be a regular file"

Prevention

When it happens

Trigger: validate_remote_git_path (called by resolve_git_url_to_path / prepare_remote_path) encounters a path in the remote checkout whose symlink_metadata type is neither file nor directory — typically a dangling or special symlink, fifo, or device node.

Common situations: A remote task repository containing Unix special files or dangling symlinks; a URL path that resolves through a broken symlink; checking out on a filesystem that materializes special files oddly.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/126a3a6318e78c30. Report an issue: GitHub.

Appendix: source

Thrown at src/system/packages/brew/shim.rb:63

def ohai(*args)
  $stdout.puts "==> #{args.join(" ")}"
  $stdout.flush
end

def opoo(message)
  $stderr.puts "Warning: #{message}"
end

def odie(message)
  $stderr.puts "Error: #{message}"
  exit 1
end

class ShimUnsupportedError < StandardError; end

def shim_unsupported!(feature)
  raise ShimUnsupportedError,
        "formula uses `#{feature}`, which mise's source-build shim does not support"
end

module MiseDownload
  module_function

  # download with redirects into the cache, verify, return the path
  def fetch(url, sha256, context)
    raise "#{context}: missing sha256" if sha256.to_s.strip.empty?
    sha256 = sha256.to_s.strip.downcase
    raise "#{context}: malformed sha256" unless sha256.match?(/\A[0-9a-f]{64}\z/)

    MISE_BREW_CACHE.mkpath
    dest = MISE_BREW_CACHE + "#{sha256}--#{File.basename(URI(url).path)}"
    unless dest.file? && Digest::SHA256.file(dest).hexdigest == sha256
      ohai "Downloading #{url}"
      tmp = Pathname.new("#{dest}.incomplete")
      URI.open(url, "rb", redirect: true) do |remote|

View on GitHub (pinned to 533346cc37)