This is an automated email from the ASF dual-hosted git repository.
olamy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
The following commit(s) were added to refs/heads/master by this push:
new 498bb7f7d Update architecture docs for unified test provider (#3313)
498bb7f7d is described below
commit 498bb7f7d52c4e2cdcb66d04b331a046074e73dc
Author: Sebastian Tiemann <[email protected]>
AuthorDate: Tue Mar 17 07:26:44 2026 +0100
Update architecture docs for unified test provider (#3313)
* docs: shrink documentation to new technical structure
* docs: replace old provider lookup, diagram and table with updated
information
* docs: add breaking changes paragraph for JUnit for 3.6.
* docs: move changes to provider model and new stack trace handling
features to architecture.md
* docs: improve distinction between old and new provider model title
* docs: improve distinction between old and new provider model
---------
Signed-off-by: Sebastian Tiemann <[email protected]>
---
.../src/site/markdown/architecture.md | 177 ++++++++++++--
.../src/site/markdown/pr-3179-unified-provider.md | 266 ---------------------
2 files changed, 152 insertions(+), 291 deletions(-)
diff --git a/maven-surefire-plugin/src/site/markdown/architecture.md
b/maven-surefire-plugin/src/site/markdown/architecture.md
index 9270ab238..9e3b2539e 100644
--- a/maven-surefire-plugin/src/site/markdown/architecture.md
+++ b/maven-surefire-plugin/src/site/markdown/architecture.md
@@ -19,8 +19,6 @@ under the License.
# Apache Maven Surefire — Architecture Overview
-> Architecture reference for the `master` branch (version 3.5.x).
-> For the upcoming 3.6.0 changes, see [PR #3179 — Unified JUnit Platform
Provider](pr-3179-unified-provider.md).
## What is Surefire?
@@ -32,7 +30,9 @@ Apache Maven Surefire is the test execution framework for
Maven. It ships three
| **maven-failsafe-plugin** | Runs integration tests during `integration-test`
/ `verify` phases |
| **maven-surefire-report-plugin** | Generates HTML test reports from XML
results |
-Surefire supports JUnit 3, JUnit 4, JUnit 5 (Jupiter), TestNG, and plain POJO
tests — each via a dedicated **provider** module. Tests execute in a **forked
JVM** that communicates results back to Maven through a binary event stream
protocol.
+Surefire supports JUnit 3, JUnit 4, JUnit 5 (Jupiter), TestNG, and plain POJO
tests. <br>
+Until 3.5.x, each type was executed via a dedicated provider module. From
3.6.0 on, there is only one unified provider. <br>
+Tests execute in a **forked JVM** that communicates results back to Maven
through a binary event stream protocol.
---
@@ -71,11 +71,7 @@ graph TD
end
subgraph "Providers — Loaded in Forked JVM"
- JP["surefire-junit-platform<br/><i>JUnit 5 / Jupiter</i>"]
- J4["surefire-junit4"]
- J47["surefire-junit47<br/><i>Parallel + categories</i>"]
- J3["surefire-junit3<br/><i>JUnit 3 + POJO</i>"]
- TNG["surefire-testng"]
+ JP["surefire-junit-platform<br/><i>unified provider for all JUnit 3+
versions</i>"]
end
subgraph "Shading"
@@ -180,6 +176,37 @@ The command line for the forked JVM is built by one of
three `ForkConfiguration`
## Provider Model
+### old Provider Model 3.5.x
+
+```mermaid
+graph LR
+ subgraph "Before — 3.5.x (5 providers)"
+ M1["AbstractSurefireMojo"] -->
PD1["ProviderDetector<br/>(priority-based)"]
+ PD1 --> JP1["surefire-junit-platform"]
+ PD1 --> TNG1["surefire-testng"]
+ PD1 --> J471["surefire-junit47"]
+ PD1 --> J41["surefire-junit4"]
+ PD1 --> J31["surefire-junit3"]
+ end
+```
+
+
+### new Provider Model since 3.6.0
+
+```mermaid
+graph LR
+ subgraph "After — 3.6.0 (1 provider)"
+ M2["AbstractSurefireMojo"] --> PD2["Simplified detection"]
+ PD2 --> JP2["surefire-junit-platform"]
+ JP2 --> VE["Vintage Engine<br/>(JUnit 3/4)"]
+ JP2 --> JE["Jupiter Engine<br/>(JUnit 5)"]
+ JP2 --> TE["TestNG Engine<br/>(TestNG)"]
+ end
+```
+
+The five `ProviderInfo` implementations (`JUnit3ProviderInfo`,
`JUnit4ProviderInfo`, `JUnitCoreProviderInfo`, `TestNgProviderInfo`,
`JUnitPlatformProviderInfo`) are collapsed into a unified detection path that
always selects `surefire-junit-platform`. Framework-specific configuration
(TestNG groups, JUnit 4 categories, parallel execution) is now **mapped to
JUnit Platform launcher configuration** rather than being handled by
framework-specific providers.
+
+
### SurefireProvider SPI
Every test framework adapter implements `SurefireProvider` (in `surefire-api`):
@@ -199,6 +226,8 @@ public interface SurefireProvider {
### Provider implementations
+### 3.5.x: old implementation
+
| Provider | Module | Test framework | Key classes |
|----------|--------|---------------|-------------|
| **JUnit 3 + POJO** | `surefire-junit3` | JUnit 3.x, plain POJOs |
`JUnit3Provider`, `PojoTestSetExecutor` |
@@ -207,29 +236,69 @@ public interface SurefireProvider {
| **TestNG** | `surefire-testng` | TestNG 4.7+ | `TestNGProvider`,
`TestNGExecutor` |
| **JUnit Platform** | `surefire-junit-platform` | JUnit 5, any JUnit Platform
engine | `JUnitPlatformProvider`, `LauncherAdapter` |
-### Auto-detection
-When no provider is manually configured, Surefire scans the test classpath and
selects the **first applicable** provider:
+| Framework | Before (3.5.x) | After (3.6.0) |
+|-----------|----------------|---------------|
+| **JUnit 3** | Supported natively | Requires JUnit 4.12+ dependency (runs via
Vintage Engine) |
+| **JUnit 4** | 4.0+ | **4.12+** (runs via Vintage Engine) |
+| **JUnit 5** | Any | Any (unchanged) |
+| **TestNG** | 4.7+ | **6.14.3+** (runs via TestNG JUnit Platform Engine) |
+| **POJO tests** | Supported | **Removed** |
-```mermaid
-flowchart TD
- Start["Scan test classpath"] --> SPI{"SPI
configured?<br/>(META-INF/services)"}
- SPI -->|Yes| UseSPI["Use SPI provider(s)"]
- SPI -->|No| JP{"JUnit Platform<br/>on classpath?"}
- JP -->|Yes| UseJP["Use surefire-junit-platform"]
- JP -->|No| TNG{"TestNG<br/>on classpath?"}
- TNG -->|Yes| UseTNG["Use surefire-testng"]
- TNG -->|No| J47{"JUnit ≥4.7 AND<br/>(parallel OR groups)?"}
- J47 -->|Yes| UseJ47["Use surefire-junit47"]
- J47 -->|No| J4{"JUnit 4.x<br/>on classpath?"}
- J4 -->|Yes| UseJ4["Use surefire-junit4"]
- J4 -->|No| J3["Use surefire-junit3<br/>(always applicable — fallback)"]
-```
+### Breaking Changes since 3.6.0
-The priority order is defined in `AbstractSurefireMojo.createProviders()`.
Surefire resolves the provider's dependencies at runtime via
`SurefireDependencyResolver` and adds them to the forked JVM's classpath — the
provider JAR is never a compile-time dependency of the plugin.
+| Change | Impact | Mitigation |
+|--------|--------|------------|
+| **JUnit 3 standalone** no longer supported | Projects using only JUnit 3
must add JUnit 4.12+ dependency | Add `junit:junit:4.12` — test code unchanged |
+| **JUnit 4 < 4.12** no longer supported | Upgrade to JUnit 4.12+ | Mechanical
version bump |
+| **TestNG < 6.14.3** no longer supported | Upgrade to TestNG 6.14.3+ |
Mechanical version bump |
+| **POJO tests** removed | Tests without framework annotations won't be found
| Add `@Test` annotations |
+| **Category expression syntax** changed | Complex boolean group expressions
may behave differently under JUnit Platform tag expressions | Review and test
group filter configurations |
+| **Provider selection** changed | Manually configured legacy providers still
work (via SPI) but auto-detection always chooses JUnit Platform | Pin surefire
3.5.x or add legacy provider as dependency |
---
+#### JUnit 3 tests still work
+
+JUnit 3 test code does not need to change. You only need to ensure your
project depends on JUnit 4.12+ (which includes JUnit 3 API compatibility). The
Vintage Engine executes JUnit 3 and JUnit 4 tests transparently.
+
+#### POJO tests removed
+
+The `LegacyPojoStackTraceWriter` and POJO test detection
(`PojoTestSetExecutor`) are removed. Tests must use a recognized framework
annotation (`@Test` from JUnit or TestNG).
+
+### Group / category filtering
+
+The custom JavaCC-based category expression parser (`surefire-grouper`) is
replaced by JUnit Platform's native **tag expression** syntax. For most users,
`<groups>` and `<excludedGroups>` configuration works unchanged, but the
underlying evaluation engine is different. Complex boolean expressions may need
review.
+
+### Backward compatibility options
+
+If upgrading causes issues, users have two fallback paths:
+
+1. **Pin Surefire 3.5.x** — stay on the previous version:
+ ```xml
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>3.5.4</version>
+ </plugin>
+ ```
+
+2. **Use a legacy provider as a plugin dependency** (transitional):
+ ```xml
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>3.6.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit3</artifactId>
+ <version>3.5.4</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ ```
+
## Communication Protocol
The forked JVM communicates with Maven through a **binary event stream**.
Events flow one-way: fork → Maven. Commands flow the other way: Maven → fork.
@@ -411,3 +480,61 @@ mvn compile -f surefire-grouper/pom.xml
```
**Requirements**: Maven 3.6.3+, JDK 8+ (source level 8, `animal-sniffer`
enforces Java 8 API).
+
+---
+
+## Stack trace filtering
+
+A new `StackTraceProvider` optimizes memory usage by truncating stack traces
to 15 frames and filtering JDK packages by default. This is configurable:
+
+```xml
+<configuration>
+ <stackTraceFilterPrefixes>
+ <prefix>org.springframework.</prefix>
+ <prefix>org.junit.</prefix>
+ </stackTraceFilterPrefixes>
+</configuration>
+```
+
+When not specified or empty, the default filters (`java.`, `javax.`, `sun.`,
`jdk.`) apply.
+
+---
+
+## Stack Trace Memory Optimization
+
+### Problem
+
+To associate console output with test classes, Surefire captures stack traces
for every output line. With full stack traces (25–30 frames typical), this
consumed 600–1,800 bytes per line.
+
+### Solution
+
+The new `StackTraceProvider` class (in `surefire-api`) introduces:
+
+- **Frame limit**: Maximum 15 frames per stack trace (sufficient to capture
the test class after surefire framework frames)
+- **Package filtering**: JDK packages (`java.`, `javax.`, `sun.`, `jdk.`)
filtered by default
+- **Configurable prefixes**: Users can specify custom filter prefixes that
**replace** (not add to) the defaults
+
+### Memory impact
+
+| Metric | Before | After |
+|--------|--------|-------|
+| Frames per trace | 25–30 | ≤15 |
+| Bytes per output line | 600–1,800 | 300–600 |
+| Estimated savings | — | ~50% |
+
+### Configuration
+
+```xml
+<!-- Custom prefixes (replaces defaults) -->
+<configuration>
+ <stackTraceFilterPrefixes>
+ <prefix>org.springframework.</prefix>
+ <prefix>org.junit.</prefix>
+ </stackTraceFilterPrefixes>
+</configuration>
+```
+
+```bash
+# Command line
+mvn test -Dsurefire.stackTraceFilterPrefixes=org.springframework.,org.junit.
+```
diff --git
a/maven-surefire-plugin/src/site/markdown/pr-3179-unified-provider.md
b/maven-surefire-plugin/src/site/markdown/pr-3179-unified-provider.md
deleted file mode 100644
index 1a07f6ab7..000000000
--- a/maven-surefire-plugin/src/site/markdown/pr-3179-unified-provider.md
+++ /dev/null
@@ -1,266 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# PR #3179 — Unified JUnit Platform Provider
-
-> Summary of changes introduced by [PR
#3179](https://github.com/apache/maven-surefire/pull/3179)
(`test-junit-platform-runner-junit4` → `master`).
-> For the current architecture, see [architecture.md](architecture.md).
-
-## Executive Summary
-
-PR #3179 consolidates all test execution in Maven Surefire under a **single
provider**: `surefire-junit-platform`. Instead of maintaining five separate
provider implementations (JUnit 3, JUnit 4, JUnit 4.7+, TestNG, JUnit
Platform), all test frameworks now run through the JUnit Platform
infrastructure:
-
-- **JUnit 4** tests (4.12+) execute via the **Vintage Engine**
-- **TestNG** tests (6.14.3+) execute via the **TestNG JUnit Platform Engine**
-- **JUnit 5** tests run natively via the **Jupiter Engine**
-
-The result is a net deletion of **~26,000 lines** across 726 files, a version
bump to **3.6.0-SNAPSHOT**, and a dramatically simplified provider architecture.
-
----
-
-## Motivation
-
-From the PR description:
-
-> The main advantage will be to have **only a single implementation to
maintain** as listener/reporter/launcher of test running platform. Without such
change there are **5 implementations to maintain** which makes any changes
extra work which doesn't help to get new contributors to help.
-
-The five-provider architecture meant that every change to reporting, console
output, parallel execution, or stream handling required updates in up to five
places. This was a significant barrier to both maintenance and new feature
development.
-
----
-
-## What Changes for Users
-
-### Minimum version requirements
-
-| Framework | Before (3.5.x) | After (3.6.0) |
-|-----------|----------------|---------------|
-| **JUnit 3** | Supported natively | Requires JUnit 4.12+ dependency (runs via
Vintage Engine) |
-| **JUnit 4** | 4.0+ | **4.12+** (runs via Vintage Engine) |
-| **JUnit 5** | Any | Any (unchanged) |
-| **TestNG** | 4.7+ | **6.14.3+** (runs via TestNG JUnit Platform Engine) |
-| **POJO tests** | Supported | **Removed** |
-
-### JUnit 3 tests still work
-
-JUnit 3 test code does not need to change. You only need to ensure your
project depends on JUnit 4.12+ (which includes JUnit 3 API compatibility). The
Vintage Engine executes JUnit 3 and JUnit 4 tests transparently.
-
-### POJO tests removed
-
-The `LegacyPojoStackTraceWriter` and POJO test detection
(`PojoTestSetExecutor`) are removed. Tests must use a recognized framework
annotation (`@Test` from JUnit or TestNG).
-
-### Group / category filtering
-
-The custom JavaCC-based category expression parser (`surefire-grouper`) is
replaced by JUnit Platform's native **tag expression** syntax. For most users,
`<groups>` and `<excludedGroups>` configuration works unchanged, but the
underlying evaluation engine is different. Complex boolean expressions may need
review.
-
-### Backward compatibility options
-
-If upgrading causes issues, users have two fallback paths:
-
-1. **Pin Surefire 3.5.x** — stay on the previous version:
- ```xml
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>3.5.4</version>
- </plugin>
- ```
-
-2. **Use a legacy provider as a plugin dependency** (transitional):
- ```xml
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>3.6.0</version>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven.surefire</groupId>
- <artifactId>surefire-junit3</artifactId>
- <version>3.5.4</version>
- </dependency>
- </dependencies>
- </plugin>
- ```
-
-### New feature: Stack trace filtering
-
-A new `StackTraceProvider` optimizes memory usage by truncating stack traces
to 15 frames and filtering JDK packages by default. This is configurable:
-
-```xml
-<configuration>
- <stackTraceFilterPrefixes>
- <prefix>org.springframework.</prefix>
- <prefix>org.junit.</prefix>
- </stackTraceFilterPrefixes>
-</configuration>
-```
-
----
-
-## Architecture Changes
-
-### Before vs. After: Provider model
-
-```mermaid
-graph LR
- subgraph "Before — 3.5.x (5 providers)"
- M1["AbstractSurefireMojo"] -->
PD1["ProviderDetector<br/>(priority-based)"]
- PD1 --> JP1["surefire-junit-platform"]
- PD1 --> TNG1["surefire-testng"]
- PD1 --> J471["surefire-junit47"]
- PD1 --> J41["surefire-junit4"]
- PD1 --> J31["surefire-junit3"]
- end
-```
-
-```mermaid
-graph LR
- subgraph "After — 3.6.0 (1 provider)"
- M2["AbstractSurefireMojo"] --> PD2["Simplified detection"]
- PD2 --> JP2["surefire-junit-platform"]
- JP2 --> VE["Vintage Engine<br/>(JUnit 3/4)"]
- JP2 --> JE["Jupiter Engine<br/>(JUnit 5)"]
- JP2 --> TE["TestNG Engine<br/>(TestNG)"]
- end
-```
-
-The five `ProviderInfo` implementations (`JUnit3ProviderInfo`,
`JUnit4ProviderInfo`, `JUnitCoreProviderInfo`, `TestNgProviderInfo`,
`JUnitPlatformProviderInfo`) are collapsed into a unified detection path that
always selects `surefire-junit-platform`. Framework-specific configuration
(TestNG groups, JUnit 4 categories, parallel execution) is now **mapped to
JUnit Platform launcher configuration** rather than being handled by
framework-specific providers.
-
-### Module-level impact
-
-| Module | Lines changed | What changed |
-|--------|--------------|-------------|
-| **maven-surefire-common** | +432/−452 (source), +130/−330 (tests) |
`AbstractSurefireMojo` rewritten: provider selection simplified, TestNG/JUnit4
config mapped to JUnit Platform. `ConsoleOutputFileReporter` refactored. 1 test
class removed. |
-| **surefire-api** | +189/−394 | `LegacyPojoStackTraceWriter` removed.
`StackTraceProvider` added (memory optimization). Console output events now
carry stack trace data. Stream decoder updated. |
-| **surefire-grouper** | +0/−1,104 | **Gutted**: JavaCC grammar
(`category-expression.jj`), `GroupMatcher` hierarchy (`And`, `Or`, `Inverse`,
`Single`, `Join`), and all tests removed. Module still exists but is minimal. |
-| **surefire-booter** | +48/−59 | `ForkedBooter` updated for new provider
config. `PpidChecker` improvements. `EventChannelEncoder` adjusted for new
stream format. |
-| **maven-surefire-plugin** | +96/−169 | Site documentation rewritten for
unified provider. POJO test docs removed. |
-| **maven-failsafe-plugin** | +21/−26 | Aligned with surefire-plugin changes. |
-| **.mvn** | +45/−12 | Build cache config added, Maven config file added. |
-
-### Key source changes
-
-#### `AbstractSurefireMojo` (maven-surefire-common)
-
-The central Mojo class sees the largest logical change. The
`createProviders()` method, which previously returned an array of 7
`ProviderInfo` implementations evaluated in priority order, is simplified to
always select `surefire-junit-platform`. Framework detection logic (checking
for JUnit 4 vs TestNG on the classpath) is replaced with configuration mapping
— when TestNG is detected on the classpath, its groups/suites configuration is
translated into JUnit Platform launcher discovery requests.
-
-#### `surefire-api` event model
-
-Standard stream events (`StandardStreamOutEvent`, etc.) gain a stack trace
field via the new `StackTraceProvider`, allowing console output lines to be
associated with the test class that produced them. This is the data model
change that enables the memory optimization.
-
-#### `surefire-grouper` removal
-
-The entire JavaCC parser and `GroupMatcher` class hierarchy are deleted. The
JUnit Platform has its own [tag
expression](https://junit.org/junit5/docs/current/user-guide/#running-tests-tag-expressions)
language that replaces this functionality. The `surefire-grouper` module is
retained as a minimal shell but no longer contains the expression parser.
-
-#### `ProviderInfo` interface
-
-A new method is added to `ProviderInfo` to support the unified model. The
interface now includes `addProviderProperties()` for passing framework-specific
configuration to the JUnit Platform provider.
-
----
-
-## Stack Trace Memory Optimization
-
-### Problem
-
-To associate console output with test classes, Surefire captures stack traces
for every output line. With full stack traces (25–30 frames typical), this
consumed 600–1,800 bytes per line.
-
-### Solution
-
-The new `StackTraceProvider` class (in `surefire-api`) introduces:
-
-- **Frame limit**: Maximum 15 frames per stack trace (sufficient to capture
the test class after surefire framework frames)
-- **Package filtering**: JDK packages (`java.`, `javax.`, `sun.`, `jdk.`)
filtered by default
-- **Configurable prefixes**: Users can specify custom filter prefixes that
**replace** (not add to) the defaults
-
-### Memory impact
-
-| Metric | Before | After |
-|--------|--------|-------|
-| Frames per trace | 25–30 | ≤15 |
-| Bytes per output line | 600–1,800 | 300–600 |
-| Estimated savings | — | ~50% |
-
-### Configuration
-
-```xml
-<!-- Custom prefixes (replaces defaults) -->
-<configuration>
- <stackTraceFilterPrefixes>
- <prefix>org.springframework.</prefix>
- <prefix>org.junit.</prefix>
- </stackTraceFilterPrefixes>
-</configuration>
-```
-
-```bash
-# Command line
-mvn test -Dsurefire.stackTraceFilterPrefixes=org.springframework.,org.junit.
-```
-
-When not specified or empty, the default filters (`java.`, `javax.`, `sun.`,
`jdk.`) apply.
-
----
-
-## Breaking Changes
-
-| Change | Impact | Mitigation |
-|--------|--------|------------|
-| **JUnit 3 standalone** no longer supported | Projects using only JUnit 3
must add JUnit 4.12+ dependency | Add `junit:junit:4.12` — test code unchanged |
-| **JUnit 4 < 4.12** no longer supported | Upgrade to JUnit 4.12+ | Mechanical
version bump |
-| **TestNG < 6.14.3** no longer supported | Upgrade to TestNG 6.14.3+ |
Mechanical version bump |
-| **POJO tests** removed | Tests without framework annotations won't be found
| Add `@Test` annotations |
-| **Category expression syntax** changed | Complex boolean group expressions
may behave differently under JUnit Platform tag expressions | Review and test
group filter configurations |
-| **Provider selection** changed | Manually configured legacy providers still
work (via SPI) but auto-detection always chooses JUnit Platform | Pin surefire
3.5.x or add legacy provider as dependency |
-
----
-
-## Community Discussion
-
-Key points from the PR conversation:
-
-- **Vintage Engine longevity**: The JUnit 6 release notes mark Vintage Engine
as "deprecated." JUnit team member [@sormuras](https://github.com/sormuras)
clarified: *"It's deprecated, but not for removal. Not slowly, not abruptly,
not 'everly'."* The Vintage Engine will be maintained as long as users need it,
and may eventually become a standalone project.
-
-- **TestNG engine coverage**: TestNG contributor
[@juherr](https://github.com/juherr) noted the
[testng-engine](https://github.com/junit-team/testng-engine) *"does not yet
cover all TestNG features and still sees relatively limited adoption."*
However, they view the change positively for the Java community and are
confident issues would be fixed quickly.
-
-- **Migration approach**: The 3.6.x line will start with alpha/beta releases
focused on multi-provider simplification (no new features initially). Users can
always fall back to 3.5.x if issues arise.
-
----
-
-## Files Changed Summary
-
-**204 commits** | **726 files** | **+4,280 additions** | **−30,006 deletions**
-
-| Status | Count |
-|--------|-------|
-| Modified | 78 |
-| Removed | 17 |
-| Added | 4 |
-| Renamed | 1 |
-
-### Notable removals
-
-- `surefire-grouper/` — all GroupMatcher classes, JavaCC grammar, and tests
(13 files)
-- `surefire-api/` — `LegacyPojoStackTraceWriter` and its tests (2 files)
-- `maven-surefire-common/` — `AbstractSurefireMojoJunitCoreProvidersInfoTest`
(1 file)
-- `maven-surefire-plugin/` — POJO test documentation (1 file)
-
-### Notable additions
-
-- `surefire-api/.../StackTraceProvider.java` — stack trace memory optimization
-- `maven-surefire-common/.../surefire.junit.version.properties` — JUnit
version detection resource
-- `.mvn/maven-build-cache-config.xml` + `.mvn/maven.config` — build
configuration