Skip to content

chore: release v0.3.0#230

Merged
pontino merged 1 commit into
mainfrom
release/v0.3.0
Jun 3, 2026
Merged

chore: release v0.3.0#230
pontino merged 1 commit into
mainfrom
release/v0.3.0

Conversation

@eggai-release-bot

Copy link
Copy Markdown
Contributor

Release v0.3.0

Security

  • Bump dev dependency pytest to ^9.0.0 (9.0.3), with pytest-asyncio to >=1.0,<2 (1.4.0) for compatibility, to remediate GHSA-6w46-j5rx-g56g (insecure tmpdir handling). Test-only; no runtime impact.

Changed

  • Bump fastmcp from ^2.14.0 to ^3.0.0 (resolves to 3.4.0), which pulls in authlib 1.7.2. The MCP adapter now uses Tool.to_mcp_tool() to read tool schemas, since fastmcp 3.x list_tools() returns FunctionTool objects that expose schemas via parameters/output_schema instead of inputSchema/outputSchema.

Added

  • Distributed tracing via OpenTelemetry: Agents now propagate a shared trace_id across every message hop. Opt-in via setup_tracing(); zero-cost when not configured.

Fixed

  • RedisTransport (Redis transport: shared *.retry stream broadcasts a single group's failures to every other handler on the same channel #225): Retry and DLQ stream keys are now per-handler
    ({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}.retry stream, so one handler's
    reclaimed failure would be redelivered to every handler on that channel
    via its auto-created -retry group. This caused work amplification (N
    replays 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.
  • RedisTransport: A permanently-unparseable ("poison") retry message is now
    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.
  • RedisTransport: The auto-created retry-stream subscriber now always reads
    only new entries (last_id=">") regardless of the main subscription's
    last_id. Restarting with last_id="0" to replay the main backlog no longer
    also replays the retry stream's history on every restart.
  • RedisTransport: A RedisTransport shared across multiple Agents no
    longer spawns duplicate consumer loops or orphans its consumer-group monitor
    task when each agent calls connect(). Re-entrant connect() now starts only
    not-yet-running subscribers and reuses the existing monitor.
  • Tracing: Retry-stream consumption now emits spans with the retry stream as
    messaging.destination instead of the original channel, so retry attempts can
    be observed separately from main-stream processing.
  • RedisTransport: subscribe() now rolls back the in-memory reclaimer configs
    and stream-subscription entries it registered if retry-stream setup fails, so a
    retried start() no longer accumulates orphaned registrations. Identical
    stream-group subscriptions are also de-duplicated.

Changed

  • RedisTransport: retry_on_idle_ms now rejects ack_policy=AckPolicy.ACK
    and AckPolicy.ACK_FIRST with a ValueError. Those acknowledge messages even
    when the handler fails, emptying the PEL the reclaimer scans, which would
    silently disable retries and the DLQ. Use the default NACK_ON_ERROR.

Migration

  • Breaking on-wire change. Existing inflight messages in {channel}.retry
    and {channel}.dlq streams 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 XADD any pending
    entries into the new per-handler keys.

After merging, the release will be automatically tagged and published to PyPI.

@eggai-release-bot eggai-release-bot Bot added the release Release PR label Jun 3, 2026
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

QualOps Code Quality Analysis

Status: ✅ PASSED - No issues found

Summary

  • Total Issues: 0
  • Critical: 0 🔴
  • High: 0 🟠
  • Medium: 0 🟡
  • Low: 0 🟢
  • Files Analyzed: 0

No issues found in the analyzed code.

📊 Full Report

View detailed report


Powered by QualOps

@pontino pontino left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@pontino pontino merged commit 2cc5c0a into main Jun 3, 2026
16 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Release PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant