Commit Graph

4266 Commits

Author SHA1 Message Date
pulse-triage[bot] 56fc9b8255 Keep token issuance atomic on persistence failure
Restore the complete live token inventory when durable writes fail during legacy regeneration, quick security setup, and container-runtime token preparation. Return an error instead of exposing or claiming an unpersisted credential.

Contract-Neutral: hardens internal failure handling without changing successful API payloads or extension contracts
2026-08-29 05:19:19 +01:00
pulse-triage[bot] 75a8e67347 Stabilize rolling metric history snapshots 2026-08-28 23:23:43 +01:00
pulse-triage[bot] a46e322bde Expose TrueNAS SMART alert counters 2026-08-28 23:04:11 +01:00
pulse-triage[bot] 5570ac1e2e fix(agent): silence unchanged remote config refreshes 2026-08-28 21:56:26 +01:00
pulse-triage[bot] 7af19a973e Bound stopped-container Docker inspection cadence
Cache unchanged inactive container detail between live telemetry cycles so NAS hosts with large historical inventories do not re-inspect every stopped container every 30 seconds. Keep running state live, fail open to fresh inspection when lifecycle evidence is incomplete, and clear daemon-scoped caches on reconnect.

Refs #1729.

Contract-Neutral: Bounds internal daemon call cadence without changing report or operator contracts
2026-08-28 19:05:40 +01:00
pulse-triage[bot] afaf128950 Disambiguate same-name Proxmox agent links
Use unique provider-observed node interface addresses to restore automatic
host-agent linking when standalone sites share a short hostname but use
distinct FQDN endpoints. Keep reused addresses ambiguous and fail closed.

Refs #1753

Contract-Neutral: narrows internal agent-to-node identity reconciliation without changing API or extension shapes
2026-08-28 18:07:10 +01:00
pulse-triage[bot] 3640f4f2aa Fix standalone Proxmox agent identity reuse
Sequentially adding standalone Proxmox estates with the same native node name could lend the first site agent to the second through the short-hostname fallback. Both provider nodes then shared one agent identity and collapsed into one state slot. Require exact endpoint, certificate, or agent-bridged full endpoint evidence before a cross-instance standalone merge; reject and self-heal guessed links that already belong to another node.

Refs #1753

Contract-Neutral: narrows internal Proxmox node/agent identity reconciliation without changing API shapes or extension contracts
2026-08-28 15:09:21 +01:00
Pulse Test decdbcc037 fix(updates): preserve install URL on feed fallback 2026-08-28 14:50:28 +01:00
pulse-triage[bot] 9e820355b6 Fix Unraid sentinel empty slot reporting 2026-08-28 14:20:43 +01:00
Pulse Test 473885e2ce Harden Patrol activation telemetry 2026-08-28 11:35:41 +01:00
Pulse Test e1bc14bd4a Harden alert recovery and qualification 2026-08-28 11:28:38 +01:00
pulse-triage[bot] dfc9435af8 Cover Anthropic budget enforcement rates 2026-08-28 10:54:48 +01:00
Pulse Test 973944d8c0 Remove alert event-log retention test race
Contract-Neutral: Retain the existing 90-day event and independent active-state contract while removing an unsafe test-only retention mutation.
2026-08-28 10:48:45 +01:00
Pulse Test 9ce4b7e20f Harden alert durability and watchdog isolation 2026-08-28 10:14:02 +01:00
pulse-triage[bot] 79206d340a Retain dismissed TrueNAS SMART failures 2026-08-28 09:15:36 +01:00
pulse-triage[bot] bf1b81700b Correct current Anthropic cost estimates
Price Anthropic Opus 4.5 through 5 at the current first-party rates while preserving legacy Opus pricing. Correct Haiku 4.5 in the same version-sensitive table and add regression coverage for current and legacy aliases.\n\nFixes #1789
2026-08-28 08:11:54 +01:00
pulse-triage[bot] 7e3c624900 Keep agent removal token revocation atomic
Serialize monitoring-owned host, Docker, and Kubernetes token cleanup with API-token persistence. Restore the complete live inventory when a reduced inventory cannot commit so restart never silently reverses an apparent revocation, and govern the boundary with forced-failure proof.

Change-source: pulse-maintainer
2026-08-28 07:55:17 +01:00
pulse-triage[bot] 0c2d3f6d80 Keep agent install token issuance atomic
Restore the complete prior API-token inventory when an agent install credential cannot be persisted, so failed issuance neither admits an undisclosed secret nor evicts an older valid token. Prove the package and API failure boundaries and govern the shared lifecycle contract.

Change-source: pulse-maintainer
2026-08-28 07:33:22 +01:00
pulse-triage[bot] 73be3df3c5 Keep API token creation atomic
Restore the complete pre-creation token inventory when persistence fails so sorting cannot evict an older valid token or leave an unreturned credential active. Govern and test the durable creation boundary across API, security, agent lifecycle, and storage.

Change-source: pulse-maintainer
2026-08-28 07:08:08 +01:00
Pulse Test 674ca18968 fix(unifiedresources): merge PVE and agent rows for the same RAID array volume
The PVE disks/list poll and the agent SMART report both observe a RAID
controller's exported volume, but PVE surfaces its NAA identifier as a
bare-hex serial while smartctl reports the same value as a naa.-prefixed
WWN with no serial. The linked-disk join compared serial to serial and
WWN to WWN verbatim, so the volume rendered twice (/dev/sda and sda)
with independent metric histories.

