Git Integration fails after successful build for rootDirectory=web Next.js app

We have a Vercel Git Integration deployment failing for a Next.js project whose configured Root Directory is `web`.

Project:

  • name: `brenda-voice`
  • rootDirectory: `web`
  • framework: `nextjs`
  • nodeVersion: `24.x`

Failing deployment:

What happens:

  • Build completes successfully.
  • `next build`, TypeScript, and static page generation all finish successfully.
  • After build completion, Vercel marks the deployment as `Error` during finalization.

Exact error from the deployment record:

  • `ENOENT: no such file or directory, lstat ‘/vercel/path0/.next/routes-manifest-deterministic.json’`

Why this looks wrong:

  • The app lives in the `web/` subdirectory.
  • The project is configured with `rootDirectory = web`.
  • The build output is under `/vercel/path0/web/.next`, but finalization appears to be looking under `/vercel/path0/.next` at repo root.

Additional context:

  • Workspace path-length guard passes with zero filename/path violations.
  • Local app build also passes.
  • Recent production deployments for this project are failing with the same post-build behavior.

Is this a known Vercel / Next.js subdirectory-project bug around `routes-manifest-deterministic.json` lookup during deployment finalization? If so, what is the recommended workaround?

This looks like the same failure mode as the other root-directory thread: the build is happening under web/.next, but the finalizer is checking /vercel/path0/.next as if the app lived at repo root.

If you need to ship before Vercel fixes that lookup, I’d try bypassing Git Integration and using a prebuilt deploy from CI:

cd web
vercel build
vercel deploy --prebuilt --archive=tgz --target=production

If that works, the app/build is fine and the broken layer is Git Integration finalization. The other workaround is moving the Next app to repo root, but I’d only do that if this repo structure is still early and cheap to change.