# ECR-012-star **Canonical-ID:** `ECR-012-star` **Title:** 星座对齐收口(星盘 · 运势 outlook · 合盘) **Status:** Approved **Date:** 2026-08-07 **Approved:** 2026-08-07(Human) **Change Level: L2**(可见体验/契约文档对齐;栈与分层不变) **Note:** 历史分叉曾误用 `# ECR-012`;仓库内 ECR identity 必须全局唯一,本文件永久身份为 `ECR-012-star`(不得再解释为 ECR-012)。 ## Change 在已有 P2 星座/合盘实现上做 **Spec ↔ 实现对齐收口**(非真支付、非新探索模块): 1. 修订 Active Feature Spec:`.ai/product/feature-spec/star-profile.md`(Gaps · §12 用词 · Implementation Notes) 2. H5:`/star` · `/reports/:id`(type=star) · `/synastry*` 体验与文案对齐 Spec §5–12 3. 清理 ECR-003 残留:类型/组件内 `lucky` 字段、内部仍混用的 `fortune` JSON 读路径(**用户可见 Tab 文案「运势」保留**) 4. 报告页星座面板与星座主页运势信息密度对齐(dims / boost / caution / 日–一生) 5. 补强测试:integration/H5/e2e 对 outlook · 轮盘 · 合盘五主盘键的断言;lexicon 禁用词扫描覆盖合盘路径 6. 更新 `feature-map` / `P2-BACKLOG`:星座由「对齐中」→ 本 ECR Closed 后标 Done ## Motivation P2-BACKLOG 已写「星盘/运势/合盘对齐中」:主路径可跑,但 Spec 验收措辞、报告页与主页体验、H5 命名卫生与 e2e mock 偏薄,导致无法宣称星座模块 Feature Complete。 ## Scope ### Allowed - 上列 Spec / H5 /(必要时)`internal/star` 文案或 summary 键卫生 · OpenAPI 描述补强 - 埋点:保持 `portrait_completed{source:star}` 与 Spec「`star_completed` / portrait_completed source=star」等价;若补 `star_completed` 别名须同步 analytics 白名单 - 分享:星座结果分享 payload 类型/标题与 lexicon 一致(若现用 `portrait` 类型属偏差则修正) - TRACEABILITY · STATE · TEST_REPORT · CODE_REVIEW · CHANGELOG ### Forbidden(Non-goals) - **真支付网关**(支付仍 mock;另开 ECR,排期最后) - 微信 OAuth / 短信 OTP · 原生分享 SDK · 短链服务 - 达人 / 消息 / UGC / 独立运势 Feed - 换星历引擎、改宫位制(Whole Sign 冻结)、新表 migration(本 ECR **默认无 migration**) - 身心节律 / 意象卡片 / Ops-D+ / 小程序业务 ## Risk | Risk | Mitigation | |------|------------| | 改 Tab 内部 key 破坏深链 | 用户可见「运势」不变;URL/query 变更须兼容或写清迁移 | | 过度改 JSON 破坏旧报告 | 只读 `outlook`;禁止写回 `fortune`;旧库报告无 outlook 时 H5 降级空态 | | 文案踩 lexicon | 合盘免责已有;扫「占卜/算命」恐吓;允许运势分与匹配指数 | | 范围膨胀成内容大修 | 深度版长文「明显缺段」才补;不重写整包星盘文案库 | ## Acceptance Criteria - [x] Spec `star-profile.md` §12 用例可映射到测试;§14 Gaps 反映本 ECR 收口结果 - [x] `/star`:Empty 生日表单 → Normal(轮盘 + outlook 日/周/月/年/一生 + 行运)+ Locked 深度墙;无禁用恐吓词 - [x] `/reports/:id` type=star:运势面板信息密度不低于主页基础层(score/label/tip + dims 或显式降级说明) - [x] `/synastry`:三指数 + `charts` 五主盘 + 三推运 key 可见(无权益时 detail 剥离) - [x] JSON summary **无** `fortune` 键;H5 **不读** `lucky` - [x] Integration:`TestFlowStarDeepAccess` + synastry charts 键保持绿;必要时增补断言 - [x] H5 单测 / e2e(p2 star 路径)mock 含 outlook 最小字段 - [x] OpenAPI / TRACEABILITY / STATE / TEST_REPORT(CODE_REVIEW 待 Reviewer) - [ ] `python3 scripts/ess-validate.py --phase review --ecr ECR-012`(Reviewer) - [x] Docs + CHANGELOG;P2-BACKLOG 星座行更新 ## Rollback - 回滚本 ECR 提交;不涉及 DB down migration - 若仅文档 Closed 前中止:将 STATE 标 Rejected / 搁置 ## Risk Review - Path: N/A(非交易) ## Linked - Feature Spec: `.ai/product/feature-spec/star-profile.md` - PRODUCT_SPEC: `docs/PRODUCT_SPEC/ECR-012-star-alignment.md` - ENGINEERING_SPEC: `docs/ENGINEERING_SPEC/ECR-012-star-alignment.md` - BACKEND_DESIGN: `docs/BACKEND_DESIGN/BD-2026-012-star-alignment.md`(BD-2026-012) - HANDOFF / TASK / STATE:同号前缀 - 前序:ECR-003 outlook 卫生 · ECR-004/005 拆分 · P2 星座已落地 - 明确后置:真支付 ECR(最后)