Pulse/internal
courtmanr@gmail.com 84dba861b5 Fix PBS backup attribution for VMIDs shared across clusters
v6.1.0's identity rework (eab73d245) made the VMID-only fallback refuse
to fire whenever a typed VMID exists on more than one PVE location.
Root-namespace snapshots with no matching comment then score zero for
every guest, so on setups with two clusters and overlapping VMIDs most
guests showed no backup at all - while PVE itself listed the backups
fine, because monitoring discards pbs-type storage contents entirely
whenever a direct PBS connection is configured.

Attribution is now evidence-driven instead of dropped:

Storage backup polling keeps a per-connection record of every snapshot
its own pbs-type storage listed (type, VMID, backup time) even though
the raw entries stay out of the PVE backup list. Which cluster listed a
snapshot is deterministic attribution, and it survives fully mirrored
clusters that share one datastore and token. The evidence is
monitoring-internal, cleared on instance retirement or when the storage
poll stops seeing pbs content, and never serialized into state payloads
or snapshots.

Guest backup-time sync and the recovery-point mapper additionally learn
each PBS submission source's cluster (owner token, datastore, PBS
instance - strongest first, scoped to the PBS instance) from the poll's
attributable snapshots, then resolve collision VMIDs whose snapshots
carry no evidence of their own. A source seen from several clusters is
not a discriminator, an unfamiliar component stops resolution rather
than deferring to weaker ones, and a snapshot decisively attributed to
another cluster is kept away from this one. Unattributable snapshots
still drop rather than guess.

Backup-age alert attribution no longer suffix-matches the subject ref's
connection label against guest locations. The label there is a PVE or
PBS instance name, not a PBS namespace, and loose matching could
cross-attribute clusters sharing a VMID; it now requires exact
normalized equality.

Reported in #1639 (two PVE clusters with PBS 4.0/4.1, VM 173 shown 974
days overdue despite valid verified backups).

