{phaseMessage ?? "Starting…"}
{recovered && (It was still in progress when the app last closed. Picking it back up.
)}{staleness.known ? snapshot ? `Running on a saved image from ${snapshot}.` : "Running on a saved image older than the current base." : probeUnavailable ? "This container predates base-image tracking, so probing it is the only way to tell whether it is behind — and that did not complete." : "This container predates base-image tracking, so it was probed directly."}
{staleness.missing_features.length > 0 && ({staleness.known ? "Missing: " : "The probe found these missing: "} {features}.
)} {staleness.missing_features.length === 0 && staleness.missing_paths.length > 0 && ({staleness.known ? "Missing: " : "The probe found these missing: "} {staleness.missing_paths.join(", ")}
)} {/* Deliberately "differ" rather than "behind": the count is a drift measure, not a promise that every one of them is newer. */} {staleness.outdated_package_count > 0 && ({staleness.outdated_package_count} package {staleness.outdated_package_count === 1 ? "" : "s"} differ from the versions on the current base, where security updates land.
)} {staleness.probe_error && (Some checks did not complete: {staleness.probe_error}
)} {/* An out-of-date container that also has data under /var is the one case where updating can cost something, so it is said here and not only behind the button. */} {staleness.unpreserved_data.length > 0 && (Not carried across:{" "} {staleness.unpreserved_data.map((d) => d.path).join(", ")} {" "} — back this up before updating.
)} {!canMigrate && ({/* Distinguishing these matters: "stop the container" on a container that is already stopped, because the probe has not landed, reads as a bug. */} {!probeSettled ? probing ? "Checking what this container has that the current base does not…" : "That check did not complete, so what would be carried across is not known. Updating stays disabled until it does — try again once the container can be inspected." : "Stop the container to update its base."}
)}