Version 9.1.274 (9 November 2026) General Add people group switching to pending access page (#158054) Problem Cannot swithc to other people group when user has no access The user must retry every so often to see if the user is calculated The differal 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 Readd 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 was previously made to allow a expired access token to be authenticated. This was reverted because it would require update each landbot bot manually. It was then changed to be optional but that changes was lost during a merge. This PR just reapplies those changes. HrProcesses 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. Co-authored-by: William Identity and Authorisation Ensure when ruleset id is not availalble during the authorisation process the user is frobidden 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 authorization 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 Authorize 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 unauthorized or malformed requests from being processed. Resolved translation (#157541) Problem Generic translation is used and not descriptive on next steps Solution request to add more descriptive translation Job Profiler Added label for Group fallback approvals (#157950) Problem Where an approval falls back on 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. Onboarding Request to add name and surname part of dialog title for auto doc (#158128) Solution Request to add Name and surname to the dialog 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 groups permissions on active people group (#156932) Problem When a people group is inactive , it can still be linked to a user with permisions 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 in on the people group permissions page Solution Limit the link 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 eventough 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 userids to fetch only the email data, this could be well over 20k+ records Solution Added change to return email part of materialised 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 to 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 make suse 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. PerformanceManagement 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 new report General should be the 1st option returned. When copying Category Masterdata to 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 select 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 initializer 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 WorkAniversary, allowing for more explicit property initialization 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