The sweep rode the same workflow run as the PR event that woke it, so every displacement in the shared labels-reconcile queue recorded a CANCELLED reconcile check on some PR — fake red CI that held review requests. The reconcile + issueflow jobs move, unchanged, to a new reusable labels-sweep.yml behind their own caller; labels.yml gains a trigger job that dispatches the consumer's sweep caller with the plain GITHUB_TOKEN (workflow_dispatch is a documented no-retrigger exemption) on every event that used to run reconcile. A displaced sweep now cancels on the Actions tab, attached to no PR; PR checks show scope + trigger. Because every trigger-driven wake arrives as workflow_dispatch, the event name alone no longer separates the operator's manual bootstrap from an event-woken sweep: the sweep caller's bootstrap dispatch input does — the trigger passes no, a bare manual dispatch defaults to yes. The sweep reusable also takes pr_workflow_name, exported as SELF_WORKFLOW for the #208 reconciler (harmless to earlier ones; zero file overlap with #208). The trigger is deliberately loud: a pin bumped without the sweep caller, its bootstrap input, or actions: write on the labels caller goes red at the trigger job instead of silently never sweeping again — documented in docs/CONSUMERS.md with the split stubs and the atomic-adoption note. Refs #209 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
565 B
565 B
Changed
- The reconcile sweep is detached from PR-triggered runs: a new reusable
labels-sweep.ymlcarries it, woken bylabels.yml's newtriggerjob, so a queue-displaced sweep cancels on the Actions tab instead of landing a cancelledreconcilecheck on a PR (#209). - Labels consumers add a sweep caller (
labels-sweep.yml, stub in docs/CONSUMERS.md), relocate the hourly cron and manual bootstrap dispatch to it, and grant the labels calleractions: write; a pin bump without the sweep caller goes loudly red at the trigger job (#209).