v8.9.0
- Add a
transformargument toEnumChoice, reshaping the string produced by any choice source, soshow_aliasescan spell aliases in kebab-case instead of raw Python identifiers. - Reject a
transformcollapsing twoEnumChoicemembers into the same choice string, instead of silently dropping one from the help screen. - Point the
EnumChoiceshow_aliaseserror attransformand explain whyChoiceSource.STRand callable sources cannot see aliases. - Add a
max_column_widthsargument torender_table()andprint_table(), and amax_widthfield toColumnSpec, capping a column to a character count or toauto. - Wrap long cells in the
verticalformat, aligning continuation lines under the label gutter. - Add a
WRAPPABLE_FORMATSregistry and aTableFormat.is_wrappableproperty, so formats unable to render a wrapped cell drop column widths instead of corrupting their output. - Add
wrap_ansi(), wrapping a string to a visible width without counting its ANSI escapes toward the line length, and keeping each line's styling self-contained. - Read the input of
run_jobs()andrun_lanes()lazily, keeping a bounded window of tasks in flight instead of materializing the whole stream. - Stop scheduling the rest of a
run_jobs()orrun_lanes()stream when the caller breaks early, at any worker count and not only at--jobs 1. - Declare
run_jobs()andrun_lanes()as generators, so the early-exitclose()they document is visible to type checkers. - Render the
{matrix} pythonaxis in three states:✅for a version a release declares,❌for one itsrequires-pythonrules out, and–for one it neither claimed nor forbade. - Split a Python matrix row when the declared
requires-pythonchanges, even if the set of supported versions does not. - Read a dependency's requirement from a parsed
pyproject.tomlinstead of a regex over its raw text, so{matrix}follows extras brackets, environment markers and Poetry's inline-table form. - Match a tracked dependency on its normalized name, searching runtime and extra dependencies but no longer development dependency groups.
- Drop the Codecov integration, its badge and its upload steps. Coverage is now gated by the
[tool.coverage] report.fail_underratchet. - Move every test job and the full matrix off the
ubuntu-slimandubuntu-24.04-armrunners onto theubuntu-26.04pair, and teach actionlint the new labels. - Exempt the inline
repomaticpin and thetest-package-installjob from the supply-chain cooldown, so neither resolves to a missing or stale release. - Pin the uv version installed by
astral-sh/setup-uvin the test workflow. - Enable ruff's
PLW1514and disable its unsafe fixes. - Skip the test workflow on version-bump pushes again, whose commit titles gained a
[changelog]prefix. - Cap a Poetry caret range at the component Poetry documents, so
^0.2.3no longer claims the whole0.xseries instead of stopping at0.3.0. - Translate Poetry's major-only tilde (
~1) and its wildcard ranges (*,1.*,1.2.*), which used to be unparsable and rendered an all-❌ row. - Give an exact
==pin a column of its own precision, so the single release it accepts no longer renders as all-❌. - Fix the test workflow's metadata job requesting
coverage_cells, a key repomatic dropped, which failed the job and skipped every job below it. - Skip
test_blocks_reexported_from_sphinx_packagewithout thesphinxextra, instead of failing on anImportError. It is the only test outsidetests/sphinx/importing that package. - Skip
tests/sphinx/test_sphinx_matrix.pywhen nogitbinary is onPATH, instead of failing all 155 of its cases with an unexplainedFileNotFoundError. - Bind the test suite's local HTTP server to
127.0.0.1instead oflocalhost, so the configuration tests serving a config file over HTTP no longer need a name resolver.
Full changelog: v8.8.1...v8.9.0