v0.3.0
A minor rather than a patch: the misuse rules now fire inside
expectSequence(), where they were silently absent, so a consumer's own code
can draw a diagnostic it did not draw before.
-
Allow
rasuvaeff/understudy^0.6. Widened rather than raised: the
extension works against 0.4, 0.5 and 0.6, and consumers on the older ones
should not be cut off from it. -
wire()'s shape disagreed with the core on a parameter naming more than
one contract. An intersection —BookRepository&Auditor— is ONE double
standing for both, which is whatWire::resolve()builds; the extension
dropped the parameter, so its key was reported as a missing offset on code
that wires and runs. A union of two object types makes the core refuse the
class outright (CannotWire), and reporting a missing key there named the
wrong mistake: no shape describes a call that never returns, so none is
produced. Fixes #16. -
The mutation gate rises from 95 to 97. Re-measured on PHP 8.4, the version
the coverage job pins: 188 of 191 mutants killed, 98.43%, with the same
three equivalent survivors the config already names. The gate is one mutant
below the measurement rather than a round number three points under it. -
expectSequence()is recognised as a specification verb. It was known to
neither spelling's list, soSpecificationRangeCollectornever recorded the
call andunderstudy.matcherLeakwas reported for every matcher inside an
armed protocol — a false report on code the engine accepts. The closure and
matcher-kind rules were silently absent on the same closures. Fixes #13. -
VerbNamesTestnow walks the core's own public surface and fails when a
closure-taking verb is missing from either list.expectSequence()was the
second verb to fall outside every rule afterlastCall(); a list nobody
checks is what let both happen. -
Both READMEs say what was only implied: the
understudy.*identifiers are
stable, because they are what a consumer writes intoignoreErrors, while
the wording of a message is not.