mirror of
https://github.com/hanzoai/ci.git
synced 2026-10-20 15:28:05 +00:00
The test phase can be silenced — by an input a caller passes, by a default, or by a forge that substitutes a value the caller never wrote — and a skipped step is not a failed one, so the run reported success either way. Skipping the tests and passing the tests produced the same signal. So the phase no longer reports on itself. It leaves a receipt naming the commit it tested, and `Test verdict` — a step carrying no `if:` at all, which no input can therefore reach — reads that receipt and decides. No receipt, a receipt for another commit, an empty `test:` list, or gates that say they test and report nothing: each fails and names why. The count comes from the runners' own output, because a flag says what was intended and only a count says what happened. Opting out stays available and stops being quiet: `tests: 'false'` writes its own receipt and the summary says SKIPPED BY CALLER in as many words. Two gates hold the shape: every workflow_call input is `type: string` with a default, since this forge hands an input its declared type's zero value; and the verdict must exist, be unguarded, follow both receipt-writing steps and precede both build lanes. Measured over 102 repos' last completed runs: 54 gates declare a runner and report results, 7 declare one and report nothing — and all 7 are repos already red, so nothing green turns red.