[PR #931] [MERGED] fix(apple): pair bridge hypotheses within one application root #2508

Closed
opened 2026-10-17 21:06:57 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/931
Author: @kaoru0822-kitauji
Created: 10/7/2026
Status: ✅ Merged
Merged: 10/7/2026
Merged by: @kaoru0822-kitauji

Base: main ← Head: fix/apple-bridge-roots


📝 Commits (3)

  • 9226ade fix(apple): pair bridge hypotheses within one application root
  • 2e81e86 fix(apple): count only real framework version directories
  • 6d74992 docs(apple): describe directory-based framework plist ambiguity

📊 Changes

4 files changed (+96 additions, -15 deletions)

View changed files

📝 docs/apple-application-analysis.md (+5 -3)
📝 src/domain/appleApplication.test.ts (+57 -0)
📝 src/domain/appleApplication.ts (+20 -10)
📝 src/domain/appleBundleAnatomy.ts (+14 -2)

📄 Description

Follow-up to #922. It merged before these two review fixes were pushed. They answer the Codex comments r4205864180 and r4205864189.

Summary

  • Bridge candidates across applications: a ZIP or DMG with two applications produced bridge candidates from one app's scripts to the other app's native code. Candidates now pair a script only with native code owned by the same application root. Components outside every root, such as an IPA's SwiftSupport/, pair only with each other.
  • Framework Info.plist guessed from one file: when a versioned framework had several Versions/<v>/ directories but only one contained Resources/Info.plist, that plist was chosen. Versions/Current decides which version applies and is not inventoried. With several real versions, info_plist_path now stays null, and the limitation explains why.

Contract and boundary impact

  • Schema: none. Results change only in the two cases above.
  • Generated metadata: none.

Evidence and regression coverage

  • src/domain/appleApplication.test.ts gains two cases, each failing on main:
    • a ZIP containing First.app and Second.app, where only same-root pairs remain;
    • a framework with versions A and B where only A has a plist, which is now unknown.

Validation performed

  • npm run test:focused -- src/domain/appleApplication.test.ts tests/composition/analysis-sessions/appleApplication.test.ts tests/boundary/mcp/mobileApplicationGraphMcp.test.ts: 18 passed.
  • npm run check:changed: passed.
  • npm run docs:generate: no changes.
  • npm run verify:macos-bundle (before rebasing onto main): passed.

Compatibility, safety, and release

  • Breaking changes: none.
  • Real Hopper/Ghidra coverage: not applicable.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/931 **Author:** [@kaoru0822-kitauji](https://github.com/kaoru0822-kitauji) **Created:** 10/7/2026 **Status:** ✅ Merged **Merged:** 10/7/2026 **Merged by:** [@kaoru0822-kitauji](https://github.com/kaoru0822-kitauji) **Base:** `main` ← **Head:** `fix/apple-bridge-roots` --- ### 📝 Commits (3) - [`9226ade`](https://github.com/morluto/rea/commit/9226ade5114f287eb8e1b00b08dd91da1cc66003) fix(apple): pair bridge hypotheses within one application root - [`2e81e86`](https://github.com/morluto/rea/commit/2e81e867b24da8314f666f62d154de5803040cdf) fix(apple): count only real framework version directories - [`6d74992`](https://github.com/morluto/rea/commit/6d74992efed3271e8370c505afdde347609f8353) docs(apple): describe directory-based framework plist ambiguity ### 📊 Changes **4 files changed** (+96 additions, -15 deletions) <details> <summary>View changed files</summary> 📝 `docs/apple-application-analysis.md` (+5 -3) 📝 `src/domain/appleApplication.test.ts` (+57 -0) 📝 `src/domain/appleApplication.ts` (+20 -10) 📝 `src/domain/appleBundleAnatomy.ts` (+14 -2) </details> ### 📄 Description Follow-up to #922. It merged before these two review fixes were pushed. They answer the Codex comments [r4205864180](https://github.com/morluto/rea/pull/922#discussion_r4205864180) and [r4205864189](https://github.com/morluto/rea/pull/922#discussion_r4205864189). ## Summary - **Bridge candidates across applications:** a ZIP or DMG with two applications produced bridge candidates from one app's scripts to the other app's native code. Candidates now pair a script only with native code owned by the same application root. Components outside every root, such as an IPA's `SwiftSupport/`, pair only with each other. - **Framework Info.plist guessed from one file:** when a versioned framework had several `Versions/<v>/` directories but only one contained `Resources/Info.plist`, that plist was chosen. `Versions/Current` decides which version applies and is not inventoried. With several real versions, `info_plist_path` now stays `null`, and the limitation explains why. ## Contract and boundary impact - Schema: none. Results change only in the two cases above. - Generated metadata: none. ## Evidence and regression coverage - `src/domain/appleApplication.test.ts` gains two cases, each failing on `main`: - a ZIP containing `First.app` and `Second.app`, where only same-root pairs remain; - a framework with versions A and B where only A has a plist, which is now unknown. ## Validation performed - `npm run test:focused -- src/domain/appleApplication.test.ts tests/composition/analysis-sessions/appleApplication.test.ts tests/boundary/mcp/mobileApplicationGraphMcp.test.ts`: 18 passed. - `npm run check:changed`: passed. - `npm run docs:generate`: no changes. - `npm run verify:macos-bundle` (before rebasing onto `main`): passed. ## Compatibility, safety, and release - Breaking changes: none. - Real Hopper/Ghidra coverage: not applicable. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-17 21:06:57 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#2508
No description provided.