When two services share an interface, Symfony resolves the ambiguity using the parameter name, which makes a rename a behaviour change.
services:
AppClientPrimaryGateway: ~
AppClientFallbackGateway: ~
# binds by NAME: $primaryGateway, $fallbackGateway
AppClientGatewayInterface $primaryGateway:
'@AppClientPrimaryGateway'
// so renaming the constructor parameter changes which
// implementation is injected, silently.
A parameter name becoming part of the wiring is the same class of surprise as named arguments becoming part of a public API, and it arrives without any of the discussion. Explicit service configuration for the ambiguous cases is more verbose and cannot be broken by a rename, which on anything security-adjacent is the right trade.