Files
zeekay ad95ed6ca2 State a dependency version once
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.
2026-09-08 23:21:56 -07:00
..
2026-09-08 23:21:56 -07:00
2026-09-08 23:21:56 -07:00
2026-09-08 23:21:56 -07:00
2026-09-08 23:21:56 -07:00

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. Unlike products/* (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.