Skip to content

ci: sync the dev group in the workflows that run ci_unit.sh (ADR-1122) - #910

Merged
github-actions[bot] merged 1 commit into
mainfrom
ci/mutation-workflows-dev-group
Nov 6, 2026
Merged

github-actions[bot] merged 1 commit into
mainfrom
ci/mutation-workflows-dev-group

Conversation

@cdeust

@cdeust cdeust commented Nov 6, 2026

Copy link
Copy Markdown
Owner

Problem

scripts/ci_unit.sh ends with the ADR-1122 mutation gate, and mutmut belongs to the dev dependency group (pyproject.toml [dependency-groups]). .github/actions/uv-locked-install runs uv sync … --no-default-groups $UV_SET, but memory-exact-review.yml and supersession-delete-parity.yml pass --group lint without --group dev.

Result on #894 (run 42094398825, job 127480549016): the 15 parity tests pass, then the gate fails with error: Failed to spawn: mutmut — No such file or directory, before any mutant runs. The "surviving mutants" verdict that follows is not a real mutation result.

Change

  • Add --group dev to the set: line of both workflows.
  • Add tests_py/scripts/test_mutation_workflows_install_mutmut.py: every workflow that runs scripts/ci_unit.sh through uv-locked-install must sync --group dev. The test fails on the main version of supersession-delete-parity.yml and passes with the change.
  • CHANGELOG entry under Changed.

Checks

ci_unit.sh ends with the mutation gate and mutmut lives in the dev dependency
group; uv-locked-install syncs with --no-default-groups, so memory-exact-review
and supersession-delete-parity failed with "Failed to spawn: mutmut" before any
mutant ran (#894). A test now requires --group dev in every workflow that runs
the unit suite through uv-locked-install.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-06T12:24:36.201338Z fc12e51 PR opened
🔒 Security Review ✅ Completed 2026-11-06T12:27:22.571906Z fc12e51 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@claude

claude Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Claude finished @cdeust's task in 2m 19s —— View job


PR #910 review (1 of 3)

No Blockers. The review lists three Notes: the CHANGELOG wording for memory-exact-review, the substring match in the test, and the mutation-gate runtime and missing timeout in supersession-delete-parity.

I could not run the new test because running pytest needed an approval this job did not have. Reading the origin/main workflows shows it would fail there.

Verdict: approve

@claude

claude Bot commented Nov 6, 2026

Copy link
Copy Markdown

Review 1 of 3 (ADR-1119)

I reviewed code quality, performance, tests, docs and security, and found no Blockers.

  • Fix: uv-locked-install runs uv sync --no-default-groups (action.yml:40), and mutmut is only in [dependency-groups] dev (pyproject.toml:648-650). Adding --group dev to the set: line installs it, so the gate at scripts/ci_unit.sh:76 can find it.
  • Regression test: on origin/main, both set: lines end at --group lint, so the new test would fail there. It is collected by the normal run (testpaths = ["tests_py"]).
  • Security: mutmut 3.8.1 is hash-pinned in uv.lock. The set: values are fixed strings, the triggers stay pull_request/workflow_dispatch, and contents: read is unchanged.

Notes, no action before merge

  • CHANGELOG.md: memory-exact-review.yml only runs on workflow_dispatch, so GITHUB_BASE_REF is empty there and ci_mutation_diff.py:275-277 skips the gate. Only supersession-delete-parity could hit "Failed to spawn: mutmut".
  • test_mutation_workflows_install_mutmut.py:32: "--group dev" in value is a substring check, so --group devtools would also pass. A token match such as re.findall(r"--group[ =](\S+)", ...) would be exact.
  • supersession-delete-parity.yml head step: the full mutation gate now runs serially (MUTMUT_MAX_CHILDREN=1). It repeats the work of the ci.json unit job, and the job has no timeout-minutes. Consider GITHUB_BASE_REF= on that step or adding a timeout.

Verdict: approve

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant