Shared libraries between services recouple them

A package holding the shared domain model removes duplication and reintroduces exactly the coupling the split was for: a change to it requires every consumer to upgrade, which is a coordinated release wearing a version number.

// fine to share: no domain knowledge, changes rarely
"shop/http-client": "^2.0",
"shop/logging": "^1.4",

// not fine: every service now agrees on what an Order is
"shop/domain-models": "^3.7",

The distinction is whether the library encodes a decision two services must agree on. Infrastructure — a logger, a client, a correlation-id middleware — is safe. A shared model is a shared kernel, which is a legitimate relationship and should be chosen deliberately rather than arrived at by refactoring duplication away. Some duplication between contexts is the price of independence.