feat(ui): session-wide UI/UX polish + reachability fix#10
Open
Sentinel-Bluebuilder wants to merge 8 commits intosentinel-official:mainfrom
Open
feat(ui): session-wide UI/UX polish + reachability fix#10Sentinel-Bluebuilder wants to merge 8 commits intosentinel-official:mainfrom
Sentinel-Bluebuilder wants to merge 8 commits intosentinel-official:mainfrom
Conversation
Sweeping changes from the long-running feat/ui-overhaul branch: - Renderer redesign across every screen (Overview, Nodes, NodeDetails, Wallet, WalletSetup, Settings, Help, Progress, Layout/Sidebar/Topbar, PageHeader, StatCard, BarChart, Onboarding) with new shared theme, country flags, error boundary, and CLI helper lib. - New deploy flows split out of the old monolithic Deploy.tsx into DeployLocal, DeploySsh, and DeploySshBatch (batch screen ships hosts table, shared creds/params, parallel test, sequential chain broadcast, per-row progress, and an Automate-via-CLI panel that links to the CLI screen). - Manage Docker screen with skeleton-first rendering, Docker Desktop detection/launch, Sentinel containers + images cards, conditional Actions card. - CLI subsystem: in-app CLI server (named pipe, JSON line protocol), command registry, bin/sentinel-node-manager.js client, and a CLI screen with poll-spam toggle for clean recordings. - Main services added: tray, geoip, price, cli-server, cli-registry. - Wallet, deploy, nodes, settings, store, updater services updated for the new IPC surface; preload + shared types rewritten to match. - Tray icons, app icon set, brand assets, fonts. - Unit test scaffolding (tests/unit/price.test.ts). Tooling: ignore *.tsbuildinfo, build-ctx/, design-exports/. Drop committed tsbuildinfo files. Update package.json/lock for new deps.
… harness This is a large changeset spanning the on-chain hardware-specs reporting pipeline, a live System metrics dashboard, defence-in-depth security posture, a real-money end-to-end CLI test harness, and broad UI polish. See CHANGELOG.md for the full per-area breakdown. Highlights: * On-chain `specs:v1` — operator self-MsgSend with a tagged memo carrying the node's hardware snapshot, fired automatically 12 s after deploy succeeds (gas budget 250_000; the previous 120_000 hit code 11 out-of-gas through Sentinel ante handlers). Startup `replayPendingSpecs` retries any unsent broadcasts from the previous session. * Live System metrics — refcounted 1 Hz CPU/memory sampler, broadcast over IPC, surfaced in a new System screen. Toggles live in the Zustand store so they survive navigation; default ON. * Activity feed — grouped, filterable event log replacing the ad-hoc toast history. * Seed-phrase modal — global, mounted at Layout level so it survives tab switches; verify-3-words confirmation; never re-opens for the same jobId. * Security hardening — renderer sandbox enabled, strict CSP, window-open + will-navigate guards, CLI auto-start now gated behind an explicit ack token, TOFU SSH host-key tracking, scrubSecrets on CLI broadcast events, mnemonicForBackup redacted from `deploy.status` over the CLI. * Live-applied settings — wallet + node poll cadences swap immediately on save instead of needing an app restart. * SSH batch deploy rewrite — CSV/JSON input, parallel-with-cap scheduler, per-row credential override, gated mnemonic reveal per host. * Docker integration — Windows pipe detection prefers dockerDesktopLinuxEngine, structured `dockerHealth()`, in-app open of Docker Desktop settings. * Wallet/sentinel-client — RPC-first per global rule, signClient helper, TRANSIENT_ERR catches the fresh-account propagation lag so post-funding broadcasts retry cleanly. * End-to-end CLI test harness — tests/e2e/cli-e2e.mjs drives every CLI command including a real self-send and MsgUpdateNodeDetails broadcast, verified on-chain via Sentinel RPC tx_search. Total spend per run ≤ 0.0015 DVPN. Full protocol in docs/e2e-cli-test.md. * Logger — global unhandledRejection / uncaughtException hooks, child loggers per area. Untracked the previously-committed tsconfig.*.tsbuildinfo files (already in .gitignore but were tracked from a prior commit).
…redesign - node-manager: gate fast-poll node-online event on loading->online so it fires once instead of every 4s tick during the 60s grace window - OnChainSpecs: redesign snapshot card with vendor logo (AMD pre-2013 Wikimedia SVG), Reserved/Total meters, simplified copy - Settings: drop the On-Chain Reporting card (post-on-chain toggles) - Help: full redesign with searchable left-rail nav, scroll-spy, grouped topic sections, keyboard shortcut card
Adds an accent-tinted gradient + wallet icon badge, aligns the value and $P2P unit to a shared baseline, and moves Withdraw below the value with a tooltip explaining the disabled state.
rpc.sentinel.suchnode.net (sentinelhub-2, tx_index on) joins rpc.sentinel.co + AutoStake + Polkachu in the latency-aware fallback pool. README updated to "four endpoints".
Renderer (UI overhaul wave): - NodeDetails: rewrite IdentityDisclosure with canonical PanelLabel/ PanelSection/KV/Mono/CopyMono primitives — compact 4-col grid, QR tile, theme-tokenised type scale; convert SpecsReportingPanel to same primitives with optional "Awaiting broadcast" chip - NodeDetails: fix container-logs scroll clipping (grid items-start prevents row sibling stretching); paddingTop/Bottom on log inner div - OnChainSpecs: drop "specs:v1" chip from SpecsMemoCard header; condense Snapshot + Memo preview text ~5%; Snapshot card 3.3% taller - Settings: refresh chain RPC pool every 60s (setInterval cleanup) - Topbar/Layout: remove back button; route-keyed page transition - ManageDocker, Activity, CLI, Help, Overview, Progress, System, Wallet, WalletSetup, DeploySshBatch: theme/spacing/copy passes Main: - node-manager.ts: wrap containerLogs() inside recentLogs() in try/catch — a stopped Docker daemon was throwing through liveStatus and masking the real containerUp/onChain reachability check, causing the Nodes-list "Syncing" chip to stick while the NodeDetails header stayed "Online" (see findings/2026-04-30-stuck-syncing-when-docker-down.md) - deploy.ts, node-specs.ts: minor follow-ups from prior session Misc: - Add .nvmrc - README + package.json housekeeping
CI typecheck failed with TS2322 because the ref callback on a <section> element returns HTMLElement, but sectionRefs was typed as Record<string, HTMLDivElement | null>. Widening to HTMLElement matches the actual element and unblocks PR sentinel-official#10 CI.
Replaces the 4-endpoint pool (rpc.sentinel.co, AutoStake, Polkachu, SuchNode) with the 12-endpoint list shipped by [email protected] (defaults.js, RPC_ENDPOINTS, verified 2026-05-02 by audit-rpc-endpoints.mjs). The biggest correctness change is dropping rpc.sentinel.co. On 2026-05-02 it was ~22k blocks behind tip yet reporting catching_up=false, and returning 0 for funded addresses. Keeping it in the pool meant any balance / node-status query that happened to land on it returned wrong data without surfacing an error. New endpoints (all verified 2026-05-02): Busurnode, Trinity Stake, PublicNode (Allnodes), Polkachu, MathNodes, Roomit, SuchNode, ChainTools, Validatus, QuokkaStake, Sentinel Growth DAO, ChainVibes. URLs intentionally have no explicit :443 — matches SDK form and isValidRpcUrl in settings.ts only checks protocol, so omitting the port is fine.
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.
Summary
PanelLabel/PanelSection/KV/Mono/CopyMonoprimitives, theme-tokenised type scale, QR tile, and condensed Snapshot/Memo preview text. SpecsReportingPanel converted to the same primitives.items-starton the NodeDetails grid prevents the log card from being stretched to row height and clipped bycard { overflow: hidden }.containerLogs()insiderecentLogs()in try/catch (src/main/services/node-manager.ts). With Docker Desktop down,getClient()was throwing throughliveStatus, masking the realcontainerUp/onChainreachability check, which made the Nodes-list chip stick on yellow "Syncing" while the NodeDetails header chip stayed green "Online" (stickynode.status). The remote-SSH branch already wraps its log fetch the same way; this brings the local branch in line.specs:v1chip removed + Snapshot card 3.3% taller, polish across ManageDocker / Activity / CLI / Help / Overview / Progress / System / Wallet / WalletSetup / DeploySshBatch..nvmrc; README +package.jsonhousekeeping.Test plan
Error: Docker Desktop is installed but not runningfromliveStatusevery poll.