fix(tracing): route action-event batch init through _initialize_batch to respect use_ephemeral

_handle_action_event called batch_manager.initialize_batch() directly,
  defaulting use_ephemeral=False. When a DefaultEnvEvent fired before
  CrewKickoffStartedEvent in the thread pool, the batch was locked in as
  non-ephemeral, causing VCR cassette path mismatches on CI. Route through
  _initialize_batch() which computes use_ephemeral from _check_authenticated().
This commit is contained in:
Tiago Freire
2026-03-25 10:03:10 -03:00
parent 63b59dcd97
commit c686f78214
3 changed files with 7 additions and 7 deletions

View File

@@ -1,7 +1,7 @@
from datetime import datetime, timezone
import logging import logging
import uuid import uuid
import webbrowser import webbrowser
from datetime import datetime, timezone
from rich.console import Console from rich.console import Console
from rich.panel import Panel from rich.panel import Panel

View File

@@ -1,8 +1,8 @@
import time
from dataclasses import dataclass, field from dataclasses import dataclass, field
from datetime import datetime, timezone from datetime import datetime, timezone
from logging import getLogger from logging import getLogger
from threading import Condition, Lock from threading import Condition, Lock
import time
from typing import Any from typing import Any
import uuid import uuid
@@ -114,10 +114,10 @@ class TraceBatchManager:
"""Send batch initialization to backend""" """Send batch initialization to backend"""
if not skip_context_check and not is_tracing_enabled_in_context(): if not skip_context_check and not is_tracing_enabled_in_context():
return return None
if not self.plus_api or not self.current_batch: if not self.plus_api or not self.current_batch:
return return None
try: try:
payload = { payload = {
@@ -167,14 +167,14 @@ class TraceBatchManager:
f"Error initializing trace batch: {e}. Continuing without tracing." f"Error initializing trace batch: {e}. Continuing without tracing."
) )
self.trace_batch_id = None self.trace_batch_id = None
return return None
if response is None: if response is None:
logger.warning( logger.warning(
"Trace batch initialization failed gracefully. Continuing without tracing." "Trace batch initialization failed gracefully. Continuing without tracing."
) )
self.trace_batch_id = None self.trace_batch_id = None
return return None
# Fall back to ephemeral on auth failure (expired/revoked token) # Fall back to ephemeral on auth failure (expired/revoked token)
if response.status_code in [401, 403] and not use_ephemeral: if response.status_code in [401, 403] and not use_ephemeral:

View File

@@ -780,7 +780,7 @@ class TraceCollectionListener(BaseEventListener):
"crew_name": getattr(source, "name", "Unknown Crew"), "crew_name": getattr(source, "name", "Unknown Crew"),
"crewai_version": get_crewai_version(), "crewai_version": get_crewai_version(),
} }
self.batch_manager.initialize_batch(user_context, execution_metadata) self._initialize_batch(user_context, execution_metadata)
self.batch_manager.begin_event_processing() self.batch_manager.begin_event_processing()
try: try: