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
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".
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.
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.
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.
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
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.
Sixteen worker-browser proofs still opened the removed History tabs,
clicked the removed Refresh button or depended on UI that has since
moved. Each now passes on pulse-dev:
- Charts are read on Overview (guest, resource, PBS) or inline in disk
and pool details; table-row-touch toggles Manage/Overview as its
nested input instead of the old tab.
- Reads are driven through the 30-second poll with the page clock.
- Locators select series paths and hover markers, since bands and
observation dots also draw paths.
- Rows lifted into Worth checking or kept under the closed Details
disclosure are read from the whole Overview, with Details opened.
- With stored history shown, the legend reads the latest stored time,
so series without a point say "no reading" rather than a live value.
- Stubbed history replies echo the requested series and carry min/max,
as the client has validated since 866da85c26.
- Fixtures that mount the resource drawer supply activeAlerts.
- The guest-stopped-disk write check allows the content-free
workload-history usage milestone that opening details records.
- On emulated phones, headless Chromium reports a fine pointer, so the
proof touches the plot before tapping the inspection slider.
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.
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
The drawer tab-retention proof (#1723) and the PBS host history
correlation proof share browser-tests/pbs-host-history-correlation.tsx.
That fixture mounted the Backups table without the app runtime context
the drawer Overview reads alerts from, so both proofs threw before the
drawer rendered and had silently stopped proving anything.
The fixture now supplies an explicit offline WebSocket and dark-mode
context and a router, as the other drawer fixtures do. The correlation
proof follows the drawer's current shape: history charts sit on
Overview, so it checks that Overview stays selected with stable chart
paths across refreshes. Since the Identity card shows each identifier
once, the Metrics Target row may be absent; when present it must name
the host series, and the intercepted history request still must.
Both proofs pass at 1280 and 390px on every topology. Negative controls
fail as they should: resetting the tab when the metrics target drops
breaks the retention proof, and charting the PBS service key breaks the
correlation proof.
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
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
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
The first WebKit consuming run rendered the fixture in the default wide mobile layout and native tapping missed its visible table. Give this existing fixture the same viewport metadata as the served application, so a 390px proof exercises the narrow table/drawer rather than a scaled desktop layout. Keep the already completed desktop cases and run only the missing phone cases.
Contract-Neutral: Browser-fixture metadata matches the existing application viewport; production rendering, history and monitoring contracts do not change.
Change-source: pulse-maintainer
Exercise active Docker reading warnings beside Overview charts at narrow widths without creating a live alert or changing monitoring.
Contract-Neutral: Browser fixture input only; alert and drawer runtime contracts are unchanged.
Change-source: pulse-maintainer
Preserve auth pixels, hidden-form and entitlement controls while pinning the visual runtime/org inventory. Exercise the existing Mobile retirement notice separately from sales gates, and retain scoped Coverage links and resource-qualified Patrol decisions. Supply the real runtime providers to the existing PBS snapshot fixture.
Contract-Neutral: Test and browser-fixture repair only; no runtime, entitlement, retirement or monitoring contract changes.
Change-source: pulse-maintainer
Record fresh desktop and phone consuming proof for the five newly combined frontend files. Keep all earlier receipts/history intact; inspect all 36 originals natively, preserve failed attempts and reuse completed identical-source scenes. Correct only the qualification driver's actual peak format and settled range waiter.
Contract-Neutral: Own-parent browser evidence and qualification-driver corrections only; no runtime or subsystem contract delta.
Change-source: pulse-maintainer
Bind the combined backup presentation helper to its visible UTC instant and offset-equivalent input without changing any monitoring operation.
Contract-Neutral: Read-only browser assertion only; no runtime or product contract change.
Change-source: pulse-maintainer
Use the real millisecond timestamp field and await the producing fixture before recording consuming CPU evidence.
Contract-Neutral: Qualification fixture binding only; no product runtime or contract delta.
Change-source: pulse-maintainer
Pass the real in-memory node registry and frontend conversion through nodeFromResource into the containing chart consumer. GPU and NVMe peaks stay separate from the primary CPU field. Synthetic state only; no database, live API, guest or service operation.
Contract-Neutral: Read-only qualification producers and binding; product runtime and safety contracts are unchanged.
Change-source: pulse-maintainer
Qualify cache-reading disclosure with actual high pressure and preserve CPU facts while OS evidence changes. Document actual disk captions without mistaking memory-only N/A for disk state. Keep source/time, disclosure and missing-reading safety assertions.
Contract-Neutral: Test and read-only fixture reconciliation only; composed product contracts are unchanged.
Change-source: pulse-maintainer
Use the production column hooks, formatted per-filesystem evidence and committed fixture inputs for the composed drawer proof; no runtime or policy change.
Contract-Neutral: Qualification fixture formatting and exact consumer locators only.
Change-source: pulse-maintainer
Preserve exact published 170f726c history and min-max bands, primary CPU temperature and quiet captions alongside truthful disk unknowns, stale-Agent qualification and always-visible stable update guidance. Keep the existing text clipping controls rather than a tbody-ratio tolerance. Fresh consuming proof follows on these resolved bytes.
Change-source: pulse-maintainer
The Workloads table put a second line under memory and disk cells on
every stopped guest ("N/A / Unavailable", "- / Unavailable"), on every
agentless VM's disk, and "May include cache" under every agentless VM's
memory bar, even at 20%. None of them said why or what to do, and they
broke the row rhythm.
Memory that cannot be read now renders the same dash as an unreadable
disk, with its reason in the cell title, the sparkline's hover title
and assistive text. Disk shows a visible label only for a retained
reading (Last known) or a read the user can fix (No permission, Agent
error). The cache caption appears only when the guest's own memory is
at its warning or critical threshold, the figure that colours the bar
in host-share mode too, which is the case #2762 and #2639 were about;
below that the caveat stays in the title and assistive text.
An unavailable memory explanation names what is known instead of
"Unknown source": a powered-off guest reads "Unavailable while the
guest is powered off." MetricMiniSparkline gains an optional tooltip
so the chart covering the cell can carry that reason without changing
its accessible name.
Pixel review found the mock readout was in MiB/s while its min/max stayed in the percentage fixture range. Use matching extrema and require magnitude-labelled I/O axes. Retain original captures and do not attribute this invalid fixture to production.
Contract-Neutral: Synthetic browser API data and its assertions only; production and contracts stay unchanged.
Change-source: pulse-maintainer
Retain the second browser result: both desktop themes finish, while phone tap supplies no hover selection. Exercise the shipped touch inspection slider and Home key rather than assuming mouse semantics on WebKit. Production and safety checks stay unchanged.
Contract-Neutral: Browser interaction correction only, with no production or contract delta.
Change-source: pulse-maintainer
Retain the failed visibility wait and two original captures. A zero-length round stroke has painted pixels but no group bounding box; require attached marker paths and non-scaling stroke, then inspect actual History pixels. No production change or weakened safety assertion.
Contract-Neutral: Consuming browser-driver correction only; production and contract bytes are unchanged.
Change-source: pulse-maintainer
Source inspection finds utilization is the chart group and disk labels belong to table rows, not their individual cells. Correct the consuming assertions before browser execution, preserve all safety checks and format only the new proof harness.
Contract-Neutral: Proof-harness corrections only; containing production bytes and contracts are unchanged.
Change-source: pulse-maintainer
Bind the actual guest and node drawers, combined UTC completion formatter, week History and 24-hour trends to an offline desktop/phone proof. Check neutral denied status separately from failed-check warnings, full wrapping, retained readings and persistent accessible help without guest or credential operations.
Contract-Neutral: Credential-free consuming proof harness only; no additional production or contract delta.
Change-source: pulse-maintainer
The production Markdown renderer wraps tables to contain narrow-screen overflow. Select its semantic link rather than assuming an unwrapped table sibling.
Contract-Neutral: Browser acceptance selector only; no rendered or runtime change.
Change-source: pulse-maintainer
Add a safe missing-PBS path to the existing guide and troubleshooting entry. Separate connection polling, the server row, direct inventory and History without requesting credential changes, an agent install or repeated diagnostics.
Contract-Neutral: Documentation and consuming proof only; no API, monitoring, permissions or runtime behaviour change.
Change-source: pulse-maintainer
Preserve the exact reviewed private-input candidate and its source-bound receipts. Qualify changed drawer composition separately; no native or release acceptance is claimed.
Change-source: pulse-maintainer
Use a POSIX root/sudo prefix inside the isolated subshell rather than duplicating the long quoted reader. Synchronise PTY command entry and exit with the caller prompt, retain full terminal/privacy/overflow assertions, and follow current help rows by their labels. The browser driver now inspects the full Linux card.
Change-source: pulse-maintainer
Preserve exact specialist commits and retained consuming document proof. The Docs consumer and dependency bytes are unchanged; this help maintenance is not a baseline-memory repair.
Change-source: pulse-maintainer
Select the BusyBox stty applet only when standalone stty is absent, fail before unsafe entry on terminal-control errors, and restore modes with the selected tool. Expose the existing private-file installation alternative on Linux/NAS alongside FreeBSD without changing issuance, TLS, removal or privilege.
Change-source: pulse-maintainer
Merge exact Web candidate f034be1854. Resolve drawer overlap to its browser-verified contents and System facts controls; retain canonical GuestDrawer assertions, newer agent help, updater repair and consolidated contracts. Retained source and browser proofs qualify presentation only, not native workload or QGA recovery.
Change-source: pulse-maintainer
The copyable healthcheck previously also imposed a 256 MB memory limit and half a CPU, without workload qualification. Preserve the check, separate sizing from health and repair, and retain existing deployment policies. Link the bounded read-only interpretation and cover the shipped document and actual Docs consumer.
Contract-Neutral: Existing documentation and offline consuming fixtures only. No runtime defaults, deployment policy, API, retention, polling, resource enforcement or subsystem contract changes.
Change-source: pulse-maintainer
Desktop journeys and phone drawer/help checks complete; the phone's entire troubleshooting document exceeds Chromium/WebKit's image dimension ceiling. Capture the actual linked section at the verified viewport instead of an unreadable whole-document image.
Contract-Neutral: Browser documentation capture size/position only; no product, assertion, source test or graph changes.
Change-source: pulse-maintainer
The completed async trend introduces a second truthful last-known explanation. Scope both checks to their real consuming surfaces and require both to disappear on the fresh synthetic read rather than relying on one unscoped match.
Contract-Neutral: Browser selectors/assertions cover both existing evidence consumers; no product, source tests or graph changes.
Change-source: pulse-maintainer
The consuming pass now confirms actual captured focus and reading guidance, then exposes the fixture's button-role selector for the semantic History tab. Use its shipped tab role for both transitions; keep the on-demand History check.
Contract-Neutral: Browser control selector correction only; product, source tests and graph are unchanged.
Change-source: pulse-maintainer
Retain the pre-capture CSS measurement and exact element classes alongside the captured frame, then apply unchanged strict criteria to the rendered observation. This preserves failing pixels rather than ending with a DOM-only claim.
Contract-Neutral: Browser observation/capture ordering only; no product, threshold, regression or graph changes.
Change-source: pulse-maintainer
A horizontal SVG line has a zero-height box even when its enclosing chart is visible. Require the threshold node and the visible chart without treating Playwright's line-box visibility test as a product failure; pixel inspection remains required.
Contract-Neutral: Browser SVG observation correction only; no source behaviour, chart assertion, regression or graph is changed.
Change-source: pulse-maintainer