Commit Graph

4294 Commits

Author SHA1 Message Date
pulse-triage[bot] 95a7191ca9 Enforce native private state permissions 2026-08-30 03:31:00 +01:00
pulse-triage[bot] 184b3cbfa6 Restore Windows native agent verification 2026-08-30 02:05:30 +01:00
pulse-triage[bot] b001ad8ef1 Classify Proxmox guest lifecycle transport 2026-08-30 01:51:58 +01:00
pulse-triage[bot] ac2a2fe020 Complete release and helper download safeguards 2026-08-30 01:51:58 +01:00
Pulse Test d06ffc233d Harden secure agent runtime transitions 2026-08-30 01:41:57 +01:00
Pulse Test 5d3571dbe8 Scope remaining provider inventory hydration 2026-08-30 00:42:18 +01:00
Pulse Test 5b2e377843 Expose secure agent runtime posture 2026-08-30 00:38:44 +01:00
Pulse Test 6405c47064 Clear Docker host removal block on fresh-token re-enroll
Removing a Docker host blocks its reports, but the report path only ever
consulted the in-memory block and offered no way for a legitimate
re-enroll to clear it: reinstalling the agent with a newly generated
token kept being rejected until a server restart happened to wipe the
in-memory map, which read as the Docker tab staying missing until the
Pulse server was rebooted. The restart also silently lifted deliberate
blocks, because the persisted entry was never consulted on report.

Docker reports now follow the host-agent rule from #1581: the block
check consults both the in-memory map and the persisted store, and a
token minted after the removal is explicit re-enroll intent that clears
the block from both. A still-running old agent presenting its
pre-removal token stays blocked, including across restarts.

Refs #1728
2026-08-30 00:07:53 +01:00
Pulse Test 54c3cdc061 Let fresher evidence decide merged connection member state
When the Proxmox node inventory and the unified resource registry both
project the same machine as a system member, the merge paired the most
severe state from one plane with the newest LastSeen from the other. A
lapsed projection, such as an orphaned registry entry left behind by a
remove/re-enroll cycle, could therefore permanently render a member as
Stale beside a heartbeat seconds old, and the cluster rollup inherited
the contradiction onto the parent row.

The plane that has seen the machine more recently now decides liveness.
Severity still decides when neither side carries evidence or the
timestamps tie, so genuinely offline members keep their state.

Refs #1728
2026-08-30 00:02:15 +01:00
Pulse Test d607d5cf46 Separate agent remediation runtime 2026-08-29 23:48:28 +01:00
Pulse Test 1720fd635b Harden CodeQL-scanned input boundaries 2026-08-29 23:42:23 +01:00
Pulse Test 6d4ee48000 Add typed agent privilege helper 2026-08-29 22:51:58 +01:00
pulse-triage[bot] 1a48d3cbd6 Honor namespaced cgroup memory limits 2026-08-29 22:23:54 +01:00
Pulse Test a966264bb1 Contain agent command authority 2026-08-29 22:12:41 +01:00
pulse-triage[bot] 8c65d716f4 Expose honest Proxmox update evidence 2026-08-29 20:51:19 +01:00
Pulse Test 6db3cc8616 fix(alerts): correlate linked outage signals 2026-08-29 18:19:00 +01:00
Pulse Test d671f05408 fix(alerts): stabilize noisy lifecycle signals 2026-08-29 17:32:17 +01:00
Pulse Test a506cdde8b Separate notification server errors from rejections 2026-08-29 16:57:44 +01:00
Pulse Test 9c914ff6ae fix(alerts): hold SMART incidents on unknown evidence 2026-08-29 16:54:18 +01:00
pulse-triage[bot] 3de3cd320d Deliver alerts from first startup reports
Wire outbound alert callbacks before a monitor is published so immediately reconnecting agents cannot create active warnings in the constructor-to-Start gap. Add a pre-Start custom-sensor regression and bind the ordering in monitoring and agent lifecycle contracts.

Change-source: pulse-maintainer
2026-08-29 16:20:20 +01:00
pulse-triage[bot] f29e7397b1 Complete schema 14 privacy disclosure
Name every outbound alert-quality field in both operator-facing privacy documents, lock the current schema value in verification, and align the alert-manager adoption test with the telemetry contract.

Change-source: pulse-maintainer
2026-08-29 15:23:28 +01:00
pulse-triage[bot] e3c0990e15 Stabilize release validation boundaries
Authenticate global API tokens before cold tenant runtime resolution, lock the cross-org behavior into integration coverage, and refresh schema-14 telemetry browser proof.

Contract-Neutral: Restores bounded cross-org token authorization and records verification without changing the API contract

Change-source: pulse-maintainer
2026-08-29 14:54:04 +01:00
Pulse Test 0df9747bd7 Add privacy-safe alert quality telemetry 2026-08-29 14:00:28 +01:00
Pulse Test b75a5aeec2 Add release service health telemetry 2026-08-29 11:24:53 +01:00
Richard Courtman fb4291131f Harden TrueNAS SMART percentage parsing 2026-08-29 11:17:14 +01:00
pulse-triage[bot] ea3f6388f3 Keep current Anthropic budgets enforceable
Price Sonnet 5 at its current first-party rate and recognize Fable 5 and Mythos 5 so current models cannot prematurely stop Patrol or make budget enforcement unknown. Refresh the surfaced pricing review date and cover the budget behavior.

Refs #1789
2026-08-29 08:18:16 +01:00
pulse-triage[bot] f58ff1addf Keep token migrations atomic
Persist canonical token IDs, scopes, and organization bindings before admitting them to startup or watcher state. Fail configuration load rather than weakening token-only authentication when credential storage cannot be read or migrated.

Contract-Neutral: hardens credential migration failure handling without changing successful API payloads or extension contracts
2026-08-29 07:24:30 +01:00
pulse-triage[bot] 9e8cdde75c Keep first-run credential reset atomic
Commit restart-time token revocation before clearing live authentication or sessions. Restore auth environment files and remove the staged bootstrap credential when token persistence fails, preserving a usable retry path.

Contract-Neutral: hardens development reset failure handling without changing successful API payloads or extension contracts
2026-08-29 06:16:52 +01:00
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