Skip to content

Commit ada8a70

Browse files
Record simplified concurrency experiment result
1 parent a5b4e30 commit ada8a70

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

  • docs/content/specification/workflow-triggers

docs/content/specification/workflow-triggers/design.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ The reusable entry point, `.github/workflows/workflow.yml`, routes events into c
1515

1616
Use three mutually exclusive entry jobs with literal concurrency policies. The production and activity jobs each call the complete processing workflow, retaining their concurrency slot until its nested jobs finish. The close job calls only closure coordination and cleanup. A small framework-owned preflight records invocation identity before these jobs become eligible; it performs no planning, version resolution, or module execution.
1717

18-
This avoids an expression-valued `queue`, whose official parser support is stronger than its documented examples, and avoids a short-lived admission job that releases its slot before the pipeline starts. `Plan` and version resolution execute inside the processing call, after admission.
18+
This avoids an expression-valued `queue` and a short-lived admission job that releases its slot before the pipeline starts. A live GitHub.com experiment accepted an expression-valued `queue` for an uncontended run and for pull-request replacement, but concurrent production invocations failed before creating jobs rather than entering the `max` queue. The framework therefore uses literal policies. `Plan` and version resolution execute inside the processing call, after admission.
1919

2020
### Platform contract
2121

@@ -36,7 +36,7 @@ These are [GitHub's concurrency guarantees][concurrency] and [Actions limits][li
3636
| Option | Trade-offs | Verdict |
3737
| --- | --- | --- |
3838
| Internal router with literal per-track policies | Adds one reusable-workflow layer; keeps caller configuration small and protects the complete pipeline. | Chosen. |
39-
| Conditional workflow-level concurrency | Fewer internal jobs, but conditional `queue` needs live-service evidence beyond parser support. | Not required for this design. |
39+
| One conditional workflow-level group | Fewer internal jobs, but a conditional `queue` plus conditional cancellation fails concurrent production admission before jobs run. A static `max` queue cannot cancel PR activity; a static `single` queue cannot retain the production burst. | Rejected. |
4040
| Caller-owned concurrency | Can protect the entire caller, but duplicates policy and can discard work before the framework receives it. | Rejected for the standard caller. |
4141
| One cancelable group for activity and closure | Close can supersede activity natively, but reopening or another update can cancel cleanup. | Rejected. |
4242
| Concurrency only on publication or on a short admission job | Allows planning/version races or releases the lock before processing ends. | Rejected. |

0 commit comments

Comments
 (0)