Files
clean-architecture-backend-…/docs/superpowers/plans/evidence/2026-08-15-wave6-final/task1-wave0-red-set.md
T

55 lines
2.5 KiB
Markdown

# Task 1 — the Wave 0 red set is empty, and the lanes are removed
## Command
```bash
cd src
./gradlew wave0RedReport --console=plain --no-daemon
```
`BUILD SUCCESSFUL in 43s` — but that says nothing on its own, and this is the important part of the
evidence rather than a caveat to it. Both `wave0Red` lanes set `ignoreFailures = true`, because they
were reports rather than gates: their job was to answer "what is still red from the baseline?", not
to fail a build. A green exit code from a report is not a claim about the tests.
## What the results actually say
```
app-bootstrap/build/test-results/wave0Red: 0 classes, 0 tests, 0 failures, 0 skipped
messaging/messaging-observability/build/test-results/wave0Red: 0 classes, 0 tests, 0 failures, 0 skipped
```
Zero tests, because no test carries the tag any more:
```bash
grep -rc 'wave0-red' $(git ls-files '*.java') # no match in any tracked Java source
```
The three Wave 0 characterizations — the full-`test` scanner failure, the five-switch-off bean and
resource inventory, and the local/dev boot and Compose merge reproductions — became ordinary tests as
the waves that fixed them landed, and their `@Tag("wave0-red")` markers came off with them. The red
set is empty by the only measure that matters: there is nothing left tagged.
## Why the lanes are deleted rather than kept
Two reasons, and the second is the one that generalises.
1. The plan says so, and its reason holds: a permanent lane for an empty set is a lane that stops
being read.
2. These lanes are the exact shape the Wave 5 lane convention exists to refuse. A tag filter that
matches nothing does not fail — `failOnNoDiscoveredTests` applies to discovery and a tag excludes
after discovery — so the lane runs, executes zero tests, and reports success. Here that is
harmless, because the lanes are reports and their emptiness is the answer. But leaving two
hand-rolled lanes in that shape, outside the convention that would have refused them, is leaving
a template for the next lane somebody copies.
Removed:
- `src/build.gradle` — the `wave0RedReport` aggregate
- `src/app-bootstrap/build.gradle` — the `wave0Red` lane and the `test { excludeTags 'wave0-red' }`
- `src/messaging/messaging-observability/build.gradle` — the same pair
The `excludeTags` removal matters as much as the lane removal: it was what kept tagged
characterizations out of the ordinary suite. With no tagged test left it is inert, and leaving it
would silently exclude any future test that reused the tag.