Fixes #1639

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 11:24:01 +01:00
..
actionlifecycle Fix backend release gate failures 2026-07-23 14:03:44 +01:00
actionplanner Cover the alert read-model, guest identity and action-planner validators 2026-07-25 06:34:48 +01:00
agentcapabilities Refuse dispatch when action readiness is lost 2026-07-20 21:44:59 +01:00
agentcontext Add Go branch-coverage tests for pure helpers across six packages 2026-07-19 15:11:02 +01:00
agentexec Fix agent command channel admission 2026-07-24 13:00:03 +01:00
agenttarget Add report-only Unified Agent observer destinations 2026-07-19 15:30:34 +01:00
agenttls Modernize Unified Agent lifecycle and platform support 2026-07-09 23:20:35 +01:00
agentupdate Prepare v6.1.2 stable patch release 2026-07-26 20:38:42 +01:00
ai Keep the Patrol readiness check alive through proxies and classify cancellation honestly 2026-07-28 11:15:46 +01:00
alerts Fix PBS backup attribution for VMIDs shared across clusters 2026-07-28 11:24:01 +01:00
api Fix Proxmox registration for host-token installs 2026-07-28 11:21:14 +01:00
availabilityprobe Extract availability probe execution into a shared package 2026-07-27 11:13:04 +01:00
bootstrap
cloudcp Bump postcss to 8.5.23 in both frontend lockfiles 2026-07-27 09:46:28 +01:00
config Remove dead autoUpdateCheckInterval and autoUpdateTime settings 2026-07-28 11:13:37 +01:00
crypto Harden secure local key file handling 2026-04-22 05:13:01 +01:00
deploy Remove monitored-system volume caps 2026-05-05 12:59:59 +01:00
discovery
dockeragent Fix Docker agent test timer race 2026-07-26 21:32:35 +01:00
fleethealth Add Agent Doctor fleet diagnostics workflow 2026-07-20 19:53:34 +01:00
hostagent Fix Proxmox registration for host-token installs 2026-07-28 11:21:14 +01:00
hosted Remove 198 unreachable Go functions 2026-06-03 12:29:37 +01:00
hostmetrics Clarify disk exclusion behavior 2026-07-24 09:20:26 +01:00
kubernetesagent Cover agent policy, alias normalization and agent report helpers 2026-07-23 06:44:33 +01:00
license Register the external_probe Pro entitlement 2026-07-27 11:13:04 +01:00
logging Harden native Windows agent lifecycle 2026-07-10 19:16:23 +01:00
maintenancesentinel Record maintenance evidence in resource timelines 2026-05-13 14:19:59 +01:00
metrics Coordinate incident recorder async persistence 2026-07-04 13:13:41 +01:00
mock Align the service availability fixture test with the check-row contract 2026-07-24 23:31:50 +01:00
mockmode Simulate Patrol end to end in demo/mock mode 2026-07-11 11:25:52 +01:00
mockmodel Add Go branch-coverage tests for canonical trust and recovery helpers 2026-07-19 15:11:01 +01:00
mockruntime Add Go branch-coverage tests for unified-resource pure helpers and platform fixtures 2026-07-20 10:49:11 +01:00
models Fix PBS backup attribution for VMIDs shared across clusters 2026-07-28 11:24:01 +01:00
monitoring Fix PBS backup attribution for VMIDs shared across clusters 2026-07-28 11:24:01 +01:00
mutationregistry Restore one-click Docker container updates through the typed action plane 2026-07-14 12:19:04 +01:00
notifications Cover the alert-spec matchers and the audit, email and update guards 2026-07-25 02:17:36 +01:00
operationaltrust Harden Operational Trust rollout contracts 2026-07-19 15:11:02 +01:00
operationreceipt style(operationreceipt): goimports the sqlite blank import 2026-07-17 17:24:57 +01:00
platformsupport Fix agent update triage and durable action recovery 2026-07-23 11:19:50 +01:00
proxmoxidentity Fix PBS backup attribution for VMIDs shared across clusters 2026-07-28 11:24:01 +01:00
recovery Fix PBS backup attribution for VMIDs shared across clusters 2026-07-28 11:24:01 +01:00
relay Enforce Pulse Mobile compatibility from the core contract 2026-07-22 13:41:09 +01:00
remoteconfig Add an explicit operator override for plaintext HTTP to non-local Pulse hosts 2026-07-14 16:42:02 +01:00
repoctl Fix Proxmox registration for host-token installs 2026-07-28 11:21:14 +01:00
securityutil Add Go branch-coverage tests for pure config and helper packages 2026-07-16 10:19:51 +01:00
sensors Remove 198 unreachable Go functions 2026-06-03 12:29:37 +01:00
servicediscovery Cover the missing arms of the SSRF, clone and classifier guards 2026-07-25 00:39:15 +01:00
ssh/knownhosts
storagehealth Cover the missing arms of the SSRF, clone and classifier guards 2026-07-25 00:39:15 +01:00
system Remove 198 unreachable Go functions 2026-06-03 12:29:37 +01:00
telemetry Document external probes and count adoption in telemetry 2026-07-27 11:13:04 +01:00
testutil Stabilize rc1 mock mode and metrics history 2026-04-11 16:47:37 +01:00
truenas Backfill monitoring contract for the TrueNAS handshake-redirect upgrade 2026-07-27 13:16:52 +01:00
unifiedresources Remove dead cache-aware RRD fields from the guest RRD path 2026-07-27 18:36:50 +01:00
updates Cover the Unraid merge, setup classifier and retry helpers left untested 2026-07-22 08:06:56 +01:00
updatesignature Add Go branch-coverage tests for canonical trust and recovery helpers 2026-07-19 15:11:01 +01:00
utils Clear all errcheck and gofmt violations so make lint gates on real findings 2026-06-09 21:42:21 +01:00
vmware Fix VMware connection test degradation handling 2026-07-23 22:06:57 +01:00
websocket Document websocket lifecycle synchronization 2026-07-26 22:02:22 +01:00