overengineeringstudio / overengineeringstudio/effect-utils

genie githubWorkflow: support concurrency.queue single|max

Open
#923 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:genie
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:

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 emit queue unless requested.
  • Serialize single and max unchanged.
  • Fail closed for the statically invalid literal combination queue: 'max' plus cancel-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-progress expressions unless their incompatibility can be proven statically.

Acceptance criteria

  • GitHubWorkflowArgs.concurrency accepts queue: 'single' | 'max' and rejects other literals.
  • Job-level concurrency receives 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: max passes validation.
  • A validation test proves literal queue: max plus cancel-in-progress: true fails with an actionable diagnostic.
  • Existing concurrency generation remains byte-stable when queue is 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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.