The same group of fields travels together everywhere — (street, city, zip), (start, end), (firstName, lastName) — appearing as parameters, class fields, interface properties, or method args.
The agent sees the same field group appearing across multiple signatures (parameters, class fields, interface properties, args) — every site re-parses the same shape and verifies the same ordering.
The clump becomes a value object with its own name and its own behavior.
The clump becomes a named value object the agent passes through as a single token; structure validation happens once at construction.
Smellier version
function send(name, email, street, city, zip) {// ...}
Fresher version
class Address { /* street, city, zip */ }function send(name, email, address) {// ...}
Adding or removing a field of the clump means touching every site; the clump's identity is invisible.
Adding or removing a field of the clump means touching every site; the agent must find them all and update each consistently or risk silent shape drift.
Introducing the value object forces every consumer to construct and destructure it; for short-lived clumps the ceremony can outweigh the gain.
Constructing the value object on every call adds an allocation and a name the agent must learn; if the bundle isn't reused it's pure ceremony.
Operations on the clump (formatting, validation, equality) live with it; method signatures shrink.
Operations on the clump (formatting, validation, equality) live with the type; signatures carry one parameter instead of N, and edits to clump-related behavior land at one class instead of every site that previously passed the fields separately.
Wrapping field groups that don't actually represent a coherent domain concept — the object exists only to shrink signatures and has no real behavior to attract.
Wrapping coincidental field groups creates fake value objects the agent must construct and destructure with no comprehension gain — naming what isn't a concept doesn't help reason.