A comment explaining why each layer is where it is, and a fifth layer inserted in the wrong place anyway.
$client = new LoggingClient(
new CachingClient( // ← added in July
new RetryingClient(
new SigningClient(
new RateLimitedClient($psr18),
),
),
),
);
// the cache now stores a SIGNED request's response,
// keyed on a URI that does not include the signature.
// which works, until a cached response is served for a
// request whose signature has expired.
A comment describing an order is read by whoever changes it and not by whoever extends it, which is the failure mode of documentation as a mechanism. The fix is a test asserting the composition — three lines, constructing the stack and walking it — which is enforceable in a way a comment is not.