refactor(ECR-001): 接入 ESS 并完成结构对齐 Phase A–E

绑定 ESS 双轨治理,拆分超大 H5 页与 Go 引擎,抽出 membership 服务,
并将 star/fortune 重命名为 outlook(JSON 双写兼容);同时修复 /psy API 代理与首页 + 菜单层级。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-05 17:51:40 +08:00
co-authored by Cursor
parent 583133dd09
commit 19d3cd5945
75 changed files with 4199 additions and 2505 deletions
+32
View File
@@ -0,0 +1,32 @@
# ADR-0007 — ESS 与 `.ai/` 双轨治理
- Status: Accepted
- Date: 2026-08-05
- Tags: process, ess, agents
## Context
仓库已有成熟的 `.ai/` AI Engineering System(领域、Feature Spec、DoD、架构冻结)。
2026-08-05 绑定 **engineering-spec-system v1.0**,引入 `docs/ECR|TASKS|HANDOFF|STATE` 与角色门禁。
若两套文档并行且无优先级,Agent 会冲突或重复发明规则。
## Decision
1. **产品 / 领域 / Lexicon / Feature Spec / DoD / 架构冻结 / 安全编码**:以 **`.ai/`** 为唯一权威。
2. **变更分级 / 角色(Architect·Engineer·Reviewer·Release/ ECR·Task·Handoff·validate**:以 **ESS + 根目录 `docs/`** 为权威。
3. **L2+ 行为或结构重构**:必须同时满足
- Active Feature Spec(若涉及产品行为;纯结构重构可用 PRODUCT_SPEC「行为冻结」)
- Approved ECR under `docs/ECR/`
4. **L3 栈或包边界**:另需 `.ai/adr/` AcceptedESS ENGINEERING_SPEC 引用该 ADR。
5. **禁止**将 ESS 整树复制进本仓;仅保留 Profile / wrappers / 过程工件。
## Consequences
- Agent 会话:先 `docs/PROJECT_PROFILE.md`,再按 `AGENTS.md` 加载 `.ai/`
- 冲突时:用户可见语义与完成标准听 `.ai/`;能否开工听 ECR/Role。
- 后续重构按 ECR-001 分 Phase,禁止无合同大爆炸重写。
## Alternatives considered
- 用 ESS 替换 `.ai/`:丢弃已验证的 lexicon/DoD/feature-spec,成本高,否决。
- 只用 `.ai/` 忽略 ESS:无法满足「用 ESS 治理重构」诉求,否决。
+22 -12
View File
@@ -7,22 +7,32 @@
## Packages under `internal/service/`
| Package | 职责 | P1 |
|---|---|---|
| `user` | 注册/游客升级/Session | Yes |
| `profile` | 个人档案 CRUD、切换 | Yes |
| `portrait` | 生成个人画像 → GrowthReport | Yes |
| `scale` | 探索测试定义与计分 | Yes |
| `relation` | RelationInsight | Yes **必做** |
| `report` | GrowthReport 读取 + **权益裁剪** | Yes |
| `ask` | Thread/MessageP1 规则引擎 + 额度 | YesDemo |
| `companion` | SolarTerm 读、Mood 写 | Shell |
| `membership` | 成长会员状态与额度 | Yes |
| `order` | Order + pay-mock + DeepAccess 发放 | Yes |
| Package | 职责 | P1 | 实现态(2026-08 |
|---|---|---|---|
| `user` | 注册/游客升级/Session | Yes | 多在 profile/auth 路径;无独立包名时勿重复造轮 |
| `profile` | 个人档案 CRUD、切换 | Yes | `service/profile` |
| `portrait` | 生成个人画像 → GrowthReport | Yes | 计算在 `internal/portrait`;用例经 report/handler 路径 |
| `scale` | 探索测试定义与计分 | Yes | `service/scale` + `internal/scale` |
| `relation` | RelationInsight | Yes **必做** | `service/relation` + `internal/relation` |
| `report` | GrowthReport 读取 + **权益裁剪** | Yes | `service/report` |
| `ask` | Thread/MessageP1 规则引擎 + 额度 | YesDemo | `service/ask` + `internal/ask` |
| `companion` | SolarTerm 读、Mood 写 | Shell | `service/companion` |
| `membership` | 成长会员状态与额度 | Yes | `service/membership`ECR-001 Phase C 已从 report 抽出) |
| `order` | Order + pay-mock + DeepAccess 发放 | Yes | 用例在 `service/membership`(同 Phase C;未单独拆包) |
| `imagecard` | 意象卡片 | P2 | `service/imagecard` |
### Engine vs Service
| Kind | Path | Can | Cannot |
|---|---|---|---|
| Engine | `internal/{portrait,relation,star,ask,scale,rhythm,…}` | 纯计算 / 组装报告结构 | 引用 `gin.Context`;做权益解锁 |
| Service | `internal/service/*` | 用例编排、鉴权后业务、调 repo/engine | SQL 直写;跳过归属校验 |
`internal/handler/`:每域一组 handler,只做 bind/validate/调用 service。
`internal/repository/`SQL;无 business unlock 规则(规则在 service/report + membership)。
星座周期展望引擎包:`internal/star/outlook`(原 `fortune`ECR-002)。对外 JSON 暂双写 `fortune`/`outlook` 键以兼容旧客户端。
---
## 跨域规则