overengineeringstudio / overengineeringstudio/effect-utils
genie githubWorkflow: support concurrency.queue single|max
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 82
- Forks
- 2
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 121
Description
Context
GitHub Actions now supports concurrency.queue at workflow and job scope. queue: single preserves the default one-pending-run replacement behavior; queue: max retains up to 100 pending runs in the concurrency group. GitHub rejects queue: max together with cancel-in-progress: true.
Official documentation: https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#concurrency
@overeng/genie cannot currently express this documented field. Its shared Concurrency type contains only group and cancel-in-progress, and is used by both GitHubWorkflowArgs.concurrency and Job.concurrency:
- https://github.com/overengineeringstudio/effect-utils/blob/348be5df590265d02d6a5bc11b5b4990b8f0157e/packages/%40overeng/genie/src/runtime/github-workflow/mod.ts#L241-L244
- https://github.com/overengineeringstudio/effect-utils/blob/348be5df590265d02d6a5bc11b5b4990b8f0157e/packages/%40overeng/genie/src/runtime/github-workflow/mod.ts#L246-L254
- https://github.com/overengineeringstudio/effect-utils/blob/348be5df590265d02d6a5bc11b5b4990b8f0157e/packages/%40overeng/genie/src/runtime/github-workflow/mod.ts#L265-L280
Proposed API
Extend the existing shared type with the exact documented literal union:
type Concurrency = {
group: string
'cancel-in-progress'?: boolean | Expression
queue?: 'single' | 'max'
}
This keeps workflow- and job-level behavior aligned and rejects misspelled or speculative queue modes at compile time. Do not add a raw-string escape hatch.
Safety semantics
- Preserve omission as the GitHub default (
single); do not emitqueueunless requested. - Serialize
singleandmaxunchanged. - Fail closed for the statically invalid literal combination
queue: 'max'pluscancel-in-progress: true, either through the existing actionlint validation path or a focused built-in validator if the pinned actionlint does not yet recognize the new syntax. - Do not reject
cancel-in-progressexpressions unless their incompatibility can be proven statically.
Acceptance criteria
-
GitHubWorkflowArgs.concurrencyacceptsqueue: 'single' | 'max'and rejects other literals. - Job-level
concurrencyreceives the same support through the shared type. - Unit tests assert exact generated YAML for
queue: single,queue: max, and omission. - An actionlint integration test proves a generated workflow using supported
queue: maxpasses validation. - A validation test proves literal
queue: maxpluscancel-in-progress: truefails with an actionable diagnostic. - Existing concurrency generation remains byte-stable when
queueis omitted. -
dt test:genie,dt genie:check, and the repository's TypeScript checks pass.
Downstream need
schickling/schickling-stiftung#216 adds event-driven deployment-status reconciliation. Several authoritative workflow completions can arrive while one reconciliation is running. GitHub's default single policy replaces an already-pending run, which can discard an intermediate reconciliation trigger. queue: max lets these trusted triggers serialize instead; each run then applies and read-after-write verifies the Notion projection without concurrent writers or silent pending-run replacement.
This should be implemented once in Genie's typed GitHub workflow model rather than bypassing the generator or patching generated YAML downstream.
Posted on behalf of @schickling
| field | value |
|---|---|
agent_name |
🪙 co2-nickel |
agent_session_id |
0526b1a7-0c1a-4ad2-a70a-ad2e31639220 |
agent_tool |
Codex CLI |
agent_tool_version |
0.144.1 |
agent_runtime |
Codex CLI 0.144.1 |
agent_model |
unknown |
runtime_profile |
/nix/store/qq3avrif77r90ypqbdv3hgd3gvwj5s32-coding-agent-runtime-profile/share/coding-agents/profile.json |
skills_manifest |
/nix/store/pjlb3cwf453ghzmc8jj4v8h29sw6p4dg-agent-skills-corpus/share/agent-skills/manifest.json |
worktree |
schickling-stiftung/schickling-assistant/2026-06-19-stiftung-vrs-systems |
machine |
dev3 |
tooling_profile |
dotfiles@4b8e1c5 |
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in packages/@overeng/genie/src/runtime/github-workflow/mod.ts and trace the shared Concurrency type through GitHubWorkflowArgs.concurrency and Job.concurrency. Read the existing generation, validation, and test paths, then cover queue omission and both literal values, actionlint validation, the invalid max/cancel-in-progress combination, and the listed dt test and check commands.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, typescript
- Domain
- ci-cd, devops
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100