Repository navigation
fix(doctor): a symlink loop fails only the pairing and artifact checks (#729, slice 4) - #919
Conversation
#729, slice 4) Path.resolve() raises RuntimeError on a symlink loop up to Python 3.12. doctor_pairing and doctor_artifact caught (OSError, ValueError) only, so a loop in CLAUDE_PLUGIN_ROOT or in the import path of mcp_server aborted the whole doctor instead of failing one optional check. Both now catch RuntimeError too. Adds a loop test per module and a test that a distribution installed outside the plugin directory reads pyproject.toml. Refs #729 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYrTZa71vGSkUi8axL4
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @cdeust's task in 3m 2s —— View job Review of PR #919 (review 1 of 3): blocked
Blocker: the new code comments say Fix: use I worked this out from the CPython docs and by tracing the code; I couldn't run it, because no 3.13 interpreter was available here. Verdict: block |
Review 1 of 3 (ADR-1119): PR #919All five reviews ran (code quality, documentation accuracy, performance, security, test coverage). Performance and security found nothing. The other three found the same problem on their own. BlockerThe new comments and the CHANGELOG get Python 3.13 wrong, and the new artifact loop test fails on 3.13. Files:
Fix: in Notes, no action before merge
Not verified: no Python 3.13 run. The 3.13 behaviour comes from the CPython docs and a trace through the code. Tests were not re-run in this review. Verdict: block |
…t checks (#729, slice 4)
|
Revue 1 : le bloquant est confirmé et corrigé dans 2a19bdc ( Ce que j'ai vérifié. Python 3.13.18 est installé ici. Sur une boucle de liens symboliques,
Sur 3.13, au commit de1a1b5, Correctif.
Reçus.
Notes sans action.
Generated by Claude Code |
|
Claude finished @cdeust's task in 2m 37s —— View job Review 2 of 3 (ADR-1119): PR #919
The Blocker from review 1 is fixed in
None of the five reviews found a Blocker. Performance and security found nothing. Notes, no action before merge
Not verified: tests were not run in this review (the sandbox here did not allow Verdict: approve |
…t checks (#729, slice 4)
|
CI autopilot : échec de Diagnostic. Les tests passaient tous (12035 passed). Ce qui a échoué, c'est la porte de mutation sur les lignes modifiées (ADR-1122) : quatre mutants de Correctif. Deux tests, sans changer le code :
Reçus locaux.
Non vérifié. Je n'ai pas relancé la suite complète localement. La CI de c3b0209 est en cours. Generated by Claude Code |
|
Claude finished @cdeust's task in 1m 52s —— View job Review 3 of 3 (ADR-1119): PR #919
The earlier Blocker is still fixed. Review 1 found a Blocker and review 2 confirmed the fix in None of the five reviews found a Blocker. Performance and security found nothing.
Accepted: the whole PR ( Notes, no action before merge
Not verified: this job's permission rules blocked Verdict: approve |
…k-loop # Conflicts: # CHANGELOG.md
Summary
Refs #729 (slice 4; not
Closes: the remaining slices are listed on the issue).Path.resolve()raisesRuntimeErroron a symlink loop up to Python 3.12; from 3.13 a non-strictresolve()raises nothing and onlystrict=Trueraises (OSError).doctor_pairing.plugin_pairinganddoctor_artifact.artifact_identitycaught(OSError, ValueError)only. A loop inCLAUDE_PLUGIN_ROOT, or in the pathmcp_serveris imported from, therefore aborted the wholepython -m mcp_server.doctorrun instead of failing one optional check. This is the root cause of the first note left by review 1 of #916, which was merged before the fix shipped. Both modules now catchRuntimeErrortoo, and resolve the plugin root and themcp_serverpackage directory withstrict=True. Without that, on 3.13 the artifact check passed with 0 files (found by review 1).The PR also adds the second test asked for in that review: a
hypermnesia-mcpdistribution installed outside the plugin directory does not speak for the plugin's code, so the pairing check reads the plugin'spyproject.toml.Type of change
Test plan
pytest tests_py/test_doctor_pairing.py tests_py/test_doctor_artifact.py tests_py/test_doctor_artifact_tree.py tests_py/test_doctor.py: 64 passed, 1 skipped on each of Python 3.11.18, 3.12.3 and 3.13.18 (Linux).strict=True),test_a_package_path_in_a_symlink_loop_fails_the_check_onlyfails; at 2a19bdc it passes.test_a_plugin_root_in_a_symlink_loop_fails_the_check_onlyandtest_a_package_path_in_a_symlink_loop_fails_the_check_onlyfail (2 failed, 37 passed).RuntimeErrorfrom eitherexcepttuple is killed by its loop test on Python ≤ 3.12 (CIunitruns 3.12). On 3.13 the strict resolve raisesOSError, so that mutant survives there. Droppingstrict=Trueindoctor_artifact.pyis killed on 3.13 only.CLAUDE_PLUGIN_ROOT=<loop> python -m mcp_server.doctorruns to the end.Plugin/runtime pairingreportscannot read the Claude plugin pairing: Symlink loop from '…/a', and every other check still runs.ruff check/ruff format --checkon the changed files,python scripts/check_craftsmanship.py: OK.Audit notes
tests_py/shared/test_log_rotation.py).torchcannot be downloaded from this environment).Coding-standards compliance
Reviewer checklist
Unreleased / Fixed.https://claude.ai/code/session_018kyZYrTZa71vGSkUi8axL4
Generated by Claude Code