Version 9.1.259 (28 September 2026)
Mobile App
Add viewport guard styles to app layouts (#156128)
Problem
- Some clients try to access the system via their phones using the browser. The responsive design doesn't display correctly, so I suggest we limit the system's minimum size to 1024 x 768. Users will then be able to pan, but at least it will look better.
Solution
Content Management
Large videos fail to compress with "Compression failed" (#155598)
Problem
- When compressing larger or longer videos through the media compression tool, the operation failed with a generic "Compression failed" message.
- Any video that took more than about three minutes to process was affected, regardless of how far it was under the file-size limit, and very tall portrait videos (for example, phone recordings) failed even sooner.
- There was also no way to tell a genuine failure apart from one that had simply run out of processing time.
Solution
- The time a video is allowed to take to compress is now based on the length of the video instead of a fixed three-minute allowance, so longer clips are given more time proportionally, up to a one-hour ceiling.
- Video processing is also faster, and very tall videos are now resized so that both their width and height stay within the target size, which removes a major cause of slow, failing conversions.
- When a video genuinely exceeds the processing-time limit, the tool now reports that clearly rather than a generic failure, and if the caller disconnects part-way through, the conversion stops immediately instead of continuing to run in the background.
Theme Management
Guard access token lookup for anonymous users to ensure anonymous themes are loaded (#156184)
Problem
- When the user is not yet authorised, the anonymous theme is not loaded and a error is logged
- Cannot retrieve token: No active user.
- The default ruleset 1 theme is then loaded
Solution
- Cache the authentication state and only call GetUserAccessTokenAsync when the current user is authenticated.
- This avoids unnecessary token resolution attempts for anonymous requests while preserving existing short-circuit behaviour and warning logs when authenticated token retrieval fails.
Performance Management
Resolved exclude rating logic; translated a clear selection (#156143, #156145)
Problem
- When excluded rating or rating scale selected incorrect value condition, Missing translation When Clear selection is pressed or 'x' on select values not behaving correctly or resetting
Solution
- Added logic correction to get the correct rating Scale based on the check added; translation added; logic to clear selections
Resolved modal styling (#154634)
Problem
- Development/Change was made to showcase the nav app bar over modals because of a screen capture; a fix was thereafter made to add margin to the modals to push it down, but in some cases - smaller screens it triggers a scroll bar to view the modal even if it has content-scroll dialogue class for the body.
Solution
- Correct margin to padding to be adjusted within its own container rather than push the entire container down
Resolved user permission not resetting after addition or removal (#156050)
Problem
- When setting new roles or removing them, the cache is not being busted
Solution
- Add bust method once interaction is completed (did confirm it is not occurring in service)
People Groups
Updating people group name does not reflect on Summary page (#156091)
Problem
- The People Groups page title continued showing the old group name after a successful save.
Solution
- Update the page heading and browser tab title with the saved group name when the save succeeds.
Ruleset Management
Resolve virtual tour that always displays regardless of display setting (#156183)
Problem
- Even though the virtual tour for Learning Management is set to "Do not show", users still get the virtual tour displayed.
Solution
- Resolve virtual tour that always displays regardless of display setting
- There is currently an issue with Virtual Tours where, if the tour is set to “Do not show” but has no slides configured for the current ruleset, it defaults to the Virtual Tour configured for User Ruleset 1.
- Added a null check on the VirtualTourSlides IsDeleted field to fill cteVirtualToursBase even if there are no slides for the current ruleset.
Job Management
OrgNodes trying to be created on ImportUsers (#151052)
Problem
- During a User Import, importing the org structure could fail with a duplicate key error on `IX_OrgNodes_RulesetId_Code` (e.g. `Cannot insert duplicate key row ... The duplicate key value is (307, ONS_TEC_PROJ)`), followed by `Cannot continue, no valid org nodes data available after attempting import of org nodes`, aborting the whole import.
Solution
- The query that looks up existing org nodes before deciding whether to create or update them was combining its identifier filters incorrectly: the `Id` match was AND-ed onto the rest of the filters (Name/ExternalId/Code/OrgPath) instead of being OR-ed with them.
- As soon as any row in an import batch carried a known `Id`, the query silently restricted the entire result set to just that `Id`, causing org nodes that should have matched by `Code` alone to be missed.
- Those nodes were then treated as brand new and re-inserted, colliding with the existing row on the unique `(RulesetId, Code)` index. Fixed `ListNodesByIdentifiersQuery` so the `Id` filter is OR-ed together with the other identifier filters, matching the original intent of the lookup.
Learning Management
Resolve ListSubordinatesForBooking query problem for event management (#156120)
Problem
- Error on the Book a Course button from a calendar event.
Solution
- Resolve ListSubordinatesForBooking query problem for event management
System Access
Add timeout for extend external logout requests (149425)
Problem
- When the V8 logout is slow, the V9 logout is not performant and causes unnecessary delays
Solution
- Refactors the external logout flow in the Account area to improve reliability and maintainability.
- The main change is moving the external logout logic from backend C# code to a new frontend bridge page and JavaScript handler, which coordinates the logout process with the external identity provider.
- This makes the logout flow more robust and easier to debug, and removes unnecessary dependencies from the controller.
- Addition of absolute expiry after a 5s load wait.