Composite actions / reusable workflows, one per concern:
- run-suite: inputs = suite artifact, runner kind, target name; runs and uploads the canonical results JSON as an artifact. Per-target logs under
::group::.
- aggregate: downloads results artifacts, runs the validator (fails the check on any transport invariant or case failure), publishes the markdown matrix (job summary) and viewer JSON.
- publish-viewer: deploys the static viewer + aggregate to Pages.
- The seam between "componentize/compose" and "execute" must be a designed artifact boundary, not incidental: webcrypto needed exactly this for its WebKit leg (build artifacts on ubuntu, execute on macos). Cross-OS target matrices depend on it.
- Optional-target semantics surfaced correctly: missing results for an optional target is a warning annotation, never a red check; wrong results always red.
- Targets run in parallel after a single shared artifact-build phase, each capped by a timeout.
Composite actions / reusable workflows, one per concern:
::group::.