Commit Graph

15115 Commits

Author SHA1 Message Date
pulse-triage[bot] 757acf055e Isolate lock-evidence fixture keys without clearing guest fences
Retained full-suite proof reports an inherited agent-cooldown before the invalid-UTF8 lock case dispatches any command. Give each synthetic case a distinct base path, keeping all clients in that case on its shared key. A same-listener control retains the prior uncertainty fence unchanged. No runtime guest guard, native target or assertion is weakened.

Change-source: pulse-maintainer
2026-10-14 14:47:17 +01:00
pulse-triage[bot] 5b895ff78e Bound routing ownership proof without a one-second latency assumption
The retained 277ec211 source proof times out on a correctly retained target, with injected requests zero and its pin unchanged. This test owns routing and trust, not a latency SLO. Use explicit five-second client and ten-second caller fixture bounds, record elapsed work, and retain every routing/pin/guest assertion. Runtime timeouts and timeout controls are unchanged; the original failed receipt remains adverse evidence, not a diagnosed host fault.

Change-source: pulse-maintainer
2026-10-14 14:37:46 +01:00
pulse-triage[bot] 3f9c974b5a Keep internal saved pin conflicts out of cluster consolidation
Preserve contradictory rows before monitoring constructs its endpoint trust map. A final matching row must not mask earlier disagreement during saved-view consolidation. Cover both merge orders and retain the existing agreeing-format path; strengthen lifecycle configuration ownership checks.

Change-source: pulse-maintainer
2026-10-14 14:34:04 +01:00
pulse-triage[bot] 277ec2110a Preserve contradictory saved cluster trust through producer and refresh
Carry exact duplicate-row conflicts into owned client trust before map deduplication. Keep unresolved saved trust through initialization, missing-client retry and topology refresh without replacing pins or stopping trusted siblings. Cover actual monitor lifecycle routes and member projections alongside client TLS controls.

Change-source: pulse-maintainer
2026-10-14 14:27:25 +01:00
pulse-triage[bot] 67512447fe Merge commit 'bea93859d333d8303ca0e57f494d540830940958' into maintainer-async/20261014T132025Z-core-runtime/pulse
Change-source: pulse-maintainer
2026-10-14 14:21:19 +01:00
pulse-triage[bot] bea93859d3 Refuse conflicting saved TLS pins for equivalent Proxmox URLs
Resolve all saved pins for an endpoint before credential-bearing construction. Contradictory trust is an explicit failure, not a missing-pin fallback or first-use opportunity. Preserve independent authorities, agreeing formats and saved configuration; prove zero provider work, sibling monitoring and normal reload through the member projection.

