|
2 | 2 |
|
3 | 3 | All notable changes to this project are documented here. |
4 | 4 |
|
5 | | -## [3.3.1] (Unreleased) |
| 5 | +## [3.3.1] |
6 | 6 |
|
7 | 7 | ### Fixed |
8 | 8 |
|
9 | | -- **BUG-15** — `--fast` / `--fast-branch` no longer leave non-accelerable jobs (`phpunit`, `paratest`, `phpcpd`, `script`, `custom`, `composer-*`) running their full suites when the effective input set is empty (no staged files / no diff vs base). The skip is now universal: any job — accelerable or not, with or without `paths` declared — is skipped with reason `no changes to validate` when the mode produced no input. Restores parity with the v2.x contract ("nothing changed = nothing to run"). Implemented in [`FlowPreparer::filterJobForMode()`](../src/Execution/FlowPreparer.php#L244) via a new universal guard backed by [`ExecutionContext::isEffectiveSetEmpty()`](../src/Execution/ExecutionContext.php). Decision-table coverage in [`tests/Unit/Execution/FlowPreparerTest.php`](../tests/Unit/Execution/FlowPreparerTest.php) (`it_filters_jobs_per_mode_decision_table` with 20 rows). |
| 9 | +- `--fast` / `--fast-branch` no longer leave non-accelerable jobs (`phpunit`, `paratest`, `phpcpd`, `script`, `custom`, `composer-*`) running their full suites when the effective input set is empty (no staged files / no diff vs base). The skip is now universal: any job — accelerable or not, with or without `paths` declared — is skipped with reason `no changes to validate` when the mode produced no input. Restores parity with the v2.x contract ("nothing changed = nothing to run"). Implemented in [`FlowPreparer::filterJobForMode()`](../src/Execution/FlowPreparer.php#L244) via a new universal guard backed by [`ExecutionContext::isEffectiveSetEmpty()`](../src/Execution/ExecutionContext.php). Decision-table coverage in [`tests/Unit/Execution/FlowPreparerTest.php`](../tests/Unit/Execution/FlowPreparerTest.php) (`it_filters_jobs_per_mode_decision_table` with 20 rows). |
10 | 10 |
|
11 | | -## [3.3.0] (Unreleased) |
| 11 | +## [3.3.0] |
12 | 12 |
|
13 | 13 | ### New Features |
14 | 14 |
|
@@ -125,12 +125,12 @@ GitHooks now declaratively watches RSS consumption per job and across the whole |
125 | 125 |
|
126 | 126 | The four legacy camelCase keys inherited from v2 inside `jobs.<name>` are deprecated in favour of their kebab-case counterparts. Both forms keep working in v3.3.x; the camelCase forms will be **removed in v4.0**. |
127 | 127 |
|
128 | | -| camelCase (deprecated) | kebab-case (canonical) | |
129 | | -|---|---| |
130 | | -| `executablePath` | `executable-path` | |
131 | | -| `otherArguments` | `other-arguments` | |
132 | | -| `ignoreErrorsOnExit` | `ignore-errors-on-exit` | |
133 | | -| `failFast` | `fail-fast` | |
| 128 | +| camelCase (deprecated) | kebab-case (canonical) | |
| 129 | +| ---------------------- | ----------------------- | |
| 130 | +| `executablePath` | `executable-path` | |
| 131 | +| `otherArguments` | `other-arguments` | |
| 132 | +| `ignoreErrorsOnExit` | `ignore-errors-on-exit` | |
| 133 | +| `failFast` | `fail-fast` | |
134 | 134 |
|
135 | 135 | - **Runtime warning**: every command that loads the config (`flow`, `flows`, `job`, `conf:check`, `system:info`) emits a `Deprecated: 'X' is renamed to 'Y'. Will be removed in v4.0.` line on stderr per camelCase key found. |
136 | 136 | - **Structured output**: a new root-level `deprecations[]` block in JSON v2 (and `runs[0].properties.deprecations` in SARIF) lists each detection as `{job, oldKey, newKey, removalVersion, kind}`. As a side-effect, the JSON v2 also gains a root `warnings[]` field (always present, empty when no warnings) — useful for CI dashboards and AI consumers. |
|
0 commit comments