v0.5.2
Immutable
release. Only release title and notes can be modified.
What's new in v0.5.2
Fixed
- A slow keychain read can no longer crash the setup page or leak a secret to
the log. Whensecurityreturned a secret just after its timeout,
CommandRunnerleft that output — the raw secret — in the calling process's
mailbox; a GenServer caller (the setup LiveView,BootReport) then crashed on
the unexpected port message and the secret was written into the crash log. The
runner now drains and flushes any late child output on timeout, so it never
reaches the caller. - Honest Computer Use install error. A failed Computer Use install now says
the native helper "hasn't been published for this platform yet" rather than
"…for this Fermix version yet", which wrongly implied afermix upgradewould
help. (The helper's first release is still pending.)
Changed
- macOS keychain secrets are stored with an open access list (
-A). Without
it, each item's ACL is pinned to the exact code signature of the writing
binary; the daemon — an ad-hoc-signed, per-version binary the keychain can't
reliably match — is then treated as an untrusted app and macOS blocks every
read on an authorization prompt the headless service can't answer, so reads
hang and time out (slow boot, slow/failed setup).-Alets the daemon read
headlessly. Trade-off: any process running as the same user can read the item
without a prompt — no weaker than the pre-keychain plaintext-in-config
baseline, and still keychain-stored. The proper long-term fix is Developer-ID
signing the release binary. Existing secrets keep their old ACL until
re-stored (re-enter them infermix setup, orsecurity add-generic-password -U -A …).
Fixed
- The daemon no longer crashes at boot when the login keychain is locked. A
required secret stored under@keyring(e.g.OPENAI_API_KEY) whose keychain
read timed out — common when the login keychain is locked or slow at daemon
launch — raised during config hydration and took down the whole node, leaving
the setup UI (the very surface used to fix it) unreachable. Boot now leaves the
@keyringsentinel in place and logs the failure (the same graceful handling
optional secrets already had) instead of crashing; the secret resolves on the
next boot once the keychain is reachable. fermix setupno longer opens the browser before the endpoint is live. On a
readiness timeout the launcher printed the URL but still opened the browser,
landing on "Safari can't connect to the server". It now opens the browser only
once the endpoint actually answers; on timeout it hands back the URL to open
manually.- The setup 403 page is now actionable. Reaching the token-gated
/setuppage
without an authorized session returnssetup authorization requiredplus a line
telling you to runfermix setup(the only thing that authorizes a browser
session), instead of a bare error.
Verifying signatures
Each binary is signed with cosign using GitHub Actions OIDC keyless signing. Verify a download with:
cosign verify-blob \
--certificate fermix_<target>.pem \
--signature fermix_<target>.sig \
--certificate-identity-regexp "https://github.com/tezra-io/fermix/.github/workflows/release.yml@.*" \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
fermix_<target>The releases.json artifact lists every binary's URL, sha256, and signature URLs.