Change-source: pulse-maintainer
2026-10-14 13:36:51 +01:00
pulse-triage[bot] 235b10e820 Integrate reviewed attempted archive version normalization
Change-source: pulse-maintainer
2026-10-14 13:28:16 +01:00
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
rcourtman 86a244bc04 Name where History readings came from instead of always "stored" (#2933)
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".


Stacked on #2932 (same chart files); it carries that commit until #2932
lands.
2026-10-14 13:20:38 +01:00
pulse-triage[bot] 586c659fe7 Integrate reviewed fail-closed updater manager observations
Preserve exact Delivery commit 8d8a1790ad and composition ancestry. Retained source qualification supports service-state and running-executable admission; raw output equality and installed recovery remain unverified. Infra tip is already canonical ancestry.

Change-source: pulse-maintainer
2026-10-14 13:20:27 +01:00
pulse-triage[bot] 88311bdd28 Integrate reviewed complete guest inventory and reading retention
Preserve exact Core commits 9dcd5697cc and 4b205a8968. Retained four-package race, connected preservation, real-embed build and consuming proof support this backend repair; installed recovery remains separate.

Change-source: pulse-maintainer
2026-10-14 13:20:25 +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 59ed65739c Band and fold the storage History charts like the drawer charts (#2932)
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 13:06:16 +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
pulse-triage[bot] 04ac669a6c Extract release versions from attempted server archives
Failed-install forms accept attempted release asset names, but archive and platform suffixes currently become part of the affected-version label. Recognise the published server archive naming shapes, keep companion binaries and verification files out of server version evidence, and preserve unknown fields, bare prerelease qualifiers, Community-owned labels and the live-state fence. Reproduce the actual silent label consumer on five affected inputs and qualify archive, formatting and adverse controls without reporter collection or public contact.

Contract-Neutral: Silent issue classification and regression controls only; no product runtime, subsystem shape, rendered product surface, dependency, grant or public-contact behaviour change.
Change-source: pulse-maintainer
2026-10-14 12:53:35 +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 dc92693a2b Stop History chart axis labels crowding or repeating (#2931)
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.


This branch carries the whole drawer chart stack: #2929 (pause hidden
disk charts) and #2930 (keep readings through a resize), plus a receipt
commit. #2929's receipt named its pre-rebase parent, which failed the
range check on both; the last commit records a fresh browser pass of the
final content bound to its own parent. Merging this lands all three.
2026-10-14 12:36:40 +01:00
rcourtman 9c83a43661 Bind the drawer chart stack's browser receipt to its rebased parent
The pause change's receipt named its pre-rebase parent, so the range check could not bind it after #2928 landed. This receipt records the browser pass of the final content of every frontend file the pause, resize and axis commits change, bound to its own parent.
2026-10-14 12:21:20 +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
pulse-triage[bot] 11e0946999 Retire stale version labels when report evidence becomes unknown
A corrected unknown, incomplete or removed version field currently retains old exact-version affects labels beside needs-version-info. Reconcile those synchronizer-owned assertions with the live bug report, preserving Community labels and the pre-write state fence. Verify corrected fields, delayed events, removals-only writes and no-op/non-bug controls without public contact.

Contract-Neutral: Issue classification metadata and regression controls only; no product runtime, subsystem shape, rendered surface, dependency, grant or public-contact behaviour change.
Change-source: pulse-maintainer
2026-10-14 12:07:29 +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] 4b205a8968 Retain accepted guest observations when node enumeration fails
Use scoped, detached producer tuples for canonical guests on failed nodes instead of publishing enrichment-only projections as readings. Keep original metric provenance, guest collection state and observation times, without cloning unrelated fleet data or changing guest command safety. The connected admission proof exposed and now covers this complete preservation path.

Change-source: pulse-maintainer
2026-10-14 11:58:39 +01:00
pulse-triage[bot] 8d8a1790ad Refuse incomplete updater manager observations
Keep stderr and trailing blank records in service-state and running-PID admission. Incomplete reads must not authorise installation, restart, rollback or update success. Require production caller and real-process controls for both read boundaries; preserve existing recovery, trust and deadlines.

Change-source: pulse-maintainer
2026-10-14 11:58:09 +01:00
pulse-triage[bot] cb77f61f55 Integrate reviewed live-state issue metadata guard
Preserve exact candidate 2ffacbaf1a. Retained source-zy0ifepj covers six stale-preparation controls and the full 109-test triage suite; canonical script, tests and dependency graph have no intervening changes.

Change-source: pulse-maintainer
2026-10-14 11:53:35 +01:00
pulse-triage[bot] 2ebea3b17f Merge commit 'feabe2458722c6df174a9db3d2dede832373a9d0' into maintainer-async/20261014T104006Z-delivery-trust/pulse
Change-source: pulse-maintainer
2026-10-14 11:51:58 +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
pulse-triage[bot] 047ce79683 Compose batch-start upstream browser proof repairs
Change-source: pulse-maintainer
2026-10-14 11:48:01 +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
rcourtman feabe24587 Repair the remaining drawer and storage history browser proofs (#2928)
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.
2026-10-14 11:46:14 +01:00
pulse-triage[bot] 9dcd5697cc Keep incomplete Proxmox guest inventories out of publication
Require whole bounded, unambiguous enumerations on the efficient and node fallback routes. Preserve scoped empty inventories, LXC integer compatibility and ordinary counter/receipt semantics. Validate retained readings, History, breaches and template policy through actual fallback and recovery.

Change-source: pulse-maintainer
2026-10-14 11:35:55 +01:00
pulse-triage[bot] 5f62a72375 Integrate reviewed proposed-source issue metadata checks
Change-source: pulse-maintainer
2026-10-14 11:34:45 +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 8342a35332 Repair the remaining drawer and storage history browser proofs
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.
2026-10-14 11:27:57 +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] 2ffacbaf1a Recheck live issue state before applying prepared triage labels
Label lookup and creation can outlive a report edit, closure or Community review. Abandon the prepared issue-label delta when a fresh pre-write read no longer matches its report and label snapshot; failed reads have no stale fallback. Keep no-op work to one read, preserve per-label mutations and make no public contact.

Contract-Neutral: Issue metadata synchronizer and its regression controls only; no product runtime, subsystem contract, rendered surface, grants, dependencies or public-contact behavior changes.
Change-source: pulse-maintainer
2026-10-14 11:23:53 +01:00
pulse-triage[bot] a0e352eaf9 Integrate reviewed complete Proxmox node inventory admission
Change-source: pulse-maintainer
2026-10-14 11:19:58 +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] 1740bccd61 Test issue metadata on proposed source before publication
Run the locked parser and silent triage policy on their complete input changes in a credential-free Build and Test job. Retain issue-event pre-token checks, existing runtime and strict dependency gates; exercise admission and original install/test failure exits.

