fix(ci): remove unsupported concurrency queue key and lint workflows - #63
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #62
GitHub Actions concurrency accepts only `group` and `cancel-in-progress`, so the `queue: max` key in the two write-capable jobs of release.yml was ignored silently: the file documented a queuing guarantee it never had. Removes the key from both blocks (matching rust#113 and js#117), clears the shellcheck findings actionlint reports in release.yml, and adds a Workflows job that runs actionlint on every change under .github/ so this class of defect fails review instead of passing unnoticed. Fixes #62
Working session summaryAll four workflow runs on the branch head passed. The work is done. PR: #63 (ready for review, working tree clean, What was wrong
Root cause of why it survivedThe issue speculated that The real cause is that nothing in the repository ever ran Changes
VerificationThree new tests in Local: One process note: partway through I ran This summary was automatically extracted from the AI working session output. |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $2.216187📊 Context and tokens usage:
Total: (92 new + 59.9K cache writes + 2.4M cache reads) input tokens, 16.1K output tokens, $2.216187 cost 🤖 Models used:
📎 Log file uploaded as Gist (1183KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
🎉 Auto-mergedThis pull request has been automatically merged by hive-mind.
Auto-merged by hive-mind with --auto-merge flag |
Summary
Fixes #62.
release.ymlcarriedqueue: maxinside the two write-capableconcurrency:blocks. The syntax
defines exactly two keys,
groupandcancel-in-progress, so GitHub ignoredqueuesilently — the file documented a queuing guarantee it never had. Thesame fix already landed in the Rust (#113)
and JS (#117)
templates; the Python template missed that sweep.
Effective behaviour is unchanged: with
cancel-in-progress: falsea startedwrite is never interrupted and GitHub holds one pending run per group. That is
now what the comment above
jobs:says.How to reproduce
actionlintdoes report the key — contrary to the issue's note, which assumedit did not. That is precisely why the second half of this PR matters: nothing
in the repository ran
actionlint, so nobody saw the message.After this PR the same command exits 0 with no output.
Changes
release.yml— droppedqueue: maxfrom bothconcurrency:blocks andrewrote the header comment to describe the behaviour the file actually has.
release.yml— cleared every shellcheck finding: quoted the three>> "$GITHUB_OUTPUT"redirections (SC2086), grouped the Docker publishconfig writes into one redirect (SC2129), and marked the manifest-digest
expansion
# shellcheck disable=SC2046with a note that the word splittingis deliberate (SC2046). The
printfformat reuse there is unchanged..github/workflows/workflows.yml(new) — runsactionlinton any changeunder
.github/, viadocker://rhysd/actionlint:1.7.7soshellcheckandpyflakeslint everyrun:block too. A native binary withoutshellcheckon
PATHskips the shell checks and still exits 0, which is worth knowingbefore reproducing a finding locally.
Tests
Three tests in
tests/test_workflows.py, all failing before the fix:test_workflow_concurrency_blocks_use_only_supported_keysscans everyworkflow and rejects any concurrency key outside
{group, cancel-in-progress}.Re-adding
queue: maxmakes it fail withrelease.yml: concurrency blocks declare ['queue'], which GitHub Actions ignores silently— verified.test_concurrency_key_parser_reports_unsupported_keyspins the parser itselfagainst a fixture, so the scanner above cannot pass by finding nothing.
test_workflow_lint_job_validates_every_workflowkeeps the actionlint job inplace, pinned to the Docker image rather than a bare binary.
test_release_workflow_separates_check_and_write_concurrencyupdated to theexpected block without the removed key.
Local checks:
pytest(88 passed),ruff check,ruff format --check,mypy src/,scripts/check_file_size.py,scripts/validate_changeset.py, andactionlintwithshellcheckonPATH— all clean.A changelog fragment is included, which is the release trigger for this repo.