Prefect 3.8.8 - Last Python 3.10 Release and a Long List of Runtime Fixes


Prefect 3.8.8 is a bug fix release for the Prefect workflow orchestrator, with notes on how it affects pipeline operators. It is the last version that supports Python 3.10, and it fixes several retry, pagination and shutdown problems.

Prefect 3.8.8 was published on October 6, 2026 under the release name “I take my wildcards literally”. It is a stable release, not a prerelease. The headline is the support floor: the notes say future releases will require Python 3.11 or later. The rest is a large batch of bug fixes. The full release notes and downloads are on the GitHub release page.

If any of your flow images, workers or CI runners still run Python 3.10, this is the last tag you can upgrade to on that interpreter. Pin it, then plan the move to 3.11 or later before the next minor release lands. Check base images first. Long lived worker pools on old images are the usual place where this surprises people.

The Docker image also changed. #23225 installs locked dependency versions in the image, so image contents should match what the project tested.

Several fixes touch how flows and tasks behave when something goes wrong. These matter most to teams with retry heavy pipelines.

  • #23222 applies retry_jitter_factor in the task engine. If you set it and saw no spread between retries, this is why.
  • #23256 stops a failed state from losing metadata during a retry.
  • #23186 fixes rollback and commit hooks not working.
  • #23224 preserves cache policy configuration when excluding inputs.
  • #23228 makes get_call_parameters unwrap FieldInfo defaults for flow runs.

The jitter and hook fixes change observable behavior. If you worked around them, for example with manual sleeps in retry logic, review those workarounds. Retry timing will now differ from what you tuned against.

This group is the part platform operators should read twice.

  • #23240 pages through all runs in the cancellation cleanup and pause expiration monitors. Before this, those monitors did not walk every page, so large run backlogs could be missed.
  • #23244 stops rescheduling a flow run on SIGTERM when the server already finished it. That avoids duplicate runs after a pod eviction.
  • #23230 keeps the worker healthcheck healthy while the API is in maintenance. Liveness probes should stop killing workers during planned API downtime.
  • #23308 keeps the event persister periodic flush alive when the database raises CancelledError.
  • #23220 fixes an UnboundLocalError in the observer _get_k8s_jobs when the Kubernetes client cannot be created.
  • #23278 parses Retry-After headers in HTTP date form, and tolerates invalid values, instead of crashing.

The tradeoff is small. Monitors that now page fully will do more database work on large installs. That is the correct cost, but watch query load after the upgrade.

A few fixes are narrower but easy to trip over.

  • #23214 matches _ and % literally in log and event text search. The release name appears to refer to this wildcard fix.
  • #23299 allows prefect work-pool update --concurrency-limit 0.
  • #23195 stops truncating runner names that contain dots.
  • #23192 fixes a nested schema required list leaking onto sibling properties in process_properties.
  • #23215 resolves single value block keys that start with value.

Other fixes cover Mattermost bot names, automation edit crashes, POSIX paths in the prefect deploy flow picker, and a UI checkbox change. These are real but unlikely to affect most pipelines.

The dependency section is routine Dependabot work: urllib3 2.7.0 to 2.8.0, pyjwt 2.13.0 to 2.15.0, oauthlib 3.3.1 to 4.0.0, tornado 6.5.8 to 6.5.9, plus virtualenv and UI package bumps. The oauthlib major version bump is the one to check if you pin it in a shared environment. The development section is mostly test stabilization, logo hosting and CI workflow migration. None of it changes runtime behavior, apart from #23172, which stops QueueService from handing out a stopped instance.

  • Python 3.10 support ends with this tag. Move to 3.11 or later before the next release.
  • Retry jitter now applies. Expect different retry spacing.
  • oauthlib moves to a new major version in the dependency set.

The full list of changes is on the release page, and the compare view is at https://github.com/PrefectHQ/prefect/compare/3.8.7...3.8.8.