Hmbown/CodeWhale · warning
no bundle is installed
Error message
no bundle is installed
What it means
`remove-bundle` reads the current connection record and its optional `bundle` field; this error fires when there is no connection record at all, or the record has `bundle: None` — install-bundle never completed or its record was already cleared. The command refuses to guess rather than delete anything, so nothing is removed when it triggers.
Source
Thrown at crates/tui/src/integrations/cli.rs:463
"installed: {} {} into {} (patch sha256 {})",
bundle.package_name,
bundle.package_version,
bundle.profile_dir.display(),
bundle.patch_sha256
);
println!(
"launch without --patch: dsh --profile {} (or `{CLI_COMMAND} launch`)",
dsh::bundle::BUNDLE_PROFILE
);
Ok(())
}
DshIntegrationCommand::RemoveBundle { yes } => {
let (paths, report) = status_report(config, workspace, false)?;
let bundle = report
.record
.as_ref()
.and_then(|r| r.bundle.as_ref())
.ok_or_else(|| anyhow::anyhow!("no bundle is installed"))?;
println!(
"remove-bundle will run: dsh plugin --profile {} remove {}",
bundle.profile, bundle.package_name
);
println!(" then delete only {}", paths.bundle_dir.display());
println!(
" the DSH profile dir {} and its app bundle link stay in place (DSH-owned)",
bundle.profile_dir.display()
);
confirm(
yes,
"Remove the Codewhale bundle from DSH profile `codewhale`?",
)?;
let removed = dsh::remove_bundle(&paths, &report.detection, &dsh::ProcessRunner)?;
println!(
"removed bundle; deleted {} Codewhale-owned file(s)",
removed.len()
);View on GitHub (pinned to 8880682c63)
Solutions
- Check `codewhale integrations dsh status` — the connected line only mentions a bundle when one is recorded
- If a previous install-bundle failed halfway, re-run install-bundle to completion first, then remove-bundle
- If the goal is removing the entire integration (overlay, receipt, bundle dir), use `codewhale integrations dsh remove` instead
- Treat this error as a no-op signal in automation: exit without action
Defensive patterns
Strategy: validation
Validate before calling
let (_paths, report) = status_report(config, workspace, false)?;
if report.record.as_ref().and_then(|r| r.bundle.as_ref()).is_none() {
println!("no bundle is installed; nothing to remove");
return Ok(());
} Type guard
fn bundle_present(report: &DshStatusReport) -> bool {
report.record.as_ref().and_then(|r| r.bundle.as_ref()).is_some()
} Prevention
- Make cleanup scripts treat 'no bundle installed' as success, not failure
- Correlate with `codewhale integrations dsh status` before remove operations
- After a failed install-bundle, complete an install before attempting removal
When it happens
Trigger: Running `codewhale integrations dsh remove-bundle` before any install-bundle, after a successful remove-bundle, after `remove` deleted the whole receipt, or when a prior install-bundle failed before writing the bundle record.
Common situations: Cleanup scripts that run remove-bundle unconditionally; retrying remove-bundle after it already succeeded; trying to clean up a half-finished install-bundle whose record was never written.
Related errors
- DSH is not connected; run `{CLI_COMMAND} connect`
- DSH is not connected; run `{CLI_COMMAND} connect` first
- --app must be `web` or `headless`, got `{app}`
- overlay is stale; run `{CLI_COMMAND} update` before install-
- dsh binary is unknown
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/3fd2c555e064b724.
Report an issue: GitHub.