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 Performance Management 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. Corrected tooltips showing nonstop after hover (#157956) 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