- Fix `simple_test_analysis` template in E2E test setup to align with Orchestrator's data fetch logic.
- Implement and verify additional E2E scenarios:
- Scenario C: Partial Provider Failure (verified error propagation fix in Orchestrator).
- Scenario D: Invalid Symbol input.
- Scenario E: Analysis Module failure.
- Update `WorkflowStateMachine::handle_report_failed` to correctly scope error broadcasting to the specific task instead of failing effectively silently or broadly.
- Update testing strategy documentation to reflect completed Phase 4 testing.
- Skip Scenario B (Orchestrator Restart) as persistence is not yet implemented (decision made to defer persistence).
3.3 KiB
3.3 KiB
Backend Requirements for Frontend Refactor
由于前端正在进行“破坏式”重构,删除了所有包含业务逻辑控制、状态推断、流程编排的代码(如 useReportEngine, ExecutionStepManager),后端必须接管以下职责,以支持纯被动式(Puppet Mode)的前端。
1. 核心原则
前端不再拥有“大脑”,只拥有“眼睛”和“耳朵”。所有状态变更、流程流转、错误判断全由后端指令驱动。
2. 接口需求
2.1 统一事件流 (Unified Event Stream)
前端将只连接一个长连接通道(SSE 或 WebSocket),用于接收整个分析周期的所有信息。
- Endpoint:
/api/v2/workflow/events?request_id={id}(建议) - 职责: 聚合 NATS (Data Fetching), Internal State (Report Generator), Database (Persistence) 的所有事件。
2.2 事件类型定义 (Protocol)
后端需要推送以下类型的事件,且 Payload 必须包含前端渲染所需的所有上下文,前端不再发起二次请求查询详情。
-
WORKFLOW_START- 标志流程开始。
- Payload:
{ symbol, market, template_id, timestamp }
-
PHASE_CHANGED- 关键: 前端不再判断何时切换界面,完全依赖此事件。
- Payload:
{ phase: 'DATA_FETCHING' | 'ANALYZING' | 'COMPLETED' | 'FAILED', previous_phase: '...' }
-
TASK_PROGRESS(Data Fetching Phase)- 替代前端轮询
/api/tasks。 - Payload:
{ task_id, provider, status, progress, message } - 注意: 后端需负责聚合多个 Provider 的进度,前端只管展示列表。
- 替代前端轮询
-
MODULE_PROGRESS(Analysis Phase)- 替代旧的 SSE 流。
- Payload:
{ module_id, content_delta, status }
-
WORKFLOW_ERROR- 关键: 包含错误级别(Fatal/Warning)。前端只展示,不判断是否重试。
- Payload:
{ code, message, is_fatal, suggestion }
3. 逻辑接管需求
3.1 状态机迁移 (State Transitions)
- 旧逻辑 (已删): 前端轮询任务 ->
if (all_tasks_done) start_analysis(). - 新逻辑: 后端
Workflow Orchestrator监听任务完成事件 -> 自动触发分析 -> 推送PHASE_CHANGED: ANALYZING给前端。
3.2 容错与部分成功 (Partial Success)
- 旧逻辑 (已删): 前端判断
if (failed_tasks < total) continue. - 新逻辑: 后端决定数据缺失量是否允许继续分析。如果允许,直接进入分析阶段;如果不允许,推送
WORKFLOW_ERROR。
3.3 超时控制 (Timeout)
- 旧逻辑 (已删): 前端
setTimeout(10min). - 新逻辑: 后端设置执行超时。如果超时,主动推送 Error 事件关闭连接。前端仅处理网络层面的断开重连。
3.4 断点恢复 (Resume)
- 需求: 当用户刷新页面重连 SSE 时,后端必须立即推送一条
SNAPSHOT事件,包含当前所有已完成的任务、已生成的报告片段、当前所处的阶段。 - 目的: 防止前端因为丢失历史事件而无法渲染完整界面。
4. 废弃接口
以下接口的前端调用代码已被删除,后端可酌情保留用于调试,但业务不再依赖:
GET /api/tasks/{id}(轮询接口)GET /api/analysis-results/stream(旧的纯分析流,需升级为统一流)