Skip to content

feat(core-status): multi-select cores, bulk update to a named build - #446

Merged
kirillDevPro merged 1 commit into
mainfrom
feat/core-status-bulk-update
Sep 6, 2026
Merged

feat(core-status): multi-select cores, bulk update to a named build#446
kirillDevPro merged 1 commit into
mainfrom
feat/core-status-bulk-update

Conversation

@kirillDevPro

Copy link
Copy Markdown
Collaborator

What & why

The Core Status panel could send a named test build to exactly one core: the only entry point was the row context menu, and every bulk path (server-row arrow, footer buttons) was hard-wired to the release build. Updating a fleet to a tester build meant one right-click per core.

  • Rows carry a CoreId-keyed selection in both presentations (plain click, Ctrl toggle, Shift range, Ctrl+A over the visible rows, Escape). The click algorithm is the one Report already used, lifted into controls/row_selection.rs; Report is repointed at it with its tests untouched.
  • The row menu acts on the selection when the clicked row belongs to it (Explorer semantics) and names the count it will enqueue. The same menu opens on a server row and on a Flat exchange heading.
  • The footer gains a "to a build…" button; its build-name field lives inside the existing single confirm.
  • Behaviour change: the footer buttons act on the cores the panel shows (or the selection), no longer on the whole fleet. A panel scoped to one group used to offer a button reaching every core.
  • Scope resolution is a pure function (controls/core_update/scope.rs) with mutation-proven tests; a static contract pins every Core Status enqueue to the shared controls::core_update route.

How to verify

Ctrl/Shift-click and Ctrl+A in both Core Status views; right-click a selected row (count in the menu) vs an unselected one (single core, selection unchanged); right-click a server row / exchange heading; footer "Update all" relabels to "Update selected (N)" while a selection exists. cargo test -p moon-ui-gpui green (1804 tests).

https://claude.ai/code/session_018e8iwJ8ejRvnev4XkscuHs

The Core Status panel could send a named test build to exactly one core:
the only entry point was the row context menu, and every bulk path (the
server-row arrow, the footer buttons) was hard-wired to the release
build. Updating a fleet to a tester build meant one right-click per core.

Rows now carry a CoreId-keyed selection in both presentations (plain
click, Ctrl toggle, Shift range, Ctrl+A over the visible rows, Escape),
built on the controlled-selection algorithm the Report panel already
used, lifted into controls/row_selection.rs with Report repointed at it.
The row menu acts on the selection when the clicked row belongs to it
and names the count it will enqueue; the same menu opens on a server
row and on a Flat exchange heading. The footer gains a "to a build..."
button whose build-name field lives inside the existing single confirm.

Behaviour change: the footer buttons act on the cores the panel shows
(or the selection when one exists), no longer on the whole fleet. A
panel scoped to one group used to offer a button reaching every core.

Scope resolution is a pure function (controls/core_update/scope.rs)
with mutation-proven tests; a static contract pins every Core Status
enqueue to the shared controls::core_update route.

Claude-Session: https://claude.ai/code/session_018e8iwJ8ejRvnev4XkscuHs
@kirillDevPro
kirillDevPro merged commit 721ac88 into main Sep 6, 2026
6 checks passed
@kirillDevPro
kirillDevPro deleted the feat/core-status-bulk-update branch September 6, 2026 19:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant