Changes
- docs: document Incoming Request monitors as a webhook alert receiver
- PR: #3229
- fix(probe): make SSL Certificate monitors report why a certificate is bad
- PR: #3233
- refactor(dashboard): remove duplicate per-entity Ask AI buttons
- PR: #3232
- docs: name the monitor criteria fields the way the UI labels them
- PR: #3231
- Add an option to keep a status page out of search engine results
- PR: #3226
- fix(security): stop OAuth secrets and login credentials reaching log sinks
- PR: #3228
- fix(ai-chat): require project membership on /ai-chat/* routes (GHSA-hm7m-9qjj-xj5x)
- PR: #3227
- docs(i18n): port the Incoming Request alert-receiver docs to all locales
- PR: #3237
- docs(monitor): list the criteria options the dropdowns actually offer
- PR: #3238
- perf: reduce CPU/memory hot spots in DB metadata layer, worker jobs, and request path
- PR: #3239
- Bound each monitor check and guard probe worker slots against pile-up
- PR: #3240
- fix(probe): honour configured retry count and timeout on DNS, DNSSEC, Domain, SNMP and external status page steps
- PR: #3243
- fix: add missing @EnableDocumentation() to StatusPageOidc model
- PR: #3235
- fix(dashboard): make the monitor type picker searchable
- PR: #3241
- fix(status-page): pin the footer, replace naked loaders with skeletons
- PR: #3242
- fix(monitor): evaluate a probe result against the step it actually ran
- PR: #3244
- fix(network-devices): reachability is the last poll's outcome, not its age
- PR: #3246
- fix(network-devices): staleness annotates the verdict, it does not replace it
- PR: #3248
- perf: reduce CPU/memory hot spots in request auth, serialization, mail, telemetry ingest, and worker jobs (phase 2)
- PR: #3247
- fix(tests): repair and harden the StatusPage subscriber wiring suite broken by #3242
- PR: #3250
- test(status-page): fix subscribe-page wiring test broken by #3242's loading-state polish
- PR: #3249
- fix(telemetry): filter logs and traces by resource entity key, not primaryEntityId
- PR: #3245