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
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.
Preserve the accepted cc6eb37ae9 history while incorporating current published History alert ownership and removal of the refresh control.
Change-source: pulse-maintainer
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.
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.
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.
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.
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
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
`scripts/check-drawer-tab-retention.cjs` (the #1723 tab-retention proof)
and `scripts/check-pbs-host-history-correlation.cjs` share the fixture
`frontend-modern/browser-tests/pbs-host-history-correlation.tsx`. That
fixture mounted the Backups table without the app runtime context the
drawer's Overview reads alerts from, so both proofs threw "useWebSocket
must be used within WebSocketContext.Provider" before the drawer
rendered. This happened on main too: they had silently stopped proving
anything.
- The fixture now supplies an explicit offline WebSocket and dark-mode
context and a router, matching the other drawer fixtures.
- 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 and Identity rows across refreshes. The Identity card
shows each identifier once (since 4884052bc5), so the Metrics Target row
may be absent; when it is present it must name the host series. The
intercepted history request must still name the host series in every
case.
Results on pulse-dev (Chromium 151):
| Proof | Result |
| --- | --- |
| Tab retention | Passes at 1280px and 390px |
| PBS host history correlation | Passes in all 12 cases (pbs-only,
side-by-side and guest topologies; stable and reordered; 1280px and
390px) |
| Negative control: reset the tab whenever the metrics target drops |
Retention proof fails ("tab selection was discarded") at both widths |
| Negative control: chart the PBS service key | Correlation proof fails
("expected the host history target agent/agent-proxback") |
Replace the repeatedly patched line scanner with the existing exact Marked 17.0.6 GFM lexer. Preserve real legacy values and silent current-thread label deltas while excluding quoted, nested, HTML and multiline-code declarations and upgrade-source title fallback. Install the complete one-package locked graph with scripts disabled and verify triage before minting its existing write token.
Contract-Neutral: Replace the issue metadata scanner within the existing silent classification contract; no product runtime, API, rendered Pulse UI, permissions, retest or disposition-authority change.
Change-source: pulse-maintainer
Keep the original failed transaction command distinct from any later cleanup command. Retain fixed operation labels and require portable controls for command, timeout, assertion, cleanup-only and successful receipts, without changing update transactions or disclosing command output.
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.
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
Replace the old optimistic-health expectation with cached selection, failed-request and later-success controls. Advance no production clock or safety fence and avoid an irrelevant constructor attempt in the in-memory fixture.
Contract-Neutral: Test-only correction to the recovery contract established in 4147f48db3; runtime and browser inputs are unchanged.
Change-source: pulse-maintainer
Require the actual nodes/login probe to succeed at startup, recovery and lazy selection instead of accepting guest-like response text. Retain failed single-endpoint health until an ordinary request succeeds, preserving cached last-resort reads, real guest error handling, temporary rate-limit handling and trust policy. Add producing-path and connected projection regressions and revise the old nodes-as-guest fixture contract.
Change-source: pulse-maintainer
Require the renamed native process-field assertion in the complete NAS removal oracle; retain all twenty controls and their strict executed verdicts.
Contract-Neutral: Update only the required test identity after the fixture assertion rename; no production or acceptance-contract change.
Change-source: pulse-maintainer
Current exact-head CI exposes outdated PBS proof inventory, omitted bounded-download helper extraction, closed transport rejecting the production HTTPS flags, and Darwin's truncated comm column in Linux NAS fixtures. Preserve exact transport and process ownership, restoration and migration safety assertions while binding the controls to the actual producer.
Contract-Neutral: Test and offline CI-fixture alignment only; no installed runtime, trust, credentials, deadlines, source safety or public contract changes.
Change-source: pulse-maintainer
Preserve imported source and receipt ancestry while qualifying the complete dependency group against current assigned main.
Change-source: pulse-maintainer
Run the existing credential-free diagnostic regressions in tier admission before dependency installation or image/shard work. Check the actual workflow wiring alongside the read-only collector and unchanged strict goldens.
Contract-Neutral: Invoke existing auth-renderer regression controls in CI; no public contract, dependency, golden or threshold changes.
Change-source: pulse-maintainer
Retain exact reviewed Delivery and Web commits. The diagnostic collector preserves strict goldens and records bounded renderer facts; source-p67_zn71 and retained browser controls cover the new test code. No runtime frontend changes or pending graph are included.
Change-source: pulse-maintainer
The actual Docs fetch, Markdown renderer and router pass desktop Chromium and 390px WebKit navigation and reading checks. All six original captures were inspected with the native image tool; no host, agent or installed recovery is asserted.
Contract-Neutral: Browser receipt only; no runtime, guide content or subsystem contract delta.
Change-source: pulse-maintainer
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
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
The legacy grant-pct path deliberately permits only list and df outside the typed helper. Keep that distinction instead of calling every fallback a full-trust collector, and describe configured mounts rather than promising every mounted filesystem.
Contract-Neutral: Guidance wording only; no telemetry, privilege, API, installer or availability contract delta.
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
Current hosted E2E stays green with an adverse probation auth comparison, while local auth pixels use a different observed font. Attach actual heading font selection, browser and viewport identity, and complete loaded stylesheet hashes before each existing strict comparison. Keep diagnostic gaps explicit, omit page/account/URL/CSS contents, and never change styles, baselines, thresholds or assertions.
Contract-Neutral: Add read-only test diagnostics for existing auth goldens; application, permission, deployment, screenshot and security contracts are unchanged.
Change-source: pulse-maintainer
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
The projection fixture now uses the actual saved ClusterEndpoint schema. Give each malformed-filesystem fixture an independent base path so reused listener ports cannot borrow a previous live uncertainty fence; all real guard state and response assertions remain.
Contract-Neutral: Test-only schema correction and independent synthetic endpoint identity; no production policy, deadline, wire or configuration changes.
Change-source: pulse-maintainer
A completed first-use retry does not return its nodes payload. Omit that unknown diagnostic count rather than reporting zero. Concurrent ordinary reads may legitimately open additional TLS sockets, so the construction control bounds logins and probe reads rather than pooled read connections.
Contract-Neutral: Diagnostic-count fidelity and fixture-only connection counting; no wire, trust, polling, authority or consumer contract delta.
Change-source: pulse-maintainer
The shared probe must release the health mutex for first-use trust. Retain the prior single construction boundary so joined readers do not duplicate capture and password login. The actual TLS concurrency control checks eight ordinary reads and nonblocking health inspection.
Contract-Neutral: Preserve existing serialized lazy client construction while releasing only the health and trust mutex for first-use capture; no wire, authority, configuration or consumer contract changes.
Change-source: pulse-maintainer
Preserve exact Delivery candidate 3aaa967bba. Review retains the executed real-Git scope controls and workflow trust proof; the unchanged VM historical-object failure is not relabelled as a pass. No frontend source changes or security exceptions.
Change-source: pulse-maintainer
Use one bounded first-use probe for constructor and nodes-read pin failures at startup, recovery and lazy selection. Keep capture credential-free, primary and saved pins immutable, and full polling-session acceptance separate. Qualify all existing auth encodings and refusal, cancellation and consuming projection controls.
Change-source: pulse-maintainer
Bind current desktop and 390px Docs navigation, reviewed pixels and the existing empty Diagnostics panel to byte-identical shipped guides. Retain original browser fixture failures and the unmodified live-check/privacy boundaries. This records help usability, not native recovery.
Contract-Neutral: Browser receipt metadata only; no runtime, renderer, documentation content or contract delta.
Change-source: pulse-maintainer
Keep all seventeen refreshed versions and the compatible serializers, but use maintained main's existing complete lock representation for the unchanged optional WASM archive. The proposal's six extra inBundle records have no independent tarball or SRI; they add inventory, not resolutions. Preserve the exact official parent tarball, SRI, bundled names and declared dependencies instead of inventing child integrity or changing the registry-only acquisition check.
Contract-Neutral: No package, security floor or runtime dependency is removed; the unchanged bundle remains authenticated by its original parent archive, using the existing qualified lock topology.
Change-source: pulse-maintainer