Repository navigation
fix(scripts): convert editable file URLs portably - #490
mohgupta-ship-it wants to merge 254 commits into
Conversation
…VIDIA#524 Raise reviewed_pr_through to 527 and reviewed_issue_through to 524 in tools/upstream_baseline.json (commit axis unchanged at 69dcdfb). Every item gets a verdict in docs/DECISIONS.md: NVIDIA#493/NVIDIA#507/NVIDIA#508/NVIDIA#511 verified via git merge-base --is-ancestor as already included through the 2.11.1/2.11.2 sync (including NVIDIA#521, which merged only into the still- open NVIDIA#516 stack, not main); the remaining 27 items stay "wait for upstream merge", none adopted now. Two items get dedicated comparison notes per docs/DIVERGENCE.md's static_runner.py and scripts/compare_scan_accuracy.py rows: NVIDIA#522 uses a different env var name and different default/semantics than this fork's SKILLSPECTOR_MAX_STATIC_SECONDS, so merging it cannot simply delete the divergence row and needs a downstream env var migration first; NVIDIA#490 extends this fork's own upstream PR NVIDIA#486 with a Python 3.14/POSIX edge case the fork's Windows environment does not hit, so NVIDIA#486 is left untouched pending upstream's own resolution. NVIDIA#501-NVIDIA#505 and NVIDIA#518 are also flagged as near-verbatim matches to this fork's existing Windows test divergence rows, worth revisiting for row deletion once merged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: SanHsien <34234698+SanHsien@users.noreply.github.com>
rng1995
left a comment
There was a problem hiding this comment.
[SkillSpector Review]
Changes requested at head ea42d8e0e0ca2fabf049345b3856fa166a3792d5.
scripts/compare_scan_accuracy.py:187: for an empty-authority URL whose parsed path begins with exactly//, the new branch prepends two more slashes. On supported pre-3.14 POSIX Python,url2pathnameleaves those four slashes unchanged andPath.resolve()collapses them to a single root slash, losing the implementation-defined exactly-two-leading-slash path that was parsed. The test mocksurl2pathnameand asserts only its input, so it cannot catch the resulting path corruption. Use a version-independent conversion that preserves the parsed local path semantics on both POSIX and Windows, and test the actual converted/resolved result across supported Python versions rather than only a mocked argument.
No checks are reported and GitHub reports merge state BLOCKED; the code issue and missing required CI both block merge. This PR appears to supersede #486, so avoid landing both versions of the same fix.
rng1995
left a comment
There was a problem hiding this comment.
[SkillSpector Review]
Re-reviewed current head e3b5b16fa8b3bcc876770e911b42e39ee2f642da. I am withdrawing the previous path-corruption blocker: it relied on an incorrect assumption about urllib.request.url2pathname. CPython 3.12 and 3.13 deliberately remove the two empty-authority delimiter slashes from a ////path input, preserving the parsed //path; CPython 3.14 parses the same input as a local file: URL with empty authority and also preserves //path. The /C:/... form is likewise handed to the platform adapter so Windows can remove the drive-letter prefix slash.
The checked-in test pins both converter inputs and would fail if the standard-library adapter were bypassed, while the existing runtime probe continues to exercise editable dependency traversal and hashing. I found no remaining required change in the current two-file diff.
No hosted checks are reported and GitHub currently reports mergeStateStatus=BLOCKED, so this approval does not make the PR merge-ready.
rng1995
left a comment
There was a problem hiding this comment.
[SkillSpector Review]
Re-reviewed current head ce56485a4c4a243f36c4fa5f8f3ad54c25e7d585. The feature blobs remain identical to the reviewed implementation, and the previous empty-authority concern remains correctly withdrawn. A distinct supported-runtime regression remains for accepted file://localhost//… inputs on Python 3.14: the current delimiter repair covers only an empty authority, allowing the adapter to reinterpret the first path component as authority. Preserve the localhost double-leading path and add a real-adapter regression.
No required checks are attached, GitHub reports mergeStateStatus=BLOCKED, and this PR must also be coordinated with superseded #486.
| # with "//". Build it explicitly because urlunsplit() normalizes this | ||
| # form differently across Python patch releases. | ||
| converter_input = parsed.path | ||
| if not parsed.netloc and converter_input.startswith("//"): |
There was a problem hiding this comment.
[P2] Preserve localhost double-leading paths
The accepted URL file://localhost//path reaches this branch with parsed.netloc == "localhost" and parsed.path == "//path", so the delimiter is not restored. On Python 3.14, url2pathname reparses that input as file://path (authority path); POSIX then raises URLError instead of resolving the local //path. The repository supports Python 3.14. Restore the delimiter for this accepted localhost form as well and add a regression that exercises the real adapter rather than only mocking its argument.
There was a problem hiding this comment.
I checked this on the latest commit and can still reproduce the issue on Python 3.14: file://localhost//tmp/dep raises URLError instead of resolving the local path. Could we preserve // for localhost URLs too and add a regression test using the real converter?
yashrajp22
left a comment
There was a problem hiding this comment.
Please address the remaining localhost path issue discussed in the inline thread.
rng1995
left a comment
There was a problem hiding this comment.
[SkillSpector Review]
Re-reviewed current head 94a45065ef3eea389a07429e0bb6dcf664260df4. The head change only synchronizes unrelated main work; neither PR-owned file changed, so the current non-outdated blocker remains unchanged. scripts/compare_scan_accuracy.py:186 repairs the delimiter only for an empty authority; accepted file://localhost//path still passes //path to Python 3.14 url2pathname, which reparses the first path component as authority and raises URLError. Preserve the localhost double-leading local path and add a real-adapter regression as requested in the existing thread.
No exact-head checks are attached, GitHub reports BLOCKED, the current thread remains unresolved, and this must be coordinated with superseded #486.
rng1995
left a comment
There was a problem hiding this comment.
[SkillSpector Review]
Value and readiness
The Windows platform-adapter correction remains useful, but the previously documented localhost conversion blocker is still present at this head. Changes remain required.
Material findings
Blocker still open — scripts/compare_scan_accuracy.py:186-188. Accepted authorities include localhost, but delimiter restoration remains gated by not parsed.netloc. Consequently file://localhost//path passes //path to Python 3.14 url2pathname; its file: prefix and reparse treat path as a nonlocal authority and POSIX raises URLError. Apply authority-safe delimiter preservation to both accepted local authorities, and add the localhost case through the real platform converter. tests/unit/test_compare_scan_accuracy.py:1120-1173 still covers only drive/empty-authority forms with a mocked adapter, so it cannot detect this case. The existing non-outdated thread remains unresolved and includes another reviewer's reproduction; no duplicate inline finding is needed.
Prior issue status: the original empty-authority path-corruption concern was explicitly withdrawn in the September 12 marked review and remains withdrawn. All subsequent marked localhost change requests remain applicable to the current condition and tests. The other human reviewer's change request remains unaddressed.
PIC tradeoffs
None identified. The earlier alternative #486 is already CLOSED and unmerged; no duplicate landing is needed.
Verification and gaps
Read the full two-file diff, exact-head script/tests and supported Python metadata, every marked review and all discussion/thread evidence. Re-read the official CPython 3.14 adapter source, including prefix/reparse and nonlocal-authority rejection; Python 3.14 execution was not performed. No exact-head checks are attached. Exact-head CI run 41513876346 has conclusion action_required, and GitHub reports MERGEABLE/BLOCKED. Workflow authorization is a separate validation gap; the code finding independently requires correction. Static review only; no contributor code, tests, snippets, imports, builds, setup or scanner invocations were executed.
Reviewed head: 807b4c09f740d941852a798041c76575144a615f.
rng1995
left a comment
There was a problem hiding this comment.
[SkillSpector Review]
Decision: Changes Requested.
Value and readiness
The standard platform adapter remains the right Windows-drive correction for #485, but the current head still retains the separately documented localhost double-leading-path failure.
Material findings
Prior blocker still open — scripts/compare_scan_accuracy.py:180-188. The authority check accepts localhost, while delimiter restoration is still gated on not parsed.netloc. Therefore file://localhost//path reaches url2pathname as //path. The current official CPython 3.14 converter prefixes file:, reparses path as the authority, and rejects a nonlocal authority on POSIX with URLError. Apply authority-safe delimiter preservation to both accepted local authorities and cover the localhost form with the real adapter. tests/unit/test_compare_scan_accuracy.py:1120-1173 still supplies only the drive/empty-authority cases and replaces the adapter with a mock, so it cannot detect this failure. The existing unresolved, non-outdated thread already contains the issue and another reviewer's reproduction; no duplicate inline finding is needed.
Prior issue status: I checked all 16 completed marked reviews by rng1995. The original empty-authority corruption concern was explicitly withdrawn in the September 12 approval and stays withdrawn. The later localhost correction and real-adapter regression request remain unaddressed; no exonerated issue is being reopened.
PIC tradeoffs
None identified. This remains within development-tool portability. The earlier variant #486 is closed; it does not need to land alongside this PR.
Verification and gaps
Read the complete two-file diff, pinned script and regression assertions, supported-Python metadata (including 3.14), linked #485/#486, every prior marked review and complete thread/comment evidence. Re-read official CPython 3.14 source as data; Python 3.14 execution was not performed. No checks attach to the exact head. Its CI run 42309939806 reports action_required, which is a workflow-authorization/validation gap rather than evidence of a failing test. GitHub reports MERGEABLE/BLOCKED, and the other reviewer's Changes Requested remains active.
Static source review only. No contributor code, tests, snippets, imports, builds, setup, hooks, scanner invocations or model calls were executed.
Reviewed head: 9362bc8c149093486f9afc7f3526d8182b16c060.
Summary
This builds on #486 and preserves the original author attribution while closing the compatibility gap found during validation.
Fixes #485
Validation
make lintmake format-checkruff check scripts/compare_scan_accuracy.pySubmitted by Codex on behalf of Mohit Gupta.