Only cache artwork results that were matched by album. Previously the
first track looked up in an album decided the cached answer for every
other track: the title-only fallback (and its miss) was stored under the
album key, so later tracks in the album inherited it even when a
title-specific lookup would have found artwork.
fetchAnimatedArtwork now returns a scope key alongside the result — the
album key only when album-matched, else the title key. The dedupe skips
in artwork.ts and index.ts compare against that effective scope, so
skipping within an album stays free whenever the album matched.
removes border from now-playing artwork and changes glare-effect's border-radius to match RL's artwork border-radius. Also changes positioning of now-playing content to remove empty space at top.
The previous fix (#119) used `onlyBuiltDependencies` in pnpm-workspace.yaml,
but the CI runner resolved `version: latest` to pnpm 11.1.2, where that key
was removed and replaced by `allowBuilds` (a map of name -> bool). The
`pnpm.onlyBuiltDependencies` block in package.json doesn't apply at the
workspace level either, so esbuild was still being ignored.
Changes:
- pnpm-workspace.yaml: replace `onlyBuiltDependencies: [esbuild]` with
`allowBuilds: { esbuild: true }` (pnpm 11 syntax).
- package.json: add `packageManager: pnpm@11.1.2` so the version is
reproducible across CI and local; drop the now-dead `pnpm` block.
- .github/workflows/build.yml: drop `version: latest` from
pnpm/action-setup; the action reads the version from `packageManager`.
pnpm v10 blocks dependency build/postinstall scripts by default and
requires interactive 'pnpm approve-builds' to whitelist them, which
is not usable in CI. Declare esbuild as an allowed build in both
pnpm-workspace.yaml (canonical location since pnpm 10.7) and
package.json (legacy/parity) so installs run non-interactively.