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

2.5 KiB

Task 1 — the Wave 0 red set is empty, and the lanes are removed

Command

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:

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.