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
- Read the warning text after the mod id to see why it was skipped
- Fix the specific mod (reinstall it or restore its source file) and re-export
- Drop the broken mod from the selection if it isn't needed in the archive
- 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", ¶ms)?;
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
- Check summary.warnings before assuming the archive is complete
- Reinstall mods that show warnings and re-export
- Validate the archive by importing it into a test profile
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
- the mod has no recorded version, so it was not exported
- the mod's source , so it was not exported
- the mod source , so its settings were not exported; this…
- Failed to load metadata for mod
- the mod could not be loaded, so it was not exported
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", ¶ms)?;
// 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)