Skip to content

Ship the migrators in the TwoMLSPQ product - #152

Draft
germ-mark wants to merge 1 commit into
llm/born-dedicated-migration-exportfrom
llm/single-binding-product
Draft

germ-mark wants to merge 1 commit into
llm/born-dedicated-migration-exportfrom
llm/single-binding-product

Conversation

@germ-mark

Copy link
Copy Markdown
Contributor

Stacked on #147 and meant to ship in the same release.

The TwoMLSPQMigrate product is removed. Its module now ships in the TwoMLSPQ product. This is breaking: consumers swap .product(name: "TwoMLSPQMigrate") for .product(name: "TwoMLSPQ"). Imports are unchanged.

Why: the internal TwoMLSPQBinding target sat in both products, and Xcode avoids duplicate code per product, not per target. In an Xcode test build, TwoMLSPQ became a shared framework holding one binding copy, while TwoMLSPQMigrate linked statically into the test bundle with a second copy. Each copy keeps its own callback handle map, but Rust keeps a single callback vtable. So a sink installed through one copy is looked up in the other copy's map, and the process aborts with "Callback interface failure" (unexpectedStaleHandle).

Tests

  • Checked with a scratch package graph built by xcodebuild: a dynamic framework linking TwoMLSPQ, plus a test bundle linking the TwoMLSPQ products.
    • Before this change, the test binary has its own binding copy and the abort reproduces.
    • After it, only the shared framework holds the binding and the abort is gone.
    • Vending TwoMLSPQBinding as a separate product doesn't help; the abort still reproduces.
  • swift test (local xcframework) passes 98 XCTest and 19 Swift Testing tests, and swift-format strict is clean.

🤖 Generated with Claude Code

With TwoMLSPQBinding in two products, Xcode can link a second binding
copy into one process, and a callback through it aborts on a stale
handle. Removes the TwoMLSPQMigrate product.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Sep 24, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 9072ceb

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@germ-network/two-mls-pq Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@germ-mark
germ-mark marked this pull request as draft September 24, 2026 20:48

This branch has not been deployed

No deployments
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