Clarify desktop release qualification and stable-candidate lifecycle#9380
Merged
Conversation
Replace desktop blessing terminology with qualified-beta metadata, preserve legacy readers, add stable-candidate nomination, and require nomination before stable promotion with an audited break-glass path. Verification: - actionlint on the changed desktop and repo-check workflows - shellcheck desktop/macos/scripts/qualify-desktop-beta.sh (informational warnings only) - python3 desktop/macos/scripts/release-keyvalue.py self-test - python3 .github/scripts/test_check_desktop_release_promotion.py - python3 .github/scripts/check-desktop-release-terminology.py - python3 .github/scripts/check-desktop-prod-promotion-policy.py - python3 .github/scripts/check-release-process-guards.py - uv run --with pytest pytest -q backend/tests/unit/test_desktop_release_scripts.py (7 passed) - desktop/macos/scripts/qualify-desktop-beta.sh --help
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Bind stable nomination to the beta manifest source SHA, preserve immutable legacy manifest retries, harden the normal promotion shell path, and update the admin release dashboard to report the four canonical lifecycle states. Verification: - backend/.venv/bin/python -m pytest -q backend/tests/unit/test_desktop_release_scripts.py (8 passed) - python3 .github/scripts/test_check_desktop_release_promotion.py - python3 .github/scripts/check-desktop-prod-promotion-policy.py - python3 .github/scripts/check-desktop-release-terminology.py - python3 desktop/macos/scripts/release-keyvalue.py self-test - actionlint on changed release workflows - npx vitest run lib/__tests__/desktop-release-lifecycle.test.ts (7 passed) - npx tsc --noEmit - npm run build
Keep the desktop UserDefaults key ratchet at baseline by registering the TTS playback test override in DefaultsKey.\n\nVerification:\n- python3 scripts/check-userdefaults-key-ratchet.py (desktop/macos)\n- xcrun swift build -c debug --package-path Desktop (desktop/macos)
The PR description now names INV-CHAT-1 for the typed UserDefaults registration introduced while repairing the Hygiene ratchet.
Collaborator
Author
|
@cursor address merge conflict |
Collaborator
Author
|
@codex review |
|
Resolved the merge conflict with Conflict: Resolution:
Merged, committed, and pushed to |
Resolve DefaultsKey.swift conflict: keep single hasCompletedOnboarding case from this branch and adopt main's forceTTSPlaybackStartFalse doc comment. Co-authored-by: David Zhang <Git-on-my-level@users.noreply.github.com>
This was referenced Jul 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Closes #9377
Summary
qualifiedBeta*metadatablessed*metadata through canonical-first dual-read compatibilityStable nomination only edits GitHub release decision metadata. It does not move beta or stable pointers, mutate beta visibility, deploy a backend, or otherwise expose the release.
desktop_promote_prod.ymlremains the sole stable visibility workflow and still requiresconfirm=promote-stable.Compatibility
Existing releases that contain only
blessed,blessedSha,blessedAt,blessedTier, andblessedEvidenceremain valid qualification inputs for nomination and stable promotion.Independent review follow-up
source_shaset -uin normal stable promotionVerification
actionlintpassed for all changed workflowspython3 desktop/macos/scripts/release-keyvalue.py self-testpython3 .github/scripts/test_check_desktop_release_promotion.pypython3 .github/scripts/check-desktop-release-terminology.pypython3 .github/scripts/check-desktop-prod-promotion-policy.pypython3 .github/scripts/check-release-process-guards.pydesktop/macos/scripts/qualify-desktop-beta.sh --helpnpx vitest run lib/__tests__/desktop-release-lifecycle.test.ts(7 passed)npx tsc --noEmitnpm run build(admin production build passed)python3 scripts/check-userdefaults-key-ratchet.py(desktop raw-key count at baseline 184)xcrun swift build -c debug --package-path Desktop(passed; existing warnings only)Product invariants affected
codemagic.yamlis touched only for desktop release messaging; authentication behavior is unchanged. Existing manual production and channel-safety boundaries are preserved.UserDefaultsregistration only preserves an existing test override for voice playback; shared chat continuity and runtime behavior are unchanged.Changelog
Internal release/operator tooling only; no customer-facing changelog entry is needed.