regress: resource-staging cluster dissolved; jit-bundle-resolution family design - #439
Merged
Conversation
B04 unchanged. R02's blank framebuffer is gone; its Spanish assertion is a fixture defect (String(localized:locale:) cannot select an lproj). R03 macOS unchanged; iOS regressed to an agent SIGILL — the Xcode build-log capture takes an x86_64 simulator invocation that stripForeignTargetTriple accepts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…oses String(localized:bundle:locale:) does not select the .lproj (locale: affects interpolation formatting only, proven natively against the built bundle), so the 2026-07-15 fixture variant could never display Spanish even against correct staging. The title now resolves through the locale's .lproj sub-bundle with visible staging-failure states. With the mechanism corrected, all R02 surfaces render Recursos cargados (macOS control, iOS single-preview control, iOS index 1 after a live switch) and the row flips to Guard passes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bundle.allFrameworks never lists a framework without ObjC classes (proven natively with a dlopen control), and the JSON sat under Resources/ in a flat iOS framework whose resource directory is the wrapper root. DynamicBadge gains an ObjC marker class, the payload moves to the framework root, and the preview resolves through Bundle(for:) with distinct failure states. With the mechanism corrected the iOS snapshot renders the payload — the EPC-dlopened framework serves its internal resource, so B04 flips to Guard passes. B02's combined render re-verified after the artifact change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The resource-staging cluster dissolved under re-verification: R02 and B04 were fixture-mechanism defects, R03's iOS crash was the fat-build capture bug (#438). The one genuine gap is Bundle(for:) on JIT-compiled classes resolving to the agent image while only Generated*Symbols.swift gets the #151 wrapper rewrite. Design: an agent-side bundleForClass: hook keyed on class_getImageName == NULL, wrapper path plumbed from CODESIGNING_FOLDER_PATH; stage 2 retires the text rewrite. Amendments from adversarial review with native experiments folded: dladdr is unsound as the discriminator in a Swift process, and imageless JIT-linked SwiftPM package classes are a documented, gated limitation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drop rebase-orphaned commit SHAs from the design doc (cite rows instead), list B04's failure states by stage rather than an incomplete enumeration, and correct the DynamicBadge README's rationale — the marker anchors Bundle(for:), while the allFrameworks ObjC requirement is a separate fact. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What happened to the resource-staging cluster
Re-verification of B04/R02/R03 on current main dissolved the cluster three different ways:
String(localized:bundle:locale:)never selects an.lproj— itslocale:parameter only affects interpolation formatting, proven with a native harness against the healthy built bundle. The corrected fixture resolves the title through the locale's.lprojsub-bundle with visible staging-failure states. All surfaces renderRecursos cargados(macOS control, iOS single-preview control, iOS index 1 after a live switch). Row flips to Guard passes.Bundle.allFrameworksonly lists frameworks containing ObjC classes — pure-C DynamicBadge could never be observed, proven with a native dlopen control — and its JSON sat underResources/in a flat iOS framework. The fixture gains an ObjC marker class, a root-level resource, and aBundle(for:)lookup with per-stage failure states. The EPC-dlopened framework serves its internal resource; row flips to Guard passes. B02's combined render re-verified after the artifact change.The one genuine gap and its design
docs/jit-bundle-resolution.md:Bundle(for:)on a class compiled into the JIT resolves to the agent image; onlyGenerated*Symbols.swiftgets the #151 rewrite toCODESIGNING_FOLDER_PATH(why R03's color renders while its strings/plist/momd miss — resources verified present on disk both platforms). Design: an agent-side+[NSBundle bundleForClass:]hook keyed onclass_getImageName == NULL, wrapper path plumbed from the build settings; stage 2 retires the text rewrite. Adversarial design review ran native experiments — the swizzle mechanics, cache behavior, and both wrapper layouts verified;dladdrrejected as discriminator (misattributes runtime metadata in Swift processes); imageless JIT-linked SwiftPM package classes documented as a gated limitation needing its own matrix row.Gates
/simplify pass + adversarial correctness pass on the branch diff (findings folded: rebase-orphaned SHAs dropped, failure-state list corrected, README rationale fixed); design doc had its own experimental adversarial review (amendments folded). Unit tier, integration tier, and manual
RegressToolGuardTestsall green locally; lint exit 0 on every commit.🤖 Generated with Claude Code