Skip to content

refactor(release): restore single macOS artifact#10192

Closed
Git-on-my-level wants to merge 19 commits into
mainfrom
ci/restore-single-artifact-macos
Closed

refactor(release): restore single macOS artifact#10192
Git-on-my-level wants to merge 19 commits into
mainfrom
ci/restore-single-artifact-macos

Conversation

@Git-on-my-level

@Git-on-my-level Git-on-my-level commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Restore the macOS release contract to one Omi.app / Omi.zip / lowercase omi.dmg identity (bundle ID com.omi.computer-macos).
  • Keep release preparation, manifest registration, qualification, install smoke, and Beta/Stable promotion on the same immutable candidate contract.
  • Lock the named installer step to one exact raw YAML run: | block. Its contents are compared byte-for-byte after only YAML-indentation and final-newline normalization; shell comments or syntax are never interpreted.

Product invariants affected

  • INV-AUTH-1

Verification

  • RED → GREEN installer mutation suite: bash desktop/macos/tests/test-test-install-workflow-contract.sh. RED: the prior comment stripper accepted the executable no-whitespace mutation --dir "$DOWNLOAD_DIR"#$(gh release download "$TAG" --repo BasedHardware/omi --pattern "*.dmg" --dir "$DOWNLOAD_DIR").
  • GREEN: the admitted exact canonical literal block passes. The corpus rejects the command-substitution mutation above, no-whitespace literal/parameter/backtick # forms, comments and blank/executable additions, folded or modified run syntax, every competing pattern/download/wrapper mutation; an unrelated YAML mutation passes to prove the guard is scoped to the named run block.
  • bash desktop/macos/tests/test-signed-artifact-smoke.sh; python3 desktop/macos/scripts/release-keyvalue.py self-test; bash desktop/macos/tests/test-qualify-desktop-beta-contract.sh; python3 .github/scripts/check-desktop-prod-promotion-policy.py; python3 .github/scripts/check-release-process-guards.py; uv run --with pytest pytest .github/scripts/test_check_release_process_guards.py — passed.
  • actionlint -ignore 'SC2086|SC2129' desktop/macos/.github/workflows/test-install.yml; git diff --check; make preflight with this live PR body; bounded pre-push acceptance gate — passed.

Failure class

Failure-Class: none

Overlap

  • Preserves automatic-only qualified-to-Beta handoff and manual Stable promotion semantics; this PR does not deploy, publish, change endpoints, alter release pointers, or touch secrets/apps.

@mintlify

mintlify Bot commented Jul 21, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
omi 🟢 Ready View Preview Jul 21, 2026, 7:39 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@mintlify

mintlify Bot commented Jul 21, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
omi 🟡 Building Jul 21, 2026, 7:39 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

Git-on-my-level and others added 16 commits July 22, 2026 00:45
Return Beta to a channel pointer over the immutable Omi.zip and omi.dmg pair; remove the separately packaged beta identity while retaining qualification, CAS, and same-byte stable promotion.\n\nVerification: backend focused desktop release/update tests; release manifest/candidate scripts; 94 focused Swift tests; swift build; make preflight.
Validate the named installer run blocks as executable shell content and reject decoy release-download patterns.

Failure-Class: none
Reject wrapped and duplicate release-download invocations with a strict admitted installer command grammar.

Failure-Class: none
Compare the named installer literal block directly to its admitted raw canonical form, rejecting shell-comment and substitution disguises.

Failure-Class: none
Bind the raw canonical installer block to the sole literal id: download step and reject canonical-name/block decoys, aliases, and non-literal run forms.

Failure-Class: none

Verification: bash desktop/macos/tests/test-test-install-workflow-contract.sh; bash desktop/macos/tests/test-signed-artifact-smoke.sh; git diff --check
Failure-Class: none

RED: Ruby YAML/actionlint-valid dead-branch DMG reassignment, dead-branch ditto alternate source, and exit-before-ditto mutations passed the old presence-only --check guard.

