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.

Shared gp-sphinx docs platform (#66)

The docs site moved from repo-local Sphinx theme glue, templates, CSS, and JavaScript to the published gp-sphinx package stack. docs/conf.py now delegates common configuration to gp_sphinx.config.merge_sphinx_config(), while gp-libs keeps only the project-specific values such as intersphinx mappings, logos, linkcode, and redirects.

This removes bundled docs support files that are now owned by shared packages and keeps gp-libs aligned with the broader git-pull documentation platform.

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

  • Type annotation fixes across the doctest and pytest plugin modules (#49).

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

  • Type annotation and linting fixes for the active toolchain (resolves #48).

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.1

  • myst-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

Minimum pytest>=7 (was >=8) (#30).

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

Pytest configuration now lives in pyproject.toml (#24).

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.

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_compat provided a findall() abstraction while docutils moved away from Node.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.