Release 0.9.0: the 1.0 candidate - #114
Merged
Merged
Conversation
…s catch-up Every decision of the 1.0-readiness review lands here, so the tag after this one can be 1.0.0 without a change to the surface. Breaking on 0.x, and a minor for that reason: - forget() on a retired or reset double answers ForgottenDouble, like every other facade (it went through stateOf() now); it said the object "is not one". - One rule for the two specification exceptions: shape -> InvalidCallSpecification, value -> InvalidSpecificationArgument. invertedBounds() and invalidPattern() move to InvalidSpecificationArgument beside unknownType(); tests, docs and check-claims follow. - Outcome and Cardinality are @internal (no public path accepts or returns either); Invocation::recordOutcome() and __construct() are @internal; WhenBuilder is closed by contract in its docblock (a @Final tag would make Psalm refuse ExpectBuilder); FailureKind growth policy written down. - Docblocks the API reference renders: checkpoint() spans every live context, verify() documents $never, expectSequence() loses its lone @api tag, Arg::bool(), WhenBuilder::throws(), Invocation readers and seven exception factories get summaries. docs/src/api/** regenerated; completeness budgets lowered to the new measurement. - bin/consumer-smoke: five parity idioms (CardinalityAfterVerb, VoidReturnsChain reported; NamedBoundsSwapped, HelperReceiver, FirstClassCallable silent). - SKILL.md caught up with the engine (nullable returns, four functions, allOf/ anyOf/rest/captor, expectSequence, lean, delegate); README ×2, llms.txt and eight site pages carry the 0.8.0/0.3.0/0.2.0 corrections they had missed. - Rector green again (red since v0.7.0); infection ^0.35; property-testing-testo ^0.9; .vale.ini export-ignore; mutation gate stays 92 with the measurement (94.1%, three mutants above 94) recorded beside the number.
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: Warning Your free Security trial is over. An organization admin can upgrade to Advanced for continuous pull request security review or dismiss this notice. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The 1.0 candidate: every decision of the 1.0-readiness review (
docs/reviews/review-understudy-2026-09-05-release-1.0.md, «Принятые решения») lands here, so the tag after this one can be1.0.0without a change to the surface. A minor rather than a patch — two of the changes are breaking on 0.x, and the compatibility job tolerates them because the CHANGELOG heading declares the boundary.forget()answersForgottenDoublefor a double that is gone (A-1). Called twice, or after areset(), it said «expects an understudy created byUnderstudy::for(). This object is not one» — anInvalidCallSpecificationabout an object that was one. It goes throughstateOf()now, like every other facade.InvalidCallSpecificationis about the shape of a specification,InvalidSpecificationArgumentabout a value inside it.invertedBounds()andinvalidPattern()move toInvalidSpecificationArgumentbesideunknownType(); acatch (InvalidCallSpecification)around those two paths becomescatch (InvalidSpecificationArgument)orcatch (UnderstudyError).OutcomeandCardinalityare@internal(A-4, A-5): no public path accepted or returned either.Invocation::recordOutcome()and__construct()are@internal(A-3).WhenBuilderis closed by contract in its docblock (A-6 — a@finaltag makes Psalm refuseExpectBuilder, verified). HowFailureKindgrows is written down (A-7): a new case may arrive in a minor, somatchwith adefaultarm.checkpoint()spans every live context;verify()documents$never;expectSequence()loses its lone@apitag; summaries forArg::bool(),WhenBuilder::throws(), theInvocationreaders and seven exception factories.docs/src/api/**regenerated (theOutcomeandCardinalitypages are gone); completeness budgets lowered to the new measurement.bin/consumer-smoke(B-2):CardinalityAfterVerbandVoidReturnsChainmust be reported,NamedBoundsSwapped,HelperReceiverandFirstClassCallablemust be silent.VoidReturnsChainneeds understudy-phpstan 0.5.1 (Release 0.5.1: chain-aware understudy.returns, bridge to the 0.9 engine understudy-phpstan#32) — merge that first, or the extension's next CI run against coremastergoes red on exactly the row that exists to catch it.SKILL.mdcaught up with the engine (R-4): nullable returns, four free functions,allOf/anyOf/rest/captor,expectSequence(),lean(),delegate().shouldNotHaveReceived()row, theArg::rest()analyser note, the stability sentence),llms.txt(Outcome,Cardinality, the exception table), eight site pages that had missed the 0.8.0/0.3.0/0.2.0 corrections.infection/infection ^0.35(H-2),rasuvaeff/property-testing-testo ^0.9(H-3),.vale.iniexport-ignore(H-4). Mutation gate stays 92 (H-6): the run measures 94.1 %, three mutants above 94 — less than the CI count moves between runs; the reason is beside the number.Not in this PR, by design
docs/.api-workspacepins (R-3): they need the satellites'^0.9-capable releases on Packagist first — follow-up after the four bridge releases.bulkhead,circuit-breaker,openapi-contract,property-testing-openapi,yii3-correlation-id,yii3-filestorage,yii3-idempotency,yii3-metrics,yii3-metrics-prometheus) before the freeze.Verification
composer buildgreen (Unit 993 + Integration 27, examples),composer rectorgreen,docs/scripts/check-claims.php66 claims,npm run docs:checkpassed (34@apitypes, every page reachable),make mutation: 3093 mutants, Covered Code MSI 94 %.