chore: release v0.3.0#230
Merged
Merged
Conversation
Contributor
QualOps Code Quality AnalysisStatus: ✅ PASSED - No issues found Summary
No issues found in the analyzed code. 📊 Full ReportPowered by QualOps |
pontino
approved these changes
Jun 3, 2026
pontino
left a comment
Collaborator
There was a problem hiding this comment.
Release v0.3.0. Version bump + changelog rollover verified. Minor bump is correct: [Unreleased] carries a breaking on-wire migration (RedisTransport retry/dlq keys), a new OpenTelemetry tracing feature, and the fastmcp 3.x dep major. All underlying changes were CI-validated when merged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v0.3.0
Security
pytestto^9.0.0(9.0.3), withpytest-asyncioto>=1.0,<2(1.4.0) for compatibility, to remediate GHSA-6w46-j5rx-g56g (insecure tmpdir handling). Test-only; no runtime impact.Changed
fastmcpfrom^2.14.0to^3.0.0(resolves to 3.4.0), which pulls inauthlib1.7.2. The MCP adapter now usesTool.to_mcp_tool()to read tool schemas, since fastmcp 3.xlist_tools()returnsFunctionToolobjects that expose schemas viaparameters/output_schemainstead ofinputSchema/outputSchema.Added
trace_idacross every message hop. Opt-in viasetup_tracing(); zero-cost when not configured.Fixed
(
{channel}.{handler_suffix}.retry/.dlq) instead of per-channel.Previously, multiple handlers subscribing to the same channel with different
consumer groups shared a single
{channel}.retrystream, so one handler'sreclaimed failure would be redelivered to every handler on that channel
via its auto-created
-retrygroup. This caused work amplification (Nreplays per nack, where N is the number of consumer groups on the channel)
and visible duplicate side-effects in downstream systems with non-idempotent
handlers.
routed to the DLQ — or dropped with an error log when no DLQ is configured —
instead of being re-queued to the retry stream forever. Its retry count can
never be incremented, so it would previously livelock the per-handler retry
stream.
only new entries (
last_id=">") regardless of the main subscription'slast_id. Restarting withlast_id="0"to replay the main backlog no longeralso replays the retry stream's history on every restart.
RedisTransportshared across multipleAgents nolonger spawns duplicate consumer loops or orphans its consumer-group monitor
task when each agent calls
connect(). Re-entrantconnect()now starts onlynot-yet-running subscribers and reuses the existing monitor.
messaging.destinationinstead of the original channel, so retry attempts canbe observed separately from main-stream processing.
subscribe()now rolls back the in-memory reclaimer configsand stream-subscription entries it registered if retry-stream setup fails, so a
retried
start()no longer accumulates orphaned registrations. Identicalstream-group subscriptions are also de-duplicated.
Changed
retry_on_idle_msnow rejectsack_policy=AckPolicy.ACKand
AckPolicy.ACK_FIRSTwith aValueError. Those acknowledge messages evenwhen the handler fails, emptying the PEL the reclaimer scans, which would
silently disable retries and the DLQ. Use the default
NACK_ON_ERROR.Migration
{channel}.retryand
{channel}.dlqstreams will not be picked up by upgraded consumers —they will continue to exist but new retries will land in the per-handler
streams. Drain the legacy streams before deploying, or
XADDany pendingentries into the new per-handler keys.
After merging, the release will be automatically tagged and published to PyPI.