jlcodes99/cockpit-tools · warning

[StartupPerf][UpdaterCommand] check_version_jump failed in {

Error message

[StartupPerf][UpdaterCommand] check_version_jump failed in {}ms: {}

What it means

The check_version_jump command compares current vs previously-run version to detect a version jump; on Err it logs '[StartupPerf][UpdaterCommand] check_version_jump failed in {ms}ms: {err}' and returns the error. It means the version-jump detection (reading stored last-version and comparing) failed.

Source

Thrown at src-tauri/src/commands/update.rs:116

}

/// Check if a version jump occurred (for post-update changelog display)
#[tauri::command]
pub fn check_version_jump() -> Result<Option<VersionJumpInfo>, String> {
    let started = Instant::now();
    let result = update_checker::check_version_jump();
    match &result {
        Ok(Some(info)) => logger::log_info(&format!(
            "[StartupPerf][UpdaterCommand] check_version_jump hit in {}ms: {} -> {}",
            started.elapsed().as_millis(),
            info.previous_version,
            info.current_version
        )),
        Ok(None) => logger::log_info(&format!(
            "[StartupPerf][UpdaterCommand] check_version_jump completed in {}ms: no jump",
            started.elapsed().as_millis()
        )),
        Err(err) => logger::log_error(&format!(
            "[StartupPerf][UpdaterCommand] check_version_jump failed in {}ms: {}",
            started.elapsed().as_millis(),
            err
        )),
    }
    result
}

/// Read release history from changelog files
#[tauri::command]
pub fn get_release_history(
    locale: Option<String>,
    limit: Option<usize>,
) -> Result<Vec<ReleaseHistoryItem>, String> {
    update_checker::get_release_history(locale.as_deref(), limit)
}

/// Write updater lifecycle logs from frontend into app.log

View on GitHub (pinned to 1ed8b77992)

Solutions

  1. Inspect the inner err to distinguish read vs write failure on the version marker.
  2. Check permissions on the config/data directory holding the version marker.
  3. Delete a corrupted version marker file so it is recreated on next startup.
  4. Retry after other startup update tasks complete to avoid file contention.
Defensive patterns

Strategy: fallback

Validate before calling

const marker = await readVersionMarker().catch(() => null);
if (marker !== null && !isValidVersion(marker)) await invoke('reset_version_marker');

Type guard

function isSemver(v: unknown): v is string {
  return typeof v === 'string' && /^\d+\.\d+\.\d+/.test(v);
}

Try / catch

try {
  const jump = await invoke('check_version_jump');
} catch (e) {
  // treat as 'no jump' and continue startup
  const jump = null;
  console.warn('version jump check skipped', e);
}

Prevention

When it happens

Trigger: update_checker::check_version_jump returns Err: cannot read the stored last-run version (settings/registry file access), or persisting the new version after a jump fails.

Common situations: First run after install/update with missing or corrupted version marker file; read-only config dir; concurrent startup writers locking the version store.

Related errors


AI-assisted analysis of jlcodes99/cockpit-tools@1ed8b77992 (2026-09-05). Data as JSON: /api/errors/d1ef645a2f24e121. Report an issue: GitHub.