Follow-up to #2593 (silent agent SMART readings), which made retained disk temperatures carry a non-available collection state and kept them out of history. ## Why Normalization may keep a disk temperature it did not collect (a disk in standby, a host agent past its reporting lease), provided the collection state says so. #2593 stopped the history writers recording those values. Two consumers still presented them as current: - **History live point.** When a disk range has no samples, `/api/metrics-store/history` answered with the disk's temperature as a `source: "live"` point at now, whatever its state. Now that retained temperatures never reach history, a short-range chart for a silent agent's disk or a sleeping disk showed the retained value as a fresh reading. Mock mode also seeded synthetic series from it, and padded sparse stored series out to now. - **Unraid inventory temperatures.** Unraid array rows carry no per-field provenance, so a temperature taken from one (the Unraid-native disk row, or a SMART row falling back to the inventory reading) could not be told apart from a collected one once the agent went silent. `ExpireHostTelemetry` only marks SMART rows. ## What - `diskinventory.TemperatureCollected` is the shared form of the rule the history writers apply (no state, or `available`). The router's disk live point, the mock synthetic seed and the mock padding all require it. - The unified-resources adapter derives the state of an Unraid inventory temperature from the host lease that `ExpireHostTelemetry` already records atomically, and from the disk's spin state: `unavailable` from `unraid` ("host agent stopped reporting", or "disk is reported spun down"), otherwise `available`. The value stays as last-known context. - A SMART row that borrows the inventory reading takes that state, including `available`. - The Unraid-native row records only the withdrawing states. The registry picks a merged disk's temperature and its state separately, so an `available` claim from the provenance-less row would mask the SMART row's own state for the same disk. - A withdrawn inventory temperature no longer counts as heat in the disk's risk assessment. - Storing per-row state on `models.HostUnraidDisk` instead would have added a model field, a read-state round trip and a frontend type change just to duplicate `host.Status`. ## Tests - `TestContract_MetricsHistoryDiskLivePointOnlyForCollectedTemperature`: a silent agent's disk (through the real `ExpireHostTelemetry` and registry path) and a standby disk get no live point in single-metric or all-metrics responses, and no value-derived mock series. Sparse stored samples are not padded to now for a retained, absent or unknown disk. A collected disk still gets its live point and mock series. Each router gate was reverted individually and the test failed each time. - `TestSilentUnraidAgentDiskTemperatureIsRetainedButNotCollected`: three Unraid disks (inventory only, SMART row without a temperature, SMART row whose temperature is unsupported) go collected, then retained but not collected after `evaluateHostAgents` expires the lease, then collected again. - `TestUnraidDiskTemperatureFollowsTheHostLease`: reporting, silent and spun-down hosts across the native row, the borrowed reading and a SMART row with its own reading, including risk. - `TestUnraidInventoryRowDoesNotMaskTheSMARTRowState`: the merged-registry case, which fails if the native row claims `available`. - `TestTemperatureCollectedOnlyForAReadingTakenByThisObservation`: the helper.
Pulse documentation
Start here for installation, platform setup, security, operations, and Pulse Intelligence. Commands, configuration keys, image names, API fields, and product identifiers remain untranslated in localized guides.
Start here
- Install Pulse — signed Proxmox/Linux installation, Docker, Docker Compose, Kubernetes, and first-run setup.
- Production deployment and security — least-privilege Proxmox setup, root-agent boundaries, discovery, supply-chain verification, plan limits, scale evidence, and a rollout checklist.
- Upgrade from Pulse v5 — migration prerequisites, rollback, agent continuity, and post-upgrade checks.
- Releases and update channels: choosing Stable or Preview, beta and RC expectations, and how releases are tested and promoted.
- Configure Pulse — authentication, notifications, discovery, retention, and system settings.
- Deployment models — data locations, lifecycle, and differences between supported deployment paths.
- Troubleshooting and FAQ — common failures, diagnostics, and operator questions.
Localized getting started guides: Deutsch · Español
Platforms and agents
- Proxmox Backup Server
- Proxmox Mail Gateway
- Docker and Podman
- Kubernetes and Helm
- TrueNAS SCALE and CORE
- Unified Agent
- Agent security
- VM disk monitoring
- ZFS monitoring
- Temperature monitoring
VMware vSphere support is early access. Current builds expose dedicated vSphere inventory and recovery context, but operators should validate the integration against their own vCenter before production use.
Monitoring and operations
- Metrics history
- Recovery data
- Webhooks
- Automatic updates
- Centralized agent management (Pro)
- Operational trust model
- Current product screenshots
Pulse Intelligence
- Assistant, Patrol, and external-agent overview
- Patrol modes and safety
- Assistant safety model
- External agent HTTP and MCP substrate
Patrol watch-only analysis is available on Community with a local model or the operator's own provider. Investigation and governed fixes require the relevant Pulse Pro capabilities.
Security, privacy, and access
- Production deployment and security
- Security review scope
- Authentication and credential storage review packet
- Security guide
- Privacy and telemetry disclosure
- OIDC and SSO
- Proxy authentication
- Role-based access control (Pro)
- Audit logging (Pro)
- Reverse proxy configuration
- Code-signing policy
Plans and managed access
- Community, Relay, and Pro capabilities
- Relay and Pulse Mobile handoff
- Multi-tenant organizations (Enterprise/custom)
- Provider-hosted MSP operations (request-assisted)
Pulse Cloud is not generally available. Ordinary self-hosted Pulse remains the primary installation path; MSP and Enterprise access are explicit commercial paths rather than defaults in self-hosted setup.
Development and reference
Detailed design notes and dated migration specifications may remain in this directory for maintainers, but they are not operator setup guides unless they are linked from the sections above.
Previous versions and migrations
- Upgrade from v4 to v5
- Retired unified-navigation migration — historical context only; current Pulse uses platform-shaped navigation.
- Move a Pulse installation
Found a bug? Use the issue forms. For setup questions, use GitHub Discussions.