• v2.3.1 711c2693eb

    Ghost released this 2026-07-28 14:09:10 +03:00 | 17 commits to main since this release

    v2.3.0 raised the packaged lifecycle contract. Every installed app
    validates a downloaded package against the contract it was built for,
    so it rejected the release — and then deferred that release's APK
    behind the module it had just rejected, on the rule that an app must
    not run ahead of a module that never landed. That rule is right when
    the package is suspect. Here the package was fine and the app was the
    stale half, so the deferral removed the only in-app way out and left
    sideloading the APK by hand as the sole path forward.

    A raised contract is now recognized as its own outcome before the
    generic invalid-package verdict, and it alone keeps the APK from being
    deferred: the app beside that module is exactly what can read it. The
    rejected module is dropped rather than staged, so nothing installs a
    package this build cannot drive, and the message says the app is being
    updated and the module update should be repeated afterwards instead of
    claiming the package failed an integrity check.

    Devices still on an app older than this cannot benefit from it — their
    build already made this decision — and need the APK installed once by
    hand.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    Downloads