Drop the stale WhereCore dependency from StuffTestHost#144
Conversation
The shared test host force-linked WhereCore so that Stuff_WhereCore.bundle and (transitively) the GeoJSON Stuff_RegionKit.bundle landed in the host, on the theory that a hosted bundle's Bundle.module resolves against the host's main bundle. On Xcode 27 that is no longer necessary: each .xctest carries its own copies of the resource bundles for the code it links -- WhereUITests.xctest ships Stuff_WhereCore.bundle, Stuff_RegionKit.bundle, Stuff_WhereUI.bundle and Stuff_LifecycleKitUI.bundle -- so SwiftPM's Bundle.module finds them via Bundle(for: BundleFinder.self) and never falls back to Bundle.main. So every bundle in the scheme was paying for a host dependency that nothing needed, and the full GeoJSON set was being embedded twice. Verified by removing it and running both schemes green: Stuff-iOS-Tests and the image-snapshot scheme, the latter being the resource-sensitive one (Assets.car, GeoJSON, string catalogs) with no reference images modified. The built host now contains no WhereCore symbols and no resource bundles at all. Worth noting the old comment cited two canaries as proof the dependency was load-bearing. One of them, WhereUITests.StringsTests, had already ceased to exist with the String Catalog symbol migration; the other, SwiftDataInspectorWiringTests, passes without it. The claim had quietly stopped being true rather than being wrong when written -- so the replacement comment records what makes it unnecessary and what to do instead of re-adding a product here, rather than just deleting the note. Closes the WhereCore half of the StuffTestHost item in TODOs.md; the scene-configuration-name duplication half stays open.
|
@cursoragent please merge main into this branch |
main's #142 added the broken-snapshots P2 while this branch split the StuffTestHost item in two: the WhereCore half moved to Completed and the scene-configuration-name half was re-filed as its own quick-win. Kept both sides — main's new item plus this branch's split — and dropped the combined item they both descend from.
…re-dep # Conflicts: # TODOs.md
…o drop-testhost-wherecore-dep # Conflicts: # TODOs.md
|
@cursoragent Please merge main into this PR. Once merged and pushed, no need to monitor. |
|
While verifying the merge I noticed the module's own docs were left behind by the original change: I couldn't refresh the PR description (the tool reports it isn't agent-managed), so the body still describes the pre-merge state and doesn't mention the docs commit. Verification here was limited to what Linux allows — |
The module's README and AGENTS.md still described the host as embedding Stuff_WhereCore.bundle, and AGENTS.md's checklist told the next person to add a package product to the host to fix a Bundle.module miss — the exact thing the new Project.swift comment says not to do. Co-authored-by: Kyle Van Essen <[email protected]>
|
@cursoragent can you double check given recent PR 145 merge into main that the changes here are still correct? No need to monitor once / if changes are pushed here, just reply to this PR. |
|
Re-checked PR #144 against The change is still correct — #145 actually reinforces it. #145's central correction (nothing here is a dynamic framework; Xcode's SPM integration links every product statically into each consumer) is exactly the mechanism this PR's manifest comment relies on: The one thing that genuinely needed re-checking was #145 splitting the image snapshots back into three bundles. Verification was limited to what this Linux VM allows: |
…re-dep Co-authored-by: Kyle Van Essen <[email protected]>
PR #145 established what makes the removed WhereCore dependency unnecessary: nothing here is a dynamic framework, and Xcode's SPM integration links every product statically into each consumer, which is why a `.xctest` carries its own resource bundles. Point the host's note at that rule rather than asserting the consequence on its own. Also refresh the scene-name item's line numbers, which the merges since have moved. Co-authored-by: Kyle Van Essen <[email protected]>
Re-checked against Why #145 helps rather than hurts#145's central correction is the mechanism this PR's comment depends on. The comment asserts that each The one thing that actually needed re-checking#145 undid #143's consolidation and split the image snapshots back into three bundles. Two of them —
Commits since you last looked
One stale thing I deliberately left
Verification limitsLinux cloud VM, so: |
|
@cursoragent can you inspect the failed bundle and include the broken image here? |
|
No code changes were needed this turn, so the branch is untouched and clean. Here's what I found. There is no broken image — the failure isn't a pixel mismatch. I pulled the It also isn't this branch. The issue landed about 20 seconds into the 56-second test, and the message names only the erased hosting-controller type — so which of the 16 configurations stalled can't be recovered from the bundle, which is itself a gap worth closing. The screen fits a flake class already ledgered at |
Downloaded the There is no broken image, because nothing mismatched. The failure isn't a pixel diff — it's the settle-timeout guard, and every one of What the bundle actually containsOne issue in the entire 28-test, 526.6s run:
That's So the closest thing to "the image" is what the run compared against and matched: AboutSettingsViewSnapshotTests reference images, light and dark iPhone It isn't this branch
What I think it isThe issue landed ~20s into the 56.1s test (issue stamped The screen fits a flake class already ledgered in Want me to take either of these?Neither is filed, and neither belongs in this PR's diff as it stands:
Say the word and I'll do them here or on a separate branch. Nothing about the |





StuffTestHostforce-linkedWhereCoreso thatStuff_WhereCore.bundleand — transitively — the GeoJSONStuff_RegionKit.bundlewere embedded in the host, on the theory that a hosted test bundle'sBundle.moduleresolves against the host's main bundle.On Xcode 27 that's no longer necessary. Each
.xctestnow carries its own copies of the resource bundles for the code it links —WhereUITests.xctestshipsStuff_WhereCore.bundle,Stuff_RegionKit.bundle,Stuff_WhereUI.bundle, andStuff_LifecycleKitUI.bundle— so SwiftPM'sBundle.moduleresolves viaBundle(for: BundleFinder.self)(the test bundle) and never falls back toBundle.main.So every bundle in the scheme was paying for a host dependency nothing needed, and the full GeoJSON set was being embedded twice.
On the old comment
It cited two canaries as proof the dependency was load-bearing:
WhereUITests.StringsTestsStringsfacadesSwiftDataInspectorWiringTestsThe claim quietly stopped being true rather than being wrong when written. That's why the replacement comment records what makes it unnecessary and what to do instead of re-adding a product here, rather than just deleting the note — the next person hitting a missing-resource failure should give the bundle that needs the resource a dependency on the product that owns it, not re-embed it in the host for everyone.
Verification
Stuff-iOS-Testsgreen.WhereUISnapshotTestsgreen — the resource-sensitive one (Assets.car, GeoJSON, string catalogs), with zero reference images modified. This is the scheme that would fail loudly if a resource lookup silently degraded.StuffTestHost.appis now just the executable, dylib, andPlugIns/)../swiftformat --lintclean.Notes
Closes the WhereCore half of the
StuffTestHostitem inTODOs.md; the scene-configuration-name duplication half stays open and is re-filed as its ownquick-win.Independent of #142 / #143 and mergeable in any order, though all three touch
TODOs.md, so whichever lands last may need a trivial conflict resolution.