落盘 CODE_REVIEW Approve 与 RELEASE_REPORT,标记首个正式 release。 Co-authored-by: Cursor <cursoragent@cursor.com>
76 lines
3.3 KiB
Markdown
76 lines
3.3 KiB
Markdown
# CODE_REVIEW — ECR-001
|
||
|
||
**Role:** REVIEWER
|
||
**Date:** 2026-08-05
|
||
**Commit:** `74dec4e` (`refactor: 缠论引擎包化与 Web 分层(ECR-001)`)
|
||
**Decision:** Approve
|
||
|
||
## Evidence loaded
|
||
|
||
- `docs/ECR/ECR-001-chan-web-restructure.md`
|
||
- `docs/ENGINEERING_SPEC/ECR-001-restructure.md`
|
||
- `docs/IMPLEMENTATION_REPORT/ECR-001.md`
|
||
- `docs/TEST_REPORT/ECR-001.md`
|
||
- `docs/HANDOFF/ECR-001-engineer-to-reviewer.md`
|
||
- Diff `e2e45bc..74dec4e`;本地复跑测试
|
||
|
||
## Acceptance ↔ Evidence
|
||
|
||
| Acceptance | Verdict | Evidence |
|
||
|------------|---------|----------|
|
||
| `from ChanLun import ChanLun` / `ChanEnum` 仍可用 | PASS | 复跑 shim+package 同一对象;`test_compat_shim_still_works` |
|
||
| Golden bi/seg/zs/bsp 与基线一致 | PASS | `python tests/generate_golden.py --check` → GOLDEN OK;pytest 含 golden |
|
||
| `/api/analyze` 关键字段兼容 | PASS | `analyze_contract_keys.json` + 路由注册冒烟(未做实盘拉行情 E2E,见 Findings) |
|
||
| `web/app.py` 瘦身 factory | PASS | `web/app.py` 32 行;`create_app` + blueprints |
|
||
| `index.html` 无大体量 inline 业务 JS | PASS | ~1482 行;业务在 `static/js/app/*` |
|
||
| ESS docs / TEST / IMPL / CHANGELOG | PASS | `docs/` 齐全 |
|
||
| `config/` 无内容变更 | PASS | `git diff e2e45bc..HEAD -- config` 空 |
|
||
| `strategies/` 无内容变更 | **AMENDED** | 见下「范围修订」 |
|
||
|
||
## 范围修订(Human 后续指示)
|
||
|
||
原 ECR Forbidden 写「不改 strategies/」。实现后期 Human 要求「一次性做完」导入迁移:strategies 仅改 import / `sys.path`(26 files, +75/−75),**无策略交易逻辑变更**。
|
||
审阅结论:视为 **L3 结构收尾的允许增补**,不构成交易语义 L2;建议 ECR Acceptance 改为「strategies 仅允许 import/path 迁移,禁止改买卖逻辑」。
|
||
**不据此 Request changes。**
|
||
|
||
## 复跑结果(Reviewer)
|
||
|
||
```text
|
||
shim+package OK
|
||
GOLDEN OK {klu:400, klc:208, bi:14, seg:2, zs:0, bsp:3}
|
||
pytest tests/test_golden_pipeline.py web/tests/test_analyze_contract.py → 6 passed
|
||
```
|
||
|
||
## Findings
|
||
|
||
### Non-blocking(记入债务,需新 ECR 再动)
|
||
|
||
1. **`web/services/runtime.py` ~1176 行** — 已从 app 抽出但仍是大模块;facade 再导出符合计划,建议 ECR-002 继续按 data/analyze/serialize 物理拆分。
|
||
2. **`web/static/js/app/chart_tv.js` ~4664 行** — `initTradingView` 单体;行为冻结下可接受。
|
||
3. **`/api/analyze` 契约测试偏浅** — 仅关键字段清单 + 路由存在;无固定 fixture 的端到端 JSON 快照(需 mock 行情)。
|
||
4. **TEST_REPORT 写「5 passed」** — 现为 6(含 shim 兼容测);Release 前可改正文(L0 docs)。
|
||
5. **L1:`TF_DF.get_zs_list` 恢复** — 合理兼容修复;golden 走 analyze 路径未覆盖 `TF_DF(df,...)` 全量 `__init__`,建议后续加一条 init 冒烟(非阻断)。
|
||
|
||
### No blockers
|
||
|
||
未发现违反「算法语义冻结 / API 可增不可删 / 无 Vite-React / config 未改」的证据。
|
||
|
||
## Decision
|
||
|
||
**Approve**
|
||
|
||
- ECR-001 可进入 Release(本变更无交易 EXP 门禁)。
|
||
- 非阻断项进入 backlog / 未来 ECR,不阻塞 tag。
|
||
|
||
## Next owner
|
||
|
||
`release_manager` — 写 RELEASE_REPORT、打 tag(需 Human 确认发布动作)。
|
||
|
||
## Traceability
|
||
|
||
| Item | Updated |
|
||
|------|---------|
|
||
| Acceptance mapping | 本文件 |
|
||
| STATE.owner | → release_manager |
|
||
| ECR Status | → Done (Reviewed) |
|