diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index dd410f0..5154e6b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,7 +22,8 @@ jobs: run: ruff check . test: - needs: lint + # Runs independently of lint: a style regression must not suppress the test + # signal. Merge-gating for both jobs is enforced by branch protection. runs-on: ubuntu-latest strategy: matrix: diff --git a/CHANGELOG.md b/CHANGELOG.md index 2872ce6..b215a03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,13 @@ All notable changes to spatialtissuepy are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.3.0] - 2026-07-23 PhysiCell reader correctness fixes, reported against v0.2.0 by the llm-abm-consistency harness (OHSU ChangLab) and reproduced against both their -PhysiCell 1.14.2 output and this repository's bundled example simulation. +PhysiCell 1.14.2 output and this repository's bundled example simulation. This +release also repairs the CI lint gate, which had never passed, and raises the +Python floor to match what the dependencies actually require. ### Fixed @@ -70,12 +72,39 @@ PhysiCell 1.14.2 output and this repository's bundled example simulation. - `PhysiCellTimeStep._load_cell_data()` and `to_trajectory_dataframe()` now resolve columns from each frame's own XML, so models with differing variable counts parse correctly in the same session. +- **Raised the minimum Python version to 3.10** (from a nominal 3.8). + `requires-python` claimed `>=3.8`, but the `mcp` extra depends on `fastmcp`, + which requires 3.10+, so `pip install spatialtissuepy[all]` could never + succeed on 3.8 or 3.9. The two had drifted since the MCP server was added and + nothing surfaced it, because the CI lint gate failed before any install ran. + Python 3.8 reached end of life in October 2024 and 3.9 in October 2025, and + current releases of the core scientific stack already require 3.11+. The CI + matrix now runs 3.10-3.13. + +### Build + +- **The `ruff` lint job passes for the first time.** It reported ~6,100 errors + on every branch, and because the test job declares `needs: lint`, no pull + request had been able to run the test suite. The linter was also flagging + real defects behind the noise: `Union` used in annotations but never imported + across seven modules (latent under `from __future__ import annotations`, but + raised `NameError` under `typing.get_type_hints`), a matplotlib symbol + referenced in module-level annotations while imported only lazily, and three + broken forward references. The bulk of the remaining diff was trailing + whitespace, import ordering, and unused locals. +- Moved the deprecated top-level `ruff` config under `[tool.ruff.lint]` and + aligned the `black`, `ruff`, and `mypy` target versions with the new floor. +- **Decoupled the `lint` and `test` CI jobs.** The test job no longer declares + `needs: lint`, so the two run as independent siblings. Previously a lint + failure skipped the entire test matrix, meaning a style regression could + silently suppress all test signal — which is how the `fastmcp` install + incompatibility went undetected. ### Known gaps - `parse_microenvironment_mat` is implemented and exported but still not wired into `PhysiCellTimeStep` / `PhysiCellSimulation`; substrate fields remain - reachable only through the parser. Planned for v0.3.0. + reachable only through the parser. Planned for a future release. ## [0.2.0] - 2026-06-26 @@ -118,4 +147,5 @@ numerical-stability improvements across the analysis modules. - Spatial and statistics bug fixes and numerical-stability improvements. - Runtime bugs in the MCP synthetic and viz tools. +[0.3.0]: https://github.com/emcramer/spatialtissuepy/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/emcramer/spatialtissuepy/releases/tag/v0.2.0 diff --git a/pyproject.toml b/pyproject.toml index 8d316c3..b96b751 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "spatialtissuepy" -version = "0.2.0" +version = "0.3.0" description = "Spatial analysis tools for tissue biology and multiplexed imaging" readme = "README.md" license = {text = "MIT"} diff --git a/tests/test_physicell_labels.py b/tests/test_physicell_labels.py index a47a58a..9681ec1 100644 --- a/tests/test_physicell_labels.py +++ b/tests/test_physicell_labels.py @@ -1,5 +1,5 @@ """ -Regression tests for PhysiCell reader defects fixed in v0.2.1. +Regression tests for PhysiCell reader defects fixed in v0.3.0. These cover the label-driven column extraction and orientation handling reported by the llm-abm-consistency harness (OHSU ChangLab, 2026-07-21).