Skip to content

feat: organize clusters and show nodes across all clusters - #859

Merged
ValgulNecron merged 12 commits into
GameplanePanel:masterfrom
Baylem:feat/cluster-nodes-navigation
Nov 10, 2026
Merged

ValgulNecron merged 12 commits into
GameplanePanel:masterfrom
Baylem:feat/cluster-nodes-navigation

Conversation

@Baylem

@Baylem Baylem commented Nov 9, 2026

Copy link
Copy Markdown
Member

The singular Cluster page mixed node inventory with cluster configuration. Nodes now shows inventory across authorized clusters by default, while Clusters opens cluster-specific Overview, Nodes and Configuration tabs.

  • Add a searchable, sortable Nodes inventory with cluster/status filters, applied-filter counts, partial-coverage reporting and compact mobile rows. The toolbar follows Backups.
  • Move kubeconfig, install-time storage, backup destinations and registration removal into the owning cluster's Configuration tab. Preserve explicit operation targets and existing capability/permission limits.
  • Replace cluster-related Location labels with Cluster, update breadcrumbs and scoped links, and preserve legacy bookmarks. Keep registration discovery available to roles that already own the relocated settings without granting node inventory access.
  • Include saved Pen designs, exports, updated language catalogs and behavioral regressions.

Validation:

  • Final visual run on eaf9ca4: 116/116 visual comparisons and 124 en-XA capture/clipping cases passed. Production code and designs are unchanged by the final test-only commit.
  • 3,021 web unit tests, coverage, mock browser tests, i18n, lint and production build passed; API checks passed on amd64 and arm64.
  • Desktop/mobile interactive checks and local TypeScript/E2E compilation passed. The Docker mock preview uses two independent clusters.
  • 3e54eecb updates two stale live-E2E expectations: the renamed Nodes sidebar link and the translated Servers heading used for language persistence/no-flash checks. These changes compile and passed independent review; their live CI rerun is pending.
  • The fork's dependency-review check is blocked by its disabled Dependency graph setting. No test thresholds or workflows were weakened. Test/lint suites ran in CI only.

Primary Pen nodes: BdmAW, N2nTf, I38x1, wqnM9, J8GzM9, OecJ5, t56aLu, T70dJ, IBUqJ, iYUWc, WrmU5, kKFX9, Mp7Ep, b2JF52, xrNf3, xjVA4. The export manifest lists the full set of touched designs and terminology updates.

Baylem added 11 commits November 9, 2026 11:08
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
@Baylem
Baylem requested a review from ValgulNecron as a code owner November 9, 2026 18:13
@coderabbitai

coderabbitai Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 125 files, which is 25 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Run configuration

Commits

Reviewing files that changed from the base of the PR and between efef2b5 and 514e996.

