Skip to content

Commit 64554dd

Browse files
salma-remyxclaude
andauthored
outrider.yml: key the concurrency group per dispatch target (#118)
`group: outrider` with cancel-in-progress:false permits exactly one *pending* run, and when a third dispatch arrives GitHub cancels the one already waiting — not the newcomer — with no error and no annotation. Firing four targets at one repo produced one run, one survivor, and two cancellations that read as CI flakes rather than lost work (field notes on remyxai/remyxai-cli#49). Keyed per target instead: distinct papers/branches run in parallel (they touch different branches), a genuine duplicate of the same target still queues behind its predecessor, and anything unpinned falls back to run_id so a dispatch is never cancelled unless it's provably a duplicate. Index syntax because a bad workflow-level expression invalidates the whole workflow. outrider-daily.yml and outrider-weekly-refine.yml keep their static groups deliberately — every drafter run commits to the same accumulated intel branch, so two in flight would race on the push. Serializing is protective there. This file is both this repo's own runner and the template customer installs fetch (`remyxai outrider setup-local --two-tier`, and the engine's refiner fetch), so the fix reaches new installs only once the `v1` tag is re-pointed. Engine-side twin: remyxai/remyx#558 (same keying in render_workflow_yaml). Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent bad0a20 commit 64554dd

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

.github/workflows/outrider.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,20 @@ on:
4949
default: ''
5050

5151
concurrency:
52-
group: outrider
52+
# Keyed by what THIS dispatch works on, not a flat "outrider". GitHub allows
53+
# exactly one *pending* run per group, and when a third arrives it cancels the
54+
# one already waiting — not the newcomer — with no error and no annotation. So
55+
# a batch of dispatches at one repo silently lost work: four targets produced
56+
# one run, one survivor, and two cancellations that read as CI flakes.
57+
#
58+
# Per-target keys let distinct papers/branches run in parallel (they touch
59+
# different branches), while a genuine duplicate of the same target still
60+
# queues behind its predecessor. Unpinned runs fall back to run_id: never
61+
# cancel a dispatch we can't prove is a duplicate.
62+
#
63+
# Index syntax, not dot: a bad workflow-level expression invalidates the whole
64+
# workflow, and hyphenated property names are only documented as safe indexed.
65+
group: outrider-${{ inputs['pin-arxiv'] || inputs['start-from-ref'] || github.run_id }}
5366
cancel-in-progress: false
5467

5568
jobs:

0 commit comments

Comments
 (0)