ramensoftware/windhawk · warning

{}: {}

Error message

{}: {}

What it means

A warning message logged during `data export`, formatted as '<mod_id>: <message>'. The core's exportUserData reports per-mod problems (e.g. mods skipped because their version or source was unusable) in summary.warnings, and the CLI echoes each one to stderr so the user knows which mods were left out of the archive.

Solutions

  1. Read the warning text after the mod id to see why it was skipped
  2. Fix the specific mod (reinstall it or restore its source file) and re-export
  3. Drop the broken mod from the selection if it isn't needed in the archive
  4. Treat the exit as success-with-warnings: the archive itself was still written
Defensive patterns

Strategy: validation

Validate before calling

let result: ExportUserDataResult = env.core.invoke_as("exportUserData", &params)?;
let broken: Vec<_> = result.summary.warnings.iter().map(|w| &w.mod_id).collect();
if !broken.is_empty() { eprintln!("mods not fully exported: {broken:?}"); }

Try / catch

match export(env, args) {
    Ok(r) if r.summary.warnings.is_empty() => println!("clean export"),
    Ok(r) => for w in &r.summary.warnings { eprintln!("{}: {}", w.mod_id, w.message) },
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Running `windhawk data export` when one or more installed mods cannot be fully exported — no recorded version, unreadable source, or a load failure — while the rest of the archive is still produced.

Common situations: Exporting an archive that includes a broken mod install; a mod whose source file was deleted or edited into an unreadable state; exporting in offline mode where repository sources can't be fetched.

Related errors


AI-assisted analysis of ramensoftware/windhawk@61d99ed8e1 (2026-09-12). Data as JSON: /api/errors/8aba3c346d391085. Report an issue: GitHub.

Appendix: source

Thrown at src/windhawk-core/cli/src/commands/data.rs:49

/// `data export`: build the selection from the flags, call `exportUserData`,
/// surface any per-mod warnings on stderr, and write the archive to the
/// destination.
pub fn export(env: &Environment, args: DataExportArgs) -> Result<Box<dyn CommandResult>, CliError> {
    let selection = build_selection(&SelectionFlags::from_export(&args))?;
    validate_export_per_mod_scope(env, &selection)?;
    let params = ExportUserDataParams {
        selection,
        options: ExportOptions {
            offline: args.offline,
        },
    };
    let result: ExportUserDataResult = env.core.invoke_as("exportUserData", &params)?;

    // Best-effort export: per-mod warnings go to stderr (they also ride in the
    // `--json` summary), matching `data export` in the plan.
    for warning in &result.summary.warnings {
        env.logger
            .warn(&format!("{}: {}", warning.mod_id, warning.message));
    }

    let to_stdout = args.out == "-";
    if !to_stdout {
        write_archive(&args.out, &result.archive, args.force)?;
    }

    Ok(Box::new(ExportResult {
        archive_to_stdout: to_stdout,
        archive: result.archive,
        out_path: (!to_stdout).then(|| args.out.clone()),
        warnings: result.summary.warnings,
    }))
}

/// `data inspect`: read the archive (file or stdin) and print its manifest.
/// Session-free.
pub fn inspect(core: &GatedCore, path: &str) -> Result<Box<dyn CommandResult>, CliError> {

View on GitHub (pinned to 61d99ed8e1)