jsconsumer: reject a breaker threshold the ladder can never reach
Commit

A FloorAge longer than the time a message can spend on the ladder is a breaker that can never fire: exhaustion dead-letters the message first, every time. Configured, named in the docs and on dashboards, and inert — the ENT-1535 disease in miniature, so it is now a violation. Found by a probe another session left in the tree (4h threshold over a 5m ladder).
The bound is the dead-letter delivery itself, not the one before it, because Settle weighs quarantine ahead of exhaustion; the test pins both sides of that boundary to the nanosecond.
Deliberately NOT rejected: a threshold above CumulativeTo(DeadLetterDelivery-1), where the breaker can still fire but only on the delivery exhaustion would have handled anyway. That is a judgement about whether the breaker earns its keep, not a broken config — and on a tight bounded ladder it is the normal outcome. The documented adopter config is exactly that case, which the Retry doc now says outright: RecoverBy 4 forces FloorAge above 15m while the ladder dead-letters at 20m, so the breaker accelerates nothing there. It is the clearest statement yet of why the breaker ships observe-only and may be deleted; a consumer keeping a long ladder for other failure classes is where it would have room.
Two tests carried incoherent schedules (no ladder, default AckWait) that the new check flagged before the violation they actually assert. Given real ladders.
Refs ENT-1601, ENT-1535.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01AJNdqGnT92NC2TRnpf8MNr Entire-Checkpoint: f9c64da1924e