Commit Graph

7367 Commits

Author SHA1 Message Date
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] 70c8009ad4 Integrate reviewed lifetime startup connection recovery
Retain the exact Core commits and completed capped-cadence, cancellation, trust and consuming proof. This is source recovery, not installed or released acceptance.

Change-source: pulse-maintainer
2026-10-14 03:00:17 +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] 90a8b890e0 Show one chart panel in phone drawers and the rest on request (#2923)
Stacked on rcourtman/Pulse#2921, which sits on rcourtman/Pulse#2920;
this branch contains both. It lands after them or together with them.

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. At 390px a guest drawer was 1043px tall.

Below the `sm` breakpoint, the shared drawer chart component
(`GuestDrawerHistory`, used by the guest, node, Docker host and
resource-detail drawers) now shows:
- the first panel (Utilization), plus any panel carrying an active
alert;
- one full-width "Show Network I/O, Disk I/O, Thermals" button
(`aria-expanded`) that reveals the rest and then reads "Show fewer
charts".

Wider layouts are unchanged. It is a CSS class on panels that stay
mounted, so it adds no read.

Measured at 390px on the built preview:

| Drawer | Height | Notes |
| --- | --- | --- |
| Guest | 657px (was 1043px) | |
| Node | 597px | 3 panels collapsed |
| Agent | 715px | 3 panels collapsed |

At 1440px every panel shows and there is no toggle.

Tests: the new cases in `GuestDrawerHistory.inspection.test.tsx` cover
the collapse, the toggle, and an alerting panel staying visible.
Typecheck plus the Workloads, Infrastructure, Docker and Storage suites
pass on pulse-dev.
2026-10-14 01:43:11 +01:00
pulse-triage[bot] 1080e2f9dd Keep missing startup connections eligible for ordinary recovery
A provider that returns after the five-minute startup window was permanently outside polling until Pulse restarted. Preserve the capped retry cadence, cancellation, paused connections and saved TLS trust; connect the registered contract proof to six-minute virtual-time recovery and the real PBS constructor, scheduler and broadcast producer.

Change-source: pulse-maintainer
2026-10-14 01:25:15 +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] 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
rcourtman e735c464da Name history ranges the same way in every range picker (#2921)
Stacked on rcourtman/Pulse#2920 (this branch contains its commit); it
lands after or together with that PR.

The drawer range picker said "24 hours", the physical disk detail said
"Last 24 hours" and the storage pool detail said "24h".
`historyChartModel.ts` now owns one label table,
`formatHistoryRangeOptionLabel`, and all three pickers take their option
names from it: "1 hour", "24 hours", "7 days". That matches how the rest
of the app names durations (system settings, Patrol schedule).

The chart header's compact segmented range buttons keep their short
"24h" tokens. They are a different control, and they are hidden inside
these details.

Proofs: option text is asserted in
`GuestDrawerHistory.inspection.test.tsx` and `DiskDetail.test.tsx`. A
guardrail stops a local label list from coming back, and
`historyChartModel.branchcov2.test.ts` checks the disk and pool option
lists against the shared table. In the built preview, I read the option
text of the guest drawer, pool and disk pickers.
2026-10-14 01:05:14 +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] c3563b495b Integrate reviewed usable-session cluster recovery
Retain exact Core candidate identity and its connected recovery regression evidence.

