Version 9.1.208 (9 February 2026)
Performance Management
Error when adding a review setup without a name (#143965)
Problem
- The user gets an error when they add a review setup without a name.
Solution
- Make the name field a required property and give the custom sanitised input elements a required tag, which renders the required appearance
Fix event handlers being removed globally after page help is selected (#143965)
Problem
- After selecting the page help icon within the modal, it removes all click event handlers on buttons, etc.
Solution
- Corrected to make specific before removing click events
Resolved order of impersonating user route value (#143573)
Problem
- The route path expects the primary contract, then the impersonated user, whereas it is being supplied in reverse
- When the allow upload is checked, GRPC throws a valid exception that needs to be caught
Solution
- Corrected the order of path variables provided.
- Catch error and return a valid response
Competency Analysis
Fix popover, where the text is displayed in bold (#121394)
Problem
- The competency description popover displays in bold
Solution
- Ensure the popover text does not display in bold
Ruleset Setup
Created a script to dynamically delete data from Ruleset (#143128)
Problem
- Cannot dynamically delete data from Ruleset
Solution
- Implemented a new script to Archive and then delete data of a ruleset by id
Resolve URL sanitisation on multiple tabs (#143741)
Problem
- Cannot save on the system access, widgets and integration tabs
Solution
- Corrected the URL sanitisation on the system access, widgets and integration tabs
- Moved allowed domains configuration to ruleset 1
Data Warehouse
Updated Script for DWH Weekly Integrity Report (#142737)
Problem
- Script monGenerateDWHDataIntegrityReport needs to be updated for data source accDisciplinaryActions
Solution
- Updated Script monGenerateDWHDataIntegrityReport to update accDisciplinaryActions missing section to align with DWH Source Script
Created new Datasource cmNextCloudContents (#143697)
Problem
- New dataSource cmNextCloudContents is required within the DWH
Solution
- Created new Datasource cmNextCloudContents
- Created new SSIS Package ContentManagement_ETL
Adjusted SQL Query C_03712_99999_monitorDWHPackageResultsReport.sql (#143261)
Problem
- Adjustments need to be made to C_03712_99999_monitorDWHPackageResultsReport.sql
Solution
- Adjusted script to exclude PackageLog.dtsx and select from WINDSORHYBRID
Updated accChats due to Refactor for Communication Portal (#143780)
Problem
- The package for accChats failed due to a refactor being done for the Communication Portal
Solution
- Adjusted source script with accChats to use new tables from the Communication Portal
Removed ReportCard fields within lmStudentSubjects and lmTermResults (#112511)
Problem
- The ReportCard fields are not required anymore within lmStudentSubjects and lmTermResults, as this is available within lmReportCards
Solution
- Removed ReportCard fields within lmStudentSubjects and lmTermResults
Updated Container for jpHRProcessRequestData (#143579)
Problem
- The jpHRProcessRequestData Update process did not work correctly
Solution
- Changed the update back to Truncate and Insert to ensure the data is being inserted correctly for jpHRProcessRequestData
Adjustments made within V9FullRefresh updates (#143176)
Problem
- When the V9 DWH are deployed to Production, the full refresh should not be updated for the afternoon run
Solution
- Updated Full Refresh steps to only update after 12 pm if the DWH package is deployed on Production during the morning
Updated Source Query for PackageLog.dtsx (#143261)
Problem
- PackageLog.dtsx needs to be excluded from PackageLogs
Solution
- Updated Source Query to exclude package_name 'PackageLog.dtsx'
Report Builder
Added extra filter cases for datetime2 and adjusted filter for "Choose a specific date" (#142737)
Problem
- The filters, when using datetime, did not filter correctly
- "Choose a specific date" required conversion for certain scenarios
Solution
- Added extra filter cases for datetime2
- Adjusted filter for "Choose a specific date"
- Removed smalldatetime as we do not use this currently
Notifications
Resolved Properties not being replaced correctly (#143598)
Problem
- With the new masked property development done, once a property exists both for mask and non-mask, it will always just replace masked property values, keeping the placeholder for the property name
Solution
- Add a change that should we identify it is masked, do an extra check if there is any placeholder without the masked property to also update and replace
People Management
Remove previous validation messages and classes when selecting values for position and org. Resolve timeout on org node treeview (#143806)
Problem
- Validation messages are not removed immediately after selecting values, only after the form is posted.
- A timeout occurs when opening the org tree structure in the position transfer page.
Solution
- Remove previous validation messages and classes when selecting values for position and org.
- Also noticed while testing the bug, the org tree times out.
- Added a recompile option on the query, as the query runs fast in SSMS
Improve error messages for overlapping appointments (#143328)
Problem
- When adding a new appointment, editing an existing appointment or transferring the use,r the error message provides unspecific information to the user when it overlaps with a current appointment for the user themselves or on another position for another user
Solution
- Add new error messages for the overlap with more details of the user and the appointment that is overlapping.
- Remove duplicate code and improve error message handling.
- New error messages:
- Appointment overlaps with the user's own current appointment on position {{PositionTitle}} from {{AppointedFromDate}} to {{AppointedToDate}}. An appointment already exists for position({{PositionTitle}}) from {{StartDate}} to {{EndDate}} for user {{Username}}.
Always include default avatar images on the list of available avatar options (#135931)
Problem
- The default list of avatar images is not shown.
Solution
- The previous fix was reverted with the merge
- Restored solution to always fetch default avatar images
Imports
Add API call to v8 to delete appointment history (#143323)
Problem
- When an appointment is deleted in V9, the Appointment history is not deleted in V8.
- There was a request to add an API endpoint in V8 (Already merged) and an API call in V9 to ensure the Appointment History is deleted.
Solution
- Add new functionality in the import service to delete Appointments based on a List of IDs.
- This endpoint is generic and can also be adjusted to work for various other types of items, for example, job profiles.
Communication Portal
Resolved member count error (#143761)
Problem
- When selecting room members, this will return a view of users within the group, but still used old table for members
Solution
- Corrected query to select the room members
"Create New" button scrolls with the chat list (#143763)
Problem
Solution
- Adjust to render outside the modal body, which is not within the relative container that makes it to the modal position itself
[PM] Cannot return to the list of chats if you've sent a message from within a person's agreement (#143858)
Problem
- When inside a PM contract, discussion is open, which calculates to create a new discussion and not open discussion list, but once navigated back to the dashboard, a REACT change occurred, and no page redirect in MVC, which does not reset the content for the modal and the bool value is allowed to just reopen the modal as no 'context' has changed
Solution
- Add route value to be saved alongside the opening of the modal, so that should the route change, navigate inside REACT the portal will force reload if it is different from when opened in another context
People Groups
Add 'LastRefreshed' to list ruleset people groups (#143598)
Problem
Solution
- When the PGs linked to a user are fetched, return the last refreshed date for the PG also
- Only fetch PG users then for the linked PGs where the last refreshed date is after the last edit of the people group users on V8
- This will limit unnecessary calls to the Peoplegroup users
Learning Management
Filter MaterialisedPeopleGroupUsers to only show active people on the PG on the attendance and marksheet page. When inheriting, marks only inherit from people who are an active part of the PG (#143629)
Problem
- On the attendance and mark sheets, inactive users are also included who are part of the PG
Solution
- Change to not take People condition for a user into account when the person is terminated
- The person will not be part of the people group users, and the count on the list of people items will not count this item
- Do not show terminated people on the attendance or attendance detail pages
- When marks are inherited, do not inherit marks from previous for terminated users in the subject's people group
Content Management
[Image Resources] [Translation] Translation for "Image Type" is missing (#143740)
Problem
- Missing translations in the file type
Solution
- Added translation for field
[Image Resources] Preview not available when uploading a GIF file (#143783)
Problem
- Restriction has been implemented to only compress image types, which excludes SVG and GIF files. Because of this, it does not render a compressed image and shows no preview available, which can cause confusion and seem like an error
Solution
- Adjust the flow to handle the null value of compressed to then not show the selection of image type, which results in the original image being selected
[Image Resources] [Suggestion] Streamline upload modal (#143736)
Problem
- No clear indication as to why there is a choice or reason
Solution
- Add a label to indicate to select an image, move the compressed to the first selection and add a subtext to indicate the reason for the selection
[Image Resources] Display loading indicator after selecting an image (#143734)
Problem
- When a file is selected, a new fetch call is made to retrieve the image and the compressed file; this does not trigger the ajax load to trigger a loader
Solution
- Add a new implementation to trigger a global event so that a loader is shown and then removed when the result is received