Make Shoal compatibility upgrades safe - #112
Open
phrocker wants to merge 3 commits into
Open
Conversation
Install a synchronized compatibility initializer after the Shoal dependency so pip upgrades from historical Sharkbite releases preserve the public import package. Add real upgrade and split-site release gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep the bridge payload assertion focused on installed compatibility files rather than pip-generated dist-info and bytecode entries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Run the split package-path check outside the historical source checkout so local modules cannot shadow installed artifacts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.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.
Summary
sharkbite==1.2.0.3to1.3.0pip upgrades preserve the Shoal-backed import packagesharkbite/__init__.pycompatibility facade after the exact Shoal dependencymainRoot cause
Modern pip installs dependencies before dependents. The metadata-only bridge allowed
shoal-sharkbiteto installsharkbite/__init__.py, then pip uninstalled historicalsharkbite==1.2.0.3and deleted that same path. Both distributions remained present andpip checkpassed, but imports were broken.The bridge now writes the initializer last. Its Shoal-derived body is verified against the exact implementation wheel; only a fixed
pkgutil.extend_pathpreamble may differ. Shoal continues to own every implementation module,pysharkbite, and native artifact.Validation
actionlint1.7.7sharkbite==1.2.0.3wheelshoal-sharkbite==1.3.0is already installedpip check, public API identity, native ownership, and direct RECORD ownership assertionsRelease recovery
The existing Sharkbite
v1.3.0workflow failed before PyPI publication, so the version remains available. After this PR merges, delete/recreate the Sharkbitev1.3.0release and tag at the merge commit; do not rerun the failed workflow against the old tag.