v2.5.4
A hotfix for a message-loss regression introduced in v2.5.3.
Fixed
- Ordered-consumer recreate no longer loses the replay under load (#122, regression in the v2.5.3 deliver-inbox rotation). When an ordered consumer recreates after a dropped delivery, the server begins replaying on the rotated inbox the instant the new consumer exists - and those frames are dispatched during the CONSUMER.CREATE request's own read-pump, before its reply is processed. The new instance was adopted (its client-chosen name and the reset expected-sequence) only after the create returned, so the early replay frames were filtered out by the not-yet-adopted consumer name and a later one tripped a spurious gap, cascading into a recreate storm in which only the pre-gap message was delivered. This surfaced as an intermittent, load-dependent failure of the ordered-consumer dropped-delivery recovery. The instance is now adopted before the create await, and a deterministic regression test pins a replay frame arriving ahead of the create reply.
Verified: reliable under sustained CPU load (12/12, was ~2/12), full CI green (PHPStan level 8, 1611 unit, integration + behat on NATS 2.12, coverage, mutation >= 90% MSI).
Upgrade recommended for anyone on v2.5.3 using subscribeOrderedConsumer().