Files ignored due to path filters: 58

  • assets/design-export/screenshots/BdmAW.png is excluded by !**/*.png
  • assets/design-export/screenshots/Be7ZW.png is excluded by !**/*.png
  • assets/design-export/screenshots/Cb3eC.png is excluded by !**/*.png
  • assets/design-export/screenshots/D9QYZ.png is excluded by !**/*.png
  • assets/design-export/screenshots/DPrYX.png is excluded by !**/*.png
  • assets/design-export/screenshots/F9pUrx.png is excluded by !**/*.png
  • assets/design-export/screenshots/FOVMf.png is excluded by !**/*.png
  • assets/design-export/screenshots/FyV6E.png is excluded by !**/*.png
  • assets/design-export/screenshots/GR1G9.png is excluded by !**/*.png
  • assets/design-export/screenshots/HVhmb.png is excluded by !**/*.png
  • assets/design-export/screenshots/I38x1.png is excluded by !**/*.png
  • assets/design-export/screenshots/IBUqJ.png is excluded by !**/*.png
  • assets/design-export/screenshots/J8GzM9.png is excluded by !**/*.png
  • assets/design-export/screenshots/Mp7Ep.png is excluded by !**/*.png
  • assets/design-export/screenshots/N2nTf.png is excluded by !**/*.png
  • assets/design-export/screenshots/NKiqf.png is excluded by !**/*.png
  • assets/design-export/screenshots/NLu2I.png is excluded by !**/*.png
  • assets/design-export/screenshots/OecJ5.png is excluded by !**/*.png
  • assets/design-export/screenshots/QQtUD.png is excluded by !**/*.png
  • assets/design-export/screenshots/RC3Kf.png is excluded by !**/*.png
  • assets/design-export/screenshots/RpHBg.png is excluded by !**/*.png
  • assets/design-export/screenshots/T70dJ.png is excluded by !**/*.png
  • assets/design-export/screenshots/UCNBm.png is excluded by !**/*.png
  • assets/design-export/screenshots/UMJli.png is excluded by !**/*.png
  • assets/design-export/screenshots/Uzzje.png is excluded by !**/*.png
  • assets/design-export/screenshots/W8idqY.png is excluded by !**/*.png
  • assets/design-export/screenshots/Wj0V4.png is excluded by !**/*.png
  • assets/design-export/screenshots/WrmU5.png is excluded by !**/*.png
  • assets/design-export/screenshots/Y96CaE.png is excluded by !**/*.png
  • assets/design-export/screenshots/YPKbV.png is excluded by !**/*.png
  • assets/design-export/screenshots/b2JF52.png is excluded by !**/*.png
  • assets/design-export/screenshots/dxdEi.png is excluded by !**/*.png
  • assets/design-export/screenshots/f1Vga.png is excluded by !**/*.png
  • assets/design-export/screenshots/fK8Bi.png is excluded by !**/*.png
  • assets/design-export/screenshots/fbBqA.png is excluded by !**/*.png
  • assets/design-export/screenshots/iYUWc.png is excluded by !**/*.png
  • assets/design-export/screenshots/j24cXg.png is excluded by !**/*.png
  • assets/design-export/screenshots/j9W8A.png is excluded by !**/*.png
  • assets/design-export/screenshots/kK8Ji.png is excluded by !**/*.png
  • assets/design-export/screenshots/kKFX9.png is excluded by !**/*.png
  • assets/design-export/screenshots/l64bd.png is excluded by !**/*.png
  • assets/design-export/screenshots/n2qdi.png is excluded by !**/*.png
  • assets/design-export/screenshots/nNL3E.png is excluded by !**/*.png
  • assets/design-export/screenshots/oyoTs.png is excluded by !**/*.png
  • assets/design-export/screenshots/pnAbF.png is excluded by !**/*.png
  • assets/design-export/screenshots/r139UP.png is excluded by !**/*.png
  • assets/design-export/screenshots/rCQaM.png is excluded by !**/*.png
  • assets/design-export/screenshots/t56aLu.png is excluded by !**/*.png
  • assets/design-export/screenshots/tTSdi.png is excluded by !**/*.png
  • assets/design-export/screenshots/uMiwd.png is excluded by !**/*.png
  • assets/design-export/screenshots/vUqMl.png is excluded by !**/*.png
  • assets/design-export/screenshots/w34N9.png is excluded by !**/*.png
  • assets/design-export/screenshots/wqnM9.png is excluded by !**/*.png
  • assets/design-export/screenshots/xjVA4.png is excluded by !**/*.png
  • assets/design-export/screenshots/xrNf3.png is excluded by !**/*.png
  • assets/design-export/screenshots/zFiOW.png is excluded by !**/*.png
  • assets/design-export/screenshots/zj5a3.png is excluded by !**/*.png
  • design.pen is excluded by !**/*.pen
