Skip to content

build: qualify pytest 9.2 while preserving prior coverage - #364

Merged
HouMinXi merged 2 commits into
mainfrom
deps/pytest-9-2-qualification-20261102
Nov 2, 2026
Merged

HouMinXi merged 2 commits into
mainfrom
deps/pytest-9-2-qualification-20261102

Conversation

@HouMinXi

@HouMinXi HouMinXi commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

Scope

Reconstructs the pytest 9.1.1 → 9.2.0 dependency intent of #345 on current main 7ca84b7, without taking that old PR's unrelated history/tree. #345 is left open and untouched; this is a separately qualified draft, not a request to merge the old diff.

  • Synchronize dev, Linux main/system interpreters, and installed-wheel qualification pins.
  • Add CPython 3.12 / pytest 9.2.0 to the bounded runtime qualification after inspecting actual private lifecycle/cache sources and executing real positive/negative qualification cases.
  • Preserve the previous 9.1.1 qualification in an isolated Linux sidecar venv, rather than turning its cases into newly allowed skips. Preserve venv entrypoints during discovery.
  • Retain all existing node identities via the repository's explicit legacy long-parameter-ID setting: default 9.2 changed 244 IDs. Explicitly bind the CI command to its repository config to avoid external evidence paths influencing root discovery.
  • Update test-only custom-node and checked-hash-bytecode controls without weakening their expected outcomes; exercise plugin startup and cleanup warning failures.

No production algorithm changes, new skip allowances, timeout increases, matrix reductions, or permission changes. The only production delta is the additional qualified runtime tuple. Existing 9.1.1 support remains.

Evidence

  • Six independently dispatched full-diff lenses: no unresolved blockers; exact 15-file hashes verified before commit.
  • Related suite: 611 passed, 54 skipped. The 54 skips are existing unavailable CPython 3.9 / 3.14 qualification cases. Both CPython 3.12 versions actually ran; the original eight cases each gave 16 passed, zero skipped.
  • Three in-memory negative controls each produced one expected failure: remove bytecode cleanup, remove CI config binding, remove new runtime qualification membership. Restored source then remained unchanged.
  • Full repository Ruff check and format: 805 files passed.
  • Complete collection: 34,381 = all 34,344 prior nodes + 37 new controls/qualification nodes, zero missing prior nodes; unchanged three collection skips and unchanged exact runtime skip policy. Ownership 568, cgroup 32, local integration 11 retained.
  • Official CE scope and findings schema/dedup helpers: zero malformed returns or unresolved findings. This is helper-backed review, not the full CE execution spine.
  • Independent source audit verified the old/new config/main/assertion-rewrite hashes and lifecycle boundaries. Checked-hash stale-cache control independently proved stale success before deletion and actual failure after deletion.

Remaining validation

Exact-head remote Linux, wheel, Ruff and CodeQL must complete; local targeted evidence is not claimed as a full CI pass. Native/full-toolchain execution was not run locally. The sidecar adds installation work within unchanged setup timeouts. A separate local composition check with #344's clean setup-python update is being performed.

Upstream behavior reference: pytest 9.2 changelog.

First CI finding and scoped correction

Head 65d0185 passed wheel, Ruff, CodeQL, process-contracts and three service-free shards. Linux correctly failed on test_descriptor_closes_on_every_branch[fstat_error]: the test kept a global os.fstat fault active until fixture teardown, which pytest 9.2's fd capture itself uses. The failure was independently reproduced locally (one failure).

Head c3318fd81bea4bbc43a9d33daec0a880fb67b24b limits only that test's fault-injection lifetime with monkeypatch.context(). All six branches and descriptor count/real EBADF closure assertions are unchanged. The whole conventions module passed 90 tests, two pre-existing skips, full-tree Ruff still passed 805 files, and six independent delta reviews plus CE helper checks found no blockers. The previous 611-test evidence remains attributed to the earlier full-scope source; this new head must pass its own remote CI.

Final exact-head CI result

Head c3318fd81bea4bbc43a9d33daec0a880fb67b24b has now passed Linux tests, installed wheel controls, Ruff, and CodeQL. All seven Linux jobs succeeded; the final gate explicitly verified 34,381 full-selection nodes across all seven phases. The fstat fixture repair passed in the actual full shard.

No unresolved blocker remains from this upgrade review. This PR remains a draft and has not been merged or approved; #345 remains untouched. No additional optimization or dependency work is included.

Reconstruct the dependency intent of PR #345 on current main, with synchronized execution pins and explicit old/new runtime qualification.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Keep all closure assertions while restoring OS functions before pytest 9.2 reports the test result.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
@HouMinXi
HouMinXi marked this pull request as ready for review November 2, 2026 10:54
@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@HouMinXi
HouMinXi merged commit 18263f3 into main Nov 2, 2026
11 checks passed
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