Version 9.1.247.1 (3 August 2026)
Performance Management
Resolve issue with review setup template save silently failing (#153513)
Problem
- Creating / Editing a performance template when perspectives are disabled silently fails when clicking the Save button, and it seems like nothing happens.
Solution
- Firstly, ensure that the weight-to-string conversion is done culture-independent to enforce weights in the format "0.00"
- Second, resolve the conversion in the JS object by compiling weight as a string property instead of a number.
- The third change is to set the "placeholder" perspective to 100 in JS when perspectives are disabled to allow validation to pass.
Resolve issue where Overall Final Score label mappings were not showing (#153405)
Problem
- Score label mappings for Overall Final Score were not showing
Solution
- Fixed the condition check that determines whether need to be displayed for Overall Final Score
Job Management
Insert missing UserCompanyDates records during user import (#146950)
Problem
- `ImportUserDatesAsync` (used by the JobProfiler user import) only ever `UPDATE`d existing `JobProfiler.UserCompanyDates` rows. Since the materialisation rework, `UserCompanyDates` is no longer created as part of the User aggregate, so newly imported users never got a `UserCompanyDates` row created for them — their start dates were silently dropped.
Solution
- Added an `INSERT INTO JobProfiler.UserCompanyDates` step (before the existing `UPDATE`) that creates a row for any imported user matched by username who doesn't already have one for that ruleset, using the same create-vs-update semantics as `UserDomainService.UpdateUserCompanyDatesIfRequiredAsync`.
- Replaced the row-by-row string-concatenated `INSERT` loop used to populate the `#UserDates` temp table with a `SqlBulkCopy`, matching the pattern already used elsewhere in `UserQueries.cs` (e.g. `ListUserOrgPathsAsync`). This also removes the manual string escaping that was needed for the old concatenation approach.