fix(desktop): route update-failure logging through logClient, not console
console.error/console.warn only forward to the server when the client log level is debug/trace (default: info) — the earlier error-logging fix never actually surfaced anything, and a real update failure produced zero logs anywhere. desktop-updater.ts now calls logClient() directly, unconditionally, plus download-progress events. Also documents the resource-sync-park-systems branch misconfig (pointed at dev, Stacks are stage-tier) found while chasing this — full writeup on fleet-deployment-komodo.md.
This commit is contained in:
@@ -9,6 +9,17 @@
|
||||
// and never tries to resolve the Tauri APIs. Offline-first: a failed check (no
|
||||
// network — the appliance is usually offline) is swallowed; updates only happen
|
||||
// when someone has brought the box online (e.g. a phone hotspot) on purpose.
|
||||
//
|
||||
// A release build's console.error is invisible with no way to attach devtools
|
||||
// in the field (kiosk mode blocks the context menu; this WebKitGTK build's
|
||||
// remote inspector doesn't answer standard discovery endpoints either — both
|
||||
// confirmed dead ends 2026-09-03). logClient() ships straight to the
|
||||
// server-side app_logs store regardless of the client's console-forward log
|
||||
// level (that gate is meant for noisy console chatter, not this), so a real
|
||||
// post-accept install failure is visible via wiki/concepts/app-logs.md /
|
||||
// LogsViewer.tsx without needing a terminal or devtools at all.
|
||||
|
||||
import { logClient } from "./logger.js";
|
||||
|
||||
/** True when running inside the Tauri webview (not a normal browser). */
|
||||
function inTauri(): boolean {
|
||||
@@ -42,13 +53,24 @@ export async function checkForDesktopUpdate(
|
||||
// Download + install the signed update (signature verified against the
|
||||
// pubkey in tauri.conf.json), then relaunch into the new version.
|
||||
try {
|
||||
await update.downloadAndInstall();
|
||||
await update.downloadAndInstall((progress) => {
|
||||
logClient({
|
||||
level: "info",
|
||||
message: `desktop update download progress: ${progress.event}`,
|
||||
context: { kind: "desktop_update_progress", version: update.version, event: progress.event },
|
||||
});
|
||||
});
|
||||
} catch (err) {
|
||||
// A real update WAS found and accepted — this is a genuine install
|
||||
// failure (bad signature, corrupted download, disk/permission issue),
|
||||
// not "offline". Surface it instead of silently reverting to the old
|
||||
// version with no explanation.
|
||||
console.error("desktop update download/install failed:", err);
|
||||
logClient({
|
||||
level: "error",
|
||||
message: `desktop update download/install failed: ${err instanceof Error ? err.message : String(err)}`,
|
||||
stack: err instanceof Error ? err.stack : undefined,
|
||||
context: { kind: "desktop_update_install_failed", version: update.version },
|
||||
});
|
||||
throw err;
|
||||
}
|
||||
const { relaunch } = await import("@tauri-apps/plugin-process");
|
||||
@@ -56,7 +78,13 @@ export async function checkForDesktopUpdate(
|
||||
} catch (err) {
|
||||
// Offline / endpoint unreachable / no update server yet → ignore. The app
|
||||
// keeps running on the current version; checking again next launch. Still
|
||||
// log it so a real install failure (rethrown above) isn't invisible.
|
||||
console.warn("desktop update check/apply skipped:", err);
|
||||
// log it (info, not error — this path is expected/normal far more often
|
||||
// than it's a real problem) so a real install failure (rethrown above,
|
||||
// logged as error) isn't lost among routine offline checks.
|
||||
logClient({
|
||||
level: "info",
|
||||
message: `desktop update check/apply skipped: ${err instanceof Error ? err.message : String(err)}`,
|
||||
context: { kind: "desktop_update_skipped" },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user