Follow-up to #34 / PR #50. That PR hardened the dashboard's advisory git calls (poll + project detection) against headless hangs by setting GIT_TERMINAL_PROMPT=0, neutralizing GIT_ASKPASS, and passing -c credential.helper= so a private or moved remote fails fast instead of blocking on a credential prompt (dashboard/projects.rs, poll.rs).
The same treatment was not applied to the dashboard's clone paths used for discovery/onboarding — dashboard/github_api.rs (~245-248) and dashboard/api.rs (~606) still invoke git clone without the credential-neutralizing env/args. On a headless host (no TTY, no askpass), cloning a private or since-removed repo can hang exactly as the advisory calls did before #50.
Fix: apply the identical GIT_TERMINAL_PROMPT=0 + empty GIT_ASKPASS + -c credential.helper= treatment to those clone invocations (ideally via one shared helper so the two paths cannot drift from the advisory ones).
Authored by Claude Code on behalf of @magnificentlycursed.
Follow-up to #34 / PR #50. That PR hardened the dashboard's advisory git calls (poll + project detection) against headless hangs by setting
GIT_TERMINAL_PROMPT=0, neutralizingGIT_ASKPASS, and passing-c credential.helper=so a private or moved remote fails fast instead of blocking on a credential prompt (dashboard/projects.rs,poll.rs).The same treatment was not applied to the dashboard's clone paths used for discovery/onboarding —
dashboard/github_api.rs(~245-248) anddashboard/api.rs(~606) still invokegit clonewithout the credential-neutralizing env/args. On a headless host (no TTY, no askpass), cloning a private or since-removed repo can hang exactly as the advisory calls did before #50.Fix: apply the identical
GIT_TERMINAL_PROMPT=0+ emptyGIT_ASKPASS+-c credential.helper=treatment to those clone invocations (ideally via one shared helper so the two paths cannot drift from the advisory ones).Authored by Claude Code on behalf of @magnificentlycursed.