Silent skip for unconfigured roles in dispatch workflows
Issue: #973Date: 2026-05-15
Problem
The shim workflow dispatches stage=retro on every PR close event. On orgs that have not configured the retro agent (no fullsend role in defaults.roles), the defaults.roles gate in dispatch.yml rejects the dispatch with exit 1 and an ::error:: annotation. This produces a failed workflow run on every merged PR, creating noise in the Actions tab.
Design
Change the role-not-configured check in both dispatch workflows from a hard failure to a silent skip.
What changes
In the "Check role is enabled" step of both files:
- Before:
::error::annotation +exit 1 - After:
::notice::annotation + clear thestageoutput +exit 0
Clearing the stage output (echo "stage=" >> "${GITHUB_OUTPUT}") ensures downstream jobs gated on needs.route.outputs.stage == '<stage>' are skipped cleanly.
Files to modify
internal/scaffold/fullsend-repo/.github/workflows/dispatch.yml(per-org mode) — lines 265-266.github/workflows/reusable-dispatch.yml(per-repo mode) — lines 250-251
What stays the same
- The kill switch remains
exit 1. It is an intentional "stop everything" signal. - The role gate still blocks dispatch for unconfigured roles. The behavior is identical — only the exit code and annotation level change.
Test plan
- Update
internal/scaffold/scaffold_test.goif it asserts on the error message text. - Verify the new notice message text appears in the workflow output.
- Scenarios:
- Stage dispatched when its role is NOT in
defaults.roles— workflow exits 0, notice annotation logged, no error. - Stage dispatched when its role IS in
defaults.roles— workflow proceeds normally. - Empty
defaults.roles— all stages skip silently.
- Stage dispatched when its role is NOT in
