Repository navigation
macOS arm64 clean install: Homebrew prerequisites, darwin pins, launchd agents (brew-services semantics), embedding acceptance, recording-tooling CI #94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
seathatflowsinourveins
merged 35 commits into
main
from
claude/macos-clean-install-20260923
Sep 23, 2026
Merged
Changes from all commits
Commits
Show all changes
35 commits
Select commit
Hold shift + click to select a range
2f596a6
Pin socraticode and platform-dependency integrity, add launchd agents…
seathatflowsinourveins 7d561b1
Re-hash the evidence registry and rebuild the ecosystem explorer
seathatflowsinourveins cec443e
Fix round: real npm/lockfile evidence, bash 3.2 consumption bug, laun…
seathatflowsinourveins 5643c1f
Rehash the evidence registry via host_receipts.register_file and rebu…
seathatflowsinourveins 1c01f4f
Round 2: defeat the npm shadow-copy, launchd orphan/unloaded/director…
seathatflowsinourveins 522bbe3
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 35980b3
Round 3: reinstall-while-loaded, arbitrary-path deletion, npmrc/posti…
seathatflowsinourveins 23f7b9f
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins f9a6411
Regenerate the new-host grand list after #101/#102 and re-register ro…
seathatflowsinourveins f16d96e
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 5310fe5
Round 3b: canonicalize paths across a symlinked ancestor; launchd ins…
seathatflowsinourveins 87327dc
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 58f68d1
Round 3c: rollback the failed prefix swap; stop the launchd trap trun…
seathatflowsinourveins 2e880db
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 96f1abe
Re-register test_workflow_hardening.py after merging origin/main (#108)
seathatflowsinourveins 4949e03
Round 3d: genuine recovery for both swaps (rollback, was_loaded/reloa…
seathatflowsinourveins c18aea3
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins d51f062
Round 3e: idempotent convergence for launchd, ownership-checked pruni…
seathatflowsinourveins cfe8d20
Round 3f: abort preflight on unresolved reconcile, path-verify launch…
seathatflowsinourveins 0e1e0d4
Scope the pre-reinstall load-check test to cmd_install's own body
seathatflowsinourveins 6315d75
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 7848245
Round 3g: replace launchd's transactional backup/reconcile with brew-…
seathatflowsinourveins 7e5f456
Round 3h: pin and download the llama-embed model, add the embedding a…
seathatflowsinourveins e9334e9
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins b9c6aca
Round 3i: canonical-path comparison, EINPROGRESS handling, cache-befo…
seathatflowsinourveins 9ad7ca5
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 1d87519
Fetch full history in validate-macos so host receipt catalog revision…
seathatflowsinourveins 56e4c26
Resolve symlinked plist leaves in canonical_plist_path; make the inco…
seathatflowsinourveins fa1e27a
Skip the PyYAML structural workflow tests where PyYAML is absent (rep…
seathatflowsinourveins 7c0c0d1
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 75a6e0d
Give the macOS recording smoke a per-run --identity (required since #…
seathatflowsinourveins 266970e
Record the 2026-09-23 hosted macOS smoke receipt (launchd, embedding …
seathatflowsinourveins 3cacf6b
Merge remote-tracking branch 'origin/main' into claude/macos-clean-in…
seathatflowsinourveins 75213bd
Round 3j: fix 8 unresolved Codex-connector review threads blocking th…
seathatflowsinourveins b9f8dff
Parse the provisioned qdrant config without PyYAML so the check runs …
seathatflowsinourveins File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
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
Large diffs are not rendered by default.
Oops, something went wrong.
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| { | ||
| "HOME": "/Users/example", | ||
| "ECO_ROOT": "/Users/example/.local/share/codex-ecosystem", | ||
| "PROJECT_ROOT": "/Users/example/code/agent-lab", | ||
| "HOST_PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", | ||
| "CODE_INDEX_PATH": "/Users/example/.code-index", | ||
| "OTEL_ENDPOINT": "127.0.0.1:14318", | ||
| "AI_MEMORY_URL": "127.0.0.1:49374", | ||
| "QDRANT_URL": "127.0.0.1:16333", | ||
| "EMBED_URL": "127.0.0.1:8232", | ||
| "EMBED_MODEL_PATH": "/Users/example/.local/share/codex-ecosystem/state/models/embeddinggemma-300M-Q8_0.gguf", | ||
| "HARDWARE_PROFILE_ID": "macos-arm64-48gb-projected" | ||
| } |
61 changes: 61 additions & 0 deletions
61
adoption/launchd/com.native-stack.ai-memory.plist.template
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,61 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <!-- | ||
| Drafted, not run: no launchd agent from this directory has been | ||
| bootstrapped, kickstarted or booted out on any Mac (adoption/platforms/ | ||
| macos-arm64.md, "What a hosted run proves"). Render with | ||
| tools/adoption/render_launchd.py before use; lint with | ||
| adoption/launchd/launchd-agents.sh lint before ever bootstrapping it. | ||
|
|
||
| Mirrors this profile's Linux/WSL2 ai-memory serve unit, given a transport | ||
| flag of http and a bind flag of AI_MEMORY_URL (recipes/README.md, | ||
| docs/foundation-stack.md), invoking the same bin/ai-memory symlink | ||
| adoption/bootstrap-macos.sh places on PATH. Hooks install, MCP | ||
| registration and any managed run remain separate macOS steps with no | ||
| receipt yet (adoption/pins-macos-arm64.json, ai-memory install_note). | ||
| Round 3j (Codex P2 thread 5): the workspace flag (local) and project | ||
| flag (native-agent-stack) below match the exact selected native | ||
| recipe's own serve invocation, quoting recipes/README.md:244: ai-memory | ||
| serve with a transport flag of http, an enable-web flag, a bind flag of | ||
| 127.0.0.1:49374, a workspace flag of local and a project flag of | ||
| native-agent-stack (docs/foundation-stack.md:51-52 documents the same | ||
| workspace/project scope). Without these two flags, this agent would | ||
| serve with no workspace or project scope at all, unlike every other | ||
| documented ai-memory invocation in this project: write-page, search and | ||
| read-page all pass this same workspace/project pair too | ||
| (recipes/README.md:263-267). | ||
| --> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>Label</key> | ||
| <string>com.native-stack.ai-memory</string> | ||
| <key>ProgramArguments</key> | ||
| <array> | ||
| <string>${ECO_ROOT}/bin/ai-memory</string> | ||
| <string>--data-dir</string> | ||
| <string>${HOME}/.local/share/ai-memory</string> | ||
| <string>serve</string> | ||
| <string>--transport</string> | ||
| <string>http</string> | ||
| <string>--bind</string> | ||
| <string>${AI_MEMORY_URL}</string> | ||
| <string>--workspace</string> | ||
| <string>local</string> | ||
| <string>--project</string> | ||
| <string>native-agent-stack</string> | ||
| </array> | ||
| <key>RunAtLoad</key> | ||
| <true/> | ||
| <key>KeepAlive</key> | ||
| <true/> | ||
| <key>EnvironmentVariables</key> | ||
| <dict> | ||
| <key>PATH</key> | ||
| <string>/opt/homebrew/bin:${ECO_ROOT}/bin:/usr/bin:/bin:/usr/sbin:/sbin</string> | ||
| </dict> | ||
| <key>StandardOutPath</key> | ||
| <string>${ECO_ROOT}/state/logs/com.native-stack.ai-memory.out.log</string> | ||
| <key>StandardErrorPath</key> | ||
| <string>${ECO_ROOT}/state/logs/com.native-stack.ai-memory.err.log</string> | ||
| </dict> | ||
| </plist> | ||
54 changes: 54 additions & 0 deletions
54
adoption/launchd/com.native-stack.llama-embed.plist.template
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <!-- | ||
| Drafted, not run: no launchd agent from this directory has been | ||
| bootstrapped, kickstarted or booted out on any Mac (adoption/platforms/ | ||
| macos-arm64.md, "What a hosted run proves"). Render with | ||
| tools/adoption/render_launchd.py before use; lint with | ||
| adoption/launchd/launchd-agents.sh lint before ever bootstrapping it. | ||
|
|
||
| Runs the 24 GB default from adoption/platforms/macos-arm64.md's "Embedding | ||
| backend decision": llama-server given an embedding flag and a port flag of | ||
| 8232, serving embeddinggemma-300M-Q8_0 (768 dimensions), a distinct port | ||
| from the Linux/WSL2 RAG endpoint at 8231, so a macOS host never presents a | ||
| 768-dim response where 2048-dim is expected. Invokes the bin/llama-server | ||
| wrapper adoption/bootstrap-macos.sh installs (it exports DYLD_LIBRARY_PATH | ||
| itself, see the llama-cpp install_note in adoption/pins-macos-arm64.json), | ||
| so this plist carries no DYLD_LIBRARY_PATH of its own. Round 3h: -m names | ||
| the model file bootstrap-macos.sh's dedicated install_embed_model step | ||
| downloads and sha256-verifies (adoption/pins-macos-arm64.json's separate | ||
| models[] section, not tools[]); without it, KeepAlive would restart this | ||
| agent in a loop forever without ever actually serving embeddinggemma (the | ||
| defect a 2026-09-23 readiness audit found: this template ran with no model | ||
| argument at all). EMBED_MODEL_PATH is a host value like ECO_ROOT | ||
| (adoption/hosts/<host>.json, or an explicit override), resolved to the | ||
| model's actual path on disk. | ||
| --> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>Label</key> | ||
| <string>com.native-stack.llama-embed</string> | ||
| <key>ProgramArguments</key> | ||
| <array> | ||
| <string>${ECO_ROOT}/bin/llama-server</string> | ||
| <string>--embedding</string> | ||
| <string>--port</string> | ||
| <string>8232</string> | ||
| <string>-m</string> | ||
| <string>${EMBED_MODEL_PATH}</string> | ||
| </array> | ||
| <key>RunAtLoad</key> | ||
| <true/> | ||
| <key>KeepAlive</key> | ||
| <true/> | ||
| <key>EnvironmentVariables</key> | ||
| <dict> | ||
| <key>PATH</key> | ||
| <string>/opt/homebrew/bin:${ECO_ROOT}/bin:/usr/bin:/bin:/usr/sbin:/sbin</string> | ||
| </dict> | ||
| <key>StandardOutPath</key> | ||
| <string>${ECO_ROOT}/state/logs/com.native-stack.llama-embed.out.log</string> | ||
| <key>StandardErrorPath</key> | ||
| <string>${ECO_ROOT}/state/logs/com.native-stack.llama-embed.err.log</string> | ||
| </dict> | ||
| </plist> |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <!-- | ||
| Drafted, not run: no launchd agent from this directory has been | ||
| bootstrapped, kickstarted or booted out on any Mac (adoption/platforms/ | ||
| macos-arm64.md, "What a hosted run proves"). Render with | ||
| tools/adoption/render_launchd.py before use; lint with | ||
| adoption/launchd/launchd-agents.sh lint before ever bootstrapping it. | ||
|
|
||
| Mirrors the systemd user-scoped unit this profile's Linux/WSL2 host runs | ||
| for qdrant (adoption/lifecycle.md, recipes/README.md's qdrant row: the | ||
| qdrant binary given a config-path flag and disable-telemetry flag), | ||
| invoking the same bin/qdrant symlink adoption/bootstrap-macos.sh places on | ||
| PATH so this plist survives a version bump without editing. WorkingDirectory | ||
| gives qdrant's own relative default paths (its config's storage_path is | ||
| supplied separately, at install time, not baked into this template) a | ||
| stable directory to resolve against, mirroring a systemd unit's own | ||
| WorkingDirectory=; launchd-agents.sh's install subcommand creates it. | ||
| --> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>Label</key> | ||
| <string>com.native-stack.qdrant</string> | ||
| <key>ProgramArguments</key> | ||
| <array> | ||
| <string>${ECO_ROOT}/bin/qdrant</string> | ||
| <string>--config-path</string> | ||
| <string>${ECO_ROOT}/config/qdrant.yaml</string> | ||
|
seathatflowsinourveins marked this conversation as resolved.
|
||
| <string>--disable-telemetry</string> | ||
| </array> | ||
| <key>WorkingDirectory</key> | ||
| <string>${ECO_ROOT}/state/qdrant</string> | ||
| <key>RunAtLoad</key> | ||
| <true/> | ||
| <key>KeepAlive</key> | ||
| <true/> | ||
| <key>EnvironmentVariables</key> | ||
| <dict> | ||
| <key>PATH</key> | ||
| <string>/opt/homebrew/bin:${ECO_ROOT}/bin:/usr/bin:/bin:/usr/sbin:/sbin</string> | ||
| </dict> | ||
| <key>StandardOutPath</key> | ||
| <string>${ECO_ROOT}/state/logs/com.native-stack.qdrant.out.log</string> | ||
| <key>StandardErrorPath</key> | ||
| <string>${ECO_ROOT}/state/logs/com.native-stack.qdrant.err.log</string> | ||
| </dict> | ||
| </plist> | ||
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.