A version written into a manifest is written into every manifest that wants the package, and the copies drift. The catalog moves the number out of the manifest: a manifest names the package, the workspace names the version. Only names that already resolve to exactly one version move, so nothing installs differently -- 1424 resolutions are unchanged. Three kinds stay where they are: a name used at two specifiers, because the catalog would pick a winner; a name an override already decides, because pnpm records the overridden specifier; and a name whose one specifier resolved to two versions, because one entry would unify them.
Common
Shared libraries, tools, and utilities that predate a better home.
Warning
common/is a holding pen, not a destination — the goal is to shrink it, not grow it. A catch-all "common" reliably rots into a junk drawer: unscoped, unenforced, imported by everything — a second monolith with worse boundaries than the first. The name itself is the smell; context-named homes are the cure. Unlikeproducts/*(tach + turbo), nothing mechanically guards what lands here, so this disclaimer is the only thing keeping it honest.
New code should go somewhere with a real boundary first — products/<name>/, tools/, services/, or packages/ (a clean, published-style leaf like packages/quill). Land code in common/ only when none of those fit and it can't yet be a clean leaf because it still imports app modules (lib/*, scenes/*). When it can stand alone, graduate it out to packages/ or the owning product and delete it from here. See AGENTS.md for the agent-facing version.
- Internal RFC: https://github.com/Insights/product-internal/pull/703
- Keep folder names
under_scorecased — dashes break Python imports