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
jacobshandling
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
RachelElysia
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 Gress
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 Jensen
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 Gress
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