Commit Graph
3845 Commits
Author SHA1 Message Date
RachelElysia 786c0ced44 Fleet UI: Fix CSS on edit icon modal (#34531) 2025-10-22 13:33:32 -04:00
Sarah Gillespie 97cf97ca3e Adjust UI section headers and layout of Settings > Integrations (#34585) 2025-10-21 15:28:47 -05:00
Tim Lee d4004a4f8e IDP user update API (#34332) 2025-10-21 12:02:25 -06:00
Scott Gress b44a9ab6e4 Update script upload UI: updates from QA (#34564)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #32632
**Related issue:** Resolves #34454 

# Details

Addresses the following QA-reported issues with #32632:

* Adding a .sh script file does not show it is valid for macOS
<img width="617" height="183" alt="image"
src="https://github.com/user-attachments/assets/39dcf884-ffbc-43b3-a06b-ad88520d6a16"
/>

* With Gitops mode enabled the 'add scripts' button is still clickable
<img width="693" height="151" alt="image"
src="https://github.com/user-attachments/assets/84c6e77d-ed1c-4e8a-8ebd-099d9da5405a"
/>

* Controls > Scripts: "Add script" is missing padding (#34454)
<img width="173" height="79" alt="image"
src="https://github.com/user-attachments/assets/d89cb728-f4ba-427b-868f-f072196777ae"
/>

# Checklist for submitter

For unreleased bug fixes in a release candidate, one of:

- [X] Confirmed that the fix is not expected to adversely impact load
test results
2025-10-20 19:19:40 -05:00
jacobshandling f700d1029e Hide software host count, versions table when no hosts have the software installed (#34484)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #32635
Hide host count and version table when no hosts have the software
installed

<img width="1518" height="568" alt="Screenshot 2025-10-17 at 4 36 13 PM"
src="https://github.com/user-attachments/assets/4f77d039-d9d0-427e-a3f4-a8774a3f6ff7"
/>



- [x] Changes file added for user-visible changes in `changes/`
- [x] QA'd all new/changed functionality manually
2025-10-20 14:46:35 -07:00
jacobshandling f80d8a5eb8 Remove unused mock endpoint handler (#34301) 2025-10-17 16:10:21 -07:00
jacobshandling d9cedcba8d Consolidate rolling linux version possibilities (#34467)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #34214

- [x] manual QA by @sgress454
2025-10-17 14:01:03 -07:00
RachelElysia 69494cc0d1 Fleet UI: Remove purple count and 2 links (#34462) 2025-10-17 15:56:13 -05:00
Luke Heath aba434b024 Bump font size variable from 13px to 14px and correct page header gap (#34453) 2025-10-17 15:00:14 -05:00
Jordan Montgomery eafade0a12 Remove Setup Experience preview for iOS/iPadOS (#34458)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #33711 

See Noah comment here for why we are removing:
https://github.com/fleetdm/fleet/issues/30890#issuecomment-3411319996

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements)
- [x] If paths of existing endpoints are modified without backwards
compatibility, checked the frontend/CLI for any necessary changes

## Testing

- [x] QA'd all new/changed functionality manually
2025-10-17 13:57:25 -04:00
RachelElysia bc837a7bd3 Fleet UI: Undo filter same row as header name (#34457) 2025-10-17 12:46:46 -05:00
Gabriel Hernandez af254bd43b fix unlock action and refresh host state for ios/ipad (#34444) 2025-10-17 17:59:22 +01:00
Scott Gress 81f589d661 Update add script UI (#34349)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #32632

# Details

This PR updates the Script Library page in the following ways:
* When no scripts are uploaded for a team, it shows the "Add script" UI
with a button that opens a new "Add Script" modal
* When scripts are uploaded, the "Add script" button is instead added to
the header of the scripts list, and clicking it opens that modal

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [ ] Added/updated automated tests
working on this

- [X] QA'd all new/changed functionality manually
- [X] Test empty state: go to controls/scripts/library for a team with
no scripts. Clicking "upload" button in empty state should open the add
script modal.
- [X] In the modal, select a .ps1 script. Should not see additional
text.
- [X] Close modal without uploading. Re-open. File field should be
cleared & upload button visible again.
- [X] Select a .sh script. Should see additional text about macOS and
Linux.
  - [X] Add script. Make sure script saves and modal closes.
- [X] Once script has been added, make sure empty state is gone and "Add
script" button is at the top of the list.
- [X] Go to /controls/os-settings/custom-settings for a team with no
profiles uploaded. Make sure empty state text styles match the empty
state for script uploads.
- [X] Open modal to add profile. Make sure upload text styles match the
script upload modal.
- [X] Enable GitOps mode. Go to controls/scripts/library for a team with
scripts added. Make sure new "Add script" button is disabled w/ standard
tooltip in GitOps mode.

Scripts empty state:

<img width="697" height="352" alt="image"
src="https://github.com/user-attachments/assets/32f0f246-bddb-4bb7-bc39-48d9978de9fa"
/>

Scripts uploader:

<img width="745" height="590" alt="image"
src="https://github.com/user-attachments/assets/f82414e2-9318-4543-b5ca-41e759662587"
/>

Scripts uploader with .sh

<img width="750" height="539" alt="image"
src="https://github.com/user-attachments/assets/0b989067-921a-4d18-93ed-09aac90fc9cb"
/>

Scripts table:

<img width="686" height="256" alt="image"
src="https://github.com/user-attachments/assets/848f1b56-6e9e-48d4-9a03-6fdf5427301e"
/>

Profiles empty state:

<img width="700" height="377" alt="image"
src="https://github.com/user-attachments/assets/8f92bcd9-2215-41f6-a540-4774f7e9542b"
/>

Profiles uploader:

<img width="707" height="682" alt="image"
src="https://github.com/user-attachments/assets/eef216af-3447-48e7-882a-e42e888e1c17"
/>
2025-10-17 10:49:59 -05:00
jacobshandling 4dd9fe822e Improve alignment and logic around Arch linux os version displays (#34420)
**Related issue:** Resolves #34214 

- Alignment in host summary fixed for both Firefox(L) and Chrome(R):
<img width="1728" height="221" alt="Screenshot 2025-10-16 at 6 38 39 PM"
src="https://github.com/user-attachments/assets/27d4489d-7a90-41bd-9b7d-53dfc95e4000"
/>

- Fix detection logic in Software > OS Versions table, render
tooltip-wrapped "rolling" there when appropriate

- [x] QA'd all new/changed functionality manually
2025-10-17 08:26:42 -07:00
jacobshandlingandJacob Shandling 5f626e2a8c Add gigs_all_disk_space vital collection, storage, service, and UI rendering for Linux hosts (#34077)
## Addresses #31671 

- [x] Changes file added for user-visible changes in `changes/`
- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements)

## Testing
- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually

## Database migrations

- [x] Checked schema for all modified table for columns that will
auto-update timestamps during migration.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added total disk space metrics for all partitions on Linux hosts. The
disk space indicator now displays comprehensive storage information
including root partition and all other partitions, improving visibility
into host storage capacity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2025-10-17 08:24:23 -07:00
RachelElysiaandCarlo DiCelico 1ef91fe4e3 Feature: Script only package e2e followup (#34271)
Co-authored-by: Carlo DiCelico <carlo@fleetdm.com>
2025-10-17 10:54:00 -04:00
Scott GressandIan Littman 61970118e9 Stop setup experience on software install failure (#34173)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #33173
**Related issue:** Resolves #33111 

# Details

This is the remaining work to implement the "Stop the setup experience
when required software fails to install" feature. This didn't turn out
to be quite as straightforward as expected so I ended up doing a bit of
design-by-code and expect some feedback on the approach. I tried to make
it as low-touch as possible. The general design is:

1. In the `maybeUpdateSetupExperienceStatus` function which is called in
various places when a setup experience step is marked as completed, call
a new `maybeCancelPendingSetupExperienceSteps` function if the setup
step was marked as failed. Similarly call
`maybeCancelPendingSetupExperienceSteps` if a VPP app install fails to
enqueue.
2. In `maybeCancelPendingSetupExperienceSteps`, check whether the
specified host is MacOS and whether the "RequireAllSoftwareMacOS" flag
is set in the team (or global) config. If so, mark the remaining setup
experience items as canceled and cancel any upcoming activities related
to those steps.
3. On the front-end, if the `require_all_software_macos` is set and a
software step is marked as failed, show a new failure page indicating
that setup has failed and showing details of the failed software.
4. On the agent side, when checking setup experience status, send a
`reset_after_failure` flag _only the first time_. If this flag is set,
then the code in the `/orbit/setup_experience/status` handler will clear
and re-queue any failed setup experience steps (but leave successful
steps to avoid re-installing already-installed software). This
facilitates re-starting the setup experience when the host is rebooted.

I also updated the way that software (packages and VPP) is queued up for
the setup experience to be ordered alphabetically, to make it easier to
test _and_ because this is a desired outcome for a future story. Since
the order is not deterministic now, this update shouldn't cause any
problems (aside from a couple of test updates), but I'm ok taking it out
if desired.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

- [X] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements)

## Testing

- [X] Added/updated automated tests
* Added a new integration test for software packages, testing that a
failed software package causes the rest of the setup experience to be
marked as failed when `require_all_software_macos` is set, and testing
that the "reset after failure" code works.
* Added a new integration test for VPP packages, testing that a failed
VPP enqueue causes the same halting of the setup experience.
I _don't_ have test for a failure _during_ a VPP install. It should go
through the same code path as the software package failure, so it's not
a huge gap.

- [ ] QA'd all new/changed functionality manually
Working on it 

## fleetd/orbit/Fleet Desktop

- [X] Verified compatibility with the latest released version of Fleet
(see [Must
rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md))
- [X] If the change applies to only one platform, confirmed that
`runtime.GOOS` is used as needed to isolate changes
- [X] Verified that fleetd runs on macOS, Linux and Windows


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- New Features
- Configurable option to halt macOS device setup if any software install
fails.
- Device setup page now shows a clear “Device setup failed” state with
expandable error details when all software is required on macOS.
- Improvements
- Setup status now includes per-step error messages for better
troubleshooting.
- Pending setup steps are automatically canceled after a failure when
applicable, with support to reset and retry the setup flow as
configured.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ian Littman <iansltx@gmail.com>
2025-10-17 08:38:53 -05:00
RachelElysia fccc30be12 Fleet UI unreleased bug: remove buggy hide footer as we should always show the footer help text (#34405) 2025-10-16 17:06:21 -04:00
jacobshandling 45eccc1be1 Map raw label membership type to copy meant for render (#34387)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #34239

<img width="1765" height="1146" alt="Screenshot 2025-10-16 at 12 11
39 PM"
src="https://github.com/user-attachments/assets/4735012d-6ddc-45cd-87a8-f92c9b7283b0"
/>

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually
2025-10-16 13:05:43 -07:00
Luke Heath 8650d2099d Fix edit labels spacing, use consistent page header class (#34350) 2025-10-16 12:57:35 -05:00
Ian Littman e48d8033a9 Map manjaro-arm platform (#34357)
Resolves #34318. Thx @jmwatts for the QA on this!

- [x] QA'd all new/changed functionality manually
2025-10-16 11:00:05 -05:00
Noah Talerman 89d675ab25 Fleet product: Fix wrong links (#34346)
- @noahtalerman: Redirect goes to this guide:
https://github.com/fleetdm/fleet/blob/docs-v4.75.0/articles/macos-setup-experience.md#install-software
- Guide will point to Windows and Linux setup experience guide when
Fleet ships 4.75.
2025-10-16 11:30:40 -04:00
Luke Heath f6c4e890f3 Set content width to 100% on manage hosts and query reports pages (#34333) 2025-10-16 09:09:30 -05:00
Luke Heath ae6c16103c Consistently implement semibold, standardize header implementations (#34336) 2025-10-16 09:08:22 -05:00
Luke Heath 7c50d1acc7 Address inconsistencies between new query and policy pages (#34329) 2025-10-15 21:32:54 -05:00
Juan Fernandez 32f2ddaa63 Show warning when viewing settings without auth (#34309)
**Related issue:** Resolves #32229

Show flash warning when viewing settings from a team where auth is not
granted.
2025-10-15 20:01:22 -04:00
Luke Heath 0d2589ff84 Hide overflow in text cell so ellipsis appears (#34320) 2025-10-15 18:01:23 -05:00
jacobshandling 94d801f9e1 3 Unreleased bug fixes (#34218)
# 3 unreleased bug fixes:

## Resolves #34123 
Footer when paginated:
<img width="1519" height="1123" alt="Screenshot 2025-10-14 at 1 23
00 PM"
src="https://github.com/user-attachments/assets/d69d27b4-44e4-4458-92be-e0dfaeab527f"
/>

No footer when only one page:
<img width="1523" height="1007" alt="Screenshot 2025-10-14 at 1 20
45 PM"
src="https://github.com/user-attachments/assets/2d8266bb-c872-4888-98b1-3af7147fd27f"
/>


## Resolves #34169 
Name + description are now truncated:
<img width="1732" height="710" alt="Screenshot 2025-10-14 at 11 11
32 AM"
src="https://github.com/user-attachments/assets/02a60892-e678-413e-a7d4-5c6d39980cd2"
/>


## Resolves #34170 
Labels page no longer re-renders unnecessarily

- [x] QA'd all new/changed functionality manually
- [x] Confirmed that the fix is not expected to adversely impact load
test results
2025-10-15 15:03:54 -07:00
Luke Heath 5b82dd71eb Update Enroll OTA page with new styles (#34300) 2025-10-15 16:06:08 -05:00
RachelElysia 17245ab0ac Fleet UI: Payload-free software installs (#33979) 2025-10-15 09:41:43 -04:00
Sarah Gillespie 36ecfb7a43 Hide show disk encryption key option for third-party MDM hosts (#34201) 2025-10-14 15:54:58 -05:00
Juan Fernandez 04d937c2c6 Fixed UI bug with org logo on My Device page (#34084)
Resolves #33136 

Changed display logic for the organization logo component on the 'My
Device' page to prevent flickering.
2025-10-14 15:51:06 -04:00
Magnus JensenandSarah Gillespie d99afbe9aa Better api error for EUA manual macOS profile download (#34101)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #33447 

User error:
<img width="1020" height="213" alt="image"
src="https://github.com/user-attachments/assets/daa90fa3-aa43-4734-9f29-4744ca6fb3e2"
/>

As far as I could tell it was not possible to customize the error
message shown when installing the failing profile.
We have some code that mentions iOS/iPadOS and after replicating, it
seems it does not work the same for macOS.


# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] Added/updated automated tests

- [x] QA'd all new/changed functionality manually

---------

Co-authored-by: Sarah Gillespie <73313222+gillespi314@users.noreply.github.com>
2025-10-14 16:33:12 -03:00
Magnus Jensen 1ed190b6ce fix missing space in tooltip for windows and linux locked tags (#34197)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->

Saw this small missing space when doing the engineering test plan run
for lost mode #30889
2025-10-14 13:25:07 -03:00
Ian Littman 13c98e158f Don't show edit option for host vitals labels, error if landing on edit UI for a host vitals label (#34139)
Fixes #34010. Also switches the landing page on edit error to the labels
list from hosts filtered by the label, since the next step is likely
"delete the label and add it back."

<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements)

## Testing

- [x] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [x] Confirmed that the fix is not expected to adversely impact load
test results
2025-10-14 10:52:03 -05:00
Ian Littman 14b3350eaa Fix icon key name in "View YAML" modal (#34140)
Fixes #34060.

- [x] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [x] Confirmed that the fix is not expected to adversely impact load
test results
2025-10-14 10:18:29 -05:00
Tim Lee 2b18caaee1 Add Jetbrains plugins (#34024) 2025-10-14 09:01:45 -06:00
RachelElysia f6489356fc Fleet UI: Fix some unreleased bugs for 4.75 (#34098) 2025-10-14 10:53:32 -04:00
Gabriel Hernandez 8977037ff1 add UI to support lock and unlock for ios and ipad devices (#33869)
**Related issue:** Resolves #33417

This adds the UI to support locking and unlocking ios and ipad devices.
This allows the users with the correct permission to lock and unlock
these devices from the host details page host actions dropdown. It also
adds these activities to the upcoming activities feed.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually
2025-10-14 15:03:21 +01:00
Gabriel Hernandez c843c1e3b5 fix copy for company owned unenrollment modal (#34026)
**Related issue:** Resolves #33807

This is a quick fix to show the copy correctly for company enrolled
unenrollment modal.

We also improve the naming of the enrollment status checks
2025-10-13 12:19:10 +01:00
Gabriel Hernandez 0aa6a2ca16 update activities for installing software via ios/ipad (#34027)
**Related issue:** Resolves #33703

quick change to UI to support ios and ipad setup experience install
software activity
2025-10-13 12:18:28 +01:00
Gabriel Hernandez 0d62636c75 allow file protocol in org contact url in UI (#34078)
**Related issue:** Fixes #32902

This allows file protocol urls when setting a support URL via the UI.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [x] QA'd all new/changed functionality manually
2025-10-13 12:18:07 +01:00
Dante Catalfamo 56e12f4aca Fix WhatsApp and VS Code icons not displaying correctly (#33887)
**Related issue:** Resolves #28388

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] QA'd all new/changed functionality manually
2025-10-10 16:57:46 -07:00
Magnus Jensen 897350079c Fix typo in install software preview for windows and linux (#34037) 2025-10-10 09:21:31 -03:00
Juan Fernandez a6d1bd1e81 Added link component to live query results (#34019)
**Related issue:** Resolves #33249 

Added link component shown in the Host column to the host details page.
2025-10-09 12:15:13 -04:00
Noah Talerman e7e1e1548f Fleet product copy tweak (#34020)
- "IdP":
https://fleetdm.com/guides/foreign-vitals-map-idp-users-to-hosts
2025-10-09 10:00:39 -04:00
RachelElysia 9858f04071 Fleet uI: Script batch fix unreleased font size, padding (#33956) 2025-10-08 13:31:57 -04:00
RachelElysia f21e9f67b2 Fleet UI: Remove install tooltip and add timestamp to InstallDetails modal (#33991) 2025-10-08 13:30:58 -04:00
Scott GressandIan Littman 4697123f6e Stop setup experience on software install fail: admin (#33968)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #33110 
**Related issue:** Resolves #33109  

# Details

This PR implements the new "cancel setup if any software fails on macos"
flag, including both backend and frontend logic.

Half of the file changes are updating test expectations / auto-generated
schema.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
- [X] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements)

## Testing

- [X] Added/updated automated tests
- [X] QA'd all new/changed functionality manually

## New Fleet configuration settings

- [ ] Verified that the setting is exported via `fleetctl
generate-gitops`
`macos_setup` is still excluded from generate-girtops
- [X] Verified the setting is documented in a separate PR to [the GitOps
documentation](https://github.com/fleetdm/fleet/blob/main/docs/Configuration/yaml-files.md#L485)
Documented [here](https://github.com/fleetdm/fleet/pull/33016/files)
- [X] Verified that the setting is cleared on the server if it is not
supplied in a YAML file (or that it is documented as being optional)
- [X] Verified that any relevant UI is disabled when GitOps mode is
enabled


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- New Features
- Added a macOS setup option: “Cancel setup if software install fails.”
  - Configure at global or team level; team settings override global.
- Toggle available in Setup Experience > Install software > Advanced
options.
  - Saved state persists and can be updated without leaving the page.
  - Devices honor the resolved setting during provisioning.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ian Littman <iansltx@gmail.com>
2025-10-08 17:51:52 +01:00
Gabriel Hernandez 09b7f56a64 add UI to support install software for ios and ipad on setup experience (#33973)
**Related issue:** Resolves #33701

Adds the UI needed to install software for ios and ipad during the setup
experience.

> NOTE: the video still needs to be recorded and placed in the code for
ios and ipad

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [ ] Added/updated automated tests
- [x] QA'd all new/changed functionality manually
2025-10-08 16:20:00 +01:00