Change-source: pulse-maintainer
2026-10-14 00:59:30 +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] f49cbaec62 Release v6.6.0-beta.3 (#2922)
Release preparation for `v6.6.0-beta.3`. After this merges, the release
workflow runs at this exact head
`0f7bdda87868e5f9eed0c1deb3bf8ef0f15f82fe`.
2026-10-13 23:51:05 +00: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
pulse-triage[bot] 0f7bdda878 Prepare v6.6.0-beta.3
Beta cut from main at 1844f6c0ed. It carries every change merged since stable v6.5.0.

Contract-Neutral: Release-only v6.6.0-beta.3 version, release notes and distribution metadata; no public install or runtime contract changes.
Change-source: pulse-maintainer
2026-10-14 00:10:09 +01:00
pulse-triage[bot] 1a27471600 Reconcile published Overview charts with reviewed recovery guidance
Preserve accepted 0efe3f7a12 and exact upstream ebfdc9d669 additively. Keep quiet unavailable captions, keyboard and touch reading explanations, stopped-agent provenance and primary CPU readings. Preserve stable denied-update help outside Details and all regression assertions.

Change-source: pulse-maintainer
2026-10-14 00:08:44 +01:00
rcourtman 5f046de046 Name history ranges the same way in every range picker
The drawer range picker said "24 hours", the physical disk detail said
"Last 24 hours" and the storage pool detail said "24h", so the same
choice read three ways depending on where a reader opened history.

historyChartModel now owns one label table, and the drawer, disk and
pool pickers all take their option names from it: "1 hour", "24 hours",
"7 days". That matches how the rest of the app names durations (system
settings, Patrol schedule). The chart header's compact segmented range
buttons keep their short "24h" tokens; they are a different control and
are hidden inside these details.
2026-10-13 23:55:15 +01:00
pulse-triage[bot] b3b7c28669 Keep Kubernetes metrics setup read-only and host identities separate
The existing minimal role omitted the API metrics reads used by the collector, while its optional host recipe prescribed node-wide privilege and a shared host identity. Include only node/pod metrics reads, explain incomplete inventory and kubelet-summary limits, and replace that unsafe shortcut with deliberately separate host telemetry. Preserve the private-file Secret recipes and existing bookmarks.

Contract-Neutral: Correct existing Kubernetes operator guidance and consuming regression controls; no agent, API, RBAC runtime, token scope, entitlement or navigation change.
Change-source: pulse-maintainer
2026-10-13 23:45:47 +01:00
pulse-triage[bot] 8eb0daddc9 Require a usable polling session before cluster recovery
Retain the actual authentication refusal and existing client when the full-timeout session cannot be constructed after a successful short probe. Cover pinned HTTPS rejection, malformed and form-refused sessions, later ordinary recovery and the monitor endpoint projection.

Change-source: pulse-maintainer
2026-10-13 23:44:32 +01:00
rcourtman f0108e4930 Show storage pool and disk history in the detail itself
Every resource drawer now charts history on its Overview. The storage
page's pool and physical-disk details were the last to keep it behind a
History tab, and that was their only other tab, so a reader opened a
pool or disk and then had to switch tabs to see whether it was filling
up or heating.

Both now render one view with no tab strip. A pool detail leads with its
Capacity Trend card, the range picker in the card header, followed by
configuration, topology and devices. A disk detail keeps its health
verdict and SMART facts first, as the evidence behind the verdict, then
its History charts with the range picker beside the heading, then live
I/O.

The storage contract had required these charts to stay behind the
History tab; it now records the 2026-10-13 decision instead.
2026-10-13 23:42:48 +01:00
rcourtman 5168ae6460 Chart history on Overview in Docker host and resource drawers
PR 2913 moved the Proxmox guest and node drawers' charts onto Overview
and removed their History tab. The Docker host drawer and the shared
resource-detail drawer (agent machines, containers, PBS, TrueNAS,
Kubernetes and other platform rows) still kept the charts a tab away,
so the same kind of drawer behaved two ways depending on the page.

Both now render the history charts on Overview under the attention
list, opening on 24 hours with the range picker beside them, and drop
the History tab. Charts stop polling while another tab shows, and an
active alert on a charted metric draws its trigger the same way as in
the Proxmox drawers. A resource whose metrics target drops for one
snapshot simply loses its charts until the target returns; the
selected tab is kept.

Storage page disk and pool details keep their own History tab; they
are separate components and their Overview has no charts to repeat.

E2E specs 27 and 63 no longer click History; the drawer read starts
when it opens. The manual tab-retention proof now selects Manage. Its
fixture page fails before the drawer renders (no WebSocket provider)
on main as well, so it was not run.
2026-10-13 23:30:46 +01:00
pulse-triage[bot] 0efe3f7a12 Integrate reviewed existing phone recovery guidance
Change-source: pulse-maintainer
2026-10-13 23:05:40 +01:00
pulse-triage[bot] 5de370660f Integrate reviewed signed installer download bounds
Change-source: pulse-maintainer
2026-10-13 23:05:38 +01:00
pulse-triage[bot] 1bddd65142 Integrate reviewed PBS outage and installer readability repair
Change-source: pulse-maintainer
2026-10-13 23:05:35 +01:00
rcourtman 77131c19b1 Show each bucket's min-max range behind drawer chart lines
Drawer charts plot one average per time bucket, so a short CPU burst or
I/O spike inside a 6-minute bucket (24h) or an hourly rollup (7d) shrinks into
the average and disappears. The trend cards this Overview replaced
stated a "24h low-high" range; the charts had nothing in its place.

Each stored point already carries its bucket's min and max. A tinted,
outlined band now spans those extremes behind every line, so a spike
stands as a spire above the average. Series whose buckets never spread
draw no band. While a time is inspected, the legend names that bucket's
peak when it rises at least a tenth of the plot above the average, and
the accessible value states each reading's average and range.

Spec 86 also allows sub-pixel clipping when it checks that the drawer's
Memory rows are fully in view. With the charts on Overview, CI placed
that table on a fractional offset and the rounded table border clipped
0.4% of it (ratio 0.9956), failing an assertion of exactly 1.
2026-10-13 22:59:35 +01:00
rcourtman b837a8a98d Chart drawer history on Overview and drop the History tab (#2913)
Opening a Proxmox guest or node drawer showed 24-hour trend cards for
CPU, memory and disk on Overview, then a History tab with the same
metrics in a different chart style, opening on 7 days, plus network,
disk I/O and thermals. One tab was a superset of the other.

This charts history on Overview itself and removes the History tab from
the guest and node drawers (tabs are now Overview and Manage):

- Overview reads: alerts line, Worth checking, the charts (24 hours by
default, range picker beside them), disks and sensors, facts strip,
closed Details.
- Charts poll only while Overview is shown, and show the live reading
(qualified current or last known) until history is stored. An offline or
stale node says so in one line and offers no live values.
- An active alert on a charted metric tones its reading and, with a
numeric trigger, draws a dashed line. I/O triggers are converted from
the alert engine's MiB/s to the charts' B/s.
- The facts strip carries the amounts behind the percentages: guest
vCPUs and used-of-total RAM and disk; node used-of-total RAM and root
disk.
- The range picker mints its id once per instance (a guest and a node
drawer can be open together). Legend readings are larger, and the charts
use two columns at medium widths.

Docker host and resource-detail drawers keep their History tab for now.

Verification: typecheck and the Workloads, shared, Proxmox, Docker and
Infrastructure suites (305 files, 5752 tests) on pulse-dev.
Full-resolution screenshots of the built bytes at 1440, 1000 and 390px;
the receipt lists what was exercised. The dashed alert line was not seen
in the browser (no Proxmox guest or node had a metric alert in the mock
estate) and is covered by unit tests.
2026-10-13 22:31:44 +01:00
pulse-triage[bot] 4793af28d5 Preserve existing phone access in retirement troubleshooting
Replace pre-retirement plan wording, unbounded log readers and speculative re-pairing or restarts with preserved evidence, bounded server log help and the approved phone-alert alternatives. Keep existing bookmarks and continuing Relay subscriber terms. This changes server documentation only, not app or Relay behaviour.

Contract-Neutral: Existing help correction only; no app, Relay, entitlement, API or runtime contract changes.
Change-source: pulse-maintainer
2026-10-13 22:24:42 +01:00
rcourtman 070d0a36fb Chart drawer history on Overview and drop the History tab
Opening a Proxmox guest or node drawer showed 24-hour trend cards for
CPU, memory and disk on Overview, then a History tab with the same
metrics again, in a different chart style and opening on 7 days, plus
network, disk I/O and thermals. One tab was a superset of the other,
so the reader had to reconcile two views of the same data.

The guest and node drawers now chart history on Overview itself, under
the alerts line and Worth checking, opening on 24 hours with the range
picker beside the charts. The History tab and the trend cards are gone.
The charts stop polling while Manage is shown, show the live reading
(qualified current or last known) until history is stored, and an
offline or stale node says so in one line instead of offering live
values.

What the cards carried and the charts lacked moves with them:
- An active alert on a charted metric tones its reading and, when it has
  a numeric trigger, draws it as a dashed line. I/O triggers are
  converted from the alert engine's MiB/s to the charts' bytes per
  second, and networkIn/networkOut map to the netin/netout series.
- The facts strip states the amounts the percentages are of: guest
  vCPUs and used-of-total RAM and disk, node used-of-total RAM and root
  disk (capacity only while a node's readings are withheld).

The range picker now mints its id once per instance, so a guest and a
node drawer open together no longer share a label target. Legend
readings are a step larger and the timestamp quieter, and the charts
use two columns at medium widths. Docker host and resource-detail
drawers keep their History tab for now.
2026-10-13 22:15:36 +01:00
pulse-triage[bot] c1139b83ec Bound unattended installer downloads before signed execution
Give each installer and signature transfer a five-second connection and sixty-second total budget, ignore ambient curl settings and preserve HTTPS through redirects. Failed or partial downloads leave the prior install, service and identity unchanged; pinned signature admission and recovery deadlines are unchanged.

Change-source: pulse-maintainer
2026-10-13 22:15:02 +01:00
rcourtman 316f4d5146 Record the daily beta release cadence
Capture the requested daily previews in the canonical release policy and
resolved decisions while retaining qualification and RC promotion rules.
2026-10-13 22:10:51 +01:00
pulse-triage[bot] 560ba9072e Keep known PBS servers usable through backup inventory failures
Separate resource-owned PBS health and identity from inventory loading/error gates. Preserve source-specific notices, unknown counts and ordinary retries; make complete optional signing environment names readable on phones without changing trust or copying.

Change-source: pulse-maintainer
2026-10-13 21:29:36 +01:00
rcourtman 72d25e4925 Drop guest row captions that repeat an empty cell (#2912)
The Workloads guest table put a second line under memory and disk cells
that repeated an empty cell and gave no reason: "N/A / Unavailable" and
"- / Unavailable" on every stopped guest, "Unavailable" under every
agentless VM's disk, and "May include cache" under every agentless VM's
memory bar regardless of value.

What changes:

- Memory that cannot be read renders the same dash as an unreadable
disk. Its reason stays in the cell title, the sparkline's hover title
and assistive text. Sparkline accessible values are unchanged.
- Disk shows a visible label only for a retained reading (Last known /
Prior) or a read the user can fix (No permission / Agent error, amber).
Stopped VMs, missing guest agents and lock deferrals show the dash.
- "May include cache" appears only when the guest's own memory is at its
warning or critical threshold (the figure the bar is coloured by, in
host-share mode too), the case from #2762 and #2639. Below that, the
caveat is title and assistive text.
- Unavailable memory explanations name what is known rather than
"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 carries that reason without changing its accessible
name.

User guide: `docs/VM_DISK_MONITORING.md` (and its shipped mirror) now
describes the labels the row shows, and
`test_guest_disk_reading_docs.py` pins them. This replaces #2893, whose
docs recipe test still expected the old labels.

Contracts: `frontend-primitives.md` and `performance-and-scalability.md`
describe the new caption rules. Four browser proof scripts and
`86-hybrid-memory-browser.spec.ts` are updated to the new behaviour; the
proof scripts need their container harness and were not run here.

Verification: Workloads suites (106 files, 2160 tests),
`memoryObservation` and `MetricMiniSparkline` tests, lint, Prettier and
type check pass. Browser receipt `6e39cc0902eefe58.json` records a live
pass on a mock stack built from main, in Bars and Trends at 1900x1100
and 375x812: captions only on the cache VM at warning, dashes on stopped
and agentless rows, rows 32px / 44px, no overflow.
2026-10-13 21:29:21 +01:00
rcourtman 160701bb42 Drop guest row captions that repeat an empty cell
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.
2026-10-13 21:08:59 +01:00
pulse-triage[bot] 438a9719b8 Compose typed QGA reply safety with current drawer and runtime source
Retain the exact existing safety candidate after returned final drawer proof; preserve current consuming source and mock History refinements. Native restart, every-volume History and independent thaw remain unverified.

Change-source: pulse-maintainer
2026-10-13 21:02:17 +01:00
rcourtman 651ae94b31 Integrate update-access guidance with the current node drawer
Preserve main's neutral denied-access state, wrapped Details and current
node metrics while retaining permission help across reading updates.
Verify disclosure dismissal, responsive placement and shipped docs.

Refs #1802
2026-10-13 20:54:39 +01:00
rcourtman 4f14ad6ab9 Use one primary CPU temperature rule everywhere
Three rules chose a node's single CPU temperature. Node history took
CPUMax first, agent history took cpu_package first, and the node drawer
recomputed the maximum of package, CPUMax and every core in the
browser. On an agent-fed node CPUMax is built from cores alone and can
sit below the package, and elsewhere a core can run above the package,
so the drawer's CPU temperature headline could disagree with the line
drawn beneath it and with the History tab. Node alerts and the CPU
low/record tracking used yet another package-first rule.

models.PrimaryCPUTemperatureCelsius is now the one rule: the hottest
usable package, CPU-maximum or core reading, with a sensor-map form for
agents. Node and agent history, the router's live fallbacks, the
unified resource temperature, node temperature alerts and the CPU
low/record tracking all call it. The drawer reads the resource value
through a new Node.cpuTemperature field instead of recomputing it, and
getCpuTemperature is removed.

Mock mode wrote a second package reading under a cpu.package key into
every agent host, including node-linked ones, from a series unrelated
to the node's static reading. A node and its linked agent now carry one
reading, sampled from the agent's series under the agent's real keys,
and both histories seed from that series, so the current reading
continues the line.
2026-10-13 20:15:36 +01:00
pulse-triage[bot] 96e0a315d1 Compose the existing PBS help candidate with reviewed current source
Change-source: pulse-maintainer
2026-10-13 19:33:15 +01:00
pulse-triage[bot] 2c35b7f043 Integrate reviewed backend BusyBox private bootstrap support
Change-source: pulse-maintainer
2026-10-13 19:21:33 +01:00
pulse-triage[bot] b41b69f7a8 Integrate reviewed portable input and final drawer browser proof
Preserve cb778998d7 identity and its unchanged frontend runtime. Resolve duplicate drawer receipt, contract and regression assertions to the already-qualified canonical versions; neither a merged receipt nor synthetic proof is native recovery.

Change-source: pulse-maintainer
2026-10-13 19:21:28 +01:00
pulse-triage[bot] 6111220dd3 Reconcile current drawer refinements with reviewed maintenance
Preserve the complete accepted local tip and exact published 526fa790ae additively. Keep upstream chart attention, neutral denied-update status and wrapping together with the reviewed reading and accessible update guidance.

Change-source: pulse-maintainer
2026-10-13 18:20:18 +01:00
pulse-triage[bot] b048cb184d Distinguish Active PBS connections from missing monitoring data
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
2026-10-13 17:50:22 +01:00
pulse-triage[bot] 36300f753c Compose published drawer refinements without losing access guidance
Keep compact exceptions, chart axes and neutral denied status in Details. Preserve full facts, last-known disk evidence and the persistent accessible update-help control. Resolve both source and regression/contract semantics additively; final combined bytes still need their own consuming browser receipt.

Change-source: pulse-maintainer
2026-10-13 17:48:45 +01:00
pulse-triage[bot] 563e2fa65b Compose reviewed portable private input with current maintenance
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
2026-10-13 17:47:33 +01:00
pulse-triage[bot] fdd01f7d21 Merge commit '41813ba2a12744ca3815e2bc6c29f552441e7b22' into maintainer-async/20261013T164055Z-product-intelligence/pulse
Change-source: pulse-maintainer
2026-10-13 17:47:03 +01:00
pulse-triage[bot] 624d3f09a3 Keep backend bootstrap input silent on BusyBox hosts
Mirror the qualified Unix reader in setup, Proxmox and container producers: select one terminal tool, distinguish missing terminal/tool/mode failures, restore its complete state before installation and on cleanup, and retain silent overflow draining. Emit the isolated privileged body once without changing tokens, trust, scopes, profiles or state. Cover serialized contracts and actual consumer payloads.

Change-source: pulse-maintainer
2026-10-13 17:17:36 +01:00
rcourtman 526fa790ae Make drawer charts and attention readable at a glance (#2910)
Stacked on #2909 (its commit is the parent here and lands with either
PR).

A full-resolution visual pass of the guest and node drawers, plus a Sol
review of the same screenshots, found the charts and attention hard to
read:

- **Numeric axes.** History I/O axes read "Max / Avg / 0" with no
magnitude, and "Avg" was the scale midpoint, not a measured average
(demand ledger "Numeric axis labels on history I/O charts", #1720).
Thermals read "Max / Mid / Min". Gridline labels now state the scale
value (e.g. `5.0M/s`, `60°C`) and sit centred on their gridlines.
- **Worth checking up front, one line each.** It was a full card per
section below the charts. It is now a compact list directly under the
alerts line, using the shared detail-row tone.
- **Now vs history.** Trend card headlines say "now", and the range
reads "24h low–high", so the live number is not read as the last point
of the stored line.
- **No text wall.** The two-sentence memory-cache caveat under the
charts (repeated in Details) becomes "may include cache" on the Memory
card; the full note stays once, in Details.
- The missing-readings note is one line, and the Details summary uses
readable text.

Tests: the full frontend suite passes (15,467). New proofs: Worth
checking renders above the trend cards with the shared tone, and the
guardrail pins that the list reuses `detailValueToneClass`. Browser
receipt: full-resolution screenshots of every drawer tab at 1440 and
390px, reviewed.

Follow-ups not in this PR (from the same review): threshold lines on
History charts, a crosshair shared across panels, taller History plots,
a Manage tab layout pass, and status text beside the drawer's status
dot.
2026-10-13 16:23:46 +01:00
pulse-triage[bot] 14b9b3fbac Emit the private reader once and exercise the real caller prompts
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
2026-10-13 16:22:48 +01:00