- Add SettingsOauth tests that reject redirect URIs off the provider
callback route and accept the callback route with or without a
trailing slash
- Add a compose preview test checking that every domain of a
multi-domain service gets a PR-prefixed domain and its own Traefik
Host rule
- Add a clone test checking that cloning a service to another server
keeps its generated database credentials and copies its volumes
- Refresh template_last_updated_at timestamps in the service templates
Cloning a clone added another "-clone-<id>" to the name, so after about
seven clones the name was longer than 255 characters and the insert failed.
Closes#9976
The UI service clone iterated relation builders before parse() created
the sub-resources, so no volume copy ever ran. All service clone paths
now use clone_service(), which parses first and matches volumes by
mount path. VolumeCloneJob no longer forces chown 1000:1000.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>