Repository navigation
Make the Nodes page clearer: public-URL commands, visible limits, old addresses - #157
Merged
Merged
Conversation
SaladDay
force-pushed
the
codex/web-ux-nodes
branch
from
September 26, 2026 06:54
ad8ff98 to
d5a71df
Compare
The install and uninstall commands downloaded the node installer from the browser's own origin, so a console opened over an SSH tunnel or 127.0.0.1 produced commands that fail on every other host. The reverse proxy already serves <public_url>/node-install/* from the console, so both commands now use the installation's public_url as the download origin and --source-url. Add node already issues no command for a loopback public URL; the clean-up dialog now says no uninstall command can be given in that case. The browser-origin loopback warnings, their strings and sandboxSetupOrigin go.
The Nodes list showed active / limit only for microsandbox, and a node's page had no limit at all, so a Docker node's limit was invisible before and after Edit node. Both now show active / max_active for every provider. Edit node adds the host's CPUs and memory from the node detail read, each sandbox's size and at most how many of those fit.
Every failed sandbox write was treated as an uncertain outcome: the node list turned to Status unconfirmed and all writes stayed locked until a refresh, even when Core had clearly refused the change. Only no answer, a timeout or a 5xx is uncertain now; any other 4xx shows Core's reason in an error toast and leaves the page as it was. The sandbox administration hint appears only for sandbox_admin_not_configured, other 403s show Core's message, and the Nodes copy no longer tells the administrator to ask the deployment administrator.
The Nodes page named nodes bound to an old Core address in a banner, but their rows still read Available although Core places no new sandboxes on them. Such a node's status on the list and on its page is now Old address, with Remove and add again under it.
Add node ended at the node's Connected line with only Done, leaving a new administrator to find the rest of Getting started. While the checklist is open, the ready state now names the next step in one line: set a default model while that step is to do, otherwise finish Getting started, each with a link to System or the Overview.
Only a 403 showed Core's message; a 400 got generic text and every 409 sandbox_deployment_conflict read "already configured", although Core uses that code for a stale expected_generation, a deployment not in maintenance and resources still allocated. Any 4xx other than 401 now shows Core's message, and only sandbox_admin_not_configured keeps the console's own words. Whether a write is uncertain now depends on the status alone, so an E2B configuration refused with a 4xx, whose reason the client withholds, is a refusal too: it reads "Core rejected the E2B configuration." and no longer locks the page.
nodeSourceUrl normalized the public URL through URL.origin, which drops an explicit port such as :443, and accepted plain HTTP on loopback names. It now keeps the validated value as written, like the self-hosted executor command, and requires an HTTPS origin. Add node also takes --core-url from that same freshly read public URL instead of the page's deployment read, so a public_url fixed on the Core host shows on the next opening without a refresh.
A file-managed local node, which Core did not enroll, reports an empty core_url. It read as Old address and was named in the banner. An empty address is now unknown: such a node shows its health, stays out of the banner, and its clean-up offers no --force form. On a node's page, as in the list, an Old address status no longer shows the offline or provider help tip beside it.
After Remove, the dialog opened only when the installation read was already cached; after a failed read the host's uninstall command was simply never offered. The dialog now always opens and reads the installation itself if needed: it says it is checking, or that the read failed with Try again, and gives the command once the public URL is read. A loopback public URL now reads as unreachable from other machines rather than missing.
runtime_node_in_use and runtime_node_unavailable each have one exact, stable meaning, so a refused node removal again reads in the console's language instead of Core's English message. Every other 4xx still shows Core's message.
SaladDay
force-pushed
the
codex/web-ux-nodes
branch
from
September 26, 2026 07:05
d5a71df to
af4d616
Compare
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.
UX quick wins for the Nodes area, from the Web UX review (
~/.parsar/plans/new-user-install-20260925/03-web-ux-review.md). One commit per item.public_urland pass it as--source-url, since the reverse proxy already serves/node-install/*there.public_urlis loopback, missing or not HTTPS, Add node generates no command (as before) and the clean-up dialog says no uninstall command can be given.sandboxSetupOriginare removed.sandbox_admin_not_configured. Other 403s show Core's message.core_urldiffers from the deployment's, its status shows Old address with "Remove and add again". It never shows "Available".Maintenance UI and copy are untouched, because the maintenance flow is being redesigned. One maintenance e2e now injects a 503 instead of a 409, since a 409 is no longer treated as uncertain.
Tests
sandboxesThatFit;docs/web (for the backend session's review)
docs/web/protocol-coverage.md:120(Installation row:public_urlis the node commands' source),:146(Old address status),:147(Edit node reads host resources),:149(Enrollment downloads frompublic_url).Need help on this PR? Tag
@codesmithwith what you need. Autofix is disabled.