绑定 ESS 双轨治理,拆分超大 H5 页与 Go 引擎,抽出 membership 服务, 并将 star/fortune 重命名为 outlook(JSON 双写兼容);同时修复 /psy API 代理与首页 + 菜单层级。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.7 KiB
2.7 KiB
Implementation Plan: ECR-001
Author: Architect Agent
For: Engineer Agent
Scope reminder
Allowed / Forbidden: 见 docs/ECR/ECR-001-structural-realignment.md。
默认:无用户可见行为变更。
Steps(按序;每步独立 PR + Task)
Phase A — Governance docs(可 Architect 收尾 / Engineer 轻触)
- 确认 ADR-0007 已存在且 Profile 已指向双轨。
- 更新
LEGACY.md+CLAUDE.mdLegacy 段:标明静态css/js/pages/yuxingu.html已删除;勿再扩展。 - 同步
.ai/architecture/go-services.md:标注 membership/order 当前寄居于 report(实现前真相),并写「目标态」指向 Phase C。
Phase B — H5 拆页(优先)
HomePage.vue:抽入口九宫格、推荐区、档案摘要 → components/composables。SynastryPage.vue:图表 / 表单 / 结果区拆分。- 其余超标页按 ENGINEERING_SPEC 优先级逐个拆。
- 每页:
npm run build:h5;相关 vitest;必要时 e2e 主路径。
Phase C — Go membership/order 抽出
- 新建
internal/service/membership(含 GetMembership / 配额相关从 report 迁入的用例)。 - Order 创建迁入
membership或独立order包(二选一,Prefer:membership内 order 若文件仍 <400)。 ReportHandler改为依赖新 service;路由注册不变。- 跑
go test ./...+internal/integrationMembership。
Phase D — Engine 拆文件
relation/engine.go按纯函数/段落拆多文件(同包)。- star 过大文件同类处理。
- 引擎单测全绿;禁止改 golden 输出除非测试本有误。
Phase E — 另立 ECR-002(本计划仅占位)
fortune 包名 / lucky 字段卫生 → 不在本父 ECR 编码。
Phase F — packages 补强
- 对照
proto/openapi.yaml补@yuxingu/types。 - sdk 缺方法补齐;H5 只经 client。
Files likely touched
| Phase | Paths |
|---|---|
| A | LEGACY.md · CLAUDE.md · .ai/architecture/go-services.md · .ai/adr/0007-* |
| B | apps/user-h5/src/pages/* · components/* · composables/* |
| C | apps/api/internal/service/report/* · service/membership/* · handler/report.go · httpserver wire |
| D | apps/api/internal/relation/* · star/* |
| F | packages/types · packages/sdk · apps/user-h5/src/api |
Tests to add
- 搬移/抽函数处:保留或增加表驱动单测
- Phase C:集成测试不得删减
- Phase B:优先现有
PortraitPage.spec.ts模式补关键页 smoke(若拆出纯函数)
Out of scope
- 真支付、新功能、微服务、换栈、Phase E 字段破坏性变更
Risks
见 ECR Risk 表。Engineer 遇「必须改行为才能编译」→ 停,回 Architect 开子 ECR。