Use `applications` vs `services` base segment based on compose parsing
version to resolve correct directory for service-type parents. Also
normalize `fs_path` through `replaceLocalSource` before comparing to
avoid path mismatch on volume deduplication.
Add gate check to compose toggle button and use random resource ID in
test to avoid collision between parallel test runs.
Previously, LocalFileVolume::updateOrCreate only matched on mount_path +
resource, so multiple compose services binding different host files to the
same container path would overwrite each other.
- Add fs_path to the find-key in applicationParser, serviceParser, and
parseDockerComposeFile so rows are uniquely identified by both host
source and container target
- Cast Stringable $source to string in all three call sites
- Fix isReadOnlyVolume() to handle both Application and Service resources,
and match the candidate volume row by both mount_path and transformed
fs_path instead of mount_path alone
- Fix @js() usage in general.blade.php for reliable Alpine.js bool evaluation
- Add ApplicationComposeMultipleFileMountsTest covering dedup and
read-only detection across sibling mounts