Version 9.1.251 (7 September 2026) Ruleset Management Resolve the resource exhaustion error when error logs exceed 1000 (#154679) Problem Resources are exhausted when error logs exceed 1000; the current 5000 limit is unnecessary for on-screen analysis. Solution Reduce the returned error logs to the last 500 logs Session does not expire (#152563) Problem User session never expires, and it is difficult to know when it will expire. Solution This solution introduces significant improvements to session management, token lifetime configuration, and user experience around session expiry. The changes ensure that session expiry is consistently enforced and communicated across the backend and frontend, and that refresh token lifetimes are configurable and respected throughout the application stack. Session expiry has been added to the footer of the profile drop-down. The warning message shows from 30min before the session expires every 5min and then again 60s before the session expires to warn the user of the session expiry. People Management Fix inconsistent subordinate count (#153718) Problem Subordinate count displays inconsistently Solution This was due to the query joining to the incorrect column. Ensures that it joins to the managerId column, correcting the count  Ensure the user, when not authorised to edit appointments, does not receive a 405 screen (#154695) Problem When a user is not allowed to edit appointment history based on the people group access, the user receives a 405 error rather than getting notified of the not authorised exception. Solution This change updates the way unauthorised access is handled in several actions within the PeopleController. Instead of returning a generic Unauthorised () response, the controller now provides user feedback via a localised error message and redirects the user back to the appropriate edit page or tab. This improves the user experience by making authorisation failures clearer and guiding users back to relevant pages. Fix squashed tooltip on People Management Data sources tooltip (#154698) Problem With numerous data sources linked to the category and the tooltip displayed, the popover content is squashed and the text overlaps.  Solution Correct styling on the popover to ensure that tooltip text does not overlap and the popover size is updated correctly.  People with birthdays not available on the People dashboard. Unable to edit a user's profile when a unique ID number is active (#154605) Problem Birthday saved with a time component. Filter criteria on the People Management dashboard incorrectly filter on birthday  When a unique ID number is active, saving on the profile screen incorrectly validates for the user itself  Solution This change focuses on improving date handling and filtering logic across several user query endpoints, as well as ensuring consistent date-only comparisons in both application code and SQL queries. Additionally, it introduces a minor scheduling fix for bi-weekly notifications. Add Allow HID for iframe to allow signature pad connection (#154099) Problem Signature pad does not want to connect when trying to sign an assessment document from within V9  Solution Add Allow HID for iframe to allow signature pad connection Improve large data source tooltip layout and positioning (#154378) Problem Large data source tooltips displayed all items in a single column, causing the popover to exceed the screen and briefly overflow while positioning. Solution Display large tooltips across a maximum of four columns, dynamically increasing the column size for larger lists and constraining the popover to the viewport. Adding breadcrumb when redirecting to update people group view (#153690) Problem When opening one of the Event Scheduling People Groups and clicking Back or Cancel, the system navigates the user to Custom People Groups instead of returning to Event Scheduling People Groups. Solution Added the appropriate breadcrumb action so that the Back button in the ribbon redirects the user to the correct tab on the People Groups page. Permanent deletion & merging of user profiles (#111732) New functionality features: Create additional permissions to delete and merge profiles Delete a person's profile from the Grid View Merge a person's profile from the Grid View Add a Recycle Bin to the filters to see the deleted profiles Have a summary of the merge on a person's profile Performance Management Add Dapper type handler for Section enum (#154345) Problem A bunch of PM queries are failing because Dapper cannot map the custom "Section" enum automatically Solution Add a Dapper type handler globally for PM so that it can map the enum properly in queries  Resolve DataTables error on Review Setup page (#154694) Problem DataTables warning is displayed when loading the Review Setup admin page, and template information is not displayed. Solution Resolve issue on review setup templates query handler breaks due to enum conversion.  Updating global modal margin (#154465) Problem Navbar was set to be in front of the modal overlay. This causes the modal header to be rendered behind the navbar.  Solution Update modal margin so that the modal is always rendered below the navbar. Resolve issue where the Single Approval Final Rating button text is not displaying correctly (#154484) Problem On single participation (Manager only) review setups, when the manager has completed ratings, the button still only displays Rate for the Final Rating phase. It should reflect Final Rating, the same as with Dual Participation Solution Correct the Rate button label to display Final Rating for Single Participation Resolve edge case scenario where unapproved score differs from approved score due to decimal precision (#154439) Problem When the unapproved score is calculated, the score can work out to more than 4 decimals in precision depending on the score and weight distribution. This leads to a 0.01 difference in some instances displayed on the front end, due to the 4-decimal rounding not being applied until the rating is saved. (Enforced by DB precision). Solution When calculating the score for the Contract Period, ensure that 4-decimal rounding is always applied. Add a PM historical graph (#148639) New functionality features: Styling of the Review Year button  Add a new button to access the historical scores for myself Add a new button to access the historical scores on the Overall Summary of the Managers Dashboard  Setting when Dual Participation is inactive to have only Final Rating (#148703) New functionality features: When dual participation is not selected, have an option to select whether only the Final Rating should be completed Include this rule on the Agreement Import Data Warehouse Moved SystemAlerts to the Communication category within ReportBuilder (#154598) Problem The SystemAlert data sources were in the incorrect Category within the ReportBuilder  Solution Moved SystemAlerts to the Communication category Merged ES with TS within stored procedure C_03798_99999_reportCustomUserUsage_2026 (#152566) Problem The count for Event Scheduling needs to be included within Training Scheduling  Solution Merged the Event Scheduling count with Training Scheduling within the stored procedure C_03798_99999_reportCustomUserUsage_2026  Updated the jpAppointments step to use Delete/Insert instead of Update/Insert (#142737) Problem The jpAppointments Update step did not update existing fields as expected Solution Updated the jpAppointments step to use Delete/Insert instead of Update/Insert AutoDoc Add SendReminders to ListUserDocumentsPreviewQueryHandler, fixing the query (#154703) Problem SendReminders missing from query, causing page load to break Solution Add SendReminders back to the query  Fix Create Document item on Kebab menu is disabled (#154060) Problem The grid rendered before ruleset settings loaded, so Extended Core defaulted to false and disabled “Create Document” incorrectly Solution Treat ruleset settings as unloaded initially and show loading until the real feature status is available  User with no permissions sees enable Create Document menu item and can select a template before seeing unspecified error (#154125) Problem User with no permissions sees the Enable Create Document menu item and can select a template before seeing an unspecified error  Solution Ensure the button only displays when the user is an admin  Special characters not displayed correctly on Create Document confirmation modal (#154136) Problem Special characters not displayed correctly on Create Document confirmation modal Solution Decode the username before displaying  Communication Portal Added image upload for system messages (#154601) Problem When adding an image to a system alert/message, the image is never actually uploaded. Solution Correctly handle uploads using the "Insert Image" control and pasting an image into the RTE. Notification Allow nullable Quartz simple trigger string props (154089) Problem Quartz simple-property triggers can store NULL string properties, but the generated Notification schema marked STR_PROP_* columns as required. This made it so that the Notification service did not successfully do its part during ruleset/tenant creation Solution Override the Quartz EF model so those string properties are nullable and future migrations align with Quartz runtime behaviour. Implement SMS portal as a SMS provider (#153056) Problem An additional SMS provider with WhatsApp capability is required. Solution This solution introduces multi-SMS provider support (ZoomConnect and SMSPortal) into the notification system. The main changes include adding the SMSProvider enum, updating SMS setup commands and handlers to support provider selection, and modifying queries and models to store and return the selected SMS provider type. API Expose functions over api for event scheduling on the mobile app (#154097) Problem Certain event scheduling data is not available on the mobile app. Solution Expose certain functions as endpoints for the mobile app to use. Report Builder Bust report permission cache when copying a report. Improve report permission denied error notification (#154401) Problem When opening a copied report immediately, an empty snack message is displayed. The issue is that the report permission check is failing because the user permission cache is not cleared once the report is copied, and as such, the error is actually 403.  Solution Ensure the user report permissions cache is busted when report copy succeeds. Changed the auth failure to return a formatted 403 message and display a snack accordingly. System Framework Correct watermark that gets cut off on certain screen resolutions (#154033) Problem When cropping an image on a screen with higher resolution, the watermark is being cut off  Solution Correct the watermark that gets cut off on certain screen resolutions Safari modal focus fix, Firefox sharing notification fix (#154033) Problem Firefox: sharing notification shown in screen capture; Safari: screen capture not focusing after capture Solution Safari modal focus fix, Firefox sharing notification fix Resolve focus problem on Safari after screen capture (#153916) Problem Safari still not focusing Solution Resolve Safari focus problem The finally block now calls window.focus() instead — reclaims OS/browser-level focus from Safari's native picker without depending on the modal's visibility. unhideModalAfterCapture() now calls modalElement.focus() itself, right after restoring opacity/pointer-events — so the focus reclaim happens at the one point the modal is actually a valid, visible focus target again, and it's covered on every unhide path (success, error, and cancel) since they all go through this function. System Access The time displayed on the watermark is not the same as the default timestamp the screen capture is named with (#153224) Problem It appears the zip folder on display on the screen capture contains UTC. Solution Correct the timestamp on the watermark and zip file name, and correct the translation on the Email button Session expiry notification does not dismiss (#153089) Problem When will the session expire? It shows 30 minutes before it expires on every page. When the session expires on an SPA file, the page breaks on click. Solution Add checks to show the 5-minute warning only once every 5 minutes. Add an auto-redirect to log out when the user session has expired. Issue with error message translations when using Microsoft login (#152530) Problem Issue with error message translations when using Microsoft login; message shows translation path Solution Update external login translations to use TranslateAsync Audit Multiple entries created in the Identity audit table (#144811) Problem When changes are made to a user role on the System modules admin screen, 3 audit entries are logged in the Identity audit table.    Solution Resolve Audit entities getting lost or not always logging correctly