Change-source: pulse-maintainer
2026-10-14 11:12:45 +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
pulse-triage[bot] feeb53efc2 Synchronise the shipped issue-triage copy
The complete frontend suite on the safety-control candidate passed 23,490 cases but stopped on the repository-versus-shipped issue-triage copy check. Mirror the eight current metadata-intake lines from the already integrated root document without changing policy, parser or tests. Verify the actual served asset through the existing Docs renderer on desktop and narrow WebKit, including native consumer bytes and index/back navigation; retain the prior failure separately.

Contract-Neutral: Exact shipped documentation mirror and source-bound consuming receipt only; the root policy, parser, existing routes, APIs, permissions and runtime behaviour are unchanged.
Change-source: pulse-maintainer
2026-10-14 11:01:55 +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 b49e5502f9 Drop the history Refresh button and chart only a resource's own alerts (#2925)
I gave Sol (gpt-6.1-sol) a final review of the whole drawer series, with
11 full-resolution screenshots, and checked a real alert on the preview.
This fixes what that turned up and removes the history Refresh button.

**Alert matching**
- A Docker host drew its container's 85% memory trigger on the host's
own memory chart and turned the host reading red. Charts now take
triggers only from `getOwnAlertsForUnifiedResource` (the resource's
exact-key alerts). Needs attention still lists nested alerts.
- A container drawer listed none of its own alerts. The matcher now
answers to `docker:<host>/<container id>` (or `/name:<name>`), the key
`DockerContainerResourceID` writes.
- Docker and resource-detail drawers printed the breach-time alert
message ("memory at 99.5%") beside a chart reading 70%. They now use the
shared `getAlertAttentionCopy`, which reads "Memory 70% now, recovering
/ Clears after 5 minutes at 80% or lower".
- Disk temperature (`temperature`/`diskTemperature` to `smart_temp`) and
storage capacity (`usage`) alerts now reach their charts.

**Charts**
- No alert line is drawn before history exists, where it would sit at a
placeholder height.
- The legend names the trigger ("alert at 85.0%").
- On phones, a panel shown because of an alert stays shown after the
alert clears.
- Facts strips show only the size for retained memory readings.
- The "Refresh history" button is removed; the charts poll every 30s.
"Retry history" appears only for a failed read, and focus moves to the
history region when a successful retry removes it.

**Verification**
- Typecheck plus 826 test files (Workloads, Infrastructure, features,
utils, Storage) on pulse-dev; three docs-rendering tests timed out under
load there and pass on their own. Tests that used Refresh to trigger a
read now advance the poll on a fake interval clock.
- On the built preview, the real alert on container sftp-ingest-2 shows
in its drawer with the dashed line and legend label. The Docker host no
longer draws its container's trigger.

**Not in this PR**
- 23 manual browser proofs still click the removed History tab or
Refresh button; they are fixed in a follow-up.
- Review items deferred, listed for follow-up:
  - nested disk charts in a guest drawer keep polling behind Manage;
  - storage charts lack the band and the phone disclosure;
  - axis-label crowding in four-column layouts;
  - "Latest stored" ignores the response source;
  - inventory cards on resource-detail drawers.
2026-10-14 10:36:49 +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] ba9bb34d09 Require complete Proxmox node inventory before recovery
Consume the bounded response through EOF before admitting nodes or a cluster probe. Reject missing, ambiguous and incomplete inventories without leaking response details, retain scoped empty arrays and provider metadata, and cover trusted startup, recovery, cached reads and consuming endpoint projection.

Change-source: pulse-maintainer
Contract-Neutral: Tightens existing node-inventory and recovery-health admission without changing the public response schema, API surface, permissions, TLS or guest-command policy.
2026-10-14 10:10:50 +01:00
pulse-triage[bot] cc6eb37ae9 Disable automatic caching in credential-capable triage job
Complete the reviewed parser workflow integration under the existing setup-action trust rule. Keep the exact locked install and pre-token tests, without caching packages across credential-capable runs.

Contract-Neutral: Explicitly disable setup-node automatic caching; silent issue classification, authority and product behaviour remain unchanged.
Change-source: pulse-maintainer
2026-10-14 10:04:57 +01:00
pulse-triage[bot] 36b4395eab Integrate reviewed exact Kubernetes API group tests
Change-source: pulse-maintainer
2026-10-14 09:58:43 +01:00