- Added in
v6.11.0. - Polished in
v6.11.1. - Docs-only readiness review for a future signed zip implementation.
- Follows
v6.9.0/v6.9.1Signed Distribution Design andv6.10.0/v6.10.1Notarization Workflow Design. - No new app binary is produced for this release.
v6.11.0 defines the readiness gate for a future signed zip implementation before any signing commands, release automation, or binary publishing changes are added.
The goal is to decide what must be true before MLX Server Manager publishes a signed app zip. This readiness review does not sign the app, run notarization, staple a ticket, create a DMG, create an installer, add CI release automation, create a new app binary, or change app behavior.
Current downloadable app binary:
MLXServerManager-v6.5.1-unsigned.zip
SHA-256: 31e8603f93d3a3eaedee9749a255668c9b804854fb69cb3b63f36b411613274e
Current docs-only releases after that binary:
v6.6.0v6.6.1v6.7.0v6.7.1v6.8.0v6.8.1v6.9.0v6.9.1v6.10.0v6.10.1v6.11.0
These releases do not replace the current app binary.
A future signed zip implementation should not start until all of the following are true:
- the release target is a signed zip, not a DMG or installer;
- the signing identity is selected outside the repository;
- certificate, keychain, and credential handling are documented without committing secrets;
- the build path is deterministic enough to verify before signing;
- the app bundle contents can be checked before and after signing;
- the final zip contents can be checked before publishing;
- release notes include signing status, notarization status, asset name, and SHA-256;
- fallback behavior is clear if signing fails;
- no unrelated UI or runtime behavior changes are bundled into the implementation release.
Go only when:
- the release owner can build a clean Release app;
- the signing identity is available outside the repository;
- verification steps are known before the release starts;
- signed zip asset naming is agreed;
- release notes can state signing and notarization status precisely;
- fallback behavior is agreed before publishing.
No-Go when:
- signing identity is unavailable;
- verification cannot be recorded;
- credentials would need to be committed or exposed;
- the signed zip would include unrelated files;
- the release would bundle runtime or UI changes with signing work.
A future signed zip implementation may include:
- a documented local signing command sequence;
- a signed app bundle verification step;
- a signed zip packaging step;
- zip content verification;
- SHA-256 calculation;
- release notes template updates for signed assets;
- README install guidance for signed zip assets.
It should not include:
- notarization unless explicitly scoped in the same release;
- DMG generation;
- installer generation;
- auto-update;
- release automation;
- runtime behavior changes;
- process management changes;
- model management changes;
- telemetry;
- background monitoring;
- request inspection;
- proxying.
Before implementation, confirm:
- a Developer ID Application identity exists locally or in the intended CI environment;
- the identity can be referenced without committing private account-specific values;
- keychain access is available to the person or environment performing the release;
- signing can be performed after the Release build and before zipping;
- signature verification can be recorded without exposing private keychain details.
Recommended placeholder:
Developer ID Application: <Team or Developer Name> (<TEAMID>)
A future manual signed zip flow may be:
1. Confirm clean git status
2. Build Release app
3. Verify unsigned app bundle contents
4. Sign MLXServerManager.app with Developer ID Application identity
5. Verify signed app bundle
6. Create signed zip with only MLXServerManager.app
7. Verify zip contents
8. Calculate SHA-256
9. Create Git tag
10. Push main and tag
11. Create GitHub Release with signed asset metadata
12. Verify release page, asset, and checksum
This review does not implement these commands.
Use one of these release asset states:
- Docs-only: no asset, signing not applicable, notarization not applicable.
- Unsigned zip:
MLXServerManager-vX.Y.Z-unsigned.zip, not signed, not submitted. - Signed zip:
MLXServerManager-vX.Y.Z-signed.zip, Developer ID signed, not submitted. - Notarized zip:
MLXServerManager-vX.Y.Z-notarized.zip, Developer ID signed, accepted.
Do not publish an asset with a more trusted name than its actual verification state.
A future signed zip release should record:
git diff --checkresult;- Debug build result;
- test result;
- Release build result;
- signing identity label;
- signature verification result;
- Gatekeeper assessment result if used;
- zip path;
- zip size;
- SHA-256;
- top-level zip entries;
- forbidden-entry scan result;
- GitHub Release URL;
- exact release settings block.
The final signed zip must not contain:
.dSYMbundles unless published separately;.envfiles;- API keys;
- Hugging Face tokens;
- Apple credentials;
- certificates;
- private keys;
- keychain exports;
- model weights;
- model caches;
- app settings files;
- logs;
- user-specific paths;
.venv;- hidden macOS resource fork files;
- unrelated build products.
A future signed zip release should include:
Tag:
Title:
Asset:
Pre-release:
Signing status:
Notarization status:
SHA-256:
Example signed-only release:
Tag: vX.Y.Z
Title: vX.Y.Z — Signed Zip Distribution
Asset: MLXServerManager-vX.Y.Z-signed.zip
Pre-release: No
Signing status: Developer ID signed
Notarization status: Not submitted
SHA-256: <hash>
A future signed zip release should record a compact verification log:
Release:
Commit:
Asset:
Signing status:
Notarization status:
SHA-256:
Zip contents checked:
Forbidden entries checked:
Release URL:
Keep private credential details out of this log.
Before publishing a signed zip, README Install should state:
- the exact signed asset name;
- whether unsigned assets remain available;
- checksum verification command;
- signing status;
- notarization status;
- whether Gatekeeper warnings may still appear;
- what users should avoid downloading when they want the app binary.
If signing fails before release publication:
- do not publish the asset as signed;
- either fix and retry or keep the release docs-only;
- do not replace the current downloadable app binary unless the binary asset is verified;
- keep release notes explicit about the current binary.
If signing succeeds but verification fails:
- do not publish the asset;
- preserve failure notes locally;
- fix and repeat from build or signing step.
If signing succeeds and verification passes:
- publish only with exact signing status and checksum;
- do not imply notarization unless notarization is also completed and verified.
Signed zip implementation does not change the app architecture:
OpenAI-compatible client -> mlx_lm.server or adopted external server -> MLX model
The app remains a control and context surface. It must not become part of the inference request path.
After this readiness review, safe follow-up releases may include:
- Signed Zip Readiness Polish.
- Local signing command draft.
- Signed zip app-code release.
- README install update for signed assets.
- Notarized zip implementation after signing is stable.
v6.11.0 and v6.11.1 are acceptable if:
- it remains docs-only;
- no Swift source files are changed;
- no runtime behavior changes are introduced;
- no app binary zip is produced;
- no signing is executed;
- no notarization is executed;
- no stapling is executed;
- no DMG or installer is produced;
- no release automation is added;
- release notes state that the current binary remains
v6.5.1; - future signed zip implementation is gated by explicit readiness checks.