Captures the private board streaming hang regression (commit 36b0296)
and its fix (commits ed1e289, 0daa4d2, d0fe661). Key learnings:
- All `async for chunk in stream` calls need first-chunk timeout
(DashScope/DeepSeek via LiteLLM occasionally never emit first chunk)
- Mid-stream break must not trigger full-content re-broadcast
(return partial content instead of double-broadcasting)
- Diagnostic pattern: monkey-patch + per-stage timeout to locate hang
Track: bug
Category: runtime-errors
Overlap: low (related streaming docs exist but different root cause)
Test / backend-test (pull_request) Has been cancelledDetails
Test / frontend-unit (pull_request) Has been cancelledDetails
Test / api-e2e (pull_request) Has been cancelledDetails
Test / frontend-e2e (pull_request) Has been cancelledDetails
Captures the ReAct streaming contract bug + WS event whitelist governance
from PR #13's review fixes. Three intertwined runtime issues documented:
1. P0: final_answer double-accumulated token content (logic_error)
2. P0: _VALID_TEAM_EVENT_TYPES whitelist missing 3 new streaming event types
3. P2: except (RuntimeError, TimeoutError, ConnectionError) too narrow for
LLMProviderError/ConfigValidationError in async generator
Adds ReAct Streaming Contract entry to CONCEPTS.md — defines the protocol
execute_stream() yields (token events with incremental content, then one
final_answer event with the concatenated full text). Consumers must pick
one accumulation strategy, cannot mix both without doubled output.