fix: stop a failed download pointing at a setting that cannot help - #128
Merged
Conversation
The mirror toggle is what a user reaches for when a runtime download fails, and it is the one thing that cannot change the outcome: downloadSources (internal/install/bootstrap.go:364-372) always tries both the official source and the mirror, and the preference only reorders them. By the time "Cannot download Node.js" appears, both hosts have already failed. Nothing said so, so the user found out by toggling a collapsed advanced setting and retrying. Download failures now carry that line. It is a separate export rather than another failureCopyFor branch because AGENT_INSTALL_FAILED also covers npm exits and installer launches, where the advice would be wrong -- the caller knows which path it is on, the error code does not. RuntimePrompt also rendered this class of failure as a bare styled span while RuntimeSection used notice notice-error for the same thing. Both are notices now, and .notice gained a rule so one carrying a hint stacks instead of laying the message and the hint out side by side. Scoped to :has(> small) so the other notices keep the centred row they were built for -- verified in the browser, including that MirrorSetting's nested small is not caught by it. Refs #116 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Aug 8, 2026
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.
Fixes the actionable half of #116.
The mirror toggle is what a user reaches for when a runtime download fails — and it is the one thing that cannot change the outcome.
downloadSources(internal/install/bootstrap.go:364-372) always returns both the official source and the mirror; the preference only reorders them. So by the timeCannot download Node.js 24.16.0appears, both hosts have already been tried and failed.Nothing said so. The user's path was: hunt for the collapsed advanced setting, toggle it, retry, fail again.
Download failures now carry that line explicitly. It is a separate export rather than another
failureCopyForbranch becauseAGENT_INSTALL_FAILEDalso covers npm exit codes and installer launches, where the advice would be wrong — the caller knows which path it is on, the error code does not.Also fixes the inconsistent treatment
RuntimePromptrendered this class of failure as a bare<span class="runtime-prompt-error">whileRuntimeSectionusednotice notice-errorfor the identical thing (the second half of #116, and #121's item 9). Both are notices now..noticeis a horizontal flex, so a notice carrying a hint needed a stacking rule. Scoped to:has(> small)so the other 12 notices keep the centred row they were built for.I verified this in the browser rather than trusting the selector:
column,flex-start,gap: 4pxrow,center12px,rgb(110,110,115)— secondary grey, not inheriting the red alarm colourMirrorSetting's<small>(nested inside a<span>) → correctly not matched, staysrowWhat #116 keeps open
The collapsed-by-default placement of the setting, and the fact that Aider's uv path is unaffected by the mirror with no in-app lever for a blocked network. Those are placement and coverage decisions rather than a wrong message.
Verification
RuntimePrompttestpnpm run build,pnpm run test:e2e(6 passed)🤖 Generated with Claude Code