tinyhumansai/openhuman · error

OpenClaw workspace not found at {}. Provide a valid source w

Error message

OpenClaw workspace not found at {}. Provide a valid source workspace.

What it means

`migrate_openclaw_memory` resolves the source workspace — the explicit `source_workspace` argument, else the default `~/.openclaw/workspace` — and refuses to run when that path does not exist. The importer will not fabricate an empty migration report from a missing source; the message echoes the resolved path so you can see which location was checked.

Source

Thrown at src/openhuman/config/migration_helpers/core.rs:44

}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationReport {
    pub source_workspace: PathBuf,
    pub target_workspace: PathBuf,
    pub dry_run: bool,
    pub stats: MigrationStats,
    pub warnings: Vec<String>,
}

pub async fn migrate_openclaw_memory(
    config: &Config,
    source_workspace: Option<PathBuf>,
    dry_run: bool,
) -> Result<MigrationReport> {
    let source_workspace = resolve_openclaw_workspace(source_workspace)?;
    if !source_workspace.exists() {
        bail!(
            "OpenClaw workspace not found at {}. Provide a valid source workspace.",
            source_workspace.display()
        );
    }

    if paths_equal(&source_workspace, &config.workspace_dir) {
        bail!("Source workspace matches current OpenHuman workspace; refusing self-migration");
    }

    let mut stats = MigrationStats::default();
    let entries = collect_source_entries(&source_workspace, &mut stats)?;
    let mut warnings = Vec::new();

    if entries.is_empty() {
        warnings.push(format!(
            "No importable memory found in {}",
            source_workspace.display()
        ));

View on GitHub (pinned to 7491200858)

Solutions

  1. Pass the real source workspace path explicitly to the migration call.
  2. Restore or mount the OpenClaw data at `~/.openclaw/workspace` (the default resolution) and retry.
  3. Check the path exists before invoking; if OpenClaw was never installed, skip this migration entirely.

Example fix

// before
let report = migrate_openclaw_memory(&config, None, false).await?;

// after — explicit, verified source
let src = PathBuf::from("/data/openclaw-backup/workspace");
if !src.is_dir() { anyhow::bail!("no OpenClaw data at {}", src.display()); }
let report = migrate_openclaw_memory(&config, Some(src), false).await?;
Defensive patterns

Strategy: validation

Validate before calling

let src = source_path.unwrap_or_else(|| home.join(".openclaw").join("workspace"));
if !src.is_dir() {
    // OpenClaw not present on this machine — skip the migration instead of calling it
    return Ok(None);
}
let report = migrate_openclaw_memory(&config, Some(src), dry_run).await?;

Prevention

When it happens

Trigger: Invoking the OpenClaw memory migration with no explicit source path on a machine where `~/.openclaw/workspace` does not exist, or with an explicit path that is wrong (typo, different user's home, unmounted volume).

Common situations: Running the migration on a machine where OpenClaw was never installed; running as a different user than the one owning the data; containerized cores where the OpenClaw dir is not mounted; typo'd custom source path.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/21d35d247cce3afe. Report an issue: GitHub.