Files
Chan/docs/CODE_REVIEW/ECR-002.md
T
jackyu66gitandCursor df27b4dde8 refactor: ECR-002 拆分 runtime 包并加深 analyze 契约(已审)
将 web/services/runtime.py 拆为 runtime/ 子模块并保持门面兼容;补齐 ESS 文档、门面/契约/TF_DF 测试与 CODE_REVIEW Approve。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 18:15:23 +08:00

3.3 KiB
Raw Blame History

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.md
  • docs/ENGINEERING_SPEC/ECR-002-runtime-split.md
  • docs/IMPLEMENTATION_REPORT/ECR-002.md
  • docs/TEST_REPORT/ECR-002.md
  • docs/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.pyinterval=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

  1. 门面标量同步只做一次__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__ 暴露。
  2. __getattr__ 对已绑定名无效 — 与上条相关;属清理项。
  3. chart_tv.js 拆分未做 — ECR 明确可选;继续记入 backlog。
  4. 契约测试仍无「固定 JSON 快照文件」 — 已有 mock HTTP + 键集,比 ECR-001 深;完整响应快照可另开 L1/ECR。
  5. web/tests/test_cn_stock_data_fetch.py 仍因旧 user_data.Chan... 路径无法收集 — 既有问题,非本 ECR 引入。

No blockers

未发现违反「算法语义冻结 / API 可增不可删 / 无 Vite-React / 未动 strategies·config / 未引主站 WS」的证据。

Decision

Approve

  • ECR-002 可标 DoneReviewed);不强制新 system tag(仍为 v1.0.0 Unreleased 文档变更)。
  • 非阻断项进 backlog;不阻塞合并本实现。

Next owner

engineer / Human — 提交合并;若要发版再交 release_manager(本 ECR 未要求 bump tag)。

Traceability

Item Updated
Acceptance mapping 本文件
STATE.owner → idle / merge
ECR Status → Done (Reviewed)