atuinsh/atuin · error

please provide a new password

Error message

please provide a new password

What it means

The new-password value is empty. After resolving `--new-password` or interactive prompt, an empty string is rejected because the server would refuse or weaken the account; `run` bails before issuing the change request.

Solutions

  1. Provide a non-empty value via `--new-password`
  2. Type the new password at the interactive prompt
  3. Verify any password-generating step in your script actually produced output before invoking atuin

Example fix

// before
NEW_PW=$(maybe-generate-pw)  # may be empty
atuin account change-password --new-password "$NEW_PW"
// after
NEW_PW=$(openssl rand -base64 24)
atuin account change-password --new-password "$NEW_PW"
Defensive patterns

Strategy: validation

Validate before calling

: "${NEW_PW:?new password must be set}"
[ -n "$NEW_PW" ] || exit 1

Try / catch

atuin account change-password --new-password "$NEW_PW" ... || { echo 'empty new password'; exit 1; }

Prevention

When it happens

Trigger: Passing `--new-password ''`; an empty environment variable interpolated into the flag; pressing Enter at the 'Please enter the new password:' prompt without typing anything.

Common situations: Scripted password rotation where the generator produced empty output; shell variable expansion with unset vars; accidental Enter-skip during interactive prompt.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of atuinsh/atuin@900007c480 (2026-09-19). Data as JSON: /api/errors/01bafbef9070363f. Report an issue: GitHub.

Appendix: source

Thrown at crates/atuin/src/command/client/account/change_password.rs:42

        }

        let client = auth::auth_client(settings).await;

        let current_password = self.current_password.clone().unwrap_or_else(|| {
            prompt_password("Please enter the current password: ")
                .expect("Failed to read from input")
        });

        if current_password.is_empty() {
            bail!("please provide the current password");
        }

        let new_password = self.new_password.clone().unwrap_or_else(|| {
            prompt_password("Please enter the new password: ").expect("Failed to read from input")
        });

        if new_password.is_empty() {
            bail!("please provide a new password");
        }

        let mut totp_code = self.totp_code.clone();

        loop {
            let response = client
                .change_password(&current_password, &new_password, totp_code.as_deref())
                .await?;

            match response {
                MutateResponse::Success => break,
                MutateResponse::TwoFactorRequired => {
                    totp_code = Some(super::login::or_user_input(None, "two-factor code"));
                }
            }
        }

        println!("Account password successfully changed!");

View on GitHub (pinned to 900007c480)