M28c completion record — Mac developer actions and local Metal
Title/ID: m28c-mac-developer-journey
Milestone: 28c / m28c-mac-developer-journey
Goal: Qualify a directly distributed Mac app that performs authenticated developer actions and bounded local Metal work.
Inputs: macOS 27.0 (26A428), Apple M4, Xcode 27.0, selected private KVM reference, pinned Qwen2.5-1.5B MLX model/data/adapter, installed signed vMLX 1.6.65, Team KB88FQXUX2.
Changes:
- apps/swarmui/src-tauri/main.rs + apps/swarmui/src/workbench.rs + frontend/workbench/mlx.js + frontend/index.html — fixed local MLX helper invocation and a visible inference/evaluation desk, with local proof class separate from the signed release projection.
- tools/cohesix-py/cohesix/mlx_workbench.py — bounded private selection, unchanged input check and native Metal observations.
- docs/BUILD_PLAN.md + docs/TEST_PLAN.md + docs/STATUS.md + docs/HOST_TOOLS.md + docs/SWARMUI.md + docs/TOOLCHAIN_MAC_ARM64.md — developer-value scope, 28c1 successor and exact as-built use.
Commands: PYTHONPATH=tools/cohesix-py out/m28c/mlx-venv/bin/python -m pytest -q tools/cohesix-py/tests/test_mlx_workbench.py tools/cohesix-py/tests/test_mlx_native.py; PYTHONPATH=tools/cohesix-py out/m28c/mlx-venv/bin/python -m pytest -q tools/cohesix-py/tests/test_vmlx_compat.py tools/cohesix-py/tests/test_vmlx_runtime.py; node --test apps/swarmui/tests/mlx_frontend.test.mjs; cargo test --locked -p swarmui --test workbench; cargo check --locked -p swarmui --bin swarmui; cargo fmt --all -- --check; scripts/check-generated.sh; cargo build --locked --release -p swarmui -p coh; exact stage/sign/notarise commands below.
Checks: Focused owner tests pass; real installed SwarmUI inference/evaluation observes Apple M4 and pinned hashes; the final app and extension pass Developer ID signing, Apple notarisation, stapler, Gatekeeper and installed-byte readback. Earlier selected service start/inspect/cancel/revocation and Foundation Models explanation remain component evidence from an unchanged native/gateway source path.
Deliverables: Installed SwarmUI-M28c-Build2.app, retained ignored signing/live reports, this record, and 28c Complete status with explicit 28c1 deployment limits.
Exact installed candidate
The final package was staged at ignored out/m28c/canonical-stage-12 from the
release swarmui/coh binaries, compiler-generated package inventory and the
Release App Intents extension rebuilt with matching app/extension build number
2. Staging retained 44 local UI assets.
The unsigned staged app executable matched target/release/swarmui at
SHA-256 2b7068e0cd942f7787391b22f9a36da1d3aa033e3345e8a50f1319bb5996b355;
the staged extension executable matched its Xcode input at
e71c23de067fb8b63c9fc58ecf96bc561253cb55730f76cf9e09982c67e4b5df.
The signing script validated exact app and extension provisioning profiles,
Team KB88FQXUX2, shared Keychain group, hardened runtime, timestamps and
nested signatures. The final signed app executable is
c9ae9fa50c62beb7f2d73cd61e8ab10959774e5c029c38c029a92a934da607fa;
the extension executable is
faa202d77eb0fc1bc56799e9955f3980e36dd7ff7076d511aefce2f3a48ec8e4.
Apple accepted notarisation submission
b14be979-3330-4770-94f1-73fce245bf6e for archive SHA-256
22d06f92e14fcad3671e62e1be2f653df73f722bbac0bc49c3758068806aea2f.
The retained ignored developer-id-signing/summary.json and
notarization/summary.json bind both binaries, profiles and submission.
The selected distribution commands, from the worktree root, were:
xcodebuild -project apps/swarmui/native/apple/SwarmUIApple.xcodeproj -scheme SwarmUIIntents -configuration Release -derivedDataPath out/m28c/DerivedData-build2 CODE_SIGNING_ALLOWED=NO build
python3 scripts/install/stage_swarmui.py --repo "$PWD" --generated-root "$PWD" --bin-dir "$PWD/target/release" --profile macos-desktop --apple-extension-dir "$PWD/out/m28c/DerivedData-build2/Build/Products/Release/SwarmUIIntents.appex" --out "$PWD/out/m28c/canonical-stage-12"
python3 scripts/install/sign_swarmui_macos.py sign --app "$PWD/out/m28c/canonical-stage-12/package-input/SwarmUI.app" --team-id KB88FQXUX2 --identity-sha1 EEF1BF26D2081CEB18AF1F5B0C4A6D720C1F2B98 --app-profile /Users/lukasbower/Downloads/Cohesix_SwarmUI_Developer_ID.provisionprofile --extension-profile /Users/lukasbower/Downloads/Cohesix_SwarmUI_App_Intents_Developer_ID.provisionprofile --state-dir "$PWD/out/m28c/canonical-stage-12/developer-id-signing"
python3 scripts/install/sign_swarmui_macos.py notarize --app "$PWD/out/m28c/canonical-stage-12/package-input/SwarmUI.app" --team-id KB88FQXUX2 --notary-profile cohesix-m28c --state-dir "$PWD/out/m28c/canonical-stage-12/notarization"
~/Applications/SwarmUI-M28c-Build2.app was copied from that accepted app.
Its two executable hashes matched the signed stage. codesign --verify --deep
--strict, xcrun stapler validate and spctl --assess --type execute --verbose
passed on the installed copy; Gatekeeper reported source=Notarized Developer ID.
pluginkit registered exactly one com.cohesix.swarmui.intents extension
from the build-2 app. Earlier build-1 copies sharing the bundle ID left the
saved action unresolved after replacement. With matching build-2 app/extension
versions, the installed app launched, Shortcuts resolved the saved read-only
job-status action and the gateway returned HTTP 403 after the earlier scope
revocation. This is an expected refusal, not evidence of a fresh authorised
job. The retained ignored out/m28c/canonical-stage-12/shortcuts-revoked-status.ax.txt
has SHA-256 374811a6288f5d74c1eefe1c44d49dc6cd347a7d2ee73afa859eb650ba58d3fc.
The exact newly changed source surfaces at staging have SHA-256:
main.rs 4a59698e39e166ba9b7e91cc02eece7e4331374ccc75e013b9dfdedb916f4815;
workbench.rs 96b3e3cd178d600561682404a2ce85584e0426d055c87d4f8790bc1862373c86;
frontend/index.html 10ab08b1eca8119032d8db4e64a38fe30888c3cca3ab1ccf35c2b9f52934a24c;
frontend/workbench/mlx.js a9113f00e61f02af381045c3b3a933e7e16c94b61bcee8eab037fbadc3687d97;
mlx_workbench.py 14c4f9c52a78ab23bfe7cd6159e17d7d965aa3fc0c1bb27e155731bec63dcb7e.
The native Swift selected-service action source did not change after the
private service observations in the actions record.
Later gateway changes added release admission and a selected-generation fence;
focused gateway standing/job tests passed on this branch. The final saved
status Shortcut’s HTTP 403 remains an explicit refusal, not an inferred live
success against that later gateway build.
Live developer work and focused checks
The earlier installed development-signed app started and inspected private KVM
service admission mac-service-2524-shortcuts-02. The host agent settled it as
confirmed/acknowledged; coh resolved the same admission and signed result.
Foundation Models explained that job using separately labelled gateway facts
and model interpretation. A separate held admission
mac-service-2524-cancel-01 settled as refused_no_effect/acknowledged
after the corrected cancellation request, without service dispatch. Revocation
removed the native scope choice. The actions record
retains its private target and accessibility evidence, including the initial
HTTP 404 defect and correction. These are selected component observations,
not a Release B reference or a new final-binary service effect.
The local model is the pinned Qwen2.5-1.5B instruction model tree
8b40b6d325ea432fda5d9d9612813d203d44bde7c232b465b0af32454b1d4791;
the private 16/4/16-row dataset tree is
6b2ef5031d278330c0e4db1a40f5de3ddcc2647df74e2fa7a1c2d0f3229670b7;
the 48-step rank-8 Metal LoRA adapter tree is
a9b837751e207b3c2c52d166f4fb341921cd8d5082197a82915d88f1ea498850.
The native component record holds the frozen
training, resource and four-question quality checks, with repeated answer
templates stated as a limitation. The final installed SwarmUI panel invoked
cohesix.mlx_workbench from the selected local Python environment without a
hive credential. On Apple M4, its answer to the bounded canary question began
“No”; peak Metal allocation was 974,217,888 bytes and elapsed generation
was 1,511 ms. The same installed panel evaluated 16 held-out rows with loss
0.8091070055961609 and peak Metal allocation 1,138,331,988 bytes.
The UI labelled both as Local Metal observation · no Cohesix admission or
promotion. Retained ignored accessibility reads are
out/m28c/canonical-stage-12/installed-mlx-infer.ax.txt (SHA-256
66924f7cc60b6cc2e8838a2352b5b621c9c835438de98774a6907586b2a5ff85)
and installed-mlx-evaluate.ax.txt
(043720c90d819f5a45ef3d75c8c88a30f1098f5756222a39942c014422782c6a).
Focused Python MLX input/refusal tests passed 6/6, vMLX compatibility tests
12/12, frontend projection tests 3/3, SwarmUI workbench tests 12/12,
cargo check, Rust formatting and generated consistency passed.
The full test suite was not run, as requested.
Installed signed vMLX 1.6.65 served a disposable fused copy of this adapter
on loopback. Four predeclared operational responses exactly matched direct
fused MLX inference within the 5-second bound. Its source model remained
b75efc50e56aec7c671357ee6eec7d4df55b8c82896a4308d941e0b86e629777;
the vMLX-repaired loaded copy was
a2e3c00622388097a0e8ca3c2b8e600ba765ff44be7d56c88aca5bca43f7cec4.
The native component record and ignored
out/m28c/qwen-vmlx-session.json retain engine/process/request evidence.
Its g1 label is diagnostic. No Cohesix generation, signed canary or governed
rollback was created.
Compatibility and proof boundary
The local UI adds a fixed Python module and JSON result; it changes no target
grammar, gateway API, coh operation schema, Python REST request or benchmark
measurement. The existing coh release/job forms and Python REST client retain
their admission semantics. The compiler-derived implementation, provider and
host-integration inventories were regenerated and checked. Native Mac MLX
admission, durable phases, generation-fenced vMLX rollout and rollback are
planned under 28c1. Spoken Siri invocation is outside
the M28c developer gate. This record makes no Pi, mixed MLX/CUDA, integrated
Release B or general model-quality claim.
Material AI assistance contributed the implementation, tests, scope revision and this record. The retained evidence distinguishes actual installed actions, local Metal output, diagnostic vMLX serving and signed Cohesix outcomes.