ci: non-product PRs (T0b) run the contract steps too

Under R1, a T0b push (test-infrastructure/, lint config, graph-ui, memwaste
tooling) selected lint and no test leg, so the static contract steps that
police exactly those files -- the VM scripts, the compose and run.sh wiring,
the venue-parity rules -- ran nowhere. Replayed over September, 13 of the 18
T0b pushes ran no contract step at all.

The R1 table now gives T0b lint + contracts, so those PRs get the
contracts job (scripts/test.sh --contracts-only) as T0a PRs do. The
fixture table's six T0b cases expect it, and the history replay asserts
that every push runs the contract steps (the contracts lane or any test
leg). Comments that described the job as docs-only are updated.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
This commit is contained in:
Martin Vogel
2026-09-30 23:48:22 +02:00
parent d3efe3baec
commit 16e2732819
7 changed files with 32 additions and 18 deletions
+4 -4
View File
@@ -261,10 +261,10 @@ jobs:
${{ runner.temp }}/test-impact/changed-files.txt
if-no-files-found: warn
# ── Docs-only PRs (tier T0a) select no test leg, so this runs the static
# contract steps of the canonical test leg on their own (they police
# docs surfaces too: language counts, version metadata). Every test leg
# runs the same steps, so the job exists only when no leg does. ──
# ── Docs-only and non-product PRs (tiers T0a, T0b) run the static contract
# steps of the canonical test leg on their own: they police docs
# surfaces (language counts, version metadata), test-infrastructure/ and
# lint config too. Every test leg runs the same steps. ──
contracts:
needs: [changes]
if: ${{ !cancelled() && needs.changes.result == 'success' && contains(fromJSON(needs.changes.outputs.lanes), 'contracts') }}