Skip to content

Keep the desktop app recoverable after update preparation fails #544

Open

Description

@Mjones13

An observed desktop update from source 5e6b0dfe to 292cdb1a stopped the app during preparation, then refused with Process inspection failed; signal withheld. The helper retained the previous app/state but wrote a non-terminal blocked journal and did not reopen the app. Subsequent launches hit the native activation startup fence and exited through stderr only, leaving no visible recovery path.

Source inspection at 292cdb1a2c84f5b4539793636e2bfac674f9af92, re-anchored against db0388cb, identifies five connected gaps:

  • A refusal before bundle/state replacement leaves blocked rather than a proved terminal recovery outcome and does not relaunch the previous app.
  • Startup refusal is invisible when launched normally from the desktop.
  • Recording blocked loses the earlier phase, while the existing reconciliation entry requires an already-running app.
  • Process identity relies on strict ps text parsing and discards the diagnostic output. The precise incident trigger remains unknown; local probes did not reproduce it.
  • The next update executes the helper embedded in the currently installed app, so delivery of a fixed helper needs explicit first-transition qualification.

Done when:

  • Proven failures before replacement preserve the previous app/state and reopen the app; unknown or potentially effective failures remain held.
  • Recovery retains sufficient phase/effect evidence and a visible startup error or recovery route that does not depend on an already-running app.
  • Process identity remains exact and fail-closed, with bounded diagnostic evidence and supported-macOS qualification.
  • Existing desktop journal compatibility, recovery locks, paired rollback, and activation verification remain intact.
  • Focused regression tests and a disposable packaged-Mac acceptance run cover the observed failure chain and first update into the fixed build.

A detailed planning-only Engineering Spec, spec.jones-update-recovery-hardening, covers the desktop slice alongside separate VPS recovery work. No implementation or rollout has started. Exact process-inspection trigger and verification-delay causes remain open investigations.

Related: #490 tracks broader packaged desktop qualification; #542 tracks the distinct VPS failed-operation ledger problem. This issue records outstanding work and grants no implementation or host-operation authority.

Activity

  1. Mjones13 commented on Oct 29, 2026

    @Mjones13
    ContributorAuthor

    Campaign JS-A11 current-source attribution at 88523084054b1159d31ab5ec183a71cfa7be3a5d (all cited merge commits verified ancestors):

    • #684, merge ea598fde1e21acbf4b63a87f78ee72a56abf039a, implements proved pre-effect settlement/reopening and retains unknown-effect holds.
    • #696, merge 92043de32b4f28eb429dfffd04453407c151bb72, adds the startup classification/recovery and visible refusal path before state initialization.
    • #710, merge b581fdc218e84a4a31a2862a1ce508abfd8634a4, completes kernel identity handling with strict historical-proof compatibility. The underlying original incident trigger remains unknown; source tests do not establish that trigger.
    • #777, merge 3f9ab4a2d709e08bbf153751094b9af44d223122, advances recovery harness controls and expressly does not qualify the actual package matrix. The original body’s “no implementation ... has started” is now stale; these source slices are delivered. Their PRs retain exact checks and platform skips.

    The active App Installs and Background Updates owner (146b5dc0-e3b4-4755-be07-8812bc8dafbc) retains packaged qualification. It confirmed its current read-only candidate is frozen at 3f9ab4a2/tree 5fe8a41d: seven actual Linux crash/restart prefixes and released 292cdb1a archive/admission compatibility passed. Full recovery matrix and disposable packaged-Mac failure-chain/first-transition acceptance remain unproved; Linux evidence cannot substitute for them. No competing recovery implementation or installed transition is being started by this campaign.

    Keep open. Remaining actor: that existing qualification owner; resume on its complete attributable package/Mac receipts and, separately, any owner-authorized operational window. Original journal, recovery-lock, paired-rollback and activation-verification criteria remain in force. No installation/restart/adoption is authorized or claimed here.

  2. Mjones13 commented on Nov 5, 2026

    @Mjones13
    ContributorAuthor

    Additional packaged-macOS evidence from an owner-authorized laptop update on November 5, 2026:

    • Installed source d37ebd88db3cada84d025eeaca01b2a323e342df staged exact candidate 7b391d894f0edb4d135208c25c50653626bc59ee. Native preparation failed with Native preparation transport failed (TIMEOUT) before activation. The preparation was withdrawn and retired, with no bundle swap.
    • The install-plan coordinator retained the operation as running (Installing · restarting) with only Check again. Repeated refresh and app restart did not settle it. Installed-source inspection shows runLaptop returning the unchanged plan when the operation binding already matches, even after a failed result; reconcile also skips the install step.
    • Nonsecret session metadata showed the renderer's cached desktop bearer revoked at preparation time. The renderer became offline, while the server remained live. An ordinary quit/reopen restored its connection. This is a correlated credential-lifecycle observation, not a proven full causal chain.
    • Recovery succeeded through the already-installed native manual-install route using the exact staged candidate and clone-required policy. Its receipt proves a complete database/settings clone, previous app preservation, exact-process shutdown, swap and LaunchServices launch. Fresh HTTP readiness and the desktop build footer both verify the candidate version/source. No partial backup or fabricated preparation/continuation receipt was used.
    • Residual: even on the verified candidate, the original install-plan operation still reads Installing · restarting; Check again does not reconcile the successful ordinary recovery. The actual installation is healthy.

    Please retain this as a concrete regression case for terminal preparation-failure settlement, renderer connection recovery, and reconciliation against a verified replacement generation. This operational recovery did not implement a source fix or qualify the broader packaged failure matrix.

  3. Mjones13 commented on Nov 6, 2026

    @Mjones13
    ContributorAuthor

    Related recovery work delivered in #854, #855 and #857. These changes reconcile retired desktop install status, distinguish verified ordinary recovery from warm commitment, admit strictly validated completed receipt-only staging remnants before native effects, and provide source-qualified reconciliation for abandoned macOS preparation jobs. Required checks and applicable packaged platform/lifecycle qualification passed.

    The explicitly requested fleet update is operationally verified: desktop and three existing servers run the same qualified source 8dd90ff9e3d41e7ba9ac1c81bceb4f973734314b; retired desktop status is cleared, native server transactions committed, and normal update checks return current or a qualified newer build. No partial state copy was accepted as a full backup.

    Keeping this issue open: these bounded repairs do not satisfy every broader startup visibility, process-inspection diagnostic, and first-transition recovery criterion above. The original transient native image-attachment cause and historical admission delay were not established; no causal fix for those is claimed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions