Skip to content

feat(core-status): resizable columns, a remembered mode, and the core's build - #324

Merged
kirillDevPro merged 2 commits into
mainfrom
feat/core-status-panel
Aug 25, 2026
Merged

feat(core-status): resizable columns, a remembered mode, and the core's build#324
kirillDevPro merged 2 commits into
mainfrom
feat/core-status-panel

Conversation

@kirillDevPro

Copy link
Copy Markdown
Collaborator

What & why

Five gaps in the Core Status panel, plus the reason one of them only looked like a gap.

  • By-IP columns are draggable. Clamped per column, and once the row stops fitting they shrink
    together by one shared factor — the view is a tree, so there is no horizontal scrollbar to fall
    back on and clipping the right-hand columns was the old behaviour. Widths persist per context;
    double-click frees one column, Shift+double-click frees all.
  • The mode tab is remembered (By IP / Flat / Alerts), with the docked panel and a detached
    window keeping separate answers.
  • The alerts gear popup opens under its own button, right-aligned, on one geometry scale.
  • The core's MoonBot build gets a column in both modes, with an agreement rollup on a collapsed
    server row. It previously reached the UI only inside a ConnFault, so a healthy core showed
    nothing — it now travels as its own retained message, dropped on any non-Ready status. Rendered
    dotted (7697.69) through a new moon_core::util::fmt::core_build, shared with the fault
    hover so the two surfaces cannot disagree.
  • The flat view groups by exchange, with the same logos the left rail uses. MoonDataTable has
    no section-row concept, so each heading is a synthetic row whose caption rides MoonUI's new row
    banner (feat(data-table): lay one element across a whole row MoonUI#53). Sorting reorders inside a section and never moves one.
  • The IP column was never empty. The mask defaulted to on and printed twelve asterisks. The
    address now shows, the header carries the single control that hides it, and losing panel focus
    no longer re-masks.

How to verify

cargo test --workspace     # 2788 passed, 0 failed, on this branch alone

core_build_zero_pads_single_digit_minor_versions is mutation-proven: changing {:02} to {}
turns 707 into 7.7, which reads as older than a neighbouring 7.09. That is the boundary the
test asserts, not the easy 769 case, which stays green under the mutation.

Verified by hand against 56 live cores: drag, clamp, shrink and reset; the row never spills past
the panel edge even with four columns dragged to their maximum; the remembered tab survives a full
restart; a real build disagreement (7.70 beside 7.69) shows up in the wild.

Note

Needs Moonbot-Tech/MoonUI#53 (merged) — the Cargo.lock bump to that revision is in this PR.

…'s build

Five things the panel could not do, plus the reason one of them only looked
broken.

Columns in the By-IP view are draggable, clamped, and shrink together by one
shared factor once the row stops fitting - a tree has no horizontal scroll
to fall back on. A drag persists per context; double-click frees a column,
Shift+double-click frees them all.

The mode tab (By IP / Flat / Alerts) is remembered, docked panel and detached
window keeping their own answer.

The alerts gear opens its popup under itself, right-aligned, on one geometry
scale instead of two.

The core's reported MoonBot build gets a column in both modes, with an
agreement rollup on a collapsed server row. It only ever reached the UI
inside a ConnFault before, so a healthy core showed none at all - the build
now travels as its own message, retained while Ready and dropped on any
other status. It renders dotted, 769 as 7.69, because that is what the
product calls its builds; a bare 769 makes the reader do the conversion.

The flat view groups by exchange with the same logos the left rail uses.
`MoonDataTable` has no section-row concept, so each heading is a synthetic
row whose caption rides MoonUI's new row banner; sorting reorders inside a
section and never moves one.

The IP column was never empty: the mask was on by default and printed twelve
asterisks. It now shows the address, the header carries the one control that
hides it, and losing panel focus no longer re-masks.
The By-IP and flat tables gained a build column, an exchange section band and
a mask control. The existing telemetry-column contract asserted the old cell
set, so it described a table that no longer exists; extend it rather than let
it pass vacuously.
@kirillDevPro
kirillDevPro merged commit 1f25a35 into main Aug 25, 2026
5 checks passed
@kirillDevPro
kirillDevPro deleted the feat/core-status-panel branch August 25, 2026 10:55
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