Repository navigation
Add native macOS preview for Apple Silicon and Intel - #1
Merged
Merged
Conversation
Integrate macOS microphone consent, menu bar controls, Login Items, native paths and bundled CLI. Keep wake capture in Electron and run local keyword recognition in its managed Python environment. Build ad-hoc signed app ZIPs and DMGs on both native architectures, with packaged UI, local media, worker cleanup and real wake-model checks. Document preview installation and signing limitations.
Preserve explicit example shortcuts, exercise both platform quit menus, and compare canonical temporary data paths while retaining managed Python invocation semantics.
Exercise the installed hook runner before native builds so launcher placement and source permissions use the same API as packaging.
Keep ipcRenderer out of contextBridge unsubscribe results. Complete the light palette exposed by native Mac screenshots, wait for settled captures, and use software compositing only in Intel VM smoke checks.
…layout Keep CLI, GUI/media, worker, wake decoder and DMG gates mandatory while preserving diagnostic results from independent stages. Hidden settings sections must not block the call-panel screenshot.
Run packaged GUI, audio, recovery and real PCM lifecycle checks with owned Linux display, audio and session-bus services. Fail on orphaned processes, contradictory reports and bounded-output violations. Require the complete wake pipeline on native macOS with independently bounded group cleanup. Document repeatable checks and their synthetic-input limits.
The native audio service cannot read an arbitrary temporary WAV. Use the pinned Chromium fake device's built-in beeps on macOS while preserving the real capture graph, nonzero PCM check, queue limits and all sandboxes. Keep the Linux WAV fixture unchanged and report the actual input source.
Preserve the reviewed ICNS and add the exact launch-media hashes to the public-source allowlist.
Cancel pending unmute immediately on mute, reconcile ended audio tracks without dropping the call, and prevent stale completions from replacing newer capture. Repair incomplete wake models from checksum-verified staging with rollback. Verify each download checksum exactly once, native Mach-O deployment targets, and actual signed identities and microphone entitlements. Add pinned private Flite fixtures and require positive recognition plus two negative controls on both Mac architectures. Preserve native evidence and document the hardware and signing limits.
Wait for the application's normal initial show before driving settings save and reload. Preserve the existing font, opacity and pixel assertions, and add bounded window and renderer readiness diagnostics with three regression tests. The published macOS preview remains tied to 54889c5; this follow-up changes only smoke tests and their documentation.
Capture the real Popen handle in the test instead of parsing a PID from stdout, which can remain empty when the unchanged 150 ms deadline kills Python during startup. Use a silent sleeper and require SIGKILL, a collected exit status and process absence. Keep the noisy-child log bound and cancellation tests unchanged. Test-only follow-up; the public macOS preview source and distribution assets remain unchanged.
Give each sequential renderer probe the remaining existing five-second capture budget. Stop after an unresolved query instead of queuing more JavaScript behind it, and retain the last successful renderer snapshot separately from the latest timeout. Add coverage for a single unresolved probe and retained earlier state. Preserve the application-controlled initial show, font and opacity predicates, pixel assertions, and original production deadline. This changes only test tooling; the published preview stays immutable.
Require a fresh double-animation-frame marker alongside the saved input value inside the existing twelve-second reload-readiness wait. A late first compositor frame then precedes the separate unchanged five-second font and opacity capture check. The marker is stable across polls and unique to each reload. Add a deterministic callback-order regression and document the readiness sequence. App code, animations, capture assertions and published preview artifacts are unchanged.
aaamosh
marked this pull request as ready for review
October 5, 2026 11:47
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Merge the current launch documentation into the macOS port, retaining both reviewed asset inventories and published preview links. Run full Linux and native macOS checks once per PR update, on main and version tags, and on manual request. Retire the completed one-time Preview 1 publisher without changing its historical source or published artifacts. Co-authored-by: ChatGPT <noreply@openai.com>
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.
Merge and follow-up outcome
This port is merged. macOS Preview 2 is available for Apple Silicon and Intel from source
0b9924b014d4c46271647e95d97806811fb45229. It includes the wake-capture correction from PR #2. The original Preview 1 remains available with its original files.Initial macOS preview
Download the first public macOS preview — native Apple Silicon and Intel DMGs, app ZIPs, source manifests and a combined SHA256SUMS.
Released source:
54889c5b04fe3dc32b79084d56bbec6e187a53deTree:
22871b90d7b7fef582ebbd166018c5e80940089eWhy
The desktop app's Linux paths, capture setup, startup integration and packaging need native equivalents on a Mac. This port retains DotDial's calls, modem sounds, saved replies and configuration behavior, while adding a self-contained macOS application.
Changes
Main's launch materials are preserved through the existing merge of
77986b32b0a5c88874be733405a176945843098e.Validation of the published source
Native builds, QA and verified publication · Linux CI
The native gates cover runtime notices, every bundled Mach-O deployment target, signed identities and entitlements, config locking, CLI without system Node, synthetic GUI/media capture, packaged worker, wake model repair/decoder, the complete wake PCM pipeline, spoken wake recognition and DMG contents. The pipeline exercises pause/resume, a stopped Python reader, bounded backpressure and restart. Speech recognition uses commit-pinned Flite SLT fixtures for one positive phrase and two negative controls.
The publisher has 14 regression tests, including a retry after remote publication succeeds but the CLI response is lost. Native publication uses the exact artifacts from the verified push run; binaries are not rebuilt during upload.
Preview limits
These builds are ad-hoc signed, without Apple Developer ID signing or notarization. The minimum binary deployment target is macOS 13, while automated native execution uses macOS 15 runners. Synthetic checks do not establish Ventura runtime behavior, physical microphone/speakers, actual TCC denial/grant, hot-unplug or sleep recovery, Login Items in a user session, or real ChatGPT account calls. Login startup can remain unavailable with this signature.
Installation and optional wake setup · Acceptance scope · Publication procedure
Test harness follow-up after publication
Head used for this historical harness follow-up:
391c67e4700cac34f838ff22900e13256bf8344b.Later native runs exposed timing assumptions in the test harness:
Popenhandle instead of requiring Python to print its PID before the unchanged 150 ms timeout. Its silent child must be killed, reaped and absent; log-bound and cancellation checks remain intact.Five focused smoke-readiness regressions pass. Only
scripts/smoke-packaged.cjs, two test files anddocs/TESTING.mdchanged after the public release; application runtime code, the public tag and all seven release assets remain at the released source above.Investigation history is preserved in the preceding native run. It included one resumed PCM observation below the unchanged 25-chunk/seven-second threshold (18 acknowledged chunks, no capture/detector/cleanup error). One unchanged retry passed that PCM stage and recorded the separate settings capture failure: fonts loaded and window visible, but the 220 ms animation had advanced only 150 ms near the capture deadline. The fresh-frame readiness check addresses that ordering gap; no throughput threshold or capture deadline was relaxed.
Verification before final integration
All four workflows for
391c67e4700cac34f838ff22900e13256bf8344bcompleted successfully on their first attempt, with no reruns of this revision:PR native checks · Push native checks · Linux push CI · Linux PR CI
Final integration and CI notification cleanup
The update in
7eef1ef22b25e0e0aa2237223c2c2ecd6747fce6integrates the current launch documentation frommain(270fe150ec242ea00c9fbefe831bb027aafbf772) and resolves the README/public-source inventory conflicts. It retains both the reviewed Mac icon and the platform share card, all existing download links, and the distinction between current source and the fixed Preview 1 binaries.Both workflows now run once per PR update, on
mainpushes and version tags, and on manual request. Newer runs cancel older runs only for the same workflow/event/ref. All existing Linux package checks and the native Apple Silicon/Intel jobs are unchanged. The completed one-time Preview 1 publishing job has been retired; its original source, publisher script and regression tests remain available. These workflows do not change GitHub releases.A bounded independent integration review found no additional merge blocker in the shared Linux/macOS paths, capture cancellation, permission handling, packaging or source inventory. There were no unresolved inline review threads; the Codex bot's sole comment concerns its review quota.
Integration verification
For
7eef1ef22b25e0e0aa2237223c2c2ecd6747fce6, GitHub created exactly the two intended PR workflows; both passed on their first attempt. The tested PR merge tree exactly matches the reviewed integration tree (7f05c4192dad3da6c3148af5e0c69b0c40b33ed5).Linux PR CI · Native macOS PR CI
The separate local Work executor cannot bind Unix sockets and exposes a different PID namespace; its restricted preflight is not counted as a passing suite. The complete results above are from the normal GitHub runners with the pinned Node.js runtime. Preview 1's tag and all seven public release assets were checked and remain unchanged.
Post-merge wake correction and Preview 2
The first main run after this merge exposed an intermittent ARM audio-rendering slowdown despite successful PR checks. PR #2 records the reproduced timing evidence, rejected intermediate candidate and accepted silent-sink/latency correction. Native acceptance now requires four resumes and a steady PCM cadence, in addition to the original acknowledgement deadline.
The release source additionally records bounded startup stages and requires four fresh GUI captures. The native release run passed both architecture jobs and all 11 package gates each. The resumed publisher used those original artifacts and verified all seven uploaded sizes/SHA-256 values before making Preview 2 public. Its initial draft-readback failure did not cause a native rebuild or replacement of existing assets.
Publication closeout
be423d5adds the exact download links and removes the completed one-time write job. Normal CI remains active for PRs, main pushes, version tags and manual runs.Final main verification
Final main commit
be423d51a8974627d66b98a5c63a27199cecbefdpassed Linux CI and both native macOS jobs on their first attempt. All three logs explicitly report 404 tests passed, zero failures or skips; both Mac builds pass all 11 package gates, four fresh GUI captures, four pipeline resumes, cadence checks, and clean teardown. The native job definition and application runtime are unchanged from the released source by this documentation/workflow closeout.All seven public Preview 2 files were independently downloaded over anonymous HTTPS, with HTTP 200, exact byte counts and SHA-256 matching GitHub metadata. All six entries in the downloaded
SHA256SUMSmatch the streamed bytes, and both downloaded manifests identify the clean released source0b9924b014d4c46271647e95d97806811fb45229. No native binaries were rebuilt for publication recovery.