Skip to content

1.2.0

Latest

Choose a tag to compare

@czf0613 czf0613 released this 12 Sep 07:59
· 1 commit to master since this release

Concurrent callers now share a reference-counted sleep inhibitor. A short-lived caller can release its request without cancelling another caller's active work.

API migration

Each successful prevent_sleep() now requires one matching allow_sleep(). Repeated acquisitions are no longer idempotent at the public API level. Nested and overlapping KeepAwakeGuard scopes manage their own successful references automatically.

Changes

  • Add native Windows ARM64 wheels for CPython 3.11–3.14 and free-threaded 3.13/3.14.
  • Preserve CPython 3.8+ support and verify free-threaded extension imports without enabling the GIL.
  • Centralize interpreter-exit cleanup across all platforms, releasing all outstanding references and rejecting acquisitions after cleanup starts.
  • Serialize native calls through the public Python lock and remove redundant C mutexes. Direct private extension calls are unsupported.
  • Use pure Python Jeepney for Linux, with a private lazy D-Bus connection, GNOME SessionManager support, freedesktop fallback, and failure cleanup. Install the linux extra on Linux desktops.
  • Improve Windows worker startup, shutdown and handle management.
  • Add a 42-configuration compatibility workflow and PyPI Trusted Publishing on GitHub Releases.
  • Replace Claude-specific guidance with AGENTS.md, reorganize documentation and remove the ad hoc build script.

Protocol tests use a private D-Bus service; real Linux desktop power-management behavior still depends on the desktop and its policy. Exit handlers do not run after forced termination or os._exit().