Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased

- Mutation testing now counts code the tests execute but do not name in `#[Covers]` (`infection --threads=max --with-uncovered`); the `PublicVisibility` mutator is off and default values in parameter lists are ignored. No `src/` changes.

## 0.3.0 — 2026-10-15

- Add `CompiledPipeline::call(..., ?Context $context)`: every layer obeys a `rasuvaeff/context` budget (#11). The context is checked before anything starts; retry runs `withContext()`; a `ContextAwareBulkhead` caps its slot wait by the budget; the callback receives the context (only when one is given). `fallback` is skipped only when this call's context is cancelled; its expiry, and everything without a context, still reach the fallback. `Rejection::is()` stays `false` for context exceptions.
Expand Down
5 changes: 4 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,10 @@
"cs": "php-cs-fixer fix --dry-run --diff --config=.php-cs-fixer.php",
"cs:fix": "php-cs-fixer fix --diff --config=.php-cs-fixer.php",
"docs": "php vendor/bin/doc-exec README.md README.ru.md",
"mutation": "infection --threads=max",
"mutation": [
"Composer\\Config::disableProcessTimeout",
"infection --threads=max --with-uncovered"
],
"psalm": "psalm --no-cache",
"rector": "rector process --dry-run",
"rector:fix": "rector process",
Expand Down
20 changes: 19 additions & 1 deletion infection.json5
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,24 @@
"testFramework": "testo",
"minMsi": 96,
"mutators": {
"@default": true
"@default": true,
// Constructor/method parameter declarations with a default value
// (`private int $x = 100,`, `bool $strict = false,`): the mutant sits on a
// signature line with no executable opcode under pcov, so it is reported Not
// Covered whatever the tests do. Only a type-prefixed `$name = default,` line
// matches; a body line cannot (no type before the variable). Do NOT add ^ or $:
// Infection wraps the pattern as ^-\s*REGEX$ over the removed diff line.
// Verified 2026-11-01 by diffing the survivor lists with and without it:
// bulkhead 6, circuit-breaker 13, json-ld 19 mutants removed, all of them
// such signature lines; Escaped and Timed Out unchanged.
"global-ignoreSourceCodeByRegex": [
"(?:(?:private|protected|public|readonly)\\s+)*\\??[A-Za-z_\\\\][\\w\\\\|]*\\s+\\$\\w+\\s*=\\s*[^,;]+,"
],
// Off: with --with-uncovered a PublicVisibility mutant sits on a parameterless
// method's signature line, which has no executable opcode under pcov/xdebug,
// so it is reported Not Covered and can never be killed, whatever #[Covers]
// says. Measured on pinned-http-client 2026-11-01: 4 of 4 such mutants were
// Not Covered, none killed.
"PublicVisibility": false
}
}
Loading