Skip to content

Fix #365: verify each lipo architecture separately in universal macOS steps - #58

Merged
AlexMikhalev merged 2 commits into
mainfrom
task/365-lipo-verify-arch
Oct 6, 2026
Merged

AlexMikhalev merged 2 commits into
mainfrom
task/365-lipo-verify-arch

Conversation

@AlexMikhalev

Copy link
Copy Markdown
Contributor

Summary

lipo from Xcode 27 rejects several architectures in one -verify_arch call (lipo: -verify_arch requires exactly one input file), whichever side the file is on. That failed the "Create universal macOS binary" job of the terraphim_mcp_server-v1.21.18-rc.1 release-mcp run (all five per-target builds passed).

  • release-mcp.yml and release-binaries.yml (same multi-architecture form in create-universal-macos) now run lipo FILE -verify_arch <arch> for x86_64 and arm64 separately, then require lipo -archs to list exactly those two. The stale "Xcode 16.4" comments are replaced.
  • Contract tests updated: test_universal_lipo_verify_arch_uses_safe_argument_order now pins the per-architecture form with mutations (flags-first, multi-arch, verify dropped, archs check dropped); a new release-mcp test pins the same.

Refs terraphim/terraphim-clients#365 (Gitea)

Evidence

  • Reproduced locally with this Mac's lipo: the multi-arch form fails; per-architecture checks pass.
  • Both workflow fragments were executed for real against a clang-built universal binary (pass) and a thin x86_64 binary (fail), under set -euo pipefail.
  • actionlint (including shellcheck on the run scripts) clean; release contract tests pass apart from the three existing macOS-only /bin/true errors.

🤖 Generated with Claude Code

Alex and others added 2 commits October 6, 2026 21:51
…teps

lipo from Xcode 27 rejects several architectures in a single -verify_arch
("requires exactly one input file"), which failed the release-mcp run for
terraphim_mcp_server-v1.21.18-rc.1 in "Create universal macOS binary".
Verify x86_64 and arm64 one at a time and require exactly those two slices
from `lipo -archs`, in release-mcp.yml and in release-binaries.yml (which
used the same multi-architecture form). Contract tests pin the new form and
mutation-check the old ones.

Refs terraphim/terraphim-clients#365 (Gitea)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Addresses the structural review of this PR.

Refs terraphim/terraphim-clients#365 (Gitea)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@AlexMikhalev

Copy link
Copy Markdown
Contributor Author

Structural review (pi-rust, openai-codex/gpt-5.5, structural-pr-review)

No blocking findings; confidence 0.86. Both workflow fragments were judged shell-correct under set -euo pipefail and correct for older and newer lipo (per-architecture presence check plus an exact lipo -archs slice check).

  1. Low: the release-mcp lipo contract test was substring-only without mutation checks. Accepted and fixed: it now has a helper plus four mutants (flags-first, multi-architecture, verify dropped, -archs check dropped), each of which must fail.

Evidence beyond the review: both workflow fragments were executed for real with this Mac's lipo against a clang-built universal binary (pass) and a thin binary (fail). CI is green on the self-hosted runner on the earlier head 38d4739 (the later commit changes only a test).

@AlexMikhalev
AlexMikhalev merged commit e72db6c into main Oct 6, 2026
3 checks passed
@AlexMikhalev
AlexMikhalev deleted the task/365-lipo-verify-arch branch October 6, 2026 21:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant