Repository navigation
v0.1.0
Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
Unreleased
Nothing yet.
0.1.0 - 2026-08-18
First release published to PyPI. Earlier 0.0.x tags were never published, and
their build metadata always resolved to 0.0.0 (see Fixed), so 0.1.0 is the
first version with a correct, installable distribution.
Fixed
- Packaging: no more stray
__init__.pyinsite-packages.src-layout
auto-discovery treatedsrc/as the package root, sosrc/__init__.pywas
installed as a bare__init__.pyat the top level ofsite-packages, where it
collided with any other package doing the same and was removed by
pip uninstall. The module now lives in a realsrc/time_executioner/package. - Packaging: the version no longer resolves to
0.0.0.dynamic = ["version"]
had no corresponding[tool.setuptools.dynamic]section, so every build
silently produced0.0.0while__init__.pyclaimed0.0.2. Version is now
read fromtime_executioner.__version__as a single source of truth. - Python 3.16 compatibility. Replaced
asyncio.iscoroutinefunction()with
inspect.iscoroutinefunction(); the former is deprecated and scheduled for
removal in Python 3.16. The test suite's blanket-W ignore::DeprecationWarning
had been hiding this. - Corrected a typo in the
Homepageproject URL. - The test suite no longer leaks a
set_logger()call into the process-wide
default, which previously persisted past the run that made it.
Added
logger=argument onTimeExecutioner.log()andTimeExecutioner.time(),
for overriding the logger per use.set_logger()mutates process-wide state, so
two consumers in one process previously had no way to avoid clobbering each
other.TimeExecutioner.reset_logger(), restoring the built-in default logger.py.typedmarker. The library was fully annotated but shipped no PEP 561
marker, so type checkers in consuming projects silently ignored every
annotation. Type information is now published.- A
devextra (pip install -e '.[dev]') replacingrequirements.txt. - CI now tests on Python 3.11–3.14, runs the
pre-commitsuite, and builds the
distribution to verify it is installable, importable, correctly versioned, and
free of stray top-level files. - A tag-triggered PyPI publish workflow using trusted publishing.
- PyPI keywords and classifiers, including
Typing :: Typed. - This changelog and
CONTRIBUTING.md. - All GitHub Actions references pinned to commit SHAs rather than mutable tags,
with Dependabot configured to keep them current. requirements-publish.txt, a hash-pinned build toolchain for the release
workflow. The publish job previously installed the full unpinned dev extra
before building the artifact it uploads to PyPI, so a compromised release of
any build-time dependency could have altered what users receive. It now
installs onlybuildandtwine, with--require-hashes.- Explicit least-privilege
permissionsdeclared per job on both workflows. pylock.toml, a PEP 751 lock file pinning every development dependency to an
exact version and hash, installed by pip in CI so contributors and CI run
identical tooling.
Changed
__version__is now a string attribute rather than a zero-argument function.
Breaking for anyone who calledtime_executioner.__version__(); use
time_executioner.__version__instead.- The default logger name moved from
time_executionerto
time_executioner._core, following the module split. Configuration applied to
thetime_executionerlogger still applies, since child loggers propagate to
their parent. - Tests import the installed
time_executionerpackage rather than the in-tree
src.time_executionerpath, so they exercise the built artifact. - pytest configuration moved from
pytest.iniintopyproject.toml, which also
removes an inert[tool.pytest.ini_options]block thatpytest.ininever read.
DeprecationWarningis now an error in the test suite.