v1.1.0 — type-only filter, native S3/GCS, GitHub Step Summary
Theme: make tia painless to adopt in a real CI pipeline — without trading away the no-false-negative guarantee.
✨ New features
- Type-only change filter. Edits that are provably dead at runtime no longer trigger tests:
if TYPE_CHECKING:blocks and function-local annotations are ignored. Crucially, function-signature and class/dataclass-field annotation changes are kept as semantic — becausedataclasses/pydantic/attrsread__annotations__, and silently skipping those would be a false negative. So "added the type hints" stops running the suite, without ever hiding a real dataclass field-type change. - Native S3 / GCS map stores. A remote can now be
s3://bucket/prefixorgs://bucket/prefix, alongside a plain directory or the bundled HTTP store. The cloud SDKs are imported lazily (pip install pytest-tia[s3]/pytest-tia[gcs]), so the core install stays dependency-light. - GitHub Step Summary.
tia runauto-detects$GITHUB_STEP_SUMMARY(or--report PATH/--report -) and posts a Markdown impact table to the PR — which files changed, the impact of each, and exactly which tests were selected and why.
📊 Honesty & benchmarks
- New modular-repo benchmark on boltons: ~96% median skip on real logic changes, versus Flask's ~21% worst case. The README now leads with the honest range, ~21% ↔ ~96%, both measured by replaying real commits on real third-party suites — with the "this looked too good, here's why it's real" audit included.
- New adversarial mutation test: it mutates every covered function and asserts tia re-selects every test that exercises it. Verified to fail when a false negative is deliberately injected, so it can't pass vacuously.
🐛 Fixes
- Markdown report no longer crashes on a legacy-codepage console (a real
cp950UnicodeEncodeErrorwhen emitting emoji) — it now writes UTF-8 throughstdout.buffer.
pip install pytest-tia