Skip to content

ci: gate new code on mutation score, and run weekly - #177

Open
Taure wants to merge 1 commit into
mainfrom
ci/mutation-and-schedule
Open

ci: gate new code on mutation score, and run weekly#177
Taure wants to merge 1 commit into
mainfrom
ci/mutation-and-schedule

Conversation

@Taure

@Taure Taure commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Enables diff-scoped mutation testing and a weekly CI run, matching Taure/gakudan#71.

Mutation, diff-scoped. Only the lines a PR changes are mutated, so this gates new code without demanding a retroactive sweep of every existing test, and the job stays fast. Floor 75.

Why it is worth having: on gakudan three tests were green and completely inert - each passed against a deliberately broken implementation - while every other check stayed green. Enabling this there immediately found an untested try/catch at 0/3 mutants killed.

Also pins rebar3_mutate at ~> 0.5. The ~> 0.4.x line reports phantom survivors for a module with no matching _tests module instead of reporting that nothing ran, which is the same 'green means nothing' failure the plugin exists to prevent.

Weekly schedule. paths-ignore means a docs-only stretch produces no CI run at all, so a dependency moving underneath a pin is invisible. gakudan went ~2.5 months that way and its Postgres suite rotted unnoticed (Taure/gakudan#67). compile, checks, audit, ct and sbom all run on a schedule trigger; mutate and elp-lint stay PR-only.

Note: eunit mutation only reaches modules with a matching _tests module, since that is how eunit discovers tests.

Enables diff-scoped mutation testing and a weekly CI run, matching Taure/gakudan#71.

**Mutation, diff-scoped.** Only the lines a PR changes are mutated, so this gates new code without demanding a retroactive sweep of every existing test, and the job stays fast. Floor 75.

Why it is worth having: on gakudan three tests were green and completely inert - each passed against a deliberately broken implementation - while every other check stayed green. Enabling this there immediately found an untested try/catch at 0/3 mutants killed.

Also pins rebar3_mutate at ~> 0.5. The ~> 0.4.x line reports phantom survivors for a module with no matching _tests module instead of reporting that nothing ran, which is the same 'green means nothing' failure the plugin exists to prevent.

**Weekly schedule.** paths-ignore means a docs-only stretch produces no CI run at all, so a dependency moving underneath a pin is invisible. gakudan went ~2.5 months that way and its Postgres suite rotted unnoticed (Taure/gakudan#67). compile, checks, audit, ct and sbom all run on a schedule trigger; mutate and elp-lint stay PR-only.

Note: eunit mutation only reaches modules with a matching <module>_tests module, since that is how eunit discovers tests.
@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown

🟢 Code Coverage — 92.4%

2612 of 2826 lines covered.


🔴 Mutation Testing — 0%

0 mutants tested. 0 killed.


🟡 ELP Lint — 29 warnings

34 diagnostics found. See job logs for details.

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