pnpm resolves peer dependencies per dependent rather than once for the whole tree. If two packages depend on the same library but supply different peers, pnpm creates separate instances under node_modules/.pnpm, with directory names encoding the peer resolution such as lib@1.0.0_react@18.3.1.
This is correct isolation, but it breaks libraries that rely on module-level singletons: two copies of a React context, two Prisma clients, or two instances of a plugin registry that no longer see each other's registrations. The symptom is a runtime error about a missing provider or a hook called outside its context, with no obvious duplicate in pnpm list.
Diagnose with pnpm why <package>, which shows every path and peer combination. The settings that collapse duplicates are dedupe-peer-dependents, on by default since pnpm 9, and resolution-mode. When a genuine singleton is required, add the package to the root and use pnpm.overrides to force one version across the workspace.