Context
Mutation-testing run against main (b850e2fec11b1966d2b73670ae56b5eff195284e), mutmut 3.6.0, local run 2026-07-10: 1025 mutants, 151 killed, 235 survived, 639 no-tests.
This issue covers environment parsing and category defaults in hooks/post-turn-quality-stop-hook.py: 23 real-gap survivors across parse_env, parse_max_output, and default_categories (a further two parse_env mutants are equivalent and recorded in the worklist).
Surviving mutants
hooks/post-turn-quality-stop-hook.py:881 — os.environ.get("POST_TURN_BASE_REF", "origin/main"): variable-name mutations (XX…XX, lower-case), default-value mutations (None, removed, "XXorigin/mainXX", "ORIGIN/MAIN"), and base_ref = None (x_parse_env__mutmut_1, 3–9).
hooks/post-turn-quality-stop-hook.py:882 — POST_TURN_ALWAYS_FETCH variable-name mutations and always_fetch = None (x_parse_env__mutmut_10, 16, 17).
hooks/post-turn-quality-stop-hook.py:883 — POST_TURN_MAX_OUTPUT_CHARS variable-name and default mutations ("XX12000XX") and max_out = None (x_parse_env__mutmut_19, 25–27).
hooks/post-turn-quality-stop-hook.py:852 — parse_max_output signature default 12000 → 12001 (x_parse_max_output__mutmut_1).
hooks/post-turn-quality-stop-hook.py:69 — default_categories() key and value mutations: each of "python_ts", "rust", "markdown" wrapped as XX…XX or upper-cased, and each False → True (x_default_categories__mutmut_1–9).
Analysis
TestParseEnvCompush asserts only the compush element of the four-tuple, so the base-ref, always-fetch, and max-output elements mutate freely, including the environment-variable names themselves (case-sensitive on Linux, so the lower-case mutants are observable). parse_max_output is exercised only with a valid "12000", leaving the fallback default unasserted. default_categories() has no direct test; its survivors also feed detect_categories, which sits in the no-tests bucket.
Suggested tests
- Parametrized
parse_env tests that set and unset each of POST_TURN_BASE_REF, POST_TURN_ALWAYS_FETCH, and POST_TURN_MAX_OUTPUT_CHARS, asserting all four returned values exactly (defaults ("origin/main", False, 12000, False); overridden values respected).
parse_max_output("not-a-number") returns exactly 12000 (kills the 12001 signature mutant).
default_categories() == {"python_ts": False, "rust": False, "markdown": False} asserted by equality (kills all nine key/value mutants).
Full worklist: triage worklist.md; dataset SHA b850e2f.
Context
Mutation-testing run against
main(b850e2fec11b1966d2b73670ae56b5eff195284e), mutmut 3.6.0, local run 2026-07-10: 1025 mutants, 151 killed, 235 survived, 639 no-tests.This issue covers environment parsing and category defaults in
hooks/post-turn-quality-stop-hook.py: 23 real-gap survivors acrossparse_env,parse_max_output, anddefault_categories(a further twoparse_envmutants are equivalent and recorded in the worklist).Surviving mutants
hooks/post-turn-quality-stop-hook.py:881—os.environ.get("POST_TURN_BASE_REF", "origin/main"): variable-name mutations (XX…XX, lower-case), default-value mutations (None, removed,"XXorigin/mainXX","ORIGIN/MAIN"), andbase_ref = None(x_parse_env__mutmut_1,3–9).hooks/post-turn-quality-stop-hook.py:882—POST_TURN_ALWAYS_FETCHvariable-name mutations andalways_fetch = None(x_parse_env__mutmut_10,16,17).hooks/post-turn-quality-stop-hook.py:883—POST_TURN_MAX_OUTPUT_CHARSvariable-name and default mutations ("XX12000XX") andmax_out = None(x_parse_env__mutmut_19,25–27).hooks/post-turn-quality-stop-hook.py:852—parse_max_outputsignature default12000→12001(x_parse_max_output__mutmut_1).hooks/post-turn-quality-stop-hook.py:69—default_categories()key and value mutations: each of"python_ts","rust","markdown"wrapped asXX…XXor upper-cased, and eachFalse→True(x_default_categories__mutmut_1–9).Analysis
TestParseEnvCompushasserts only thecompushelement of the four-tuple, so the base-ref, always-fetch, and max-output elements mutate freely, including the environment-variable names themselves (case-sensitive on Linux, so the lower-case mutants are observable).parse_max_outputis exercised only with a valid"12000", leaving the fallback default unasserted.default_categories()has no direct test; its survivors also feeddetect_categories, which sits in the no-tests bucket.Suggested tests
parse_envtests that set and unset each ofPOST_TURN_BASE_REF,POST_TURN_ALWAYS_FETCH, andPOST_TURN_MAX_OUTPUT_CHARS, asserting all four returned values exactly (defaults("origin/main", False, 12000, False); overridden values respected).parse_max_output("not-a-number")returns exactly12000(kills the12001signature mutant).default_categories() == {"python_ts": False, "rust": False, "markdown": False}asserted by equality (kills all nine key/value mutants).Full worklist: triage
worklist.md; dataset SHAb850e2f.