Root cause found. Claude Opus 4.6 debugged the real repo until it noticed a malformed symlink. As it turns out, this symlink was created and committed to git, then later on, I changed the contents of the file to be actual, unique contents instead of a symlink, but I failed to change the type of the file in git from symlink back to a normal file.
So the “path” that the symlink pointed to was thousands of characters of markdown content, rather than a regular filepath.
Fixing the type of the file in git from 120000 to 100644 fixed the issue and allows deployments to succeed.
So, not a Vercel bug, just a super niche git edge case caused by my own error. Thanks for the responses! All good now.