Pulse/internal
rcourtman 2f967406df perf(ai): gate and batch Patrol's per-alert auto-resolve model calls
Production telemetry (30d) shows Patrol averaging ~9.4 billed AI calls
per run while only ~1-2 come from the analysis passes. The remainder is
the alert auto-resolve review: one QuickAnalysis call per active alert
(>=10min old) on every run, re-asking the model about the same standing
alert every interval even when the trigger condition demonstrably still
holds.

Two structural changes, both resolution-neutral:

- Still-firing gate: skip the model review for alerts whose current
  snapshot still shows the trigger condition (metric at/above threshold,
  offline resource still offline). A correct review could only answer
  KEEP, so the question is not worth a billed call. The gate never
  resolves anything locally - uncertain cases (unknown types, missing
  resources, unmapped metrics) still go to the model, which retains
  sole authority over resolution.
- Batched review: the remaining candidates are reviewed in one model
  call per 20 alerts (numbered verdict lines, unparseable -> KEEP,
  bare-RESOLVE fallback for single-alert batches) instead of one call
  per alert.

Steady-state runs with standing alerts drop from N review calls to 0;
runs where conditions may have cleared pay ceil(K/20) instead of K.
QuickAnalysisRequest gains a TargetType tag (recorded on the usage
event) so cost telemetry can decompose alert-review spend from the
main patrol pass going forward. Contract updated in-commit
(ai-runtime: model-owned resolve direction, cost-gated keep direction,
batched review, fail-safe parsing, alert_autoresolve usage tagging).
2026-07-17 23:23:38 +01:00
..
actionlifecycle Add durable agent operation receipts 2026-07-12 04:16:22 +01:00
actionplanner Hash relationship identity, not observation stamps, into plan resource versions 2026-07-14 12:22:02 +01:00
agentcapabilities Add branch-coverage tests for provider tool-artifact leak detectors 2026-07-15 15:11:02 +01:00
agentcontext Add governed storage pressure cleanup 2026-07-11 10:11:35 +01:00
agentexec refactor(agentexec): dedupe host operation dispatch and receipt-identity validation 2026-07-17 17:36:17 +01:00
agenttls Modernize Unified Agent lifecycle and platform support 2026-07-09 23:20:35 +01:00
agentupdate Make native agent tests Windows-safe 2026-07-09 23:51:50 +01:00
ai perf(ai): gate and batch Patrol's per-alert auto-resolve model calls 2026-07-17 23:23:38 +01:00
alerts fix(alerts): clear canonical docker alerts when disable-all toggles are set 2026-07-17 12:03:00 +01:00
api feat(ai): surface the Assistant at first AI setup and fix blessed-path readiness 2026-07-17 23:20:44 +01:00
bootstrap feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
cloudcp Clarify commercial offer boundaries 2026-07-14 17:18:14 +01:00
config refactor(config): dedupe the activity-history record cycle behind a generic helper 2026-07-17 17:31:35 +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 feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
dockeragent Negotiate registry pull tokens from WWW-Authenticate challenges 2026-07-16 19:50:04 +01:00
hostagent refactor(hostagent): dedupe the host APT operation handlers behind shared begin/complete helpers 2026-07-17 17:34:01 +01:00
hosted Remove 198 unreachable Go functions 2026-06-03 12:29:37 +01:00
hostmetrics Fix patch-release follow-up regressions 2026-07-04 18:37:59 +01:00
kubernetesagent Modernize Unified Agent lifecycle and platform support 2026-07-09 23:20:35 +01:00
license Align Pro feature catalog names with the new Patrol vocabulary 2026-07-11 09:33:47 +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 Restore release-blocking backend contracts 2026-07-13 21:51:33 +01:00
mockmode Simulate Patrol end to end in demo/mock mode 2026-07-11 11:25:52 +01:00
mockmodel Remove 198 unreachable Go functions 2026-06-03 12:29:37 +01:00
mockruntime Gate release mock fixtures behind demo entitlement 2026-04-10 12:33:57 +01:00
models Add deep-copy independence and qualification render coverage tests 2026-07-16 22:56:24 +01:00
monitoring fix(mock): evaluate docker host alerts in mock mode 2026-07-17 16:09:06 +01:00
mutationregistry Restore one-click Docker container updates through the typed action plane 2026-07-14 12:19:04 +01:00
notifications Show timezone on alert email start times 2026-07-16 09:29:01 +01:00
operationreceipt style(operationreceipt): goimports the sqlite blank import 2026-07-17 17:24:57 +01:00
platformsupport Addresses #1555 2026-07-11 18:25:17 +01:00
proxmoxidentity Fix PBS backup identity matching 2026-06-03 11:43:20 +01:00
recovery Reconcile recovery points against source enumerations 2026-07-16 09:38:53 +01:00
relay Dispatch relay proxy requests to the local API in-process 2026-07-14 09:26:41 +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 Enforce installation-scoped license invalidation 2026-07-14 16:18:21 +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 Quiesce discovery backfills during shutdown 2026-07-09 23:03:21 +01:00
ssh/knownhosts feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
storagehealth feat(alerts): clean alert messages + highlight all platform node tables 2026-06-27 14:34:33 +01:00
system Remove 198 unreachable Go functions 2026-06-03 12:29:37 +01:00
telemetry fix(telemetry): suppress outbound pings while mock mode is enabled 2026-07-17 18:19:18 +01:00
testutil Stabilize rc1 mock mode and metrics history 2026-04-11 16:47:37 +01:00
truenas Key TrueNAS systems by configured connection, not reported hostname 2026-07-14 11:51:55 +01:00
unifiedresources test(unifiedresources): drop the retired run-command validator pin 2026-07-17 17:00:12 +01:00
updates fix(updates): select releases by highest version, not GitHub list order 2026-07-17 23:21:49 +01:00
updatesignature Fix v6 demo release signing key deployment 2026-05-05 21:40:14 +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 Classify legacy-CIS-only vCenters as unsupported version 2026-07-16 19:52:14 +01:00
websocket Harden remaining CodeQL security boundaries 2026-07-09 19:46:40 +01:00