Hardware identity comparison now normalizes reporter framing (naa., eui.,
wwn-, 0x prefixes, case) and folds serial and WWN together before
comparing. Values are never truncated: sibling volumes on one controller
share their leading WWN bytes, and a truncated udev ID_WWN must stay
unequal to a full identifier. Placeholder serials no longer count as an
identity match.

Refs #1720
2026-08-28 06:20:10 +01:00
pulse-triage[bot] f5f854afa2 Complete Unraid monitoring contract 2026-08-28 01:32:29 +01:00
pulse-triage[bot] cb27b8eb24 Fix Unraid empty slot health reporting 2026-08-28 01:23:12 +01:00
Pulse Test 5ee1cdd002 Make informational alerts a first-class severity 2026-08-28 00:45:20 +01:00
Pulse Test 413288d049 Keep offline mock hosts on the host alert lifecycle 2026-08-28 00:07:17 +01:00
Pulse Test 1a8d4aff8e Keep mock alert history behind the observation clock 2026-08-27 23:43:36 +01:00
Pulse Test ff6c6a7fe7 Make mock alert history lifecycle-consistent 2026-08-27 23:36:55 +01:00
pulse-triage[bot] c8781b993e Repair latest main test gates 2026-08-27 23:27:29 +01:00
Pulse Test e0a089baab Coalesce repeated alert delivery holds 2026-08-27 23:21:06 +01:00
pulse-triage[bot] b8d3a768bd Keep API token watcher mutations ordered
Serialize API-token disk reload snapshots with live token mutations so a stale watcher read cannot overwrite a newer rename or revoke. Add deterministic rename and revoke race coverage and record the governed concurrency boundary.

Change-source: pulse-maintainer
2026-08-27 22:44:46 +01:00
rcourtman 8ade613dfd Add complete mock alert timelines 2026-08-27 22:04:26 +01:00
pulse-triage[bot] 386041e46a Expose workload CPU window inheritance
Add the canonical workload fallback to rolling CPU policy controls and show each profile's effective parent duration. Refresh stale alert and Ceph guardrail expectations found during full-suite validation.

Change-source: pulse-maintainer
2026-08-27 22:03:23 +01:00
rcourtman 1878245cdb Make alert incident timelines complete 2026-08-27 21:42:25 +01:00
pulse-triage[bot] fec18f343f Preserve fresh rolling-window metric authority
Keep in-memory observations authoritative over duplicate persisted history, add direct provider and cache reset coverage, and register the rolling-window proof files with canonical governance.\n\nChange-source: pulse-maintainer
2026-08-27 21:22:12 +01:00
rcourtman 4b9abd4eca Add rolling-window metric alert evaluation 2026-08-27 21:11:44 +01:00
rcourtman a9076de15a fix(patrol): require Docker health recovery 2026-08-27 20:43:54 +01:00
rcourtman b0c1eca4cd Add predictive storage capacity alerts 2026-08-27 20:41:08 +01:00
pulse-triage[bot] f9340e3334 Complete Docker action verification proof
Change-source: pulse-maintainer
2026-08-27 20:19:17 +01:00
rcourtman 6163a2a564 feat(patrol): verify Docker actions independently 2026-08-27 20:14:38 +01:00
pulse-triage[bot] 7e1dbd91eb Bound alert escalation schedule delays
Change-source: pulse-maintainer
2026-08-27 20:12:36 +01:00
rcourtman e0baecc418 Make alert escalations destination-specific and repeatable 2026-08-27 19:51:12 +01:00
pulse-triage[bot] 5f6bfefa56 Make notification destination updates durable 2026-08-27 19:46:40 +01:00
rcourtman 1164d37302 feat(patrol): reconcile actionable findings on activation 2026-08-27 19:44:02 +01:00
rcourtman 8df9db7ab1 feat(alerts): add destination severity routing 2026-08-27 19:13:32 +01:00
pulse-triage[bot] e1d05e7b12 Make deploy enrollment credentials atomic 2026-08-27 18:49:41 +01:00
rcourtman 3d4c43162a feat(alerts): add recurring scoped maintenance 2026-08-27 18:20:03 +01:00
rcourtman ff507a6e44 feat(alerts): add per-alert snooze 2026-08-27 17:20:32 +01:00
pulse-triage[bot] 735acbb05a fix(dockeragent): bound image storage computation
Keep live image identity fresh without recomputing shared layer sizes on every report. Reuse the throttled storage snapshot and qualify the reported Synology inventory shape.

Change-source: pulse-maintainer
2026-08-27 16:33:14 +01:00
rcourtman f4e1e47e74 feat(alerts): add external dead-man monitoring 2026-08-27 16:27:46 +01:00
pulse-triage[bot] 30b4fbd95e test(notifications): isolate terminal recovery paths 2026-08-27 16:08:53 +01:00
pulse-triage[bot] 947a26b72f fix(alerts): stop mutating resolved snapshots
Contract-Neutral: resolved-alert alias lookup no longer mutates shared alert snapshots; canonical identity and public alert behavior are unchanged
2026-08-27 15:56:23 +01:00