绑定 ESS 双轨治理,拆分超大 H5 页与 Go 引擎,抽出 membership 服务, 并将 star/fortune 重命名为 outlook(JSON 双写兼容);同时修复 /psy API 代理与首页 + 菜单层级。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.1 KiB
2.1 KiB
CODE_REVIEW — ECR-001 Phase A–E (+ ECR-002)
Reviewer: Cursor Agent (REVIEWER)
Date: 2026-08-05
Decision: PASS(可合入;见 Nits)
Scope reviewed
- Go:
service/membership抽出 ·handler/report/httpserver接线 ·relation/star拆文件 ·fortune→outlook - H5:Home/Synastry 拆分 ·
baseURL/vite代理 ·+菜单 z-index - 治理:ADR-0007 · LEGACY · go-services · ESS docs
Evidence
| Check | Result |
|---|---|
| 公共 URL / envelope 未改 | PASS |
| Membership 仅经 router 注入,集成测试绿 | PASS(go test ./internal/integration/) |
无残留 star/fortune / package fortune |
PASS |
JSON fortune 旧键保留 + outlook 双写 |
PASS(compat 策略正确) |
| relation/star 单测 | PASS |
build:h5 |
PASS |
| Phase B 行为冻结(composable 迁移) | PASS(先前冒烟) |
Findings
Blockers
无。
Should-fix(建议合入前或紧随 PR)
无必须项。
Nits(不阻断)
-
star/engine.go多次fort.AsMap()
summary/detail 各调用多次,建议m := fort.AsMap()复用,减分配(非正确性)。 -
ReportHandler.Membership无 nil 守卫
生产路径始终由NewRouter注入;测试若手造 handler 会 NPE。可加防御或构造函数。 -
useSynastryPage~390 行
贴近 coding 上限;后续可再抽 chart helpers(非本轮必须)。 -
Synastry props 面偏宽
可维护性 nit;可改为 provide/inject(后续)。 -
JSON
lucky字段仍在outlook.Period
ECR-002 已声明兼容期;彻底 lexicon 清理需客户端迁移后再开 ECR。 -
分支名未含 ECR-001
ess-validate 仅 warning;合入时 commit message 宜带ECR-001。
Risk
低。最大残留:旧客户端继续读 fortune;新键未使用也不影响。删除旧键前必须扫 H5/sdk。
Gate
- Architecture / layering PASS
- Tests green(unit + integration + h5 build)
- No scope redesign
- Ready to commit / ship Phase A–E
Decision: PASS