Context
Only "essential (linux / uv)" is a required check on this repo. On
2026-07-17, master carried four failing tests without any red CI:
tests/test_cell_readers.py::test_save_cellpyfile_auto_extension
tests/test_cell_readers.py::test_save_cellpyfile_auto_extension_pathlib
tests/test_merge_campaign.py::test_single_test_steps_have_no_test_id_column
tests/test_merge_campaign.py::test_campaign_merges_precomputed_steps_and_summary
All four were fallout of deliberate changes (v9 default save in #521; the
cellpycore 0.2.2 bridge sync in #523) that landed green because none of the
affected tests carry the essential marker — and one of them was masking a
real bug (the campaign summary test_id concat, fixed in PR #524). The
essential-only gate is a speed/coverage trade-off that just demonstrated its
failure mode.
Options (pick one or combine)
- Add a full-suite job to the required checks. The full suite runs in
~2.5–4 min locally, so the cost is modest; keep "essential" as the fast
signal and make full (linux / uv) required too.
- Promote markers instead: sweep the suite and mark the
contract-pinning tests (save/load defaults, merge semantics, bridge
parity) as essential so the existing gate covers them. Cheaper CI,
but the four above show how easily pins are missed.
- Full suite on a merge queue / push-to-master with required status,
keeping PR CI fast. Catches breakage at merge time rather than PR time.
Recommendation: option 1 — the suite is fast enough that the marker split no
longer buys much on Linux (keep the split for the slow OS-matrix jobs).
Note: changing the required-checks set is a branch-protection (admin)
setting — the workflow change can come by PR, but an admin must flip the
requirement.
Refs
PR #524 (the fix for the four failures), #521/#523 (the changes whose
fallout slipped through).
🤖 Generated with Claude Code
Context
Only "essential (linux / uv)" is a required check on this repo. On
2026-07-17, master carried four failing tests without any red CI:
tests/test_cell_readers.py::test_save_cellpyfile_auto_extensiontests/test_cell_readers.py::test_save_cellpyfile_auto_extension_pathlibtests/test_merge_campaign.py::test_single_test_steps_have_no_test_id_columntests/test_merge_campaign.py::test_campaign_merges_precomputed_steps_and_summaryAll four were fallout of deliberate changes (v9 default save in #521; the
cellpycore 0.2.2 bridge sync in #523) that landed green because none of the
affected tests carry the
essentialmarker — and one of them was masking areal bug (the campaign summary
test_idconcat, fixed in PR #524). Theessential-only gate is a speed/coverage trade-off that just demonstrated its
failure mode.
Options (pick one or combine)
~2.5–4 min locally, so the cost is modest; keep "essential" as the fast
signal and make
full (linux / uv)required too.contract-pinning tests (save/load defaults, merge semantics, bridge
parity) as
essentialso the existing gate covers them. Cheaper CI,but the four above show how easily pins are missed.
keeping PR CI fast. Catches breakage at merge time rather than PR time.
Recommendation: option 1 — the suite is fast enough that the marker split no
longer buys much on Linux (keep the split for the slow OS-matrix jobs).
Note: changing the required-checks set is a branch-protection (admin)
setting — the workflow change can come by PR, but an admin must flip the
requirement.
Refs
PR #524 (the fix for the four failures), #521/#523 (the changes whose
fallout slipped through).
🤖 Generated with Claude Code