Conversation
- workflow_dispatch trigger so CI can run without a push (repo had zero surviving run records) - test matrix 3.9-3.14 plus two numpy axes: the declared 1.20 floor and newest numpy 1.x, alongside default numpy 2.x - coverage report step activates the fail_under=95 gate that was configured but never enforced (current coverage: 99%) - editable install in CI so coverage paths map back to src/ layout - release publish now requires the test suite to pass first - actions bumped to current majors and pinned by commit SHA; dependabot keeps the pins fresh - pre-commit: ruff v0.11.12->v0.16.1, pre-commit-hooks v5->v6 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PvVX1JaNVaXJ2PJEu4KJzE
- license = "MIT" SPDX expression + license-files (setuptools>=77), replacing the deprecated license table - numpy>=1.20: the floor numpy.typing has required all along; its absence made a user fork the project (#22) - per-version classifiers 3.9-3.14 so PyPI shows supported versions Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PvVX1JaNVaXJ2PJEu4KJzE
- tiler.__version__ via importlib.metadata — CONTRIBUTING's first instruction to bug reporters finally works - the channel dimension guard used truthiness, so channel_dimension=0 bypassed bounds checking and surfaced as a raw IndexError instead of the documented ValueError; now consistent with the nine sibling `is not None` checks in the same file Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PvVX1JaNVaXJ2PJEu4KJzE
- README from-source install was a bare `pip install` - CONTRIBUTING referenced black (dropped for ruff in 2025) and a version command that raised AttributeError - docs.sh dereferenced an undefined variable: run from the repo root it escaped to the parent directory and ran rm outside the repo; now anchored to the script location with set -euo pipefail, and the deprecated `magick convert` is plain `magick` Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PvVX1JaNVaXJ2PJEu4KJzE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
First maintenance pass in 14 months. This PR restores the feedback loop and fixes everything small-and-broken, ahead of the multiclass Merger work (coming as a separate PR). No behavior changes for valid inputs.
CI (the headline)
This repo currently has zero workflow run records — the README badge literally renders "no status", and there has been no proof the package works on any Python or NumPy version. This PR:
workflow_dispatchso CI can be triggered without a pushnumpy>=1.20floor and newest 1.x, alongside default 2.x — first CI proof of NumPy 2 compatibility (locally verified: 40/40 tests pass on numpy 2.5.1)fail_under = 95was configured butcoverage reportwas never invoked; actual coverage is 99%, so the gate turns on greensrc/layout (Coveralls has been getting unmappable paths since the 2025 migration)Packaging
license = "MIT"+license-files,setuptools>=77) — replacing the deprecated table before it breaks a release buildnumpy>=1.20floor — the constraintnumpy.typinghas imposed since 2021; its absence is exactly what made a user fork the project ([BUG] Incompatible Python and NumPy Versioning #22)Fixes
tiler.__version__now exists (CONTRIBUTING's first instruction to bug reporters —python -c "import tiler; print(tiler.__version__)"— used to raiseAttributeError)channel_dimension=0bypassed bounds validation due to a truthiness check (if self.channel_dimension:attiler.py:136), surfacing as a rawIndexErrorinstead of the documentedValueError; now consistent with the nineis not Nonechecks elsewhere in the filepip install(errors as written)black(dropped for ruff in 2025)misc/docs.sh:1dereferenced an undefined$file_name— run from the repo root it escaped to the parent directory and ranrmoutside the repo; now anchored to the script location withset -euo pipefailVerification
pre-commit run --all-filesgreen with the bumped hooks (this is the CI lint job)uv buildwheel inspected:License-Expression: MIT,Requires-Python: >=3.9,Requires-Dist: numpy>=1.20,py.typedpresentKnown follow-ups (deliberately not in this PR)
Merger([IDEA] Figuring out how to use this library with TensorFlow multi-class and binary classification #20, supersedes PR Reworked Merger that supports multiclass #21) — next PRmypyreports 26 errors insrc/tilerdespite shippingpy.typed🤖 Generated with Claude Code
https://claude.ai/code/session_01PvVX1JaNVaXJ2PJEu4KJzE