Artifact actions v4, and the append that no longer works

A workflow uploading to the same artifact name from four matrix jobs, which had merged them and now fails on the second.

# what broke
- uses: actions/upload-artifact@v4
  with:
    name: coverage          # ← the second job errors:
    path: coverage.xml      #   artifact already exists

# what works
- uses: actions/upload-artifact@v4
  with:
    name: coverage-${{ matrix.php }}
    path: coverage.xml

# and to reassemble
- uses: actions/download-artifact@v4
  with:
    pattern: coverage-*
    merge-multiple: true

Artifacts are immutable in v4, which is the change and is a better design — the old behaviour meant an artifact’s contents depended on job ordering. The upload is also considerably faster and the artifact is available before the job finishes, which changed how we do the coverage aggregation: it is now a separate job that downloads a pattern rather than a step that hopes everything has finished.