Can middleware be deployed and versioned separate from the app code

I am experimenting with middleware.ts however I am still a bit confused on how the versioning and deployment of it should look like in a production setting. Here is my current understanding of the middleware:

  • Each deployment is a full, self-contained version of the app—including both the app logic and any middleware logic.
  • On deployment, the middleware code is bundled and runs for all requests to that deployment (unless excluded by matcher).
  • Each deployment has its own version of middleware.
  • On deployment, Vercel creates a new deployment with its own unique URL
    - If I change the middleware and redeploy, only the new deployment has the updated middleware.

I have a production environment with disabled auto-assign production domain for new production deployments. When I make a change on the middleware.ts only the new Production Preview deployment (N) includes the new version of the code. Meaning, requests hitting the production domain that is assigned to the Current (N-1) production will be subject to the older version of the middleware. So, I am forced to go through a somewhat awkward process of promoting to the latest deployment for the sake of updating the middleware for requests hitting my production domain.
Is this how it’s intended by Vercel?