Changelog¶
To install the unreleased gp-libs version, see developmental releases.
pip:
$ pip install --user --upgrade --pre gp-libs
pipx:
$ pipx install --suffix=@next 'gp-libs' --pip-args '\--pre' --force
uv:
$ uv add gp-libs --prerelease allow
uvx:
$ uvx --from 'gp-libs' --prerelease allow gp-libs
gp-libs 0.0.18 (unreleased)¶
Notes on upcoming releases will be added here
gp-libs 0.0.18 refreshes the project documentation and maintainer workflow around the shared git-pull docs stack. The docs now use the Library Skeleton page shape, the gp-sphinx theme and API presentation packages, and a just-based command surface that matches the rest of the workspace. Readers get a more navigable site; maintainers get reusable commands and fewer repo-local Sphinx assets to keep in sync.
What’s new¶
Project commands now use just (#60)¶
The root project and docs site now use just instead of Make. The new recipes group testing, linting, type checking, docs builds, formatting, and watch tasks so just --list is useful as a local command index.
The CI docs workflow, .tmuxp.yaml, and agent instructions were updated to call the just recipes. The old root and docs Makefiles were removed so new contributors have one task runner to learn.
Documentation now follows the Library Skeleton pattern (#65)¶
The documentation was reorganized around a landing page, topic cards, and a dedicated project section. The new structure keeps the user-facing extensions visible first: Doctest w/ docutils, pytest plugin, and Autolink GitHub issues.
The history page still includes this file directly, so release notes continue to render as part of the docs site rather than living only in the repository.
API reference visuals from gp-sphinx (#67)¶
The API pages now render with gp-sphinx’s API-style autodoc presentation. Public objects such as doctest_docutils.DocutilsDocTestFinder, pytest_doctest_docutils.DocTestDocutilsFile, and linkify_issues.LinkifyIssues get the newer card layout, badges, and cross-reference handling.
The update makes the low-level doctest and Sphinx-extension APIs easier to scan without changing the runtime behavior of doctest_docutils, pytest_doctest_docutils, or linkify_issues.
Faster, steadier docs frontend (#63)¶
The docs frontend picked up the font, layout, and navigation work first proven in tmuxp. Self-hosted IBM Plex fonts, fallback metrics, preload hints, and fixed logo/badge dimensions reduce layout movement during page load.
Internal docs links can now use lightweight page-region swaps with the browser View Transitions API when available, falling back to normal navigation when not supported.
Documentation¶
The docs stack was refreshed through gp-sphinx 0.0.1a17. The visible path included the 0.0.1a8 API-doc improvements (#68), the 0.0.1a16 sphinx-vite-builder consolidation (#69), and the follow-up 0.0.1a17 workspace pin refresh.
Docs deployment now authenticates to AWS through OIDC rather than long-lived static credentials, and the S3 sync no longer passes the removed --acl public-read option.
Development¶
The project agent instructions gained stricter changelog conventions, doctest requirements, logging standards, functional-test guidance, and commit-message examples. These rules are development policy only; they do not change the gp-libs runtime package.
gp-libs 0.0.17 (2025-12-07)¶
gp-libs 0.0.17 updates the release pipeline to publish through PyPI Trusted Publisher. The package release workflow no longer needs a stored PyPI API token, and publishing can attach package attestations for supply-chain verification.
Development¶
PyPI releases use Trusted Publisher (#57)¶
The GitHub Actions release job now relies on PyPI’s OIDC trusted-publishing flow. Maintainers configure the git-pull/gp-libs workflow as the publisher in PyPI, then tagged releases can publish without copying a long-lived secret into GitHub.
The release workflow also drops the deprecated skip_existing upload parameter.
gp-libs 0.0.16 (2025-11-25)¶
gp-libs 0.0.16 backports upstream doctest fixes from pytest and Sphinx, then expands compatibility coverage across pytest 7, 8, and 9. The release focuses on keeping documentation doctests reliable when projects use conftest fixtures, newer pytest plugin behavior, and Sphinx-style doctest comments.
What’s new¶
Built-in pytest doctest can be restored programmatically (#56)¶
pytest_doctest_docutils still blocks pytest’s built-in doctest plugin by default so docs are not collected twice. Projects that need to re-enable the built-in plugin can now use the pytest 8.1+ public pluginmanager.unblock() path through pytest_doctest_docutils._unblock_doctest(), with a graceful fallback on older pytest versions.
Fixes¶
Autouse fixtures apply to collected doctest files (#56)¶
Autouse fixtures from conftest.py are now discovered for doctest files collected through pytest_doctest_docutils.DocTestDocutilsFile. This backports pytest’s upstream fixture-discovery behavior so documentation examples can rely on the same test setup as nearby Python tests.
Indented doctest comments are recognized (#56)¶
Doctest option comments with leading whitespace, such as # doctest: +SKIP, are now matched by doctest_docutils. This mirrors Sphinx’s upstream fix and keeps directive examples from silently losing their comparison flags.
Development¶
The CI matrix now exercises pytest 7.x, 8.x, and 9.x compatibility. Regression coverage was added for autouse fixtures, doctest option flags, plugin blocking and unblocking, and pytest’s plugin-autoload behavior.
gp-libs 0.0.15 (2025-11-01)¶
gp-libs 0.0.15 drops Python 3.9 after its upstream end-of-life date and moves the supported runtime floor to Python 3.10. The release also adds Python 3.14 to the tested and advertised versions.
Breaking changes¶
Python 3.10 is now required (#54)¶
Python 3.9 reached end-of-life status on October 5, 2025. gp-libs now requires Python 3.10 or newer.
requires-python = ">=3.10"
Development¶
Python 3.14 was added to the test matrix and project classifiers (#53).
gp-libs 0.0.14 (2025-10-26)¶
gp-libs 0.0.14 fixes downstream packaging runs that execute the doctest_docutils finder without first importing the pytest plugin. The finder, CLI, and pytest plugin now share directive registration, so docutils and MyST doctest directives are available wherever the package entry point starts.
Fixes¶
Doctest directives auto-register outside pytest (#52)¶
doctest_docutils._ensure_directives_registered() registers the doctest, testsetup, testcleanup, and tab directives once per interpreter. That keeps .. doctest::, ```{doctest}, and tabbed doctest examples discoverable in packaging environments that invoke pytest differently from gp-libs’ own suite.
This resolves the Arch Linux packaging failure reported in #48.
gp-libs 0.0.13 (2025-08-17)¶
gp-libs 0.0.13 is a typing maintenance release. It fixes annotations after dependency updates so the package continues to pass the configured mypy gate.
Fixes¶
gp-libs 0.0.12 (2025-07-12)¶
gp-libs 0.0.12 is a lint and typing maintenance release. It keeps the codebase current with newer ruff and mypy behavior without changing documented runtime behavior.
Fixes¶
Development¶
Internal development dependencies were refreshed, including uv, pytest, mypy, and ruff.
gp-libs 0.0.11 (2025-02-22)¶
gp-libs 0.0.11 fixes compatibility with pytest-asyncio and current pytest doctest behavior. Projects using the gp-libs pytest plugin can keep collecting docs without the built-in doctest plugin and pytest-asyncio conflicting during configuration.
Fixes¶
pytest-asyncio compatibility (#46)¶
pytest_doctest_docutils now handles the plugin interaction that previously broke pytest-asyncio users. The fix keeps documentation doctest collection available in projects that also load pytest-asyncio.
Development¶
Deferred annotations were enabled project-wide with from __future__ import annotations (#44). Ruff’s modern-typing checks were enabled so future annotation cleanup stays mechanical and consistent.
gp-libs 0.0.10 (2024-12-20)¶
gp-libs 0.0.10 drops Python 3.8 and modernizes the codebase for the Python 3.9 floor. The runtime behavior is otherwise unchanged; this is a compatibility and maintenance release.
Breaking changes¶
Python 3.9 is now required (#36)¶
Python 3.8 reached end-of-life status on October 7, 2024. gp-libs now requires Python 3.9 or newer.
requires-python = ">=3.9"
Development¶
Python 3.9 modernization (#41)¶
The codebase was reformatted and linted with ruff’s Python 3.9-era rules, including preview and unsafe automated fixes where the branch verified cleanly. This removed old compatibility scaffolding and refreshed the mypy configuration for the new floor.
gp-libs 0.0.9 (2024-11-26)¶
gp-libs 0.0.9 moves package and environment management from Poetry to uv, and moves the build backend from Poetry to Hatchling. The change aligns gp-libs with the current git-pull Python project workflow.
Breaking changes¶
Project management moved from Poetry to uv (#39)¶
Development commands now use uv instead of Poetry.
$ uv sync
Run project commands through uv-managed environments:
$ uv run pytest
Build backend moved to Hatchling (#39)¶
The package build backend is now hatchling. This removes Poetry from the build path while keeping the package installable through standard Python packaging tools.
gp-libs 0.0.8 (2024-10-19)¶
gp-libs 0.0.8 is the final Python 3.8-compatible release. It also refreshes documentation link handling and keeps the development toolchain current before the next release raises the runtime floor.
Breaking changes¶
Final Python 3.8 line¶
Python 3.8 reached end-of-life status on October 7, 2024. Users who still need Python 3.8 should stay on this release line.
Documentation¶
Markdown linkification was enabled in the docs so links that were previously plain text render as clickable links.
Development¶
Poetry was updated from 1.8.1 to 1.8.2, and doctest examples were adjusted for ruff 0.7.0’s RUF027 behavior (#35).
gp-libs 0.0.7 (2024-03-24)¶
gp-libs 0.0.7 raises the minimum documentation-parser versions and tightens linting. The release reduces the maintenance cost of supporting older docutils and MyST behavior while preserving gp-libs’ core doctest use cases.
Breaking changes¶
New docutils and MyST parser floors¶
Minimum supported parser versions are now:
docutils>=0.20.1myst-parser>=2.0.0
These floors let gp-libs rely on newer directive and node traversal behavior instead of carrying compatibility paths for older parser releases.
Development¶
Stricter ruff linting (#31, #32, #33)¶
The project added ruff coverage for flake8-commas, flake8-builtins, and flake8-errmsg, then moved through ruff 0.3.x and an aggressive automated cleanup pass. Diagnostics now use logging rather than print() in the doctest code path.
gp-libs 0.0.6post0 (2024-02-01)¶
gp-libs 0.0.6post0 relaxes the pytest dependency after the pytest 8 compatibility release. Downstream packagers can continue using pytest 7 while gp-libs also supports pytest 8.
Dependencies¶
gp-libs 0.0.6 (2024-02-01)¶
gp-libs 0.0.6 updates the pytest doctest integration for pytest 8. The release keeps documentation doctest collection working across pytest’s changed internal doctest collector APIs.
Fixes¶
pytest 8 support (#29)¶
pytest_doctest_docutils was updated for pytest 8 so projects can keep collecting .rst, .md, and Python doctests through the gp-libs plugin.
Development¶
Ruff 0.2.0 was adopted for the active lint configuration.
gp-libs 0.0.5 (2023-12-03)¶
gp-libs 0.0.5 is a documentation and code-quality maintenance release. It adds docstrings across the package and switches CodeQL back to GitHub’s default Python configuration.
Documentation¶
Public docstrings for package APIs (#28)¶
Functions, methods, classes, and modules gained NumPy-style docstrings. The change improves generated API pages for doctest_docutils, pytest_doctest_docutils, and linkify_issues.
Development¶
Ruff’s pydocstyle rules now use the NumPy convention (#28). CodeQL moved from an advanced configuration file to GitHub’s default setup.
gp-libs 0.0.4 (2023-11-19)¶
gp-libs 0.0.4 updates formatting, packaging metadata, and development dependencies. The release removes Black in favor of ruff format and fixes Poetry dependency group configuration.
Dependencies¶
Python 3.12 was added to the project classifiers. Poetry development dependencies now use dependency groups, matching Poetry’s documented configuration shape.
Development¶
Formatting moved from Black to ruff format (#27)¶
The project now uses ruff format for code formatting. The formatting style stays Black-compatible while removing a separate formatter dependency.
CI actions and Poetry were refreshed to clear workflow warnings and keep development tooling current.
gp-libs 0.0.3 (2023-10-14)¶
gp-libs 0.0.3 backports upstream doctest behavior and tightens typing around the pytest plugin. It also moves pytest configuration into pyproject.toml.
Fixes¶
Cached-property doctest lookup support (#25)¶
doctest_docutils backports upstream support for functools.cached_property() during doctest module lookup. This keeps gp-libs aligned with the standard-library and pytest doctest behavior it builds on.
pytest collector typing fixes (#25)¶
pytest_doctest_docutils gained collector typing fixes and project-wide import typing as t consistency.
Development¶
gp-libs 0.0.2 (2023-09-09)¶
gp-libs 0.0.2 drops Python 3.7 after its upstream end-of-life date. The runtime floor moves to Python 3.8.
Breaking changes¶
Python 3.8 is now required (#23)¶
Python 3.7 reached end-of-life status on June 27, 2023. gp-libs now requires Python 3.8 or newer.
requires-python = ">=3.8"
gp-libs 0.0.1 (2023-09-09)¶
gp-libs 0.0.1 is the first stable release of the git-pull documentation utility package. It combines a docutils-aware doctest runner, a pytest plugin for documentation files, and a Sphinx extension for automatic issue linking.
Breaking changes¶
Removed sphinx_toctree_autodoc_fix¶
The old sphinx_toctree_autodoc_fix extension was removed before the stable release because Sphinx 5.2 gained the relevant toctree behavior directly. Existing projects should use Sphinx’s built-in configuration options such as add_function_parentheses and toc_object_entries_show_parents.
What’s new¶
Doctest runner for docutils and MyST documents¶
doctest_docutils extends the standard-library doctest workflow to parse documentation sources through docutils and, when installed, MyST Parser. It discovers examples in ordinary doctest blocks, .. doctest:: directives, and MyST doctest fences.
The module can be used directly from Python or from the command line:
$ python -m doctest_docutils README.md -v
pytest plugin for documentation doctests (#3, #7, #9)¶
pytest_doctest_docutils collects documentation doctests through pytest so .rst and .md examples can share pytest fixtures, including doctest_namespace and project conftest.py setup. It also exposes --doctest-docutils-modules and --no-doctest-docutils-modules for Python-module doctest collection when replacing pytest’s built-in doctest plugin.
Sphinx issue references become links¶
linkify_issues converts issue references such as #123 into Sphinx links using the project’s issue_url_tpl setting. The extension keeps issue references readable in source while making rendered docs easier to navigate.
Tabbed doctest examples are discovered (#18)¶
doctest_docutils can collect examples nested inside sphinx-inline-tabs-style {tab} content. This supports documentation pages that compare examples across implementations while still executing the doctests.
Fixes¶
The old toctree helper skipped entries that did not expose
fullname, which fixed sphinx-click-style generated pages before the helper was removed (#12).docutils_compatprovided afindall()abstraction while docutils moved away fromNode.traverse()(#15, #16).View-source links and docutils traversal behavior were corrected during the alpha series.
Documentation¶
Initial documentation, README examples, Sphinx configuration, and package metadata shipped with the stable release. See Doctest w/ docutils, pytest plugin, and Autolink GitHub issues for the current guides.
Development¶
The first stable line included CI speedups, a docutils compatibility test grid, stricter ruff linting, and the consolidation of package metadata into src/gp_libs.py.