Files selected for processing: 125

  • api/internal/auth/perms.go
  • api/internal/handlers/clusters_discovery_test.go
  • assets/design-export/MANIFEST.md
  • assets/design-export/json/BdmAW.json
  • assets/design-export/json/Be7ZW.json
  • assets/design-export/json/Cb3eC.json
  • assets/design-export/json/D9QYZ.json
  • assets/design-export/json/DPrYX.json
  • assets/design-export/json/F9pUrx.json
  • assets/design-export/json/FOVMf.json
  • assets/design-export/json/FyV6E.json
  • assets/design-export/json/GR1G9.json
  • assets/design-export/json/HVhmb.json
  • assets/design-export/json/I38x1.json
  • assets/design-export/json/IBUqJ.json
  • assets/design-export/json/J8GzM9.json
  • assets/design-export/json/Mp7Ep.json
  • assets/design-export/json/N2nTf.json
  • assets/design-export/json/NKiqf.json
  • assets/design-export/json/NLu2I.json
  • assets/design-export/json/OecJ5.json
  • assets/design-export/json/QQtUD.json
  • assets/design-export/json/RC3Kf.json
  • assets/design-export/json/RpHBg.json
  • assets/design-export/json/T70dJ.json
  • assets/design-export/json/UCNBm.json
  • assets/design-export/json/UMJli.json
  • assets/design-export/json/Uzzje.json
  • assets/design-export/json/W8idqY.json
  • assets/design-export/json/Wj0V4.json
  • assets/design-export/json/WrmU5.json
  • assets/design-export/json/Y96CaE.json
  • assets/design-export/json/YPKbV.json
  • assets/design-export/json/b2JF52.json
  • assets/design-export/json/dxdEi.json
  • assets/design-export/json/f1Vga.json
  • assets/design-export/json/fK8Bi.json
  • assets/design-export/json/fbBqA.json
  • assets/design-export/json/iYUWc.json
  • assets/design-export/json/j24cXg.json
  • assets/design-export/json/j9W8A.json
  • assets/design-export/json/kK8Ji.json
  • assets/design-export/json/kKFX9.json
  • assets/design-export/json/l64bd.json
  • assets/design-export/json/n2qdi.json
  • assets/design-export/json/nNL3E.json
  • assets/design-export/json/oyoTs.json
  • assets/design-export/json/pnAbF.json
  • assets/design-export/json/r139UP.json
  • assets/design-export/json/rCQaM.json
  • assets/design-export/json/t56aLu.json
  • assets/design-export/json/tTSdi.json
  • assets/design-export/json/uMiwd.json
  • assets/design-export/json/vUqMl.json
  • assets/design-export/json/w34N9.json
  • assets/design-export/json/wqnM9.json
  • assets/design-export/json/xjVA4.json
  • assets/design-export/json/xrNf3.json
  • assets/design-export/json/zFiOW.json
  • assets/design-export/json/zj5a3.json
  • docs/multicluster-ui.md
  • docs/unified-dashboard.md
  • i18n/locales/en/app.json
  • i18n/locales/fr/app.json
  • specs/031-cluster-nodes-navigation/cluster-report.md
  • specs/031-cluster-nodes-navigation/nodes-report.md
  • specs/031-cluster-nodes-navigation/plan.md
  • specs/031-cluster-nodes-navigation/progress.md
  • specs/031-cluster-nodes-navigation/spec.md
  • web/e2e/screenshots/slice4.spec.ts
  • web/e2e/specs/cluster.spec.ts
  • web/e2e/specs/errorHandling.spec.ts
  • web/e2e/specs/live/dataScreens.spec.ts
  • web/e2e/specs/live/i18n.spec.ts
  • web/e2e/specs/live/login-and-shell.spec.ts
  • web/e2e/specs/live/servers-core.spec.ts
  • web/e2e/specs/multicluster-ui.spec.ts
  • web/e2e/specs/screenshots.spec.ts
  • web/e2e/specs/shell.spec.ts
  • web/specs.md
  • web/src/components/AppLayout.test.tsx
  • web/src/components/AppLayout.tsx
  • web/src/components/CaptureWidget.test.tsx
  • web/src/components/CaptureWidget.tsx
  • web/src/components/FleetScope.tsx
  • web/src/components/backups/BackupFilters.test.tsx
  • web/src/components/backups/BackupFilters.tsx
  • web/src/components/clusters/BackupDestinationsPanel.test.tsx
  • web/src/components/clusters/BackupDestinationsPanel.tsx
  • web/src/components/clusters/ClusterConfiguration.test.tsx
  • web/src/components/clusters/ClusterConfiguration.tsx
  • web/src/components/clusters/ClusterSection.tsx
  • web/src/components/clusters/LegacyBackupSettings.test.tsx
  • web/src/components/clusters/LegacyBackupSettings.tsx
  • web/src/components/nodes/NodeEnrollment.test.tsx
  • web/src/components/nodes/NodeEnrollment.tsx
  • web/src/components/nodes/NodeInventory.test.tsx
  • web/src/components/nodes/NodeInventory.tsx
  • web/src/components/ui/Breadcrumbs.test.tsx
  • web/src/components/ui/Breadcrumbs.tsx
  • web/src/components/ui/SettingsNav.tsx
  • web/src/lib/fleetLocation.test.tsx
  • web/src/lib/nodes.test.ts
  • web/src/lib/nodes.ts
  • web/src/lib/useServerCapabilities.ts
  • web/src/pages/ClusterDetail.test.tsx
  • web/src/pages/ClusterDetail.tsx
  • web/src/pages/Nodes.tsx
  • web/src/router/tree.tsx
  • web/src/routes/AdminSettings.test.tsx
  • web/src/routes/AdminSettings.tsx
  • web/src/routes/AdminSettings_sections.test.tsx
  • web/src/routes/Backups.tsx
  • web/src/routes/Cluster.test.tsx
  • web/src/routes/Cluster.tsx
  • web/src/routes/Clusters.test.tsx
  • web/src/routes/Clusters.tsx
  • web/src/routes/CreateServer.test.tsx
  • web/src/routes/CreateServer.tsx
  • web/src/routes/Dashboard.test.tsx
  • web/src/routes/Dashboard.tsx
  • web/src/routes/Fleet.test.tsx
  • web/src/routes/ServerDetail.tsx
  • web/src/routes/Servers.tsx
  • web/src/routes/Standalone.test.tsx

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@Baylem Baylem added area: api REST/WebSocket gateway area: e2e kind-based end-to-end suite area: web React dashboard type: feature New capability or user-facing addition labels Nov 9, 2026 — with ChatGPT Codex Connector
@ValgulNecron
ValgulNecron merged commit 13dd86f into GameplanePanel:master Nov 10, 2026
41 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: api REST/WebSocket gateway area: e2e kind-based end-to-end suite area: web React dashboard type: feature New capability or user-facing addition

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants