233 changes since 14.0.105: 80 new or improved features, 52 bug fixes, 1 performance improvement, 7 documentation updates and 93 maintenance changes. The busiest areas: Audit Logs, Incidents and Translations.
✨ New and improved
- Audit Logs
- Every change people make is recorded, workflow saves and Queues included (#6245)
- Every resource has an Audit Logs page, network devices, forms, cloud, exceptions and data included (#6275)
- The audit log export can send what changed in a workflow's steps and in JSON, as record version 2 (#6292)
- Exceptions, runbook runs, templates and custom domains are named in the project-wide audit log, never with a secret (#6311)
- Send the audit log export to syslog over UDP (#6392) (#6405)
- Rum
- User Flows filtered to one user shows the map and its numbers first, then their journeys (#6267)
- An application nobody is using shows No recent traffic in grey, not a red Disconnected (#6268)
- Empty Exceptions and Logs say why, with a setup check per signal (#6372)
- Define frustration signals per RUM application (#6443) (#6505)
- Product analytics - Users, Sessions and person pages (#6539)
- Slo
- Add a Slow leak burn rate rule (10% of the budget over 3 days) to every new SLO, and Add recommended rules for existing SLOs (#6309)
- Error budget policies - tiers of budget left, what the team does in each, and alerts or incidents when an SLO enters one (#6332)
- Add the recommended burn rate rules to many SLOs at once from the SLO list (#6357)
- A deploy gate - error budget policy tiers can freeze deployments, and CI/CD checks the SLO's deploymentsAllowed before it releases (#6376)
- Telemetry
- Resize the filters sidebar on Logs, Metrics, Traces and Exceptions by dragging its edge (#6204)
- See how much telemetry each project and service sends on every install, with billing on or off (#6354)
- Daily ingestion budgets and per-second rate limits per project and per ingestion key (#6385)
- Scrub rules mask the text inside list and nested values on spans and logs (#6397) (#6507)
- Ask AI
- A workflow change written from an older read names what it would undo, before you approve it (#6312)
- A code commit or pull request written from an older read of a file names that file before you approve it (#6329)
- A code commit or pull request of a file Ask AI read only part of says so before you approve it (#6363)
- Incidents
- Investigate metrics right on an incident or alert: ranges around its start, metrics you can change, its moments on the charts (#6248)
- An incident owner rule's own page is read-only for members outside the teams that own it (#6299)
- Logs, traces and exceptions cards pick a time range around the incident, and the Root Cause page investigates its metrics (#6303)
- Monitors
- A metric monitor's overview charts the metrics it checks and the values it alerts at, and so do its incidents' and alerts' charts (#6263)
- A Metrics monitor limited to some services charts those services only (#6279)
- Monitoring off resolves what auto-resolve would have, leaves Not Operational, and turns for a whole group (#6400, #6401) (#6416)
- Network
- On-Call
- Queues
- Workspace
- A public note sent from Slack, Teams or Mattermost that waits for approval says so, and who it waits for (#6288)
- Approvers can approve or reject a waiting public note from Slack, Microsoft Teams and Mattermost (#6318)
- Once a public note is decided, every approver's Slack, Microsoft Teams and Mattermost message says what happened (#6352)
- AI
- Cloud Streaming
- Episodes
- Status Pages
- Workflows
- AI / LLM: A setup check that says why Conversations and Calls are empty, counters counted right, Azure OpenAI and OpenAI calls recognized (#6340)
- Alerts: An alert's Root Cause page shows the metrics behind it, as an incident's does (#6319)
- Cloud: ACM certificate expiry and RDS connections recommended monitors, and the Cloud page's recommended monitors (#6224)
- Cloud AI agents: A pull request to the code that declares a resource, every account of an AWS Organization, App Platforms in the catalog (#6186)
- Cloud costs: AWS costs per resource, commitment coverage and use, costs by environment, app and tag, and unusual days on the chart (#6197)
- Cloud, Security: #6149 follow-ups - a case's Story and Impact in every language, health descriptions in the reader's words, right-to-left labels and headings, the Cloud Account chip in the docs (#6220)
- Code: OneUptime AI reads the code of Git repositories on Azure DevOps (#6213)
- Code tasks: Live status on an insight's Fix task, automatic retries, and a better Tasks list (#6439, #6442) (#6468)
- Data Observability: An Overview that says what is wrong now, who owns it, and what to do next (#6537)
- Email: Send email through Amazon SES, SendGrid, Mailgun, Postmark or Resend (#6176)
- LLM: Connect Cursor with a team Admin API key - usage, cost and active members by person (#6391)
- Mobile App: Observer pages get I've seen it under the push and FYI (observer) in the app (#6255)
- Network Traffic: Open on Meraki when it reports, list every network, link a router to its Meraki appliance (#5762) (#6335)
- Onboarding: Every product explains what it does, on its first page and behind How it works (#6527)
- Public Notes: When the approval steps or a team's members change, waiting public notes ask their new approvers, once each (#6366)
- RUM setup check: Say when telemetry was refused, from refusal counts per ingestion key (#6378) (#6423)
- Runners: The code agent reads, edits and searches any file of a real repository (#6441) (#6512)
- Streamed Azure metrics: The reads keep what a diagnostic setting cannot send, and a namespace counts each message once (#6409) (#6469)
- Translations: The translation backlog, more (#6028): first-met areas in every language, help lines read as written, phones and hints (#6215)
- Cloud follow-ups (#5300), part 2: recommended monitors for cloud resources, accounts and apps; maintenance that holds cloud resources (#6150)
- Tables, more: rows fitted from the first frame, German and Russian lists that fit, default columns per project, plainer lock notes (#6025) (#6168)
- Status page subscribers in their own language, next: the uptime report, custom template values in the page's language, and a Language field on the Dashboard (#6173)
- Cloud agent follow-ups (#5715): fix buttons only for people who may act, Impact on the folded investigation, chips that keep their punctuation, AI Insights in every language with an offline suite (#6181)
- Cloud AI agent on Azure: an identity that reads and a write identity for changes, and what running the agent elsewhere needs on each cloud (#6190)
- Merge release 14.0.105's version bump into main (#6205)
- Evaluation details on incidents and alerts: what the check found, redacted, with a switch to keep no response content (#6339)
- AI conversations and call details read prompts and answers sent as GenAI log events (#6393)
- Monitor logs and root causes use the same redaction as evaluation details (#6341) (#6404)
- AI runs have no artificial limits by default; limits per run are opt-in (#6440) (#6463)
- AI runs that fail say why and offer Try again; retries wait and back off; the activity list gets times, attempts and folded repeats (#6437, #6438) (#6464)
- Arabic, part 1: right-to-left Arabic across the product, fully translated outside the Dashboard (#6465)
🐛 Bug fixes
- Dashboards
- A public dashboard's chart saved with a service filter charts only those services (#6296)
- Widgets stored as JSON text show their data on a public dashboard (#6314)
- List and SLO widgets show their data on a public dashboard whose variables or settings are stored in another shape (#6326)
- A public dashboard never sends a Data Source widget's query to visitors, however deep the widget is stored (#6337)
- A dashboard whose widget ids are stored as ObjectIDs shows its SLO widget and filters its incident and alert lists, signed in and public (#6347)
- A public dashboard sends visitors only what each widget and variable draws: never a log or trace widget's filters, or a query variable's query (#6359)
- Translations
- The Admin's Chinese Promo Code is worded as the Dashboard's, without the space (#6230)
- The "how do I connect this?" card on resource Overviews reads in all 16 languages (#6367)
- The queue topology's and a device's Security Events links carry no English of their own (9924fa6)
- A Cloud Resource's chart rows say "total of series" and "average of series" in Arabic (1988af2)
- A cloud account's and a cloud resource's Audit Logs pages read in every language (fbc5e35)
- Cloud's pages read in Arabic (c3fcb2e)
- Audit Logs
- Merging exceptions, webhook and badge link resets, stream keys and capture stops are recorded in the audit log (#6282)
- Approving, skipping and cancelling runbook steps, labels a rule adds, SSO team joins and calendar link resets are recorded, by the person who did them (#6298)
- Owner and privacy rules' Run now, a call policy's phone numbers and AI agent resets are recorded as the person's, not System's (#6322)
- Run now on an auto import, status page or SLO monitor rule is recorded as the person who ran it, not System (#6351)
- A phone number, an email address or a URL reads as the value in an entry, the changes dialog and the export, not as JSON (#6360)
- Status Pages
- A public note edited as it is approved is never published unapproved, and approval reads in every language (#6281)
- Edit resource opens on the monitor group a resource shows (#6556)
- Public note approval steps are put in order within their own event type's list (98470a7)
- Public note approval steps are kept in order by where you drag them, with no Step number column (009369f)
- Code
- Monitors
- An infrastructure monitor's edit form, incidents and alerts chart its metrics for the resource it watches, not every one (#6277)
- A namespace's Metrics monitors read its totals, and new ones start from them (#6460) (#6485)
- An Incoming Request monitor's latest request is shown as its logs keep it (#6402) (#6536)
- AI
- Ask AI
- Incidents
- Rtl
- Workflows
- API: The API reference no longer lists User Session, whose route never existed, and CI fails when a model's API route is not mounted (#6262)
- Cloud: A Service Bus or Event Hubs namespace's Metrics tab reads its queues' total, not the average queue (#6410) (#6456)
- Exceptions: An exception both copies of a merged host had keeps both copies' counts, seen times and triage (#6234)
- Logs: A record without a time of its own is stored at its observed time, and the AI windows narrow to a minute (#6395) (#6467)
- Network: Hiding and showing devices on the map in bulk is recorded in the audit log, by whoever did it (f1255cf)
- Queues: The topology's queue table lets you size its columns, and its page buttons look locked at either end (753b3d6)
- Security: The log scan no longer reads its own query back as an attack (#6419) (#6454)
- Serverless, Services: An idle function or service says No recent invocations or No recent data, in grey, instead of Disconnected (#6307)
- Slo: The feed filter names the deploy gate's two events in every language (668f6b9)
- Telemetry: The ingestion budget tables let you size their columns, and show their wide-screen columns under a foreign .hidden rule (97fbc3e)
- Terraform: Read JSON array columns back as the array, not null (#6169)
- UI: Fourteen settings descriptions are two lines again, in every language (81ffe74)
⚡ Performance
- Public Dashboards: A public dashboard downloads 242 KiB less before it draws, and a status page 8 KiB less - the investigation drawer and the people picker load only where they are opened (c69e9df)
📚 Documentation
- Incidents
- Code: How OneUptime signs in to a Git server, and what AI reads in one (#6199)
- Episodes: Wait for more alerts/incidents on alerts/episodes and incidents/settings in every translation (#6214)
- Public Notes: How public note approval works, who approves, and what a waiting note does, in every docs language (#6293)
- Upgrading: The Russian, Chinese and Hindi guides name Approval as their Dashboard draws it now (3ff8e53)
- Workspace: Change State on the translated Slack and Microsoft Teams pages links the order rule as Incident Settings does (#6306)
🧰 Maintenance (93)
- AI
- The real-stack AI Features suite expects Limits per run under More settings (#6440) (77512e6)
- A new project starts with no limits per run, on a server with billing and without (bf8dd4d)
- The database and cluster suites know when an AI agent was last reset (a38fc12)
- The AI rules' retired words no longer include "Approval", which public notes use now (bccbb0d)
- The run summary's times are read on the test's own clock, today and on a later day (a1266ff)
- The release suite's daily AI limits test opens the Daily limits card's Edit, beside Limits per run's (2e2e9b5)
- Ebpf E2E
- Load each image into KinD as this machine's platform alone, so Docker 29's containerd image store loads (#6182)
- A workload that is not Ready leaves what Kubernetes, the runtime and the kernel saw (#6185)
- not_ready keeps the kernel lines from a container's start, and each thread's state and signals (#6221)
- Postgres starts as its own user, so no Go helper drops privileges under ubuntu-26.04's AppArmor (#6240)
- The e2e's own workloads run unconfined, as ubuntu-26.04's AppArmor denies every signal inside a k3s container (#6418)
- Security
- The Hunts list is the project's Security Events toolbar's, not a device's (f30b6bf)
- The Security fixtures answer the ingestion budget read the Security Events layout makes (1e164c3)
- The side menu's counts are expected in the reader's digits (aa4ec04)
- Every language the Dashboard speaks has its levels measured, Arabic too (bb06f5e)
- The fixture answers who owns each rule on the Slack page (d78fad1)
- Status Pages
- The published images suite reads each note with its own approval switch (3094520)
- The note fixtures answer who approves a public note - nobody, as in a project that has not turned approval on (1201996)
- The note approval tests type-check: jest-mock's spy and mock types, the guard's rows as tuples (04ae305)
- The file owner backfill knows the markdown columns added after it (e2c4e3b)
- The bar color rules suite clones User, which removing a rule now reads for the audit log (f75543e)
- Telemetry
- The filters sidebar's tests type their mocks as jest-mock's (591be24)
- The Redis counter guard lists the ingestion budget counter (76446e5)
- The usage overview's reader is a jest-mock Mock of its own signature (3aa6f19)
- The Admin Dashboard's ingestion budget forms are listed as one question per signal (d752da2)
- The ChartTimeZoom fixture answers the explorers' ingestion budget read, as a server with no budget does (71df951)
- Audit Logs
- Audit log export email tests pass in every time zone, and CI checks the "losing entries" email where clocks change (#6381)
- The export form's Record version is checked where ee/ is checked out (dae052c)
- The DatabaseService suites expect what the audit log reads of every audited model (9a0a3d4)
- Read the models' columns through a Common helper, so ee type-checks without typeorm (65ea646)
- Release
- RELEASING.md - the release loop, from a release branch to main again (f7d6647)
- PrioritizeReleaseRuns keeps the release pull request's CodeQL runs (4620519)
- The release branch goes back into main as soon as its pull request merges (18a52a8)
- Merge the release branch into main after every push, and cut the next release only when main has something new (b8244cf)
- Monitors
- A monitor's Disable asks the monitor's question as it reads since monitoring off resolves what auto-resolve would (5eedb77)
- Turning monitoring off is checked on a server without billing (00d0f0e)
- The state timeline purge suite clones the records and users a delete now reads for the audit log (96f7847)
- Rum
- Ask AI
- CI
- Docker
- Incidents
- Permissions
- Slo
- Workflows
- Workspace
- App Platforms: A rollback's marks on an app's charts are found as marks, not buttons (f2ca408)
- Billing: The billing roles' read list names the limits on each AI run (0a3aec8)
- Chat: The huge text suite reads a Teams card's note where Teams draws it, last (9ad80b6)
- Cluster Key: The cluster key suite sends every request on a connection of its own, so none lands on one the server is closing (d763273)
- Dashboards: A Value widget's Persian dates are checked as Persian writes a day - no leading zero, and its own comma before the time (c6306e5)
- Databases: The Postgres suite clones Project and User, which a delete now reads for the audit log (1674c24)
- Docs: RulesSmtpFormsDocsFacts reads the OAuth scope description's new labels (7e82048)
- E2E: An account's Changes reads its times as rows or as cards (cf91d98)
- Email: Custom SMTP Configs says what a config sends through, an SMTP server or a provider (5f68642)
- Enterprise: Enterprise Edition tests get their 60-second timeout, not Jest's default 5 seconds (#6571)
- Forms: The on-call schedule, owner and security case assign forms are tested with their people picker loaded, as after the first form that has one (1c9fc2c)
- Huntress: The Postgres suite clones WorkflowVersion, which every workflow create now writes (521abdb)
- Kubernetes: Reset the AI agent as an admin's route does, with their props (d048a3b)
- LLM Providers: More fields names the Response Timeout too, its four names wrapped whole under its title in two rows at most (d5818c8)
- Network: The bulk action concurrency ledger writes down Hide from map and Add recommended rules (d1c69b8)
- Notifications: The SMS words guard finds the SMS branch by the setting it checks (46d0226)
- Offline UI: The OpenStack pages run in thirds, on their measured minutes, so no Dashboard Offline UI group runs past its 35 minutes (316b926)
- On-Call: The model and permission guards know the rules teams own (eaf1518)
- Onboarding: The release suite's empty monitors tile test presses the explanation's Create Monitor, which the empty table no longer repeats (5b5d31b)
- Openstack: The control plane rig starts RabbitMQ nodes one at a time, each once the one before it runs (#6174)
- Ops: The Helm upgrade translations test counts Arabic among the dashboard's languages (#6500)
- Owners On Create: The fixture answers who owns each incident owner rule (9992567)
- Postgres: The four opt-in Postgres suites no workflow ran run in Postgres Schema Drift (33b51f3)
- Profiles: An empty Profiler's setup guide opens from Send your first profiles, its one setup button (25f6062)
- Public Dashboards: The theme suite reads text contrast once the page's colours have stopped fading in (2bf266c)
- Queues: The topology tests type-check: the pages' props, a queue with no destination, the refused starts (8241327)
- Reminders: The reminder rule suite clones Project and User, which a delete now reads for the audit log (d9bc6e3)
- Rum, Serverless: An app or function without data leaves its fields out, and the AI tool's columns are read as typed (92bccde)
- Syslog: The speed checks time a whole message as the fastest of three runs, as they time each rule's pattern (c1cc872)
- Terraform: The import test's monitor answers Keep Response Content, as OneUptime does (2bce9d7)
- Topology: The service map's Some errors and High error rate are read as Dashboard labels (0de8354)
- Translations: The Dashboard's language switch is pinned where every switch now goes through it (8197e41)
- UI: The investigation time limit and the SLO's recommended tiers dialog are checked in their two-line wording (2a5c617)
- Website: The Home fixture's monitors have monitoring on, as every monitor's column says (f72800d)
- npm audit fix (#6243)
- SLO specs read page fit and boxes through the helpers; Home reads a queue tile's line from the tile (#6453)
- npm audit fix (#6538)
⬆️ Upgrade
Back up first, then follow the upgrade guide. On Docker Compose, run npm run update on the release branch. On Kubernetes, helm upgrade to version 14.0.106 of the chart.
Full changelog: 14.0.105...14.0.106
Contributors: @nawazdhandala, @simlarsen