Version 9.1.246 (27 July 2026) Image Resources Fix image upload not working when using copy-paste or drag-and-drop on Syncfusion editors (#152211) Problem Image source saved incorrectly when copy/pasting or dragging and dropping an image, leading to an image not found after initial upload.   Solution Add a handler in the shared Syncfusion editor script to handle image drops and copy/paste the same as when images are uploaded normally   Translations Reset password feedback translation improvements (#152474) Problem Password and confirm password comparisons were not being properly translated. Also missing a check for leading or trailing spaces   Solution Reset password feedback translation improvements   Job Management Remove validation for inherent requirement add (#151675) Problem Odd behaviour on Inherent Requirements. Unable to add a requirement with the same importance twice + Cannot add a requirement again if it has been deleted.   Solution Removed all validation on creating new inherent requirements - should always be able to add a new one, and be left up to user discretion   Communication Portal Resolved console error for integration ErrorHandler (#146859) Problem The new error logging exposed that the _Integration tab was not actually throwing an application exception. The console message was a browser-level ResizeObserver loop completed with undelivered notifications warning, which was being surfaced through the global window.onerror hook looked like a real app failure.    Solution Updated the global error handling so it still logs real uncaught errors with message/source/stack details, but ignores the known harmless ResizeObserver loop warnings. That removes the false console noise without hiding actual application errors.   Resolved datepicker opening up within the card (#152956, #152926) Problem DateTimePicker component opening within the Card and has no overflow visible   Solution Add a change to allow the datepicker to overflow and be visible   Resolved validation on shared editors and Form submission (#152935, #152685) Problem When the toggle is inactive and the form is submitted, validation triggers for the empty fields, which it only must for when the toggle of the editor is active    Solution Add a change to only validate the fields when the toggle is active    Problem When submitting a full form, the post is done and not an AJAX form submission   Solution Implemented a change to do an AJAX form submission   Resolved chat messages not being able to send (#149151) Problem Package upgrade which causes certain $.func() errors; a new shim file was added to accommodate these package differences, but the Communication portal is not using it to initialise the emojione area, which causes errors. Also issues with SignalR differences    Solution Implemented the new change within the shim file and the change to be used   Resolved Translation Core that does not allow section within section value (#152418) Problem For translations, it is only one section up, and if there is no key-value pair, the section is not shown; likewise for custom translations that are section within a section    Solution Implemented a change to read the treeview style downwards to identify sections to be able to translate, excluding static sections, and then also for the translator so that it can be identified   Resolved GanttControl divider and the paging of target audience (#152475, #151524) Problem For paging count, not all the page values were rendered because the total count was not returned only has more rows, which show another page as you click through    Solution Added a change to return the total count and show the total page counts    Problem The divider on the Gantt control keeps jumping to the middle and is not allowed to scroll/move freely    Solution Implemented a fix on styling and jQuery to correct the behaviour   Resolved Nav header active state and tag background (#152441, #151610) Problem There are nav links within the nav tab; when these values are selected, it resets the top nav item   Solution Implemented a change so that the sub-nav tabs are only selected within the nav tab content itself    Problem When no background colour is selected for the tag or timer, it defaults to incorrect white   Solution Add a change to keep empty and update the model to pass an empty string if it is NULL   Resolved V8 Email Not triggering system message when active (#152896) Problem Email from V8 can trigger a system message when configured, but the implementation of system alerts requires a userId to indicate to whom to display, as V8 only sends through a recipient list of emails   Solution Implemented a change that only applies in cases where the category ID is passed through to retrieve the userId for that email user within the ruleset.   Resolved Upload button difference styling (#149850) Problem Difference in styling, no corner radius or non-uppercase text   Solution Added rounded corners and text decoration to none to remove casing   Resolved Loading containers for communication portal (#152682) Problem Banners and System Alert with nav tabs have been implemented that render for Learning Pathway topic lists, which they should not   Solution Add new abstract methods to ensure new rules to allow render modes, split discussion list to render fragment and just render in correct place   Allow Discussion to load inside V8 (#152682) Problem When a learner opens the new Discussion feature from within the older (V8) part of the system, the Discussion area fails to load: the request reaches WebMVC's `DiscussionController`, but the downstream gRPC call to CommunicationPortal.API short-circuits with `User access token unavailable`, and the user is signed out.    Solution Set `AuthenticationType = Bearer` in WebMVC's JWT `TokenValidationParameters`. On `Cookies,Bearer` endpoints the merged principal now carries a Bearer-typed identity, so the existing fast path forwards the inbound token and the local and downstream identities agree. - **Opt-in fallback** (`Authentication:ForwardExternalBearerToken`, default `false`): for requests whose principal lacks a Bearer identity, WebMVC explicitly authenticates the Bearer scheme and forwards the header only when validation succeeds **and** the token does not change the acting user (its `user_id` claim must match any other authenticated principal; missing claims fail closed). Only well-formed `Bearer ` headers are ever forwarded.    Resolved banner metadata not showing on the list (#152734) Problem The data can be passed in a different format than what is expected can have a wrapper as well   Solution Add fallback to correct the path and the value to show the background colour, date and expires date   People Management Correct permission checks on user profile pages - reverse condition on summary page (#152580) Problem Bug on previous fix, conditional check on summary page was reversed.   Solution Correct conditional check for section access    Resolved registration email not being triggered (#148426) Problem After a user has confirmed their email for registration, another email should trigger to confirm that the request has been submitted, but when a JobProfile has not been selected, it is null and throws an error when trying to be retrieved. Also, some translations are not being retrieved. The disclaimer is not correct in showing a message when there is none    Solution Implemented fix for null check; corrected translations Added a check to set when there was a disclaimer shown   Resolved Custom People group role creating new links each change/save (#152827) Problem When a Custom Org unit role is edited and saved, it keeps adding a new role   Solution Removed the check to set the value to null to update the current custom role   Display masked email address on password reset (#152465) Problem The Password reset toast notification does not include a masked email address.   Solution Display masked email address on password reset   Fixed race where filters loaded after the initial user fetch by restoring them synchronously via lazy useState init (#152201) Problem When on Terminated filter/tab, and the user opens a person and uses the browser back button/system back button, the Terminated filter/tab shows people that should not be there and a count of 207 instead of 4. The browser back button consistently causes this behaviour while the system back button only causes it occasionally.   Solution Moved the saved filterCriteria/searchFilterCriteria restoration from an async useEffect into lazy useState initialisers so they're correct on the very first render, eliminating the race where the user-fetch effect could run with default (unfiltered) criteria before localStorage was read.   Resolved count mismatch or hard reload of people management (#149700) Problem The People Management page could fire multiple startup requests with different people-group/filter values during a hard refresh, and on slower datasets an older response could finish last and overwrite the correct count.   Solution The page now waits for filter and people-group restoration before the first load, uses the saved people-group filter as the initial source of truth, and ignores stale responses so only the latest request can update the displayed count.   Resolved Required-validation for manage own data fields (#152580) Problem Server-side required-field validation always treated edits to another user as Administrator, so People Group edits could fail on required fields that were not editable in ESS setup.   Solution Pass the intended SelfServiceSettingType from WebMVC to the Account API update commands, and use that type during required-field validation so only required editable fields for the correct setup context are enforced.   Ensure non visible/editable fields are correctly bound (#152580) Problem When the profile fields are disabled due to the ESS settings, the values are not bound and get lost when submitted.    Solution Ensure that the profile values are still bound correctly when they are disabled / not visible due to ESS settings.    Remove forced role check on identity user create (#149668) Problem When a user only has PG permissions, the new user appointment fails. When an identity user is created requires that the user has People Admin or Tenant Admin roles.   Solution Remove explicit role authorisation on Identity user creation. Added a comment to add permission-based auth.   Ensure non visible/editable fields are correctly bound (152580) Problem When the profile fields are disabled due to the ESS settings, the values are not bound and get lost when submitted.   Solution Ensure that the profile values are still bound correctly when they are disabled / not visible due to ESS settings.   Ruleset Management Update translation for previously used password (#152464) Problem The "Number of previous password.." helper text does not describe the function correctly   Solution Update translation for previously used password   Learning Management Fix the subject form layout and wording (#152406) Problem When adding a subject, field spacing was inconsistent, the timetable colour label used the wrong spelling, and the colour controls could overlap or extend outside the dialogue.    Solution The subject form now spaces its fields consistently, uses the correct “Colour” wording for South African and UK English, and keeps the timetable colour selector and value aligned within the dialogue.   Prevent incorrectly calculated marks from being saved (#152742) Problem A learner's term result could sometimes be saved as zero, or as one of the individual assessment marks, even though the marksheet showed captured assessment results. This could cause incorrect or blank results on report cards and require manual data correction.   Solution The marksheet now works out the term result again from the learner's captured assessment marks at the moment it is saved. It no longer depends on the displayed calculated cell being ready, while still allowing a genuine zero result and the existing excluded-mark behaviour.   Virtual Tours Problem User is taken to the top of the Virtual Tours modal when clicking on Editing tools on the second slide when the modal scrolls.    Solution Ensure you are not taken to the top of the modal.    Problem Error on saving after slides have been deleted   Solution Ensure virtual tour slides can be saved after removing a slide    Problem Edit Help Page Information not translated when logging in with Afrikaans   Solution Add missing translation    Performance Management Fix "Load More" not working correctly when selecting KPI's from the library (#152620) Problem "Load More" not working correctly when selecting KPI's from the library   Solution Ensure that when clicking "Load More", it appends the response, replacing the result set   Master Data "Duplicate data errors" not displaying for certain service master data (#152439) Problem "Duplicate data error" message did not display for certain services when adding master data where a unique constraint was violated.   Solution This happened due to the master data interceptor not being registered for all services in masterdata. Created a shared method to ensure each registered GRPC client adds the interceptor.   Data Warehouse Added Joins within Data Dictionaries (#152962) Problem New joins need to be added for ReportBuilder   Solution Added a join between jpAppointments and jpJobCompetencies  Added a join between jpAppointments and jpPositionCompetencies   Added a step to resolve ReportBuilder errors due to redundant fields being used (#152556) Problem Currently, there are published reports that fail due to using redundant fields   Solution Added a step to resolve ReportBuilder errors due to redundant fields being used within the UpdateDataDictionary SSIS Package   Improved the integrity check for published reports on Report Builder (#152556) Problem The current ReportBuilder integrity check did not pick up all the errors for published reports   Solution Updated the script by improving the check for published reports   Added new fields within comuSystemAlerts (#152599) Problem Fields TotalUnread, TotalArchived, TotalUnarchived need to be added within comuSystemAlerts   Solution Added fields TotalUnread, TotalArchived, TotalUnarchived within comuSystemAlerts   System Access Correct duplicate submission of OTP token (#152558) Problem The OTP request is submitted multiple times   Solution Make a targeted improvement to the JavaScript event handling for the network speed form on the two-factor authentication login page. The change ensures more robust and predictable form submission behaviour. JavaScript Event Handling Improvements: Changed the event listener from using delegated event handling with $(document).on('submit', ...) to directly binding the submit event on the form.capture-network-speed element. This prevents potential issues with multiple bindings or unintended event bubbling. Added event.stopImmediatePropagation(); after preventing the default submission to ensure that no other event handlers for the submit event are triggered, further reducing the risk of duplicate submissions or side effects.   Identity & Authorisation Correct Translation for the Password reset toast messages (#152474) Problem The system displays Incorrect none translated values for the Password reset toast messages ("passwordDoesNotMatch")   Solution Correct Translation for the Password reset toast messages   System Access Resolve problem on virtual tours with activeTab= query param (#152722) Problem Landing page when logging in as well as FitAndProper sharelink breaks when accessing   Solution Since "activeTab" contains "tab", the first condition matches. But when splitting by "tab=", there's no "tab=" in the string (only "activeTab="), so Split returns a single-element array. Accessing index [1] throws the exception. Check for "tab=" instead of "tab" (includes the equals sign) Check for "activeTab=" instead of "activeTab" (includes the equals sign) Add bounds checking before accessing array indices Limit split to 2 parts for better performance Use case-insensitive comparison for robustness   Translations Translations for external logins (#152530) Problem Issue with error message translations when using Microsoft login; the message shows the translation path    Solution Update external login translations to use TranslateAsync