pnpm workspaces in a monorepo: the setup that survived CI on Railway and the problems the docs don't warn you about

The correct fix for speeding up installs in a TypeScript monorepo is adding more constraints to package resolution. I know that sounds backwards — intuition says "if something's broken, loosen the config." But with pnpm workspaces, loosening hoisting is exactly what turns a stable CI into one that fails in a different way every single time.

My thesis: pnpm workspaces is the best option for TypeScript monorepos in 2026, but the happy path in the docs hides three traps that only appear in CI with real deployments. These aren't rare edge cases. They're exactly what happens when the 5-step tutorial works fine locally and the first Railway deploy throws an error that appears in no README anywhere.

This post isn't a setup guide. It's an analysis of what comes after setup — when you already have the pnpm-workspace.yaml, the monorepo boots locally, and CI starts breaking in ways that have no direct documentation.

The real state of pnpm workspaces: what the docs say and what they leave out