The agent finds setters on a class whose values should only be set at construction; every late-mutation site is using setters for one-shot assignment.
Construction is the only path to setting these fields; the agent reasons about the object as immutable-after-construction.
Before the refactoring
class Person {setName(n) { this._name = n; }}
After the refactoring
class Person {constructor(name) { this._name = name; }name() { return this._name; }}
Late mutations break the agent's reasoning about invariants between operations; the agent must trace every setter call to verify timing assumptions.
Removing a setter forces every legitimate update through a more meaningful method; the agent must verify each setter call has a domain action that justifies replacing it.
The agent reasons about the class as immutable-after-construction; bugs from late mutation vanish; the API expresses what users can actually do.
Removing setters that meaningfully encoded a domain state change — like markPaid() coordinating paidAt+status — without replacing them with the equivalent domain method strips the semantic anchor.