Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
36 changes: 33 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"}
Expand Down
2 changes: 1 addition & 1 deletion tests/test_physicell_labels.py
Original file line number Diff line number Diff line change
@@ -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).
Expand Down
Loading