Skip to main content
Version 9.1.272 (9 November 2026)
General
Add people group switching to pending access page (#158054)
Problem
Cannot switch to another people group when the user has no access
The user must retry every so often to see if the user is calculated
The differential of people group check only the first load of Edit
Solution
Pending access page now shows the active people group and lets users switch to another shared group via a new SwitchPendingAccessPeopleGroup action (local retry URLs only). The page auto-retries every 10 seconds with a visible countdown. The bypass TempData key is now a shared BypassKey constant. A new IsBypassActive helper keeps a per-user, session-backed bypass window so the check survives across requests. The appoint-existing-user step no longer sets All People as the active group. Also adds unit tests for IsBypassActive and updates the pending access message and labels in the en-GB, en-US and en-ZA locales.
HR Processes|V9-Identity and Authorisation
Re-add Landbot authorisation that was removed during a merge (#157325)
Problem
Some users spend a lot of time using Landbot/Signibot, which causes the access token used to authenticate Landbot to expire while they are still busy.
Solution
Changes were previously made to allow an expired access token to be authenticated.
This was reverted because it would require updating each Landbot bot manually.
It was then changed to be optional, but that change was lost during a merge.
HR Processes
Unable to approve some items where I am not able to approve others as a Fallback Approver (#157955)
Problem
Later approval levels could remain unclickable when the same approver appeared at multiple levels.
Solution
Updated the fallback tab to allow access as earlier levels are completed; awaiting verification in the application.
Identity and Authorisation
Ensure that when the ruleset ID is not available during the authorisation process, the user is forbidden to continue (#152148)
Problem
Identity is throwing an unhandled exception during /connect/authorize when an unauthenticated request does not contain a usable ruleset value. Instead of returning a controlled authorisation or validation response, AuthorizationController throws while appending the Identity. Ruleset cookie, producing 1197 unhandled request failures.
Solution
This pull request improves the validation logic for the ruleset ID in the Authorise endpoint of AuthorizationController. It now checks that the rulesetId is a valid, positive integer before proceeding, and returns a proper error response if the validation fails. This helps prevent unauthorised or malformed requests from being processed.
Resolved translation (#157541)
Problem
Generic translation is used and not descriptive of the next steps
Solution
Request to add a more descriptive translation
Job Profiler
Added label for Group fallback approvals (#157950)
Problem
Where an approval falls back to People Group, there should be an indicator that this is a group, as it is when a People Group has been deliberately set on an approval level.
Solution
Add label for People Group fallback approvals
Learning Management
Add filter to make creation of attendance more robust and prevent unique DB constraint exceptions (#152146)
Problem
System.ArgumentException: Bulk operation completed with some errors: Id 0: Cannot insert duplicate key row in object 'LearningManagement.Attendances' with unique index 'IX_Attendances_AttendanceDate_StartTime_EndTime_UserId_ClassSubjectGroupId'. The duplicate key value is (2026-10-14,
Solution
This pull request improves how attendance items are processed in the CreateUpdateAttendancesCommandHandler by deduplicating attendance entries before creating or updating records. This ensures that only the most relevant attendance entry per user and time slot is used, preventing duplicate records and potential data inconsistencies. Attendance item processing improvements: Deduplicated AttendanceItems in the request by grouping on AttendanceDate, StartTime, EndTime, and UserId, and selecting the most relevant entry (preferencing those with non-zero Id and latest in the list). Updated logic for creating new and updating existing Attendance entities to use the deduplicated list, ensuring no duplicate attendances are processed.
HR Process Automation
Request to add name and surname part of dialogue title for auto doc (#158128)
Solution
Request to add Name and surname to the dialogue title and not just username when breaking out from onboarding
People Groups|V9-Learning Management
Delete Subject People Group When Subject Is Deleted (#157900)
Problem
When a Subject is deleted, the linked PG should also be deleted.
Solution
Ensure PG is deleted when Subject is deleted.
People groups
Filter user people group permissions on active people group (#156932)
Problem
When a people group is inactive, it can still be linked to a user with permissions. When a people group already linked to a user becomes inactive, the user can still use the people group on the people group dashboard and see it on the people group permissions page
Solution
Limit the list of people groups to only active people groups. When a people group is inactive, do not show it on the user screen or people management dashboard even though it is linked to the user
Resolved internal evaluation list of users' performance (#155620)
Problem
The controller pulled all the data of the ruleset and then sent that list of user IDs to fetch only the email data; this could be well over 20k+ records
Solution
Added a change to return the email part of the materialised data and removed the second gRPC call; also implemented paging to be used so that it does not return all 20k+ records, as this mapping affects the gRPC response size
Corrected translation for identity register page (#157960)
Problem
Translation was just showing the path and not the actual translation
Solution
Corrected in the Translate method, as during page navigation the translation library can get lost, so reload to populate
Implemented fix for jQuery table clear (#158072)
Problem
Clicking Link Item accessed DataTables’ private property oFeatures.bServerSide, which was undefined in the running version, causing the JavaScript error.
Solution
Removed the manual clearing code and used ajax.url(ajaxUrl).load() to reload the items. Selected items are cleared before loading to prevent selections carrying over between sections.
Added missing delimiters for userIds in bulk action (#155047)
Problem
The subtext on the UI makes use of more possible delimiters that are being used in the gRPC to actually split
Solution
Added the missing delimiters
Resolved People group user status and to be used in PM (#157660)
Problem
When a user’s status changed, a people-group refresh only updated their status in the groups being refreshed. This could leave the same user showing as Active in some groups and Terminated in others.
Solution
The refresh now updates the affected user’s status across all their existing people groups, keeping it consistent. The date rules remain unchanged: a user stays Active on their last service day and becomes Terminated the following day.
Fix review Period header for My Agreement not aligned (#157981)
Problem
Review Period header for My Agreement not aligned
Solution
Fix styling to ensure aligned Co-authored-by: William
Report Builder
Set General Category as default and correct copy functionality on ruleset creation (#157840)
Problem
General category needs to be set as the default and first category. When creating a new report, General should be the 1st option returned. When copying Category Masterdata to a new ruleset, DisplayOrder is set to 0 for all categories
Solution
Migration to add missing General category and amend display order. Change report folder category selection to order by DisplayOrder. Ensure displayorder and default category values are set when master data is copied.
Problem
Two tooltip systems were responding to the same editor buttons, causing the tooltips to stay visible after you moved your mouse away.
Solution
Updated the page so only the editor’s own tooltip system handles those buttons. This should allow the tooltips to disappear normally.
Resolved the export on count of subreport console errors (#155593)
Problem
Exporting the count modal from View Report failed because its export data was missing the header and footer structures required by the Excel exporter.
Solution
Added the missing structures in view-subreport.js, matching the working editor export. Excel export now generates successfully.
System Access
Correct mapping for user dates (#150818)
Problem
InvalidOperationException in JobProfiler UserQueries.GetUserDatesAsync — UserDatesPreview record type missing parameterless constructor for Dapper materialisation
Solution
This pull request refactors the UserDatesPreview record in UserViewModel.cs to use an object initialiser style with properties instead of positional parameters. This change improves code clarity and future extensibility. Refactoring for clarity and extensibility: Changed UserDatesPreview from a positional record to a record with init-only properties for Birthday and WorkAnniversary, allowing for more explicit property initialisation and easier future modifications.
Align 2FA lock period with password failure lock period (#156908)
Problem
The lock period on 2FA is longer than the password lock. Causing unexpected wait periods
Solution
Align the lock period of 2FA with the lock period of password failure for consistency