feat: initial implementation and introduction of stream workflows and stream steps#259
feat: initial implementation and introduction of stream workflows and stream steps#259yasha-dev1 wants to merge 1 commit intomainfrom
Conversation
🔍 Code Review Agent — Tier 3Commit: Now I have enough information to write the review. Let me produce the code review: SummaryThis PR introduces a new Risk AssessmentTier 3 — confirmed. Both IssuesBlocking1.
streams = getattr(self._storage, "_streams", {})
...
if hasattr(self._storage, "_subscriptions"):
for (sid, _), sub in self._storage._subscriptions.items():
2. The primary lookup (name substring match) at line 227 already has ambiguity risk (e.g., step named # Fallback: return the first step on this stream that subscribes to this signal
for step_meta in all_steps.values():
if step_meta.stream == stream_id:
return step_metaThe comment says "subscribes to this signal" but the code does not filter by Warnings3.
event = create_stream_step_completed_event(
run_id=step_run_id,
stream_id="", # Will be filled from context
step_name="",
...
)There is no code that actually fills these from context. Every cancellation event will be persisted with 4. except Exception:
pass # Best-effort event loggingThis violates CLAUDE.md's explicit rule: never swallow exceptions silently. A storage failure (connection loss, disk full, etc.) during 5. The public signature and docstring say the function returns the number of signals processed. The implementation always returns return 0 # Consumer doesn't track count currentlyCallers that use the return value for monitoring or test assertions will get misleading results. 6. Signal wait and received-signal state is stored as dynamically-added attributes: if not hasattr(ctx, "_signal_waits"):
ctx._signal_waits = {}If ArchitectureThe Within the existing constraints, No import from Test CoverageUnit tests cover Gaps:
🤖 Code Review Agent — automated code review. |
New Feature of Stream Workflows and stream steps