Commit Graph

5573 Commits

Author SHA1 Message Date
pulse-triage[bot] 2970e7b946 Compose batch-start published History provenance with reviewed maintenance
Change-source: pulse-maintainer
2026-10-14 13:27:26 +01:00
pulse-triage[bot] 4619d71498 Compose published storage and History chart corrections with reviewed maintenance
Preserve reviewed tip 11e0946999 and incorporate exact current upstream 59ed65739c additively. Publication remains subject to combined-source validation and outstanding exact-head check repairs.

Change-source: pulse-maintainer
2026-10-14 13:12:13 +01:00
rcourtman f872ec9553 Name where History readings came from instead of always "stored"
A History reply carries its source: the history store, readings Pulse
holds in memory because the store has none for the range, or a lone
current reading when no history exists yet. The drawer readout ignored
it and always said "Latest stored", so memory and live readings were
presented as stored history. The canvas charts did badge the source, but
as "Buffer" and "Live", words a reader has no reason to know.

One shared vocabulary now covers both. Stored history (and demo data)
keeps "Latest stored" / "Stored". Memory readings read "Latest recorded"
/ "Recorded", with one line above the drawer charts saying the store has
none for this range yet, and a "Recent only" badge on canvas charts. A
lone current reading reads "Current", badged "Current only".
2026-10-14 13:04:24 +01:00
rcourtman 8ae88cb6d1 Band and fold the storage History charts like the drawer charts
The drawer charts gained a min-max band (#2917) and a phone fold
(#2923); the storage disk and pool charts, drawn by the canvas
HistoryChart, had neither.

Band: each stored point is a bucket average with its lowest and highest
reading. When any bucket spreads, the chart now draws a 20% band between
them behind the line, so a short spike survives downsampling. The area
fill under the line is gone, so storage charts read like the drawer
charts; a flat series is a line alone.

Phone fold: a disk detail stacked five charts on a phone. It now shows
the first History chart plus any chart whose SMART card is out of
bounds, and folds the rest, Live I/O included, behind one button. Folded
charts read nothing until opened. The button is a shared
PhoneChartsToggle that the drawer History now uses too.

The visual pass also caught short windows repeating a time label
("Oct 2" four times); the time axis now states each label once.
2026-10-14 12:52:09 +01:00
rcourtman ed5914812c Stop History chart axis labels crowding or repeating
The canvas History chart always drew four time labels, so in a narrow
card, such as a disk's live I/O charts three abreast, they ran together
("12:04 PM12:07 PM12:10 PM12:14 PM"). It now measures its labels and
draws as many evenly spaced times as the plot fits, down to the first
and last.

The drawer charts format sub-kilobyte rates as "<1K/s" on purpose, so a
quiet link printed "<1K/s" on two gridlines, which tells the reader
nothing. Both chart kinds now blank a middle gridline label that repeats
a neighbour; the gridline stays and the end labels always remain.

The range-label test imported two storage modules inside its body and
timed out under load; they are now static imports.
2026-10-14 12:20:36 +01:00
rcourtman ef486d54e6 Keep History chart readings through a resize
A History chart sizes its point cap from its width, and the cap was part
of the selection that decides when a chart starts over. Any resize, a
window drag, a drawer or sidebar change, even a full-page screenshot,
cleared the readings and showed a "Loading history" spinner until the
re-read at the new cap returned.

The cap now only shapes the request. The series a chart shows (target,
metric, range, organisation, lock) decides when it starts over, so a
resize re-reads the same series quietly with its readings on screen.
Pointer inspection still resets on a resize, because its pixel positions
moved.

The guest-storage-2263 browser proof now narrows and restores the
viewport and takes a full-page capture with a disk open: the old hook
showed spinners, the new one keeps the charts.
2026-10-14 11:58:46 +01:00
pulse-triage[bot] 1c69a30374 Integrate reviewed accessible collector safety instructions
Retain exact Web commits and their parent-bound browser receipts. Existing form accessibility, shipped documentation synchronization and test typing only; collection defaults, saved payloads, TLS and credentials are unchanged. Retained incremental source and consuming browser proof is adequate; native recovery and hosted acceptance remain separate.

Change-source: pulse-maintainer
2026-10-14 11:48:13 +01:00
rcourtman c94aec835f Pause a guest's disk charts while Manage hides its Overview
The guest drawer keeps Overview mounted behind the Manage tab so
switching back does not jump. Its own history charts already paused
there, but an expanded physical disk's charts kept polling every 10-30
seconds and the disk list kept refreshing on live updates, all for a
view nobody could see.

HistoryChart now takes enabled: false aborts its read and stops polling
while keeping the readings it shows, and resuming the same selection
reads at once without a loading spinner before polling again. The
drawer's historyEnabled reaches DiskDetail through GuestPhysicalDisks,
which also holds the list's realtime refresh through
useUnifiedResources' realtimeEnabled.

The guest-storage-2263 browser proof now hides and shows the Overview
with the clock running: the old code read disk history while hidden,
the new code reads none and resumes with the same chart nodes.
2026-10-14 11:47:03 +01:00
pulse-triage[bot] 4675e4eea0 Compose launch-visible Retry focus repair with reviewed maintenance
Change-source: pulse-maintainer
2026-10-14 11:34:35 +01:00
rcourtman 0e77bba8d2 Keep Retry focus handoff working in Chromium; repair seven proofs (#2927)
The focus handoff from #2925 tracked Retry focus with focus/blur
handlers. Chromium blurs a focused element when it leaves the DOM, and
the Show branch removes the button before the error effect runs, so the
flag was already false and focus fell to the page. jsdom never blurs on
removal, which is why the unit test passed. Read document.activeElement
when the Retry branch is disposed instead, and make the refresh test
model the removal blur so it fails against the old code.

The worker-browser proofs for history response, pointer, inspection,
window and the three PBS fixtures still clicked the removed History tab
and Refresh button. They now read the charts on Overview, drive reads
through the 30-second poll, select series paths rather than every path
(bands and dots add paths), and mount fixtures in a shared app runtime
(fixtureRuntime.tsx) because drawers read the WebSocket and theme
contexts. The PBS refresh proof is what caught the focus regression.
2026-10-14 11:26:00 +01:00
pulse-triage[bot] a2022cbf9e Compose launch-visible upstream with reviewed maintenance
Change-source: pulse-maintainer
2026-10-14 11:19:55 +01:00
rcourtman 6f024c1c2d Give the GitHub star prompt a warmer presentation (#2926)
The restored star reminder looked like a routine status notice. The
prompt now uses the earlier “Enjoying Pulse?” heading, a GitHub badge
with a gold star, a colour accent and a full-width action. Its copy asks
for support based on usefulness and discovery.

The existing first-return timing, single lifetime appearance, permanent
dismissal, notice priority and shared actions are preserved. Phone
controls retain 44px touch targets and the card clears the measured
bottom navigation.

Validation: 14 banner tests, frontend type-check and lint, production
frontend and matching mock backend builds, and source-bound Playwright
on /proxmox/overview at 1440×900, 800×900, 390×844 and 320×740 in light
and dark themes. The browser matrix covers wrapping, focus and keyboard
actions, outside click and Escape, new-tab safety, permanent dismissal
and reload, notice priority, transport states and command-palette
suppression.
2026-10-14 11:12:56 +01:00
pulse-triage[bot] 73c5f32e5e Keep collector name tests within the typed query API
Testing Library role-name strings already match exact accessible names; its typed ByRoleOptions does not admit Playwright-style exact options. Remove the three non-operative unsupported options and assert the names explicitly. Preserve every warning, description, state, unique-ID and saved-credential assertion. The existing production source and both source-bound browser receipts are unchanged.

Contract-Neutral: Test query typing and explicit existing name assertions only; no production source, rendered content, API, collection, permissions or saved data changes.
Change-source: pulse-maintainer
2026-10-14 11:11:58 +01:00
rcourtman 3a69ad0906 Keep Retry focus handoff working in Chromium; repair seven proofs
The focus handoff from #2925 tracked Retry focus with focus/blur
handlers. Chromium blurs a focused element when it leaves the DOM, and
the Show branch removes the button before the error effect runs, so the
flag was already false and focus fell to the page. jsdom never blurs on
removal, which is why the unit test passed. Read document.activeElement
when the Retry branch is disposed instead, and make the refresh test
model the removal blur so it fails against the old code.

The worker-browser proofs for history response, pointer, inspection,
window and the three PBS fixtures still clicked the removed History tab
and Refresh button. They now read the charts on Overview, drive reads
through the 30-second poll, select series paths rather than every path
(bands and dots add paths), and mount fixtures in a shared app runtime
(fixtureRuntime.tsx) because drawers read the WebSocket and theme
contexts. The PBS refresh proof is what caught the focus regression.
2026-10-14 11:09:55 +01:00
pulse-triage[bot] 75d5825463 Compose published resource-owned History with reviewed maintenance
Preserve the accepted cc6eb37ae9 history while incorporating current published History alert ownership and removal of the refresh control.

Change-source: pulse-maintainer
2026-10-14 11:08:20 +01:00
rcourtman 50864566e0 Give the GitHub star prompt a warmer presentation
The restored reminder used a muted compact notice. Bring back the
Enjoying Pulse heading, a GitHub badge with a gold star, a colour accent
and a full-width action. Focus the copy on usefulness and project
support while preserving one-time appearance and permanent dismissal.

Contract-Neutral: Presentation and copy only. Existing notice admission, shared action ownership, destination and persistence contracts are unchanged.
2026-10-14 10:52:53 +01:00
rcourtman 86297b67ea Drop the history Refresh button and chart only a resource's own alerts
A final review of the drawer series (screenshots plus the full diff)
and a real alert on the preview found several problems:

- A Docker host drew its container's 85% memory trigger on the host's
  own memory chart and turned the host reading red. Needs attention
  rightly lists nested alerts; the charts now take triggers only from
  getOwnAlertsForUnifiedResource, the resource's exact-key alerts.
- A container drawer listed none of its own alerts. The matcher now
  answers to docker:<host>/<container id> (or /name:<name>), the key
  the alert engine writes, so it lists them and charts the trigger.
- Docker and resource-detail drawers printed the alert's breach-time
  message ("memory at 99.5%") beside a chart reading 70%. They now use
  the shared attention copy the Proxmox drawers use: "Memory 70% now,
  recovering".
- Disk temperature and storage capacity alerts reached no chart; an
  alert line drawn before any history sat at an arbitrary height; the
  dashed line had no visible label (the legend now says "alert at
  85.0%"); a phone panel shown for an alert hid again when the alert
  cleared, under a reader mid-inspection; facts strips stated a used
  memory amount for a retained reading.

The Refresh history button is gone: the charts poll every 30 seconds.
Retry history still appears for a failed read, and when a successful
retry removes it, focus moves to the history region instead of the
page. Tests that used Refresh to trigger a read now advance the poll on
a fake interval clock.
2026-10-14 10:23:01 +01:00
pulse-triage[bot] 10ea4aa5ce Expose collector safety instructions to assistive technology
Give the existing PVE collection controls concise accessible names and separate help. Associate VM collection with the full independent-recovery precaution and SMART with its drive-standby warning. Refer to the warning text rather than its named note: the actual Chromium accessibility tree showed that referring to the note exposes only its title. Keep per-editor IDs, defaults, saves, credentials and guest behaviour unchanged. Extend the existing safe editor fixture with actual accessibility-tree, keyboard and phone-touch checks, retaining all six consuming journeys and viewed pixels.

Contract-Neutral: Existing form accessibility and its tests only; public API/data/collection contracts, collector defaults, save payloads, TLS, credentials and guest requests are unchanged.
Change-source: pulse-maintainer
2026-10-14 10:21:47 +01:00
pulse-triage[bot] f2a5fd244a Match complete Kubernetes API groups in guide tests
The required CodeQL check misclassifies two typed API-group array membership assertions as URL substring sanitization. Use one explicit exact-equality predicate for both readers and retain the existing role, resource, verb and private-token controls. Positive and lookalike-group cases protect the equivalent matching semantics without suppressing security analysis or changing runtime behaviour.

Contract-Neutral: Test-only exact API-group predicate and regression cases; Kubernetes guide, permissions, runtime and security contracts are unchanged.
Change-source: pulse-maintainer
2026-10-14 09:38:47 +01:00
pulse-triage[bot] aefa2f6005 Integrate reviewed compatible frontend dependency graph
Preserve the exact prepared graph ancestry and retained final-source qualification. Complete-graph strict audit and containing hosted CI remain required for protected publication; existing auth golden failures are not cleared.

Change-source: pulse-maintainer
2026-10-14 09:20:36 +01:00
pulse-triage[bot] 331ee327ea Load History label consumers before timing their assertions
The complete prepared-graph suite timed out in the cross-picker label check while it awaited cold presentation-module imports. Load the same real disk and pool consumers with the test module, then keep every label assertion within the unchanged five-second test window.

Contract-Neutral: Test import scheduling only; no runtime, label expectation, assertion timeout, security gate or browser baseline changes.
Change-source: pulse-maintainer
2026-10-14 07:48:12 +01:00
pulse-triage[bot] 410bda9041 Integrate reviewed confined PVE helper guidance
Change-source: pulse-maintainer
2026-10-14 07:26:18 +01:00
pulse-triage[bot] 8c8a48e0eb Compose the prepared frontend graph with reviewed monitoring guidance
Preserve imported source and receipt ancestry while qualifying the complete dependency group against current assigned main.

Change-source: pulse-maintainer
2026-10-14 07:22:47 +01:00
pulse-triage[bot] aaccb05fc0 Integrate reviewed guest safety guidance at collection controls
Change-source: pulse-maintainer
2026-10-14 07:19:47 +01:00
pulse-triage[bot] 49ca6ad444 Keep collector-scope intent alongside the guest precaution
Retain the useful reason to disable unneeded collectors as well as the new guest-read limits and safety guidance. Preserve the existing copy guard rather than weakening it. Recheck the final PVE producer on desktop and phone, retaining unchanged PBS/PMG branch proof. Browser evidence records actual input hashes instead of a permanently hardcoded source parent.

Contract-Neutral: Existing collection guidance and browser-proof metadata only; collector defaults, API saves, credentials, TLS and guest request behaviour are unchanged.
Change-source: pulse-maintainer
2026-10-14 06:38:42 +01:00
pulse-triage[bot] fc1db27208 Keep History interpretation checks aligned with stored peak guidance
Combined publication proof source-in_pn1fq found the older five-row assertion after reviewed guidance added low-high bands and inspected peaks. Assert all seven rows and both additional uncertainty limits, preserving every existing assertion and the shipped guide.

Contract-Neutral: Test-only History guide coverage follows accepted documentation; no runtime, renderer, guide, dependency, timeout or safety-policy change.
Change-source: pulse-maintainer
2026-10-14 06:36:48 +01:00
pulse-triage[bot] acd5603878 Keep confined PVE filesystem help consistent with its collector
The deployment table still calls the typed helper a pct reader, while the implementation uses socket-free discovery and command fallback cannot recover within PrivateNetwork. Link the deployment choice, collector help and support matrix to one shipped explanation of partial, unavailable and older-helper readings, without recommending privilege or state changes.

Contract-Neutral: Guidance and consuming-proof coverage only; no telemetry, privilege, API, installer or availability contract delta.
Change-source: pulse-maintainer
2026-10-14 06:22:43 +01:00
pulse-triage[bot] 30455a2c34 Explain guest safety at the Proxmox collection controls
Replace the existing full-visibility promise with the actual guest-agent availability and permission limits. Put the backup precaution beside VM collection, preserving independent thaw and every-covered-filesystem write checks rather than implying that an OK backup or a running VM proves recovery. Exercise the production connection editor with harmless fixtures, without probing a guest or replacing credentials.

Contract-Neutral: Copy and an accessible landmark on an existing form; collection defaults, guest requests, connection saves, credential handling and TLS policy are unchanged.
Change-source: pulse-maintainer
2026-10-14 06:11:54 +01:00
pulse-triage[bot] 0898c5d484 Compose the complete frontend group with current monitored source
Retain the completed PBS phone receipt and coupled Solid serializers unchanged while incorporating reviewed password-session, diagnostics and source-admission repairs. The graph remains unqualified until exact installed consumers, production build, desktop and phone browser proof and strict audit/current CI are complete.

Change-source: pulse-maintainer
2026-10-14 05:50:20 +01:00
pulse-triage[bot] efd901c232 Bound each Docs security matrix case without dropping coverage
The original complete Docs proof timed out in a five-second rendered-link batch. Split the same two bases, ten untrusted paths and sixteen links into separately bounded cases, retaining every setter assertion, all-path completion and the original per-base minimum of 120 rewritten links. Do not raise a timeout or change the renderer.

Contract-Neutral: Test batching only; all adversarial vectors and security predicates are preserved, with no runtime or contract delta.
Change-source: pulse-maintainer
2026-10-14 05:21:46 +01:00
pulse-triage[bot] aaa1446815 Refresh the complete frontend group with compatible Solid serializers
Account for every update in PR 2759 using its complete original graph and the already verified official serializer metadata, rather than carrying the old security override into Solid 1.9.16. Lock both runtime edges to 1.6.8, preserve every security override and add installed-version checks that reject stale offline graphs. Acquisition and fresh exact-graph qualification remain required before integration.

Contract-Neutral: Compatible patch/tooling refresh within existing rendering, security and serialization contracts; no new surface or authority, and all security floors, strict audit and consumer checks remain required.
Change-source: pulse-maintainer
2026-10-14 05:16:11 +01:00
pulse-triage[bot] 6860dde3ef Find safe diagnostics without requiring another live run
Match the current Support navigation and phone control labels, explain absent exports, and lead reporting with existing evidence. Keep live-check, full-bundle and privacy limits intact; verify the shipped guide against the actual route and state owners.

Contract-Neutral: Existing help and diagnostic-state tests only; no runtime, renderer, routes, access, exports or live-check behaviour changes.
Change-source: pulse-maintainer
2026-10-14 05:14:08 +01:00
pulse-triage[bot] e4f995f442 Integrate reviewed Windows guest-reading guidance
Change-source: pulse-maintainer
2026-10-14 04:59:54 +01:00
pulse-triage[bot] 8423ed2e2e Match Windows guide tests to native fragment links
Use the renderer's preserved same-page hrefs and retain real heading-target checks. Qualify the existing OS-specific guidance without changing the renderer or guest-read behaviour.

Contract-Neutral: Correct rendered-guide test selectors only; no runtime, route or subsystem contract delta.
Change-source: pulse-maintainer
2026-10-14 03:46:04 +01:00
pulse-triage[bot] f90a3da1c7 Keep the full Pulse Mobile retirement notice readable on phones
Current 390px consuming pixels showed the free-tier notice still inside a two-line sales gate, clipping the phone-alert alternatives. Use the shared labelled InlineNotice for that existing guidance, retain the entitled configuration and pairing controls, and target the actual notice rather than the hidden mobile page subtitle. No offer, entitlement, billing, configuration or service change is introduced.

Change-source: pulse-maintainer
2026-10-14 03:21:16 +01:00
pulse-triage[bot] 177f664e20 Format the Windows guest-read guide controls for qualification
Use the assigned offline dependency export after the canonical formatter path refused a read; preserve that refusal and keep the assertions unchanged.

Contract-Neutral: Formatting of documentation regression checks only; no runtime or contract delta.
Change-source: pulse-maintainer
2026-10-14 03:13:07 +01:00
pulse-triage[bot] ff862da592 Keep Windows guest-read diagnosis separate from Linux file permissions
Existing Windows restart reports supply unsupported meminfo reads beside working guest filesystems. Explain the distinction and existing safe views without new probes, agent churn, wider permissions or an unverified recovery claim.

Contract-Neutral: Existing documentation and rendered-guide regression coverage only; no monitoring, permission, API or runtime contract change.
Change-source: pulse-maintainer
2026-10-14 03:11:53 +01:00
pulse-triage[bot] 35ab8b0585 Integrate reviewed Solid serializer graph admission guard
Preserve the existing exact security exception while rejecting unqualified newer Solid serializer edges before installation. Retain exact candidate identity and completed regression proof.

Change-source: pulse-maintainer
2026-10-14 03:00:19 +01:00
pulse-triage[bot] 5cd659b325 Explain collapsed phone History charts before missing-data diagnosis
Guide existing phone readers through Show and Show fewer charts without refreshing, probing or restarting. Keep older layouts, selected ranges, empty samples and unavailable/access states distinct, and clarify that PBS CPU/memory is already in Utilization.

Contract-Neutral: Existing chart navigation help and its regression tests only; no runtime, API, access or collection contract changes.
Change-source: pulse-maintainer
2026-10-14 02:09:21 +01:00
pulse-triage[bot] 48eecf1a8d Integrate reviewed stored-chart navigation and peak help
Accept exact PI commits c670f6b6 and 647664b6: correct existing PBS and metrics guides, preserve shipped mirrors and bookmarks, and retain source-bound Docs/browser proof. Documentation maintenance adds no product surface.

Change-source: pulse-maintainer
2026-10-14 01:57:22 +01:00
pulse-triage[bot] 8ad58162e8 Compose recorded upstream phone charts with reviewed maintenance
Incorporate the upstream frontier present at batch review without re-parenting reviewed source or repeating unrelated qualification.

Change-source: pulse-maintainer
2026-10-14 01:56:26 +01:00
pulse-triage[bot] 699deceaa4 Reject stale Solid serialization overrides before frontend installation
Bind the existing qualified security override to its exact consumer and serializer pair instead of letting npm overrides silently carry it into a newer Solid runtime. Resolve nested lock edges, retain the strict complete audit and security floors, and cover the two stale dependencies actually present in PR 2759 with positive, partial-repair and nested-resolution controls.

Change-source: pulse-maintainer
2026-10-14 01:53:13 +01:00
pulse-triage[bot] c670f6b666 Guide stored charts on Overview without losing incident peaks
Replace the removed PBS drawer History route with the current Overview chart and range control, while preserving older installed tabs and safe no-replay diagnosis. Explain bucket averages, low-high bounds and local peaks without treating them as continuous coverage or incident timestamps. Keep both shipped guide mirrors and their rendered links checked.

Contract-Neutral: Existing documentation and consuming guide tests only; no monitoring, storage, permissions, entitlement or navigation contract changes.
Change-source: pulse-maintainer
2026-10-14 01:21:25 +01:00
pulse-triage[bot] 558d1262f9 Integrate reviewed drawer composition with current published maintenance
Preserve the exact 9eb52f5c candidate ancestry. Select its already browser-verified whole NodeDrawerOverview file and retain current disk guidance, pressure fixture and viewport protection. No new combined frontend content or changed release packet.

Change-source: pulse-maintainer
2026-10-14 01:20:57 +01:00
pulse-triage[bot] f248e2105a Compose current published History ranges with reviewed maintenance
Preserve the reviewed batch and current upstream identities through additive integration.

Change-source: pulse-maintainer
2026-10-14 01:14:02 +01:00
pulse-triage[bot] 4bbbf60ee2 Integrate reviewed read-only Kubernetes setup help
Retain exact product-intelligence commits, copied-guide regression controls and source-bound browser receipt.

Change-source: pulse-maintainer
2026-10-14 00:59:32 +01:00
pulse-triage[bot] 759e9dc0a4 Reconcile batch-start published main frontier
Preserve the exact published beta and storage history commits alongside already reviewed local integration history.

Change-source: pulse-maintainer
2026-10-14 00:59:19 +01:00
pulse-triage[bot] f60d3fb9cc Exercise accessible cache guidance on its current warning path
Corrected-source proof source-emk3_ot6 passes types and 509 of 510 selected tests. The one older accessibility fixture expected a Cache cue at its default healthy 50 percent after upstream intentionally suppressed low-pressure captions. Set its consistent byte and percentage input to the existing warning boundary; preserve every source/time, safe-setup, interaction and no-mutation assertion and the independent quiet-reading controls. No runtime or threshold changes.

Contract-Neutral: Integration fixture input only; runtime rendering, warning thresholds, provenance and safety guidance are unchanged.
Change-source: pulse-maintainer
2026-10-14 00:30:58 +01:00
pulse-triage[bot] 832841d74a Keep composed drawer imports and observation narrowing type-safe
Exact offline proof source-4s0ongp7 stopped at two TypeScript diagnostics before tests or build: the retained stable-help summary does not use upstream DetailSection, and the new unavailable early return narrows the later observation state. Remove only the unused type import and now-unreachable comparison; keep stopped-agent qualification and all observation semantics. Format the newly combined reading disclosure.

Contract-Neutral: Composition import, type narrowing and formatting repair only; reading states, provenance, access, rendering and recovery contracts are unchanged.
Change-source: pulse-maintainer
2026-10-14 00:23:42 +01:00
rcourtman da74fb4209 Show one chart panel in phone drawers and the rest on request
With history charts on every drawer's Overview, a phone stacked three or
four chart panels before a guest's facts, a node's hardware or an
agent's details: a guest drawer ran 1043px tall at 390px wide.

Below the sm breakpoint the shared chart component now shows the first
panel (Utilization) and any panel carrying an active alert, then one
full-width "Show Network I/O, Disk I/O, Thermals" button that reveals
the rest. The guest drawer drops to 657px. Wider layouts are unchanged.
It is a CSS class on panels that stay mounted, so it adds no read and
the hidden panels keep their data for when they are shown.
2026-10-14 00:21:18 +01:00