Repository navigation
fix: close symlink gaps in selected source inventories - #959
Merged
Mister-Meeseeks merged 1 commit intoOct 13, 2026
Merged
Conversation
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.
The selected-record checker silently omits directory and dangling symlinks from its source inventory:
Path.rglobdoes not descend through directory links, and the file-only filter drops them. For example, addingsupplier/linked -> ../unlisted, withunlisted/extra.pypresent, makes that file readable through the supplier path while the unchanged manifest still passes. The legacy manifest layout also accepts a pinned file alias whose target escapes the supplier package.Use one checked iterator in both layouts. Reject directory/dangling links before filtering, and enforce package containment for regular files. Inventoried regular-file aliases whose targets remain inside the package are still accepted and checked against their own recorded digests. The contract assumes a stable, readable filesystem; concurrent mutation and platform-specific junctions are outside scope.
Only the checker and its focused regression module change. No selected certificate, supplier construction, historical artifact, upstream source or mathematical bound changes.
Validation on macOS arm64 / CPython 3.14.5:
-O: 50 method executions, no failures or skips.make selected-record-checkpasses. The current selection and all ten historical checkpoints return identical exact kappas under the baseline and candidate; all 21 retained X4 input hashes match.The focused tests can be run from a clean checkout using
python3 -I -B tests/test_selected_inventory_links.py -v, and again with-O; the existing modules aretests/test_selected_result.pyandtests/test_selected_proof_binding.py.This is based on main at
007664306fff84fbb1c9a1b4053b69f439764034, including Mihir Srivastava's merged #841 primary-proof binding. Its predicate is retained unchanged and its tests pass. #865 concerns replay-receipt coverage, a separate contract; the final public overlap search found no equivalent inventory-walk repair. No priority claim is made.A separately reported review of the original patch on Linux / CPython 3.13.5 used reconstructed minimal trees, including 55/55 boundary outcomes and three detected faulty variants. That is not a full-repository or final-commit Linux replay. Full
make verify, cold construction replays, Lean and hosted CI were deliberately not run in this pass: this patch changes static inventory traversal, not the construction. These checks do not authenticate coherently edited records or establish a multiplication theorem.Credit Douglas Colkitt's existing checker, Mihir Srivastava's proof-binding work and the retained community construction lineage. Developed with substantial OpenAI Codex assistance under Apache-2.0.