Repository navigation
MacBook Neo developer builds and preview catalog - #48
scottjones wants to merge 11 commits into
Conversation
The MacBook Neo (J700, T8140) can only use macOS 26 boot firmware, which asahi-installer v0.9.2 was not written for. The engine now: - knows T8140, j700ap and a macOS 26.6 (25G72) OS-firmware entry; - names the restore bundle "./Restore" when macOS 26's bootcaches.plist no longer does; - replaces the restore image's encrypted (AEA) recoveryOS and ExclaveOS images with the running macOS's decrypted copies of the same build, which the stub's recoveryOS kernel can mount, and collects firmware the same way; - gives a stub on macOS 26 firmware 6 GB instead of 2.5 GB, room for the decrypted recoveryOS and two sets of personalized boot objects. The Python overlay repack now pins the patch the omarchy.14 base was built with (patches/base), so a base still has to reproduce exactly what it shipped while the new upstream file takes the current patch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OMARCHY_DEVELOPER_BUILD=1 marks the app with OmarchyDeveloperBuild: its own workspace, no channel menu, and only a sealed catalog in the bundle, so a developer catalog that admits Macs the public ones do not can never reach it over the network. Name the MacBook Neo, and stop the bundling step from overwriting the inspection engine when the catalog's engine is the same file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Removal took a stub outside 2.3-2.7 GB for another macOS installation and refused it. A stub on macOS 26 firmware is 5,999,951,872 bytes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Public builds keep unqualified boards such as apple,j614s fail-closed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
iBoot panics on stock asahi m1n1 as the J700's custom boot object. On a j700ap the engine now replaces asahi's Stage 1 with Aurora's J700 Stage 1 from the image's esp/aurora/stage1-j700.bin, filled in place (a port of aurora-silicon/m1n1 tools/fill_stage1_config.py) to chainload the new ESP's m1n1/boot.bin. A Neo image without that file is refused; other Macs keep asahi's Stage 1. Firmware collection also counts C1FE multitouch keys as trackpads: the J700_Multitouch.im4p keys its trackpad C1FE0,0, which asahi_firmware skipped, leaving no apple/tpmtfw-j700.bin and a dead trackpad. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a j700ap the engine now adds the MT7932's Wi-Fi and Bluetooth inputs to the vendor firmware package: the IZUBA patch, RAM and power-table files, the factory OCA2, WCAL and BCAL calibrations from BWC2, the J7CF records from IZUBA_wifi.cfg, the Bluetooth firmware and its .ptx, and the Bluetooth address from /chosen. Each input is validated. The radios are experimental, so a failed collection is logged and the install goes on without them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
installer-v0.9.2-omarchy.29.tar.gz, 17,851,067 bytes, SHA-256 14323c78..., reproduced twice with macOS /usr/bin/python3 3.9.6 from a fresh v0.9.2 checkout that also reproduces .28. Compared with .28 it adds omarchy_mt7932.py and changes main.py, omarchy_asahi.py and version.tag. The bundled inspection pin, the packager and both release templates select it, so the release scripts publish the engine the catalog names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Removal links a startup container to its EFI partition through the ESP its m1n1 boot object names. Aurora's J700 Stage 1, which the Neo boots and engine .29 installs, keeps that in a versioned, CRC-checked config block and ends at STACKBOT, so removal found no ESP and refused the Neo's own installation. Exactly one valid version-1 block now names the ESP; asahi's m1n1 variables remain the fallback. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Neo keeps its Mesa calibration in the iBoot System Container as one standalone signed IMG4 of type FSC2, which aurora-touchid's extractor did not find. On a j700ap the engine now reads the raw container read-only, takes the one FSC2 image with a CALB payload and an IM4M manifest, and adds it to the vendor firmware as apple/mesacal-j700.bin, the name the Neo's device tree gives the driver. Like the radios, a failure is logged and the install goes on. installer-v0.9.2-omarchy.30.tar.gz, 17,852,406 bytes, SHA-256 2d5a14c3..., reproduced twice with macOS /usr/bin/python3 3.9.6; it adds omarchy_mesa.py and changes omarchy_asahi.py and version.tag. The bundled pin, packager and both release templates select it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
make-unsigned-catalog.py --developer accepts developer_models: groups of boards from supported-models.json's new developer section, each with its own payload (split or whole) and metadata, alongside the main group, which still covers exactly every M1, M2 and M3 Mac. Refused boards stay refused, a group may not repeat a Mac or a file name, and check-catalog still rejects apple,j700, so a developer catalog can never reach a channel. Each group's digests are computed once instead of once per Mac. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
M3 MacBook Air 13" (J613): dev4 preview installed and bootedI installed the developer preview from
I haven't checked individual hardware yet (Wi-Fi, Bluetooth, audio, backlight and brightness keys, sleep, USB-C, external display, camera). I'll add those results here. |
|
Follow-up: testing dev5 on the J613 hit a recovery-image prerequisite after disk mutation. Could you advise on a supported recovery path and check this requirement before resizing?
The UI reached: Then failed: The journal records Read-only investigation found that Could dev5 preflight reject the incompatible host build before Drafted with an AI assistant from the local execution journal and disk inspection. |
|
Drafted with an AI assistant (Claude Code); I reviewed it before posting. @mrobs11 thanks, that's the first M3 Air install of the preview by someone other than us. Both things you noticed are expected for dev4:
Touch ID is also starting to work on the M3 Air: on our J613 a finger enrols and matches, and the enrolment survives a reboot. It isn't in the preview yet. The kernel side is in omacom/linux-aurora#82. Hardware results would be very welcome when you have them (Wi-Fi, Bluetooth, audio, brightness, sleep, USB-C, external display, camera), along with the output of |
|
Drafted with an AI assistant (Claude Code); I reviewed it before posting. @garymeyerca thanks for the careful report, and for stopping without clearing anything. Cause. dev5 gives the M3 Airs only the 26.6.2 (25G83) OS firmware. macOS 26 restore images ship the recoveryOS and Exclave images AEA-encrypted, and the stub's recoveryOS can't mount them. Engine .32 doesn't decrypt them. It copies the decrypted images the running macOS keeps in its own Recovery and Preboot volumes, so it only works when the host is running exactly 25G83 ( The bug is ours. That build check runs in Recovering this Mac. Nothing was blessed or added to the boot policy, so the partial stub is inert, and macOS is unaffected. The app's Remove can't help yet: it only recognises a whole installation (stub, EFI, Linux), and it would refuse this layout. From macOS:
Leave the app's execution journal alone. If the app reports the interrupted install afterwards, post its message here. Two ways forward on that Mac for now: wait for the fixed engine, or use the notarized dev4 app from |
|
Thanks @scottjones, appreciate the explanation and recovery steps. This J613 / Mac15,12 is available for whatever testing you need, including candidate engines, recovery fixes and hardware checks. Let me know what would be most useful and what state you want the machine in before testing. The partial installation and execution journal are still intact. I haven’t retried or cleaned anything up. |
|
Drafted with an AI assistant; I reviewed the details before posting. @scottjones thanks for the explanation. I checked the firmware reading and gathered hardware observations on my 13-inch M3 MacBook Air (J613 / Mac15,12). Firmware and current systemThe OS firmware reading is 14.7, rather than the 14.8.3 you expected. My original installation used the notarized app from The current m1n1 versions are stage1 Hardware observations
Camera detailThe FaceTime HD camera enumerates at At the time of the CLI test, no process was holding The green indicator turning on is what I observed in the web apps; I didn’t verify its state during the CLI test. Because capture also times out without a browser or an apparent competing device holder, this appears broader than a Zoom/Meet configuration issue. I don’t yet know the exact cause. Please let me know which additional tests would be most useful, particularly for the camera and the 14.7 firmware reading. |
Claude on @satchlj's behalf: The "25G83 recovery image is encrypted; run the installer from macOS 25G83" failure on macOS 27 hosts can be fixed without the host copy. Each AEA in the 25G83 IPSW carries Apple's public key URL (wkms-public.apple.com/fcs-keys/…, no auth), with the archive key HPKE-sealed to it. Unwrapping it is a few lines of CryptoKit or a small stdlib-only Python module, and |
Adds MacBook Neo (
apple,j700) support to developer builds only, plus the catalog tooling for a developer preview that installs on every M1, M2 and M3 Mac and the Neo. Public builds and channel catalogs still refuse the Neo.What's in it
j700ap, replaces Asahi's Stage 1 with Aurora's J700 Stage 1 from the image'sesp/aurora/stage1-j700.bin;OMARCHY_DEVELOPER_BUILD=1): its own workspace, no channel menu, and only a sealed catalog, so a catalog that admits Macs the public ones don't can never reach it over the network.make-unsigned-catalog.py --developer):developer_modelsgroups give boards fromsupported-models.json's newdevelopersection their own payload and metadata. The main group still covers exactly every M1, M2 and M3 Mac, refused boards stay refused, andcheck-catalogstill rejectsapple,j700.Preview
The downloads are on the pre-release neo-preview-dev4-20261007:
m1n1-auroraaurora12;The developer app is to be built from this branch's head by the holder of the Developer ID, notarized, and attached there.
Before merging
Validation
./test/allpasses on macOS with Bash 5.3 and Python 3.13, including 6 new catalog tests (29 intest_make_unsigned_catalog.py).🤖 Generated with Claude Code