Skip to content

diffcone 0.2.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 16:44
· 168 commits to main since this release

Platforms

  • Windows is tested in CI (Python 3.11-3.14): commands are split without
    POSIX escapes, the recorder plugin is copied where a symlink is not
    allowed, the recorder reads Windows command lines and existence checks and
    matches short (8.3) path names, and the actions find Python and the
    venv's Scripts directory.

CI

  • record takes check: true for a default branch whose every push runs
    the full suite: it plans the push's own change from the previous
    recording, records, and fails the job on a new failure the plan did not
    select that fails again when re-run (a flaky one is only reported).
    fail-on-test-failure: true fails the job on failing tests, as a plain
    test run would. Pull requests then run only the selection.

Planning

  • A dynamic import through a literal table of tuples is bounded by the
    table: a PEP 562 lazy-export __getattr__ (target = _LAZY.get(name), then import_module(target[0])) no longer reaches every
    module. D.get(key) reads a literal dict like D[key].
  • A lookup by a run-time name on a third-party or standard-library module
    (getattr(logging, level), dir(builtins)) no longer selects every test
    that reaches it whenever anything in its import closure changes, unless
    project code stores something on that module.

Execution evidence

  • A test that runs a python -c snippet that can't run project code (an
    interpreter version check importing only built-in modules, with nothing
    after the code and no PYTHONPATH-like environment) or uv python list
    is no longer always selected.
  • Editing a module that looks at its own file at import
    (Path(__file__).resolve()) no longer replans all its importers from
    the code: that stat records only that the file exists. Any other stat of
    a source file during a test counts as reading it.
  • A test that leaves a thread running is no longer always selected;
    instead every test is credited with the code background threads are in
    the middle of while it runs, which also covers a later test running
    beside a thread that loops in one function.

Discovery

  • Test files and directories named after -- replace testpaths, as in
    pytest; a node id, or a path after an option that may take it as its
    value, is reported instead of guessed.
  • --ignore and --ignore-glob (in addopts or after --) are honoured,
    below the paths pytest starts from, as pytest applies them:
    ignored tests are no longer targets, which run reported as selected
    but not collected.
  • Importing a library's test helper whose name looks like a test class
    (from fastapi.testclient import TestClient, aiohttp's TestServer) no
    longer reports an incomplete target list.
  • A conftest pytest does not load (a sibling package's tests, outside
    testpaths) is no longer read or reported.