GREEN: bash desktop/macos/tests/test-test-install-workflow-contract.sh; bash desktop/macos/tests/test-signed-artifact-smoke.sh; actionlint -shellcheck= desktop/macos/.github/workflows/test-install.yml; git diff --check.
Failure-Class: none

RED: Ruby YAML/actionlint-valid canonical-job decoys with an alternate executable test-install job, plus a workflow defaults shell override, passed the prior --check guard.

GREEN: bash desktop/macos/tests/test-test-install-workflow-contract.sh; bash desktop/macos/tests/test-signed-artifact-smoke.sh; actionlint -shellcheck= desktop/macos/.github/workflows/test-install.yml; git diff --check.
Reject top-level defaults and env from their Ruby safe-YAML semantics, while preserving the exact raw test-install job contract. Cover quoted, escaped, explicit-key, and tagged bypass spellings plus malformed jobs topology.

RED: newly added actionlint-valid quoted defaults mutation passed the parent checker, demonstrating the lexical-key bypass.

GREEN: bash desktop/macos/tests/test-test-install-workflow-contract.sh; bash desktop/macos/tests/test-signed-artifact-smoke.sh; actionlint -shellcheck= desktop/macos/.github/workflows/test-install.yml; git diff --check.

Failure-Class: none
Bind the workflow to an exact canonical top-level prefix, require a plain unique jobs AST, and compare the selected test-install mapping against the complete-job fixture. This closes permission, cancellation, tagged-key, and alternate-key semantic bypasses while allowing ordinary unrelated jobs.

RED: actionlint-valid permissions {contents: none} and !!binary test-install replacements passed the parent checker.

GREEN: bash desktop/macos/tests/test-test-install-workflow-contract.sh; bash desktop/macos/tests/test-signed-artifact-smoke.sh; actionlint -shellcheck= desktop/macos/.github/workflows/test-install.yml; bash -n desktop/macos/tests/test-test-install-workflow-contract.sh; git diff --check.

Failure-Class: none
The test-test-install-workflow-contract.sh test calls actionlint to
validate mutated workflow YAML before contract checking. The
desktop-swift-tests job on macos-15 never installed actionlint, so the
test exited with code 127 and failed both Desktop Swift Test Suites and
the downstream Desktop Swift Build & Tests gate.

Failure-Class: none
@Git-on-my-level
Git-on-my-level deleted the ci/restore-single-artifact-macos branch July 21, 2026 18:41
@github-actions

Copy link
Copy Markdown
Contributor

Hey @Git-on-my-level 👋

Thank you so much for taking the time to contribute to Omi! We truly appreciate you putting in the effort to submit this pull request.

After careful review, we've decided not to merge this particular PR. Please don't take this personally — we genuinely try to merge as many contributions as possible, but sometimes we have to make tough calls based on:

  • Project standards — Ensuring consistency across the codebase
  • User needs — Making sure changes align with what our users need
  • Code best practices — Maintaining code quality and maintainability
  • Project direction — Keeping aligned with our product principles and locked invariants

Before your next PR, please skim:

  • PRODUCT.md — product north star
  • Product invariants — locked rules (shared chat, memory tiers, agent control plane, integrations, brand)

If this was declined for direction or taste, maintainers should cite an invariant ID or open a proposed one — ask if that citation is missing.

Your contribution is still valuable to us, and we'd love to see you contribute again in the future! If you'd like feedback on how to improve this PR or want to discuss alternative approaches, please don't hesitate to reach out.

Thank you for being part of the Omi community!

@Git-on-my-level
Git-on-my-level restored the ci/restore-single-artifact-macos branch July 21, 2026 18:42
@Git-on-my-level
Git-on-my-level marked this pull request as ready for review July 21, 2026 18:49
@Git-on-my-level
Git-on-my-level marked this pull request as draft July 21, 2026 18:51

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1f247f9e15

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

