Hmbown/CodeWhale · error · anyhow::Error

pass --all to stop all Fleet work

Error message

pass --all to stop all Fleet work

What it means

The Fleet Stop subcommand intentionally stops all Fleet work; refusing an ambiguous stop without --all is by design, so calling it without the flag bails immediately. This is a guard against accidentally stopping only part of (or all of) the fleet without explicit consent.

Solutions

  1. Re-run the command with --all to stop all Fleet work
  2. Update automation/scripts to include --all
  3. If partial stopping is intended, use the targeted stop/resume variant with a run id instead

Example fix

// before
codewhale fleet stop
// after
codewhale fleet stop --all
Defensive patterns

Strategy: validation

Validate before calling

if stop_requested && !args.all {
    eprintln!("refusing: pass --all to stop all Fleet work");
    std::process::exit(2);
}

Prevention

When it happens

Trigger: Running `codewhale fleet stop` (or the equivalent) without passing `--all` — the FleetCommand::Stop arm checks the `all` boolean first.

Common situations: Typing the stop command omitting the flag; scripted stops that predate the --all requirement; muscle memory from other CLIs where bare stop is allowed.

Understand the failure class

Background: "--flag is required" and "must specify" CLI errors: how missing-required-flag validation works and how to fix it — this error's family across 20 libraries.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22). Data as JSON: /api/errors/fccb6d33883fab80. Report an issue: GitHub.

Appendix: source

Thrown at crates/tui/src/lib.rs:3483

            Ok(())
        }
        FleetCommand::Resume {
            run_id,
            stale_after_seconds,
        } => {
            let manager = manager.with_stale_after(Duration::from_secs(stale_after_seconds.max(1)));
            emit_fleet_receipt(&fleet_control::execute_fleet_control_with(
                ControlSurface::Cli,
                workspace,
                fleet_context,
                &manager,
                ControlOperation::FleetResume,
                Some(&run_id),
            ))
        }
        FleetCommand::Stop { all } => {
            if !all {
                bail!("pass --all to stop all Fleet work");
            }
            let stopped = manager.stop_all()?;
            println!("stopped: {stopped}");
            Ok(())
        }
        FleetCommand::AlertDryRun(args) => {
            let class = alert_event_class(args.event);
            let adapter = alert_adapter(&args);
            let event = FleetAlertEvent {
                class,
                run_id: FleetRunId::from(args.run_id.clone()),
                worker_id: args.worker_id.clone(),
                task_id: args.task_id.clone(),
                status: alert_status(class, args.status.clone()),
                reason: args.reason.clone(),
            };
            let dispatcher = FleetAlertDispatcher::new(
                FleetAlertConfig::dry_run_for_adapter(adapter),

View on GitHub (pinned to 73e0f67d83)