Duplicate copies of a logically-single entity scattered across the codebase; the agent updating the entity must find and update every copy consistently.
The entity exists once; the agent reasons about one canonical object referenced everywhere.
Before the refactoring
// every order carries its own Customer copyorders.forEach(o => o.customer = { name: 'Acme' });
After the refactoring
const acme = customerRepository.find('Acme');orders.forEach(o => o.customer = acme);
The agent must coordinate updates across every copy; identity becomes ambiguous and the agent can't tell which copy is canonical.
Sharing references introduces lifetime and visibility ambiguities (who owns this? when does it get freed?) the agent must reason about; the original value-copies sidestepped this.
Updates land in one place; storage shrinks; the agent reasons about the entity as a single referent with meaningful identity.
Sharing references without explicit ownership creates lifetime ambiguities the agent must model — the cure introduces a different category of bug than the original duplication.