platform: str = Query(default="macos", pattern="^(macos|windows|linux)$"),
identity: str = Query(default="stable", pattern="^(stable|beta)$"),
):
async def get_desktop_appcast_xml(platform: str = Query(default="macos", pattern="^(macos|windows|linux)$")):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore beta-identity appcast for existing Omi Beta installs

Existing Omi Beta builds were packaged with SUFeedURL=https://api.omi.me/v2/desktop/appcast.xml?identity=beta and bundle id com.omi.computer-macos.beta; after this endpoint drops the identity query handling, those clients still hit this route but receive the shared feed pointing at Omi.zip for com.omi.computer-macos. Sparkle matches updates to the running app identity, so current Omi Beta users will reject/skip that archive and stop auto-updating unless they manually reinstall. Please keep serving a beta-identity migration artifact (or another explicit migration path) for identity=beta clients.

Useful? React with 👍 / 👎.

@github-actions

Copy link
Copy Markdown
Contributor

Hey @Git-on-my-level 👋

Thank you so much for taking the time to contribute to Omi! We truly appreciate you putting in the effort to submit this pull request.

After careful review, we've decided not to merge this particular PR. Please don't take this personally — we genuinely try to merge as many contributions as possible, but sometimes we have to make tough calls based on:

  • Project standards — Ensuring consistency across the codebase
  • User needs — Making sure changes align with what our users need
  • Code best practices — Maintaining code quality and maintainability
  • Project direction — Keeping aligned with our product principles and locked invariants

Before your next PR, please skim:

  • PRODUCT.md — product north star
  • Product invariants — locked rules (shared chat, memory tiers, agent control plane, integrations, brand)

If this was declined for direction or taste, maintainers should cite an invariant ID or open a proposed one — ask if that citation is missing.

Your contribution is still valuable to us, and we'd love to see you contribute again in the future! If you'd like feedback on how to improve this PR or want to discuss alternative approaches, please don't hesitate to reach out.

Thank you for being part of the Omi community!

@Git-on-my-level

Copy link
Copy Markdown
Collaborator Author

Monitor summary — CI fix + Codex P1 review

CI fix pushed. The Desktop Swift Test Suites and Desktop Swift Build & Tests checks failed because test-test-install-workflow-contract.sh calls actionlint (line 700) to validate mutation YAML, but the desktop-swift-tests job never installed it — exit code 127. Added a brew install actionlint step to the job. Verified locally: the contract test passes and actionlint -shellcheck= is clean on the modified workflow.

Codex P1 (beta-identity appcast) — acknowledged, not implemented.

This PR's stated intent is to consolidate to a single macOS artifact identity (com.omi.computer-macos, Omi.zip, omi.dmg). Restoring the separately-installable "Omi Beta" identity (identity=beta query parameter, Omi.Beta.zip, omi-beta.dmg) would directly contradict the PR's purpose. Existing Omi Beta clients will be migrated to the single-identity feed in a follow-up deployment rollout, not by re-adding the dual-identity code path this PR removes.

@github-actions

Copy link
Copy Markdown
Contributor

Hey @Git-on-my-level 👋

Thank you so much for taking the time to contribute to Omi! We truly appreciate you putting in the effort to submit this pull request.

After careful review, we've decided not to merge this particular PR. Please don't take this personally — we genuinely try to merge as many contributions as possible, but sometimes we have to make tough calls based on:

  • Project standards — Ensuring consistency across the codebase
  • User needs — Making sure changes align with what our users need
  • Code best practices — Maintaining code quality and maintainability
  • Project direction — Keeping aligned with our product principles and locked invariants

Before your next PR, please skim:

  • PRODUCT.md — product north star
  • Product invariants — locked rules (shared chat, memory tiers, agent control plane, integrations, brand)

If this was declined for direction or taste, maintainers should cite an invariant ID or open a proposed one — ask if that citation is missing.

Your contribution is still valuable to us, and we'd love to see you contribute again in the future! If you'd like feedback on how to improve this PR or want to discuss alternative approaches, please don't hesitate to reach out.

Thank you for being part of the Omi community!

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant