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 breaking due to enum conversion.
Updating global modal margin (#154465)
Problem
Solution
Update modal margin so that the modal is always rendered below the navbar.
Resolve issue where on Single Approval Final Rating button text 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
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 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
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