astrid-runtime/astrid · error

-managed installs follow only stable; use a self-managed…

Error message

{method}-managed installs follow only stable; use a self-managed Astrid install for '{channel}'.

What it means

When the install method manages its own binary (e.g. Homebrew or cargo rather than Astrid's self-update), only the Stable channel is allowed for update notices. Selecting any other channel (beta/nightly) is rejected with guidance to use a self-managed install for prerelease channels. Package managers should not be told to install non-stable builds.

Solutions

  1. Use `--channel stable` (or omit the channel) for package-manager-managed installs.
  2. To follow beta/nightly, migrate to a self-managed install: download the official self-managed build and install it, then select the desired channel.
  3. If you need prereleases from the package manager, request them upstream (e.g. brew tap with a beta formula).

Example fix

// before
$ astrid self update --channel beta   # brew-managed install
error: homebrew-managed installs follow only stable...

// after
$ astrid self update                   # stable only for brew/cargo installs
# or switch to a self-managed install to use beta
Defensive patterns

Strategy: validation

Validate before calling

if install_method.manages_own_binary() && channel != UpdateChannel::Stable {
    eprintln!("managed installs only support the stable channel");
}

Prevention

When it happens

Trigger: Running `astrid self update --channel beta` (or nightly) on an install where method.manages_own_binary() is true — i.e. Astrid was installed via Homebrew/cargo — during run_self_update's managed-channel handling.

Common situations: Users who installed via `brew install astrid` or `cargo install` trying to switch to a prerelease channel; scripts that pass a non-stable channel unconditionally.

Related errors


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/422f67a5c5d10476. Report an issue: GitHub.

Appendix: source

Thrown at crates/astrid-cli/src/commands/self_update_notice.rs:145

        InstallMethod::Cargo => {
            format!("cargo install astrid --version ={selected_version} --force")
        },
        InstallMethod::SelfManaged => unreachable!("self-managed installs update in place"),
    })
}

pub(super) fn handle_managed_channel(
    method: InstallMethod,
    channel: UpdateChannel,
    current: &semver::Version,
    selected: &semver::Version,
    selected_version: &str,
) -> anyhow::Result<bool> {
    if !method.manages_own_binary() {
        return Ok(false);
    }
    if channel != UpdateChannel::Stable {
        bail!(
            "{}-managed installs follow only stable; use a self-managed Astrid install for '{}'.",
            method.label(),
            channel
        );
    }
    if selected == current {
        return Ok(false);
    }
    let how = managed_update_command(method, current, selected, selected_version)
        .expect("package-managed method has an update command");
    let message = if selected < current {
        format!(
            "The signed stable channel rolled back v{CURRENT_VERSION} → v{selected_version}. Apply the package-managed rollback with:\n  {how}"
        )
    } else {
        format!(
            "Astrid was installed via {}. Update to signed stable v{selected_version} with:\n  {how}",
            method.label()

View on GitHub (pinned to affd8760f4)