将 web/services/runtime.py 拆为 runtime/ 子模块并保持门面兼容;补齐 ESS 文档、门面/契约/TF_DF 测试与 CODE_REVIEW Approve。 Co-authored-by: Cursor <cursoragent@cursor.com>
3.3 KiB
3.3 KiB
CODE_REVIEW — ECR-002
Role: REVIEWER
Date: 2026-08-06
Scope: 工作区未提交实现(相对 HEAD/9f1e736);包 web/services/runtime/ + 测试 + ESS 文档
Decision: Approve
Evidence loaded
docs/ECR/ECR-002-runtime-split.mddocs/ENGINEERING_SPEC/ECR-002-runtime-split.mddocs/IMPLEMENTATION_REPORT/ECR-002.mddocs/TEST_REPORT/ECR-002.mddocs/HANDOFF/ECR-002-engineer-to-reviewer.md- 包源码:
web/services/runtime/{__init__,state,timeframes,market_data,indicators,analyze,serialize}.py - Diff:删除
web/services/runtime.py;新增包与测试
Acceptance ↔ Evidence
| Acceptance | Verdict | Evidence |
|---|---|---|
runtime 门面公开符号兼容(含历史 import * 漏出) |
PASS | 手工核对 api 所需符号;timezone/OrderedDict/np/StructureZone*/ThreadPoolExecutor 等在门面;test_runtime_facade |
| Golden 通过 | PASS | 复跑 tests/test_golden_pipeline.py |
| Analyze 契约加深 | PASS | test_analyze_contract:键清单 + analyze_chan 键集 + serialize JSON + mock HTTP |
| TF_DF 全量 init 冒烟 | PASS | tests/test_tf_df_init.py(interval=1) |
| config/strategies 无交易逻辑 diff | PASS | 工作区无 config//strategies/ 变更 |
| IMPL / TEST / CHANGELOG / TRACEABILITY | PASS | docs 已落盘 |
| CODE_REVIEW Approve | PASS | 本文件 |
复跑结果(Reviewer)
PYTHONPATH=.:web python -m pytest \
tests/test_golden_pipeline.py \
tests/test_tf_df_init.py \
web/tests/test_runtime_facade.py \
web/tests/test_analyze_contract.py -q
→ 13 passed
算法冻结抽查:analyze.py 仍为 cal_bi_zs(seg_list) + _last_chan_macd 复用;未改笔段中枢语义。
Findings
Non-blocking(不挡 Approve)
- 门面标量同步只做一次 —
__init__在首次refresh后把DATA_SERVICE_AVAILABLE/macd_*写入模块 dict;之后refresh_data_service_metadata只改state.*。通过R.DATA_SERVICE_AVAILABLE读取可能与 state 短期不一致;from services.runtime import *的 bool 拷贝问题在 monolith 时代已存在。建议后续 L1:在refresh末尾同步写回门面模块,或让标量只经state/__getattr__暴露。 __getattr__对已绑定名无效 — 与上条相关;属清理项。chart_tv.js拆分未做 — ECR 明确可选;继续记入 backlog。- 契约测试仍无「固定 JSON 快照文件」 — 已有 mock HTTP + 键集,比 ECR-001 深;完整响应快照可另开 L1/ECR。
web/tests/test_cn_stock_data_fetch.py仍因旧user_data.Chan...路径无法收集 — 既有问题,非本 ECR 引入。
No blockers
未发现违反「算法语义冻结 / API 可增不可删 / 无 Vite-React / 未动 strategies·config / 未引主站 WS」的证据。
Decision
Approve
- ECR-002 可标 Done(Reviewed);不强制新 system tag(仍为
v1.0.0Unreleased 文档变更)。 - 非阻断项进 backlog;不阻塞合并本实现。
Next owner
engineer / Human — 提交合并;若要发版再交 release_manager(本 ECR 未要求 bump tag)。
Traceability
| Item | Updated |
|---|---|
| Acceptance mapping | 本文件 |
| STATE.owner | → idle / merge |
| ECR Status | → Done (Reviewed) |