deps: cuda-link 1.12.1 + doorbell persistence fixes#1
Conversation
Add Installer.phase4c_cuda_link_env(): after the cuda-link wheel is installed, persist CUDALINK_LIB_PATH to the user environment via setx (Windows-only, non-fatal) so TouchDesigner library mode resolves the venv site-packages with no manual env-var step. Wired into install() right after phase4b_cuda_link(). Bump the wheel URL and phase progress string from 1.12.0 to 1.12.1. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
phase4c_cuda_link_env only declared CUDALINK_LIB_PATH, so a fresh install silently degraded the native-wait IPC path to poll-sleep. SD's TD topology is bidirectional (TD Sender + SD Exporter are each a producer on their own IPC leg), and TD's Sender runs in a separate bundled-Python process that a runtime os.environ.setdefault can't reach -- the doorbell var must be setx-persisted like CUDALINK_LIB_PATH. Found via a clean-slate reproducibility test of PR #2's cuda-link handling (stripped venv package + all cuda-link env vars, then re-ran phase4b/phase4c to confirm they're self-sufficient).
There was a problem hiding this comment.
Pull request overview
This PR updates the installer’s cuda-link dependency and improves TouchDesigner integration by persisting required environment variables, while also adding an automated Claude Code review workflow and repo-level Python review guidance.
Changes:
- Bump the prebuilt
cuda-linkwheel URL to1.12.1and update the installer progress messaging accordingly. - Add a new install phase (
phase4c_cuda_link_env) to persistCUDALINK_LIB_PATHandCUDALINK_DOORBELL=1on Windows viasetx. - Add a GitHub Actions workflow for Claude Code reviews, and add repo Python review guidance under
.github/instructions/.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
sd_installer/installer.py |
Updates cuda-link wheel pin and adds a new phase to persist cuda-link-related env vars for TouchDesigner workflows. |
sd_installer/__main__.py |
Removes trailing whitespace-only line. |
sd_installer/__init__.py |
Removes trailing whitespace-only line. |
.github/workflows/claude-code-review.yml |
Adds an automated Claude Code PR review workflow. |
.github/instructions/python.instructions.md |
Adds repository Python review guidance tailored to this installer. |
| setx_result = subprocess.run( | ||
| ["setx", "CUDALINK_LIB_PATH", site_packages], | ||
| capture_output=True, | ||
| text=True, | ||
| ) | ||
| if setx_result.returncode != 0: | ||
| print(f" WARNING: setx failed to persist CUDALINK_LIB_PATH: {setx_result.stderr.strip()}") | ||
| else: | ||
| print(" CUDALINK_LIB_PATH persisted for this user account.") | ||
| print(" Restart TouchDesigner (and any open shells) to pick up the new environment variable.") | ||
|
|
| db_result = subprocess.run(["setx", "CUDALINK_DOORBELL", "1"], capture_output=True, text=True) | ||
| if db_result.returncode != 0: | ||
| print(f" WARNING: setx failed to persist CUDALINK_DOORBELL: {db_result.stderr.strip()}") | ||
| else: | ||
| print(" CUDALINK_DOORBELL=1 persisted (enables doorbell/native-wait IPC fast path).") |
| permissions: | ||
| contents: read | ||
| pull-requests: write | ||
| issues: write | ||
| id-token: write |
The multi-agent code-review plugin exhausted 60 turns on PR #2 (feat/installer-error-report, a stacked diff with no CLAUDE.md to shortcut convention discovery) before posting a verdict. Bumping headroom rather than trusting a partial/incomplete review.
|
Re-triggering — the prior review run stalled after the CLAUDE.md-compliance step and never completed the bug scan or posted a final verdict, despite the workflow itself exiting without error. |
|
Deleted the stalled review comment (the precondition check was treating it as a completed review, causing re-runs to short-circuit). Re-triggering for a genuinely fresh review. |
subprocess.run(['setx', ...]) can raise FileNotFoundError/OSError if setx isn't resolvable, which propagated unhandled and aborted the install before phases 5-8 ran -- contradicting the method's own 'non-fatal' docstring. Wrap both calls in try/except OSError, matching the existing returncode!=0 warning path. Flagged independently by both the Claude and Copilot review passes on PR #1.
|
Review stalled again after the fix-commit push (same silent-truncation pattern). Deleted the stale comment and re-triggering once more. |
|
Claude finished @forkni's task in 3m 10s —— View job Claude Code ReviewTodo list
SummaryThis PR (1) bumps the FindingsNo high-signal issues found.
No code changes were made as part of this review. |
Summary
CUDALINK_LIB_PATHCUDALINK_DOORBELL=1in phase4c for the doorbell fast path__init__/__main__forkni/StreamDiffusionfork setup)This is PR I-1 of a two-stack installer PR sequence:
feat/installer-error-report(PR I-2) chains on this branch's tip since it depends onphase4b_cuda_link/phase4c_cuda_link_env, which exist only here, not onmain.Test plan
CLAUDE_CODE_OAUTH_TOKENsecret on this fork)